forked from HEL/chronos
		
	Compare commits
	
		
			8 Commits
		
	
	
		
			3beaad03d4
			...
			main
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6bf98ebcb8 | |||
| c46b345771 | |||
| 060e37e38e | |||
| 788c8999b1 | |||
| 3eadf63db3 | |||
| e57e617bb9 | |||
| dfb980e366 | |||
| e8d737ff00 | 
| @@ -15,7 +15,7 @@ This package lets you render sequence diagrams directly in Typst. The following | |||||||
| <td> | <td> | ||||||
|  |  | ||||||
| ```typst | ```typst | ||||||
| #import "@preview/chronos:0.2.0" | #import "@preview/chronos:0.2.1" | ||||||
| #chronos.diagram({ | #chronos.diagram({ | ||||||
|   import chronos: * |   import chronos: * | ||||||
|   _par("Alice") |   _par("Alice") | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|   chronos: chronos |   chronos: chronos | ||||||
| ) | ) | ||||||
|  |  | ||||||
| #let example(src, show-src: true, vertical: false, fill: true, wrap: true) = { | #let example(src, show-src: true, vertical: false, fill: false, wrap: true) = { | ||||||
|   src = src.text |   src = src.text | ||||||
|   let full-src = example-preamble + src |   let full-src = example-preamble + src | ||||||
|   let body = eval(full-src, scope: example-scope) |   let body = eval(full-src, scope: example-scope) | ||||||
| @@ -16,15 +16,15 @@ | |||||||
|       box( |       box( | ||||||
|         stroke: black + 1pt, |         stroke: black + 1pt, | ||||||
|         radius: .5em, |         radius: .5em, | ||||||
|         fill: if fill {color.white.darken(5%)} else {none}, |         fill: if fill {color.white.darken(2%)} else {none}, | ||||||
|         if show-src { |         if show-src { | ||||||
|           let src-block = align(left, raw(src, lang: "typc")) |           let src-block = raw(src, block: true, lang: "typc") | ||||||
|           table( |           table( | ||||||
|             columns: if vertical {1} else {2}, |             columns: if vertical {1} else {2}, | ||||||
|             inset: 1em, |             inset: 5pt, | ||||||
|             align: horizon + center, |             align: horizon + center, | ||||||
|             stroke: none, |             stroke: none, | ||||||
|             img, |             table.cell(inset: 1em, img), | ||||||
|             if vertical {table.hline()} else {table.vline()}, src-block |             if vertical {table.hline()} else {table.vline()}, src-block | ||||||
|           ) |           ) | ||||||
|         } else { |         } else { | ||||||
|   | |||||||
| @@ -1,8 +1,23 @@ | |||||||
| #import "example.typ": example | #import "example.typ": example | ||||||
|  |  | ||||||
|  | #let seq-return = example(``` | ||||||
|  | _seq( | ||||||
|  |   "Bob", "Alice", | ||||||
|  |   comment: [hello], | ||||||
|  |   enable-dst: true | ||||||
|  | ) | ||||||
|  | _seq( | ||||||
|  |   "Alice", "Alice", | ||||||
|  |   comment: [some action] | ||||||
|  | ) | ||||||
|  | _ret(comment: [bye]) | ||||||
|  | ```) | ||||||
|  |  | ||||||
| #let seq-comm-align = example(``` | #let seq-comm-align = example(``` | ||||||
| _par("p1", display-name: "Start participant") | _par("p1", | ||||||
| _par("p2", display-name: "End participant") |      display-name: "Start participant") | ||||||
|  | _par("p2", | ||||||
|  |      display-name: "End participant") | ||||||
| let alignments = ( | let alignments = ( | ||||||
|   "start", "end", |   "start", "end", | ||||||
|   "left", "right", |   "left", "right", | ||||||
| @@ -121,15 +136,58 @@ _sync({ | |||||||
| }) | }) | ||||||
| ```) | ```) | ||||||
|  |  | ||||||
| #let gaps-seps = example(``` | #let gaps = example(``` | ||||||
| _par("alice", display-name: "Alice") | _par("a", display-name: "Alice") | ||||||
| _par("bob", display-name: "Bob") | _par("b", display-name: "Bob") | ||||||
|  |  | ||||||
| _seq("alice", "bob", comment: "Hello") | _seq("a", "b", comment: [message 1]) | ||||||
| _gap(size: 10) | _seq("b", "a", comment: [ok], dashed: true) | ||||||
| _seq("bob", "alice", comment: "Hi") | _gap() | ||||||
| _sep("Another day") | _seq("a", "b", comment: [message 2]) | ||||||
| _seq("alice", "bob", comment: "Hello again") | _seq("b", "a", comment: [ok], dashed: true) | ||||||
|  | _gap(size: 40) | ||||||
|  | _seq("a", "b", comment: [message 3]) | ||||||
|  | _seq("b", "a", comment: [ok], dashed: true) | ||||||
|  | ```) | ||||||
|  |  | ||||||
|  | #let seps = example(``` | ||||||
|  | _par("a", display-name: "Alice") | ||||||
|  | _par("b", display-name: "Bob") | ||||||
|  |  | ||||||
|  | _sep[Initialization] | ||||||
|  | _seq("a", "b", comment: [Request 1]) | ||||||
|  | _seq( | ||||||
|  |   "b", "a", | ||||||
|  |   comment: [Response 1], | ||||||
|  |   dashed: true | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | _sep[Repetition] | ||||||
|  | _seq("a", "b", comment: [Request 2]) | ||||||
|  | _seq( | ||||||
|  |   "b", "a", | ||||||
|  |   comment: [Response 2], | ||||||
|  |   dashed: true | ||||||
|  | ) | ||||||
|  | ```) | ||||||
|  |  | ||||||
|  | #let delays = example(``` | ||||||
|  | _par("a", display-name: "Alice") | ||||||
|  | _par("b", display-name: "Bob") | ||||||
|  |  | ||||||
|  | _seq("a", "b", comment: [Auth Request]) | ||||||
|  | _delay() | ||||||
|  | _seq( | ||||||
|  |   "b", "a", | ||||||
|  |   comment: [Auth Response], | ||||||
|  |   dashed: true | ||||||
|  | ) | ||||||
|  | _delay(name: [5 minutes later]) | ||||||
|  | _seq( | ||||||
|  |   "b", "a", | ||||||
|  |   comment: [Good Bye !], | ||||||
|  |   dashed: true | ||||||
|  | ) | ||||||
| ```) | ```) | ||||||
|  |  | ||||||
| #let notes-shapes = example(``` | #let notes-shapes = example(``` | ||||||
|   | |||||||
| @@ -1,8 +1,15 @@ | |||||||
| /// Creates a gap before the next element |  | ||||||
| /// - size (int): Size of the gap |  | ||||||
| #let _gap(size: 20) = {} |  | ||||||
|  |  | ||||||
| /// Creates a separator before the next element | /// Creates a separator before the next element | ||||||
| /// #examples.gaps-seps | /// #examples.seps | ||||||
| /// - name (content): Name to display in the middle of the separator | /// - name (content): Name to display in the middle of the separator | ||||||
| #let _sep(name) = {} | #let _sep(name) = {} | ||||||
|  |  | ||||||
|  | /// Creates a delay before the next element | ||||||
|  | /// #examples.delays | ||||||
|  | /// - name (content, none): Name to display in the middle of the delay area | ||||||
|  | /// - size (int): Size of the delay | ||||||
|  | #let _delay(name: none, size: 30) = {} | ||||||
|  |  | ||||||
|  | /// Creates a gap before the next element | ||||||
|  | /// #examples.gaps | ||||||
|  | /// - size (int): Size of the gap | ||||||
|  | #let _gap(size: 20) = {} | ||||||
| @@ -42,6 +42,17 @@ | |||||||
|   slant: none |   slant: none | ||||||
| ) = {} | ) = {} | ||||||
|  |  | ||||||
|  | /// Creates a return sequence | ||||||
|  | /// #examples.seq-return | ||||||
|  | /// - comment (none, content): Optional comment to display along the arrow | ||||||
|  | #let _ret(comment: none) = {} | ||||||
|  |  | ||||||
|  | /// Accepted values for `comment-align` argument of @@_seq() | ||||||
|  | /// #examples.seq-comm-align | ||||||
|  | #let comment-align = ( | ||||||
|  |   "start", "end", "left", "center", "right" | ||||||
|  | ) | ||||||
|  |  | ||||||
| /// Accepted values for `event` argument of @@_evt() | /// Accepted values for `event` argument of @@_evt() | ||||||
| ///  | ///  | ||||||
| /// `EVENTS = ("create", "destroy", "enable", "disable")` | /// `EVENTS = ("create", "destroy", "enable", "disable")` | ||||||
| @@ -52,9 +63,3 @@ | |||||||
| #let tips = ( | #let tips = ( | ||||||
|   "", ">", ">>", "\\", "\\\\", "/", "//", "x", "o", |   "", ">", ">>", "\\", "\\\\", "/", "//", "x", "o", | ||||||
| ) | ) | ||||||
|  |  | ||||||
| /// Accepted values for `comment-align` argument of @@_seq() |  | ||||||
| /// #examples.seq-comm-align |  | ||||||
| #let comment-align = ( |  | ||||||
|   "start", "end", "left", "center", "right" |  | ||||||
| ) |  | ||||||
							
								
								
									
										27
									
								
								gallery.bash
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								gallery.bash
									
									
									
									
									
								
							| @@ -1,27 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
|  |  | ||||||
| echo |  | ||||||
| echo "Generating gallery PDFs" |  | ||||||
|  |  | ||||||
| set -- ./gallery/*.typ |  | ||||||
| cnt="$#" |  | ||||||
| i=1 |  | ||||||
| for f |  | ||||||
| do |  | ||||||
|     f2="${f/typ/pdf}" |  | ||||||
|     echo "($i/$cnt) $f -> $f2" |  | ||||||
|     typst c --root ./ "$f" "$f2" |  | ||||||
|     i=$((i+1)) |  | ||||||
| done |  | ||||||
|  |  | ||||||
| set -- ./gallery/readme/*.typ |  | ||||||
| cnt="$#" |  | ||||||
| i=1 |  | ||||||
| for f |  | ||||||
| do |  | ||||||
|     f2="${f/typ/png}" |  | ||||||
|     echo "($i/$cnt) $f -> $f2" |  | ||||||
|     typst c --root ./ "$f" "$f2" |  | ||||||
|     i=$((i+1)) |  | ||||||
| done |  | ||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										12
									
								
								justfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								justfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # Local Variables: | ||||||
|  | # mode: makefile | ||||||
|  | # End: | ||||||
|  | gallery_dir := "./gallery" | ||||||
|  | set shell := ["bash", "-uc"] | ||||||
|  |  | ||||||
|  | manual: | ||||||
|  |   typst c manual.typ manual.pdf | ||||||
|  |  | ||||||
|  | gallery: | ||||||
|  |   for f in "{{gallery_dir}}"/*.typ; do typst c --root . "$f" "${f%typ}pdf"; done | ||||||
|  |   for f in "{{gallery_dir}}"/readme/*.typ; do typst c --root . "$f" "${f%typ}png"; done | ||||||
							
								
								
									
										
											BIN
										
									
								
								manual.pdf
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								manual.pdf
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										76
									
								
								manual.typ
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								manual.typ
									
									
									
									
									
								
							| @@ -1,4 +1,6 @@ | |||||||
| #import "@preview/tidy:0.3.0" | #import "@preview/tidy:0.4.2" | ||||||
|  | #import "@preview/codly:1.2.0": codly-init, codly | ||||||
|  | #import "@preview/codly-languages:0.1.8": codly-languages | ||||||
| #import "src/lib.typ" as chronos | #import "src/lib.typ" as chronos | ||||||
| #import "src/participant.typ" as mod-par | #import "src/participant.typ" as mod-par | ||||||
| #import "docs/examples.typ" | #import "docs/examples.typ" | ||||||
| @@ -6,25 +8,41 @@ | |||||||
|  |  | ||||||
| #let TYPST = image("gallery/typst.png", width: 1.5cm, height: 1.5cm, fit: "contain") | #let TYPST = image("gallery/typst.png", width: 1.5cm, height: 1.5cm, fit: "contain") | ||||||
|  |  | ||||||
| #let doc-ref(target, full: false, var: false) = { | #show: codly-init | ||||||
|   let (module, func) = target.split(".") | #codly( | ||||||
|   let label-name = module + func |   languages: codly-languages | ||||||
|   let display-name = func | ) | ||||||
|   if full { |  | ||||||
|     display-name = target | #set text(font: "Source Sans 3") | ||||||
|   } |  | ||||||
|   if not var { |  | ||||||
|     label-name += "()" |  | ||||||
|     display-name += "()" |  | ||||||
|   } |  | ||||||
|   link(label(label-name))[#display-name] |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #set heading(numbering: (..num) => if num.pos().len() < 4 { | #set heading(numbering: (..num) => if num.pos().len() < 4 { | ||||||
|   numbering("1.1", ..num) |   numbering("1.1", ..num) | ||||||
| }) | }) | ||||||
|  |  | ||||||
|  | #align(center)[ | ||||||
|  |   #v(2cm) | ||||||
|  |   #text(size: 2em)[*Chronos*] | ||||||
|  |    | ||||||
|  |   _v#chronos.version;_ | ||||||
|  |   #v(1cm) | ||||||
|  |   #chronos.diagram({ | ||||||
|  |     import chronos: * | ||||||
|  |     _par("u", display-name: [User], shape: "actor") | ||||||
|  |     _par("wa", display-name: [Web App]) | ||||||
|  |     _par("tu", display-name: [Typst Universe], shape: "database") | ||||||
|  |  | ||||||
|  |     _seq("u", "wa", comment: [Compile document], enable-dst: true) | ||||||
|  |     _seq("wa", "tu", comment: [Fetch Chronos]) | ||||||
|  |     _seq("tu", "wa", dashed: true, slant: 10) | ||||||
|  |     _seq("wa", "wa", comment: [Render]) | ||||||
|  |     _ret(comment: [Nice sequence diagram]) | ||||||
|  |   }) | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | #pagebreak() | ||||||
|  |  | ||||||
| #{ | #{ | ||||||
|   outline(indent: true, depth: 3) |   outline(indent: auto, depth: 3) | ||||||
| } | } | ||||||
| #show link: set text(fill: blue) | #show link: set text(fill: blue) | ||||||
|  |  | ||||||
| @@ -40,14 +58,16 @@ This package lets you create nice sequence diagrams using the CeTZ package. | |||||||
|  |  | ||||||
| = Usage | = Usage | ||||||
|  |  | ||||||
|  | #let import-stmt = "#import \"@preview/chronos:" + str(chronos.version) + "\"" | ||||||
|  |  | ||||||
| Simply import #link("https://typst.app/universe/package/chronos/")[chronos] and call the `diagram` function: | Simply import #link("https://typst.app/universe/package/chronos/")[chronos] and call the `diagram` function: | ||||||
| #pad(left: 1em)[```typ | #raw(block:true, lang: "typ", ```typ | ||||||
| #import "@preview/chronos:0.1.0" | $import | ||||||
| #chronos.diagram({ | #chronos.diagram({ | ||||||
|   import chronos: * |   import chronos: * | ||||||
|   ... |   ... | ||||||
| }) | }) | ||||||
| ```] | ```.text.replace("$import", import-stmt)) | ||||||
|  |  | ||||||
| = Examples | = Examples | ||||||
|  |  | ||||||
| @@ -121,7 +141,11 @@ chronos.diagram({ | |||||||
| == Custom images | == Custom images | ||||||
|  |  | ||||||
| #example(``` | #example(``` | ||||||
| let load-img(path) = image(path, width: 1.5cm, height: 1.5cm, fit:"contain") | let load-img(path) = image( | ||||||
|  |   path, | ||||||
|  |   width: 1.5cm, height: 1.5cm, | ||||||
|  |   fit:"contain" | ||||||
|  | ) | ||||||
| let TYPST = load-img("../gallery/typst.png") | let TYPST = load-img("../gallery/typst.png") | ||||||
| let FERRIS = load-img("../gallery/ferris.png") | let FERRIS = load-img("../gallery/ferris.png") | ||||||
| let ME = load-img("../gallery/me.jpg") | let ME = load-img("../gallery/me.jpg") | ||||||
| @@ -148,11 +172,11 @@ chronos.diagram({ | |||||||
|   read("docs/participants.typ"), |   read("docs/participants.typ"), | ||||||
|   name: "Participants", |   name: "Participants", | ||||||
|   require-all-parameters: true, |   require-all-parameters: true, | ||||||
|  |   old-syntax: true, | ||||||
|   scope: ( |   scope: ( | ||||||
|     chronos: chronos, |     chronos: chronos, | ||||||
|     mod-par: mod-par, |     mod-par: mod-par, | ||||||
|     TYPST: TYPST, |     TYPST: TYPST | ||||||
|     doc-ref: doc-ref |  | ||||||
|   ) |   ) | ||||||
| ) | ) | ||||||
| #tidy.show-module(par-docs, show-outline: false, sort-functions: none) | #tidy.show-module(par-docs, show-outline: false, sort-functions: none) | ||||||
| @@ -163,9 +187,9 @@ chronos.diagram({ | |||||||
|   read("docs/sequences.typ"), |   read("docs/sequences.typ"), | ||||||
|   name: "Sequences", |   name: "Sequences", | ||||||
|   require-all-parameters: true, |   require-all-parameters: true, | ||||||
|  |   old-syntax: true, | ||||||
|   scope: ( |   scope: ( | ||||||
|     chronos: chronos, |     chronos: chronos, | ||||||
|     doc-ref: doc-ref, |  | ||||||
|     examples: examples |     examples: examples | ||||||
|   ) |   ) | ||||||
| ) | ) | ||||||
| @@ -177,9 +201,9 @@ chronos.diagram({ | |||||||
|   read("docs/groups.typ"), |   read("docs/groups.typ"), | ||||||
|   name: "Groups", |   name: "Groups", | ||||||
|   require-all-parameters: true, |   require-all-parameters: true, | ||||||
|  |   old-syntax: true, | ||||||
|   scope: ( |   scope: ( | ||||||
|     chronos: chronos, |     chronos: chronos, | ||||||
|     doc-ref: doc-ref, |  | ||||||
|     examples: examples |     examples: examples | ||||||
|   ) |   ) | ||||||
| ) | ) | ||||||
| @@ -191,13 +215,13 @@ chronos.diagram({ | |||||||
|   read("docs/gaps_seps.typ"), |   read("docs/gaps_seps.typ"), | ||||||
|   name: "Gaps and separators", |   name: "Gaps and separators", | ||||||
|   require-all-parameters: true, |   require-all-parameters: true, | ||||||
|  |   old-syntax: true, | ||||||
|   scope: ( |   scope: ( | ||||||
|     chronos: chronos, |     chronos: chronos, | ||||||
|     doc-ref: doc-ref, |  | ||||||
|     examples: examples |     examples: examples | ||||||
|   ) |   ) | ||||||
| ) | ) | ||||||
| #tidy.show-module(gap-sep-docs, show-outline: false) | #tidy.show-module(gap-sep-docs, show-outline: false, sort-functions: none) | ||||||
|  |  | ||||||
| #pagebreak(weak: true) | #pagebreak(weak: true) | ||||||
|  |  | ||||||
| @@ -205,9 +229,9 @@ chronos.diagram({ | |||||||
|   read("docs/notes.typ"), |   read("docs/notes.typ"), | ||||||
|   name: "Notes", |   name: "Notes", | ||||||
|   require-all-parameters: true, |   require-all-parameters: true, | ||||||
|  |   old-syntax: true, | ||||||
|   scope: ( |   scope: ( | ||||||
|     chronos: chronos, |     chronos: chronos, | ||||||
|     doc-ref: doc-ref, |  | ||||||
|     examples: examples |     examples: examples | ||||||
|   ) |   ) | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -46,7 +46,6 @@ | |||||||
|   while i < elmts.len() { |   while i < elmts.len() { | ||||||
|     let elmt = elmts.at(i) |     let elmt = elmts.at(i) | ||||||
|     if elmt.type == "grp" { |     if elmt.type == "grp" { | ||||||
|       let grp-elmts = elmt.elmts |  | ||||||
|       elmt.elmts = elmt.elmts.map(e => { |       elmt.elmts = elmt.elmts.map(e => { | ||||||
|         if e.type == "seq" { |         if e.type == "seq" { | ||||||
|           if e.p1 == "?" { |           if e.p1 == "?" { | ||||||
| @@ -60,12 +59,17 @@ | |||||||
|       elmts.at(i) = elmt |       elmts.at(i) = elmt | ||||||
|       elmts = ( |       elmts = ( | ||||||
|         elmts.slice(0, i + 1) + |         elmts.slice(0, i + 1) + | ||||||
|         grp-elmts + |         elmt.elmts + | ||||||
|         (( |         (( | ||||||
|           type: "grp-end" |           type: "grp-end", | ||||||
|  |           start-i: i | ||||||
|         ),) + |         ),) + | ||||||
|         elmts.slice(i+1) |         elmts.slice(i+1) | ||||||
|       ) |       ) | ||||||
|  |     } else if elmt.type == "grp-end" { | ||||||
|  |       // Put back elements in group because they might have changed | ||||||
|  |       elmts.at(elmt.start-i).elmts = elmts.slice(elmt.start-i + 1, i) | ||||||
|  |  | ||||||
|     } else if elmt.type == "seq" { |     } else if elmt.type == "seq" { | ||||||
|       if elmt.enable-dst { |       if elmt.enable-dst { | ||||||
|         activation-history.push(elmt) |         activation-history.push(elmt) | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #import "@preview/cetz:0.3.3": draw | #import "/src/cetz.typ": draw | ||||||
| #import "consts.typ": * | #import "consts.typ": * | ||||||
|  |  | ||||||
| #let _grp(name, desc: none, type: "default", elmts) = { | #let _grp(name, desc: none, type: "default", elmts) = { | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #let version = version(0, 2, 0) | #let version = version(0, 2, 1) | ||||||
| #import "diagram.typ": diagram, from-plantuml, _gap, _evt, _col | #import "diagram.typ": diagram, from-plantuml, _gap, _evt, _col | ||||||
|  |  | ||||||
| #import "sequence.typ": _seq, _ret | #import "sequence.typ": _seq, _ret | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #import "@preview/cetz:0.3.3": draw | #import "/src/cetz.typ": draw | ||||||
| #import "consts.typ": * | #import "consts.typ": * | ||||||
|  |  | ||||||
| #let SIDES = ( | #let SIDES = ( | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #import "@preview/cetz:0.3.3": draw | #import "/src/cetz.typ": draw | ||||||
| #import "consts.typ": * | #import "consts.typ": * | ||||||
|  |  | ||||||
| #let PAR-SPECIALS = "?[]" | #let PAR-SPECIALS = "?[]" | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #import "@preview/cetz:0.3.3": canvas, draw | #import "/src/cetz.typ": canvas, draw | ||||||
| #import "utils.typ": get-participants-i, get-style, normalize-units | #import "utils.typ": get-participants-i, get-style, normalize-units | ||||||
| #import "group.typ" | #import "group.typ" | ||||||
| #import "participant.typ" | #import "participant.typ" | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #import "@preview/cetz:0.3.3": draw | #import "/src/cetz.typ": draw | ||||||
| #import "consts.typ": * | #import "consts.typ": * | ||||||
|  |  | ||||||
| #let _sep(name) = { | #let _sep(name) = { | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #import "@preview/cetz:0.3.3": draw, vector | #import "/src/cetz.typ": draw, vector | ||||||
| #import "consts.typ": * | #import "consts.typ": * | ||||||
| #import "participant.typ" | #import "participant.typ" | ||||||
| #import "note.typ" | #import "note.typ" | ||||||
|   | |||||||
| @@ -36,6 +36,9 @@ | |||||||
|       max-i = calc.max(max-i, i1) |       max-i = calc.max(max-i, i1) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |   if max-i < min-i { | ||||||
|  |     (min-i, max-i) = (max-i, min-i) | ||||||
|  |   } | ||||||
|   return (min-i, max-i) |   return (min-i, max-i) | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| [package] | [package] | ||||||
| name = "chronos" | name = "chronos" | ||||||
| version = "0.2.1" | version = "0.2.1" | ||||||
| compiler = "0.13.0" | compiler = "0.13.1" | ||||||
| repository = "https://git.kb28.ch/HEL/chronos" | repository = "https://git.kb28.ch/HEL/chronos" | ||||||
| entrypoint = "src/lib.typ" | entrypoint = "src/lib.typ" | ||||||
| authors = [ | authors = [ | ||||||
| @@ -11,4 +11,4 @@ categories = ["visualization"] | |||||||
| license = "Apache-2.0" | license = "Apache-2.0" | ||||||
| description = "A package to draw sequence diagrams with CeTZ" | description = "A package to draw sequence diagrams with CeTZ" | ||||||
| keywords = ["sequence", "diagram", "plantuml"] | keywords = ["sequence", "diagram", "plantuml"] | ||||||
| exclude = [ "gallery", "gallery.bash", "docs" ] | exclude = [ "gallery", "justfile", "docs" ] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user