sirena 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/build_deploy.yml +59 -0
  3. data/.github/workflows/links.yml +85 -0
  4. data/.github/workflows/rake.yml +15 -0
  5. data/.github/workflows/release.yml +27 -0
  6. data/.gitignore +68 -0
  7. data/.rspec +3 -0
  8. data/.rubocop.yml +14 -0
  9. data/.rubocop_todo.yml +70 -0
  10. data/ARCHITECTURE.md +744 -0
  11. data/Gemfile +12 -0
  12. data/LICENSE +25 -0
  13. data/README.adoc +357 -0
  14. data/Rakefile +11 -0
  15. data/docs/.gitignore +1 -0
  16. data/docs/Gemfile +13 -0
  17. data/docs/_config.yml +182 -0
  18. data/docs/_diagram_types/architecture-diagram.adoc +314 -0
  19. data/docs/_diagram_types/block-diagram.adoc +345 -0
  20. data/docs/_diagram_types/c4-diagram.adoc +559 -0
  21. data/docs/_diagram_types/class-diagram.adoc +816 -0
  22. data/docs/_diagram_types/er-diagram.adoc +719 -0
  23. data/docs/_diagram_types/error-diagram.adoc +114 -0
  24. data/docs/_diagram_types/examples/flowchart-examples.adoc +29 -0
  25. data/docs/_diagram_types/flowchart.adoc +488 -0
  26. data/docs/_diagram_types/gantt-chart.adoc +502 -0
  27. data/docs/_diagram_types/git-graph.adoc +600 -0
  28. data/docs/_diagram_types/index.adoc +192 -0
  29. data/docs/_diagram_types/info-diagram.adoc +103 -0
  30. data/docs/_diagram_types/kanban-diagram.adoc +262 -0
  31. data/docs/_diagram_types/mindmap.adoc +603 -0
  32. data/docs/_diagram_types/packet-diagram.adoc +378 -0
  33. data/docs/_diagram_types/pie-chart.adoc +335 -0
  34. data/docs/_diagram_types/quadrant-chart.adoc +406 -0
  35. data/docs/_diagram_types/radar-chart.adoc +528 -0
  36. data/docs/_diagram_types/requirement-diagram.adoc +416 -0
  37. data/docs/_diagram_types/sankey-diagram.adoc +357 -0
  38. data/docs/_diagram_types/sequence-diagram.adoc +664 -0
  39. data/docs/_diagram_types/state-diagram.adoc +658 -0
  40. data/docs/_diagram_types/timeline.adoc +352 -0
  41. data/docs/_diagram_types/treemap-diagram.adoc +462 -0
  42. data/docs/_diagram_types/user-journey.adoc +602 -0
  43. data/docs/_features/index.adoc +129 -0
  44. data/docs/_guides/cli-reference.adoc +203 -0
  45. data/docs/_guides/index.adoc +56 -0
  46. data/docs/_guides/installation.adoc +100 -0
  47. data/docs/_guides/quick-start.adoc +132 -0
  48. data/docs/_pages/comparison.adoc +441 -0
  49. data/docs/_pages/compatibility.adoc +300 -0
  50. data/docs/_pages/index.adoc +39 -0
  51. data/docs/_references/index.adoc +103 -0
  52. data/docs/_tutorials/index.adoc +57 -0
  53. data/docs/index.adoc +166 -0
  54. data/docs/lychee.toml +54 -0
  55. data/examples/.gitignore +10 -0
  56. data/examples/README.adoc +196 -0
  57. data/examples/README.md +64 -0
  58. data/examples/architecture/01-basic-services.mmd +9 -0
  59. data/examples/architecture/01-basic-services.svg +37 -0
  60. data/examples/architecture/02-service-groups.mmd +16 -0
  61. data/examples/architecture/02-service-groups.svg +55 -0
  62. data/examples/architecture/README.adoc +79 -0
  63. data/examples/block/01-basic-blocks.mmd +13 -0
  64. data/examples/block/01-basic-blocks.svg +44 -0
  65. data/examples/block/02-block-shapes.mmd +13 -0
  66. data/examples/block/02-block-shapes.svg +47 -0
  67. data/examples/block/README.adoc +85 -0
  68. data/examples/c4/01-context-diagram.mmd +10 -0
  69. data/examples/c4/01-context-diagram.svg +45 -0
  70. data/examples/c4/02-container-diagram.mmd +24 -0
  71. data/examples/c4/02-container-diagram.svg +105 -0
  72. data/examples/c4/README.adoc +92 -0
  73. data/examples/class_diagram/01-basic-classes.mmd +61 -0
  74. data/examples/class_diagram/01-basic-classes.svg +117 -0
  75. data/examples/class_diagram/02-relationships.mmd +61 -0
  76. data/examples/class_diagram/02-relationships.svg +129 -0
  77. data/examples/class_diagram/README.adoc +93 -0
  78. data/examples/er_diagram/01-basic-entities.mmd +64 -0
  79. data/examples/er_diagram/01-basic-entities.svg +5 -0
  80. data/examples/er_diagram/02-cardinality.mmd +57 -0
  81. data/examples/er_diagram/02-cardinality.svg +125 -0
  82. data/examples/er_diagram/README.adoc +88 -0
  83. data/examples/error/01-basic-error.mmd +1 -0
  84. data/examples/error/01-basic-error.svg +13 -0
  85. data/examples/error/02-error-display.mmd +1 -0
  86. data/examples/error/02-error-display.svg +13 -0
  87. data/examples/error/README.adoc +71 -0
  88. data/examples/error_message_example.svg +13 -0
  89. data/examples/flowchart/00-original.mmd +13 -0
  90. data/examples/flowchart/00-original.svg +5 -0
  91. data/examples/flowchart/01-basic-flow.mmd +7 -0
  92. data/examples/flowchart/01-basic-flow.svg +52 -0
  93. data/examples/flowchart/01-basic-flow.yml +13 -0
  94. data/examples/flowchart/02*.svg +87 -0
  95. data/examples/flowchart/02-node-shapes.mmd +9 -0
  96. data/examples/flowchart/02-node-shapes.svg +33 -0
  97. data/examples/flowchart/03-edge-types.mmd +7 -0
  98. data/examples/flowchart/03-edge-types.svg +53 -0
  99. data/examples/flowchart/04-subgraphs.mmd +9 -0
  100. data/examples/flowchart/04-subgraphs.svg +33 -0
  101. data/examples/flowchart/05-styling.mmd +9 -0
  102. data/examples/flowchart/05-styling.svg +33 -0
  103. data/examples/flowchart/06-complex-flow.mmd +8 -0
  104. data/examples/flowchart/06-complex-flow.svg +59 -0
  105. data/examples/flowchart/README.adoc +167 -0
  106. data/examples/gantt/01-simple-timeline.* +14 -0
  107. data/examples/gantt/01-simple-timeline.mmd +6 -0
  108. data/examples/gantt/01-simple-timeline.svg +26 -0
  109. data/examples/gantt/02-task-dependencies.mmd +6 -0
  110. data/examples/gantt/02-task-dependencies.svg +26 -0
  111. data/examples/gantt/README.adoc +86 -0
  112. data/examples/git_graph/01-linear-history.mmd +12 -0
  113. data/examples/git_graph/01-linear-history.svg +26 -0
  114. data/examples/git_graph/02-branching.mmd +12 -0
  115. data/examples/git_graph/02-branching.svg +26 -0
  116. data/examples/git_graph/README.adoc +73 -0
  117. data/examples/info/02-showinfo.mmd +1 -0
  118. data/examples/info/02-showinfo.svg +10 -0
  119. data/examples/info/README.adoc +58 -0
  120. data/examples/info_showinfo_example.svg +10 -0
  121. data/examples/kanban/01-simple-board.mmd +8 -0
  122. data/examples/kanban/01-simple-board.svg +43 -0
  123. data/examples/kanban/02-workflow.mmd +8 -0
  124. data/examples/kanban/02-workflow.svg +43 -0
  125. data/examples/kanban/README.adoc +79 -0
  126. data/examples/mindmap/01-simple-tree.mmd +19 -0
  127. data/examples/mindmap/01-simple-tree.svg +61 -0
  128. data/examples/mindmap/02-knowledge-map.mmd +19 -0
  129. data/examples/mindmap/02-knowledge-map.svg +61 -0
  130. data/examples/mindmap/README.adoc +77 -0
  131. data/examples/packet/01-basic-packet.* +17 -0
  132. data/examples/packet/01-basic-packet.mmd +4 -0
  133. data/examples/packet/01-basic-packet.svg +82 -0
  134. data/examples/packet/README.adoc +58 -0
  135. data/examples/pie/01-simple-chart.mmd +5 -0
  136. data/examples/pie/01-simple-chart.svg +17 -0
  137. data/examples/pie/02-labeled-slices.mmd +6 -0
  138. data/examples/pie/02-labeled-slices.svg +19 -0
  139. data/examples/pie/README.adoc +75 -0
  140. data/examples/quadrant/01-basic-quadrant.mmd +13 -0
  141. data/examples/quadrant/01-basic-quadrant.svg +33 -0
  142. data/examples/quadrant/02-positioned-items.mmd +14 -0
  143. data/examples/quadrant/02-positioned-items.svg +35 -0
  144. data/examples/quadrant/README.adoc +84 -0
  145. data/examples/radar/01-simple-radar.* +5 -0
  146. data/examples/radar/01-simple-radar.mmd +3 -0
  147. data/examples/radar/01-simple-radar.svg +25 -0
  148. data/examples/radar/02-multiple-curves.mmd +4 -0
  149. data/examples/radar/02-multiple-curves.svg +43 -0
  150. data/examples/radar/README.adoc +75 -0
  151. data/examples/requirement/01-basic-requirements.mmd +23 -0
  152. data/examples/requirement/01-basic-requirements.svg +49 -0
  153. data/examples/requirement/02-risk-levels.mmd +23 -0
  154. data/examples/requirement/02-risk-levels.svg +49 -0
  155. data/examples/requirement/README.adoc +85 -0
  156. data/examples/sankey/01-simple-flow.mmd +7 -0
  157. data/examples/sankey/01-simple-flow.svg +34 -0
  158. data/examples/sankey/02-multi-stage.mmd +11 -0
  159. data/examples/sankey/02-multi-stage.svg +44 -0
  160. data/examples/sankey/README.adoc +74 -0
  161. data/examples/sequence/01-basic-sequence.mmd +27 -0
  162. data/examples/sequence/01-basic-sequence.svg +5 -0
  163. data/examples/sequence/02-activations.mmd +17 -0
  164. data/examples/sequence/02-activations.svg +78 -0
  165. data/examples/sequence/README.adoc +86 -0
  166. data/examples/state_diagram/01-simple-states.mmd +29 -0
  167. data/examples/state_diagram/01-simple-states.svg +5 -0
  168. data/examples/state_diagram/02-composite.mmd +19 -0
  169. data/examples/state_diagram/02-composite.svg +81 -0
  170. data/examples/state_diagram/README.adoc +90 -0
  171. data/examples/timeline/01-simple-timeline.mmd +11 -0
  172. data/examples/timeline/01-simple-timeline.svg +36 -0
  173. data/examples/timeline/02-periods.mmd +15 -0
  174. data/examples/timeline/02-periods.svg +47 -0
  175. data/examples/timeline/README.adoc +78 -0
  176. data/examples/treemap/01-basic-treemap.mmd +12 -0
  177. data/examples/treemap/01-basic-treemap.svg +59 -0
  178. data/examples/treemap/README.adoc +59 -0
  179. data/examples/user_journey/01-simple-journey.mmd +23 -0
  180. data/examples/user_journey/01-simple-journey.svg +5 -0
  181. data/examples/user_journey/02-multi-actor.mmd +18 -0
  182. data/examples/user_journey/02-multi-actor.svg +129 -0
  183. data/examples/user_journey/README.adoc +81 -0
  184. data/examples/xychart/01-line-chart.mmd +5 -0
  185. data/examples/xychart/01-line-chart.svg +43 -0
  186. data/examples/xychart/02-bar-chart.mmd +7 -0
  187. data/examples/xychart/02-bar-chart.svg +48 -0
  188. data/examples/xychart/README.adoc +80 -0
  189. data/exe/sirena +7 -0
  190. data/lib/sirena/cli.rb +138 -0
  191. data/lib/sirena/commands/batch.rb +117 -0
  192. data/lib/sirena/commands/render.rb +80 -0
  193. data/lib/sirena/commands/types.rb +29 -0
  194. data/lib/sirena/commands/version.rb +24 -0
  195. data/lib/sirena/diagram/architecture.rb +46 -0
  196. data/lib/sirena/diagram/base.rb +61 -0
  197. data/lib/sirena/diagram/block.rb +81 -0
  198. data/lib/sirena/diagram/c4.rb +328 -0
  199. data/lib/sirena/diagram/class_diagram.rb +385 -0
  200. data/lib/sirena/diagram/er_diagram.rb +238 -0
  201. data/lib/sirena/diagram/error.rb +38 -0
  202. data/lib/sirena/diagram/flowchart.rb +160 -0
  203. data/lib/sirena/diagram/gantt.rb +71 -0
  204. data/lib/sirena/diagram/git_graph.rb +36 -0
  205. data/lib/sirena/diagram/info.rb +38 -0
  206. data/lib/sirena/diagram/kanban.rb +178 -0
  207. data/lib/sirena/diagram/mindmap.rb +54 -0
  208. data/lib/sirena/diagram/packet.rb +79 -0
  209. data/lib/sirena/diagram/pie.rb +115 -0
  210. data/lib/sirena/diagram/quadrant.rb +138 -0
  211. data/lib/sirena/diagram/radar.rb +52 -0
  212. data/lib/sirena/diagram/requirement.rb +133 -0
  213. data/lib/sirena/diagram/sankey.rb +217 -0
  214. data/lib/sirena/diagram/sequence.rb +242 -0
  215. data/lib/sirena/diagram/state_diagram.rb +237 -0
  216. data/lib/sirena/diagram/timeline.rb +171 -0
  217. data/lib/sirena/diagram/treemap.rb +84 -0
  218. data/lib/sirena/diagram/user_journey.rb +149 -0
  219. data/lib/sirena/diagram/xy_chart.rb +76 -0
  220. data/lib/sirena/diagram.rb +8 -0
  221. data/lib/sirena/diagram_registry.rb +101 -0
  222. data/lib/sirena/engine.rb +292 -0
  223. data/lib/sirena/parser/architecture.rb +41 -0
  224. data/lib/sirena/parser/base.rb +41 -0
  225. data/lib/sirena/parser/block.rb +72 -0
  226. data/lib/sirena/parser/c4.rb +53 -0
  227. data/lib/sirena/parser/class_diagram.rb +63 -0
  228. data/lib/sirena/parser/er_diagram.rb +40 -0
  229. data/lib/sirena/parser/error.rb +49 -0
  230. data/lib/sirena/parser/flowchart.rb +71 -0
  231. data/lib/sirena/parser/gantt.rb +60 -0
  232. data/lib/sirena/parser/git_graph.rb +95 -0
  233. data/lib/sirena/parser/grammars/architecture.rb +145 -0
  234. data/lib/sirena/parser/grammars/block.rb +190 -0
  235. data/lib/sirena/parser/grammars/c4.rb +226 -0
  236. data/lib/sirena/parser/grammars/class_diagram.rb +284 -0
  237. data/lib/sirena/parser/grammars/common.rb +84 -0
  238. data/lib/sirena/parser/grammars/er_diagram.rb +114 -0
  239. data/lib/sirena/parser/grammars/error.rb +40 -0
  240. data/lib/sirena/parser/grammars/flowchart.rb +298 -0
  241. data/lib/sirena/parser/grammars/gantt.rb +252 -0
  242. data/lib/sirena/parser/grammars/git_graph.rb +167 -0
  243. data/lib/sirena/parser/grammars/info.rb +58 -0
  244. data/lib/sirena/parser/grammars/kanban.rb +83 -0
  245. data/lib/sirena/parser/grammars/mindmap.rb +115 -0
  246. data/lib/sirena/parser/grammars/packet.rb +73 -0
  247. data/lib/sirena/parser/grammars/pie.rb +128 -0
  248. data/lib/sirena/parser/grammars/quadrant.rb +199 -0
  249. data/lib/sirena/parser/grammars/radar.rb +150 -0
  250. data/lib/sirena/parser/grammars/requirement.rb +188 -0
  251. data/lib/sirena/parser/grammars/sankey.rb +104 -0
  252. data/lib/sirena/parser/grammars/sequence.rb +247 -0
  253. data/lib/sirena/parser/grammars/state_diagram.rb +172 -0
  254. data/lib/sirena/parser/grammars/timeline.rb +142 -0
  255. data/lib/sirena/parser/grammars/treemap.rb +120 -0
  256. data/lib/sirena/parser/grammars/xy_chart.rb +120 -0
  257. data/lib/sirena/parser/info.rb +49 -0
  258. data/lib/sirena/parser/kanban.rb +97 -0
  259. data/lib/sirena/parser/mindmap.rb +106 -0
  260. data/lib/sirena/parser/packet.rb +76 -0
  261. data/lib/sirena/parser/pie.rb +49 -0
  262. data/lib/sirena/parser/quadrant.rb +57 -0
  263. data/lib/sirena/parser/radar.rb +104 -0
  264. data/lib/sirena/parser/requirement.rb +70 -0
  265. data/lib/sirena/parser/sankey.rb +64 -0
  266. data/lib/sirena/parser/sequence.rb +51 -0
  267. data/lib/sirena/parser/state_diagram.rb +69 -0
  268. data/lib/sirena/parser/timeline.rb +57 -0
  269. data/lib/sirena/parser/transforms/architecture.rb +97 -0
  270. data/lib/sirena/parser/transforms/block.rb +254 -0
  271. data/lib/sirena/parser/transforms/c4.rb +347 -0
  272. data/lib/sirena/parser/transforms/class_diagram.rb +352 -0
  273. data/lib/sirena/parser/transforms/er_diagram.rb +169 -0
  274. data/lib/sirena/parser/transforms/error.rb +58 -0
  275. data/lib/sirena/parser/transforms/flowchart.rb +293 -0
  276. data/lib/sirena/parser/transforms/gantt.rb +215 -0
  277. data/lib/sirena/parser/transforms/git_graph.rb +160 -0
  278. data/lib/sirena/parser/transforms/info.rb +58 -0
  279. data/lib/sirena/parser/transforms/kanban.rb +176 -0
  280. data/lib/sirena/parser/transforms/mindmap.rb +227 -0
  281. data/lib/sirena/parser/transforms/packet.rb +63 -0
  282. data/lib/sirena/parser/transforms/pie.rb +143 -0
  283. data/lib/sirena/parser/transforms/quadrant.rb +177 -0
  284. data/lib/sirena/parser/transforms/radar.rb +126 -0
  285. data/lib/sirena/parser/transforms/requirement.rb +272 -0
  286. data/lib/sirena/parser/transforms/sankey.rb +122 -0
  287. data/lib/sirena/parser/transforms/sequence.rb +342 -0
  288. data/lib/sirena/parser/transforms/state_diagram.rb +292 -0
  289. data/lib/sirena/parser/transforms/timeline.rb +177 -0
  290. data/lib/sirena/parser/transforms/treemap.rb +81 -0
  291. data/lib/sirena/parser/transforms/xy_chart.rb +132 -0
  292. data/lib/sirena/parser/treemap.rb +98 -0
  293. data/lib/sirena/parser/user_journey.rb +120 -0
  294. data/lib/sirena/parser/xy_chart.rb +114 -0
  295. data/lib/sirena/parser.rb +8 -0
  296. data/lib/sirena/renderer/architecture.rb +251 -0
  297. data/lib/sirena/renderer/base.rb +251 -0
  298. data/lib/sirena/renderer/block.rb +286 -0
  299. data/lib/sirena/renderer/c4.rb +490 -0
  300. data/lib/sirena/renderer/class_diagram.rb +499 -0
  301. data/lib/sirena/renderer/er_diagram.rb +417 -0
  302. data/lib/sirena/renderer/error.rb +131 -0
  303. data/lib/sirena/renderer/flowchart.rb +301 -0
  304. data/lib/sirena/renderer/gantt.rb +331 -0
  305. data/lib/sirena/renderer/git_graph.rb +368 -0
  306. data/lib/sirena/renderer/info.rb +93 -0
  307. data/lib/sirena/renderer/kanban.rb +295 -0
  308. data/lib/sirena/renderer/mindmap.rb +396 -0
  309. data/lib/sirena/renderer/packet.rb +239 -0
  310. data/lib/sirena/renderer/pie.rb +235 -0
  311. data/lib/sirena/renderer/quadrant.rb +292 -0
  312. data/lib/sirena/renderer/radar.rb +323 -0
  313. data/lib/sirena/renderer/requirement.rb +371 -0
  314. data/lib/sirena/renderer/sankey.rb +255 -0
  315. data/lib/sirena/renderer/sequence.rb +424 -0
  316. data/lib/sirena/renderer/state_diagram.rb +328 -0
  317. data/lib/sirena/renderer/timeline.rb +304 -0
  318. data/lib/sirena/renderer/treemap.rb +152 -0
  319. data/lib/sirena/renderer/user_journey.rb +331 -0
  320. data/lib/sirena/renderer/xy_chart.rb +452 -0
  321. data/lib/sirena/renderer.rb +8 -0
  322. data/lib/sirena/svg/circle.rb +41 -0
  323. data/lib/sirena/svg/document.rb +103 -0
  324. data/lib/sirena/svg/element.rb +65 -0
  325. data/lib/sirena/svg/ellipse.rb +33 -0
  326. data/lib/sirena/svg/group.rb +71 -0
  327. data/lib/sirena/svg/line.rb +49 -0
  328. data/lib/sirena/svg/path.rb +76 -0
  329. data/lib/sirena/svg/polygon.rb +43 -0
  330. data/lib/sirena/svg/polyline.rb +35 -0
  331. data/lib/sirena/svg/rect.rb +57 -0
  332. data/lib/sirena/svg/style.rb +44 -0
  333. data/lib/sirena/svg/text.rb +72 -0
  334. data/lib/sirena/svg.rb +19 -0
  335. data/lib/sirena/text_measurement.rb +71 -0
  336. data/lib/sirena/theme/builtin/dark.yml +70 -0
  337. data/lib/sirena/theme/builtin/default.yml +80 -0
  338. data/lib/sirena/theme/builtin/high_contrast.yml +70 -0
  339. data/lib/sirena/theme/builtin/light.yml +70 -0
  340. data/lib/sirena/theme/color_palette.rb +48 -0
  341. data/lib/sirena/theme/effect_styles.rb +28 -0
  342. data/lib/sirena/theme/registry.rb +41 -0
  343. data/lib/sirena/theme/shape_styles.rb +28 -0
  344. data/lib/sirena/theme/spacing_config.rb +24 -0
  345. data/lib/sirena/theme/typography.rb +30 -0
  346. data/lib/sirena/theme.rb +69 -0
  347. data/lib/sirena/transform/architecture.rb +273 -0
  348. data/lib/sirena/transform/base.rb +199 -0
  349. data/lib/sirena/transform/block.rb +215 -0
  350. data/lib/sirena/transform/c4.rb +288 -0
  351. data/lib/sirena/transform/class_diagram.rb +296 -0
  352. data/lib/sirena/transform/er_diagram.rb +204 -0
  353. data/lib/sirena/transform/error.rb +39 -0
  354. data/lib/sirena/transform/flowchart.rb +161 -0
  355. data/lib/sirena/transform/gantt.rb +253 -0
  356. data/lib/sirena/transform/git_graph.rb +283 -0
  357. data/lib/sirena/transform/info.rb +39 -0
  358. data/lib/sirena/transform/kanban.rb +180 -0
  359. data/lib/sirena/transform/mindmap.rb +251 -0
  360. data/lib/sirena/transform/packet.rb +185 -0
  361. data/lib/sirena/transform/pie.rb +62 -0
  362. data/lib/sirena/transform/quadrant.rb +167 -0
  363. data/lib/sirena/transform/radar.rb +227 -0
  364. data/lib/sirena/transform/requirement.rb +233 -0
  365. data/lib/sirena/transform/sankey.rb +212 -0
  366. data/lib/sirena/transform/sequence.rb +143 -0
  367. data/lib/sirena/transform/state_diagram.rb +228 -0
  368. data/lib/sirena/transform/timeline.rb +139 -0
  369. data/lib/sirena/transform/treemap.rb +120 -0
  370. data/lib/sirena/transform/user_journey.rb +207 -0
  371. data/lib/sirena/transform/xy_chart.rb +273 -0
  372. data/lib/sirena/transform.rb +8 -0
  373. data/lib/sirena/version.rb +5 -0
  374. data/lib/sirena.rb +328 -0
  375. data/lib/tasks/benchmark.rake +532 -0
  376. data/lib/tasks/examples.rake +468 -0
  377. data/lib/tasks/generate_mermaid_fixtures.rake +363 -0
  378. data/lib/tasks/mermaid_fixtures.rake +46 -0
  379. data/scripts/extract_mermaid_tests.rb +493 -0
  380. data/scripts/rename_to_sirena.rb +73 -0
  381. data/sirena.gemspec +47 -0
  382. metadata +529 -0
@@ -0,0 +1,602 @@
1
+ = User journey diagrams
2
+ :toc:
3
+ :toclevels: 3
4
+
5
+ == Overview
6
+
7
+ User journey diagrams in Sirena map the experience of users as they interact with a system or service over time. They show tasks, actors involved, and satisfaction scores, making them ideal for UX design, service design, and customer experience mapping.
8
+
9
+ User journey diagrams are useful for:
10
+
11
+ * Mapping customer experience touchpoints
12
+ * Documenting user workflows and pain points
13
+ * Planning service design improvements
14
+ * Identifying satisfaction levels at each step
15
+ * Communicating user experiences to stakeholders
16
+ * Analyzing multi-actor interactions
17
+
18
+ == Syntax specification
19
+
20
+ === Diagram declaration
21
+
22
+ User journey diagrams are declared using the `journey` keyword:
23
+
24
+ [source,mermaid]
25
+ ----
26
+ journey
27
+ <diagram-content>
28
+ ----
29
+
30
+ === Title
31
+
32
+ Journeys should have a descriptive title:
33
+
34
+ [source,mermaid]
35
+ ----
36
+ journey
37
+ title User Registration Journey
38
+ ----
39
+
40
+ === Sections
41
+
42
+ Sections group related tasks in the journey:
43
+
44
+ [source,mermaid]
45
+ ----
46
+ journey
47
+ title My Journey
48
+ section Section Name
49
+ Task 1: score: Actor1, Actor2
50
+ Task 2: score: Actor1
51
+ ----
52
+
53
+ === Tasks
54
+
55
+ Tasks represent individual steps in the journey:
56
+
57
+ [source,mermaid]
58
+ ----
59
+ Task description: satisfaction_score: Actor1, Actor2, Actor3
60
+ ----
61
+
62
+ Where:
63
+
64
+ * `Task description` - Description of what happens in this step
65
+ * `satisfaction_score` - Number from 1-5 indicating satisfaction level
66
+ - 1 - Very dissatisfied
67
+ - 2 - Dissatisfied
68
+ - 3 - Neutral
69
+ - 4 - Satisfied
70
+ - 5 - Very satisfied
71
+ * `Actor1, Actor2, Actor3` - Comma-separated list of actors involved
72
+
73
+ ==== Satisfaction scores
74
+
75
+ Scores affect the visual representation:
76
+
77
+ * 1-2: Displayed as negative/red (pain points)
78
+ * 3: Displayed as neutral/yellow
79
+ * 4-5: Displayed as positive/green (delightful moments)
80
+
81
+ === Actors
82
+
83
+ Actors are the participants in the journey. They are defined implicitly when used in tasks:
84
+
85
+ [source,mermaid]
86
+ ----
87
+ journey
88
+ title Shopping Journey
89
+ section Browse
90
+ View products: 5: Customer
91
+ Add to cart: 4: Customer
92
+ section Checkout
93
+ Process payment: 3: Customer, System
94
+ ----
95
+
96
+ In this example, `Customer` and `System` are actors.
97
+
98
+ == Examples
99
+
100
+ === Basic user journey
101
+
102
+ .Simple journey with one actor
103
+ [example]
104
+ ====
105
+ [source,mermaid]
106
+ ----
107
+ journey
108
+ title User Login Journey
109
+ section Access
110
+ Navigate to site: 5: User
111
+ Click login button: 5: User
112
+ section Authentication
113
+ Enter credentials: 3: User
114
+ Submit form: 3: User
115
+ section Success
116
+ View dashboard: 5: User
117
+ ----
118
+
119
+ This creates a simple journey showing:
120
+
121
+ * Multiple sections organizing the flow
122
+ * Tasks with satisfaction scores
123
+ * Single actor (User) throughout
124
+ ====
125
+
126
+ === Multi-actor journey
127
+
128
+ .Journey with multiple actors
129
+ [example]
130
+ ====
131
+ [source,mermaid]
132
+ ----
133
+ journey
134
+ title Customer Support Interaction
135
+ section Discovery
136
+ Visit help center: 3: Customer
137
+ Search for solution: 2: Customer
138
+ Click support chat: 4: Customer
139
+ section Initial Contact
140
+ Greet customer: 5: Customer, Agent
141
+ Describe issue: 3: Customer, Agent
142
+ Agent reviews account: 4: Agent, System
143
+ section Resolution
144
+ Agent explains solution: 5: Customer, Agent
145
+ Customer follows steps: 4: Customer
146
+ Issue resolved: 5: Customer, Agent
147
+ ----
148
+
149
+ This demonstrates:
150
+
151
+ * Multiple actors (Customer, Agent, System)
152
+ * Tasks involving different combinations of actors
153
+ * Varying satisfaction scores reflecting pain points and successes
154
+ ====
155
+
156
+ === E-commerce shopping journey
157
+
158
+ .Complete shopping experience
159
+ [example]
160
+ ====
161
+ [source,mermaid]
162
+ ----
163
+ journey
164
+ title Online Shopping Experience
165
+ section Product Discovery
166
+ Search for product: 4: Customer
167
+ View search results: 3: Customer
168
+ Click product: 5: Customer
169
+ Read reviews: 4: Customer
170
+ section Product Evaluation
171
+ View product details: 5: Customer
172
+ Check availability: 4: Customer, System
173
+ Compare prices: 3: Customer
174
+ Add to cart: 5: Customer
175
+ section Checkout Process
176
+ Review cart: 4: Customer
177
+ Enter shipping info: 3: Customer
178
+ Select payment method: 3: Customer
179
+ Apply discount code: 5: Customer
180
+ Confirm order: 4: Customer, System
181
+ section Post-Purchase
182
+ Receive confirmation: 5: Customer, System
183
+ Track shipment: 4: Customer, System
184
+ Receive product: 5: Customer
185
+ Leave review: 4: Customer
186
+ ----
187
+
188
+ This comprehensive journey includes:
189
+
190
+ * Four distinct sections
191
+ * Multiple touchpoints with the system
192
+ * Satisfaction scores showing pain points (entering info) and delights (discounts)
193
+ * Customer and System actors
194
+ ====
195
+
196
+ === Service design journey
197
+
198
+ .Restaurant dining experience
199
+ [example]
200
+ ====
201
+ [source,mermaid]
202
+ ----
203
+ journey
204
+ title Restaurant Dining Journey
205
+ section Arrival
206
+ Enter restaurant: 5: Guest
207
+ Greeted by host: 5: Guest, Host
208
+ Seated at table: 4: Guest, Host
209
+ section Ordering
210
+ Review menu: 4: Guest
211
+ Ask questions: 5: Guest, Server
212
+ Place order: 5: Guest, Server
213
+ Order sent to kitchen: 3: Server, Kitchen
214
+ section Dining
215
+ Receive appetizer: 5: Guest, Server
216
+ Receive main course: 5: Guest, Server
217
+ Enjoy meal: 5: Guest
218
+ section Conclusion
219
+ Request check: 4: Guest, Server
220
+ Process payment: 3: Guest, Server
221
+ Leave tip: 4: Guest
222
+ Exit restaurant: 5: Guest
223
+ ----
224
+
225
+ This shows:
226
+
227
+ * Service touchpoints with staff
228
+ * Multiple actors (Guest, Host, Server, Kitchen)
229
+ * Experience flow from arrival to departure
230
+ ====
231
+
232
+ === Software onboarding journey
233
+
234
+ .New user onboarding experience
235
+ [example]
236
+ ====
237
+ [source,mermaid]
238
+ ----
239
+ journey
240
+ title SaaS Application Onboarding
241
+ section Sign Up
242
+ Visit landing page: 4: User
243
+ Click sign up: 5: User
244
+ Fill registration form: 2: User
245
+ Verify email: 3: User, System
246
+ section Initial Setup
247
+ Complete profile: 3: User
248
+ Watch tutorial video: 4: User
249
+ Invite team members: 3: User, System
250
+ section First Use
251
+ Create first project: 5: User
252
+ Explore features: 4: User
253
+ Use core functionality: 5: User
254
+ section Engagement
255
+ Receive onboarding email: 4: User, System
256
+ Complete first task: 5: User
257
+ Share feedback: 4: User
258
+ ----
259
+
260
+ This demonstrates:
261
+
262
+ * Onboarding flow
263
+ * Pain points in sign-up process (form filling)
264
+ * System interactions
265
+ * Building engagement over time
266
+ ====
267
+
268
+ === Complex multi-stakeholder journey
269
+
270
+ .Healthcare appointment journey
271
+ [example]
272
+ ====
273
+ [source,mermaid]
274
+ ----
275
+ journey
276
+ title Medical Appointment Journey
277
+ section Scheduling
278
+ Search for doctor: 3: Patient
279
+ Check availability: 2: Patient, System
280
+ Book appointment: 3: Patient, System
281
+ Receive confirmation: 4: Patient, System
282
+ section Pre-Visit
283
+ Fill out forms: 2: Patient
284
+ Upload insurance: 2: Patient, System
285
+ Receive reminder: 4: Patient, System
286
+ section Visit
287
+ Check in: 3: Patient, Receptionist
288
+ Wait in lobby: 2: Patient
289
+ Called for appointment: 4: Patient, Nurse
290
+ Vital signs check: 3: Patient, Nurse
291
+ Consultation: 5: Patient, Doctor
292
+ Receive prescription: 4: Patient, Doctor
293
+ section Post-Visit
294
+ Check out: 3: Patient, Receptionist
295
+ Schedule follow-up: 3: Patient, Receptionist
296
+ Receive bill: 2: Patient, System
297
+ Complete payment: 2: Patient
298
+ Fill prescription: 4: Patient
299
+ ----
300
+
301
+ This comprehensive example includes:
302
+
303
+ * Multiple stakeholders (Patient, Doctor, Nurse, Receptionist, System)
304
+ * Pain points clearly identified (low scores for forms, waiting, billing)
305
+ * Positive moments (consultation, prescription)
306
+ * End-to-end journey from booking to follow-up
307
+ ====
308
+
309
+ === Customer support journey
310
+
311
+ .Technical support experience
312
+ [example]
313
+ ====
314
+ [source,mermaid]
315
+ ----
316
+ journey
317
+ title Customer Support Interaction Journey
318
+ section Discovery
319
+ Visit help center: 3: Customer
320
+ Search for solution: 2: Customer
321
+ Click support chat: 4: Customer
322
+ section Initial Contact
323
+ Greet customer: 5: Customer, Agent
324
+ Describe issue: 3: Customer, Agent
325
+ Agent reviews account: 4: Agent, System
326
+ section Diagnosis
327
+ Agent asks clarifying questions: 4: Customer, Agent
328
+ Customer provides details: 3: Customer, Agent
329
+ Agent checks logs: 2: Agent, System
330
+ Agent identifies root cause: 5: Agent
331
+ section Resolution
332
+ Agent explains solution: 5: Customer, Agent
333
+ Customer follows steps: 4: Customer
334
+ Issue resolved: 5: Customer, Agent
335
+ section Follow-up
336
+ Agent confirms resolution: 5: Customer, Agent
337
+ Customer rates experience: 5: Customer
338
+ Agent documents case: 4: Agent, System
339
+ ----
340
+
341
+ This shows:
342
+
343
+ * Support interaction flow
344
+ * Collaboration between customer and agent
345
+ * System involvement in diagnostics
346
+ * Positive resolution experience
347
+ ====
348
+
349
+ == Features
350
+
351
+ === Multiple sections
352
+
353
+ Journeys can have any number of sections:
354
+
355
+ [source,mermaid]
356
+ ----
357
+ journey
358
+ title My Journey
359
+ section Phase 1
360
+ Task: 5: Actor
361
+ section Phase 2
362
+ Task: 4: Actor
363
+ section Phase 3
364
+ Task: 3: Actor
365
+ ----
366
+
367
+ === Multiple tasks per section
368
+
369
+ Sections can contain multiple tasks:
370
+
371
+ [source,mermaid]
372
+ ----
373
+ journey
374
+ section Shopping
375
+ Browse products: 5: Customer
376
+ Add to cart: 4: Customer
377
+ Apply coupon: 5: Customer
378
+ Proceed to checkout: 4: Customer
379
+ ----
380
+
381
+ === Variable actor combinations
382
+
383
+ Different tasks can involve different actors:
384
+
385
+ [source,mermaid]
386
+ ----
387
+ journey
388
+ section Service
389
+ Customer arrives: 4: Customer
390
+ Staff greets: 5: Customer, Staff
391
+ System processes: 3: Staff, System
392
+ Completion: 5: Customer, Staff, System
393
+ ----
394
+
395
+ === Long task descriptions
396
+
397
+ Task descriptions can be descriptive:
398
+
399
+ [source,mermaid]
400
+ ----
401
+ journey
402
+ section Experience
403
+ Customer searches for the perfect product in the catalog: 4: Customer
404
+ System displays personalized recommendations based on history: 5: System
405
+ ----
406
+
407
+ === Score ranges
408
+
409
+ Scores range from 1 (worst) to 5 (best):
410
+
411
+ [source,mermaid]
412
+ ----
413
+ journey
414
+ section Emotions
415
+ Frustrated: 1: User
416
+ Disappointed: 2: User
417
+ Neutral: 3: User
418
+ Satisfied: 4: User
419
+ Delighted: 5: User
420
+ ----
421
+
422
+ == Limitations
423
+
424
+ === Currently not supported
425
+
426
+ The following Mermaid user journey features are not yet supported in Sirena:
427
+
428
+ * Custom styling with CSS classes
429
+ * Click events and links
430
+ * Custom color schemes for scores
431
+ * Annotations or notes on tasks
432
+ * Time duration indicators
433
+ * Alternative paths or branches
434
+
435
+ === Known issues
436
+
437
+ * Very long task descriptions may be truncated
438
+ * Large numbers of actors may become cluttered
439
+ * Many sections may affect layout readability
440
+
441
+ == Best practices
442
+
443
+ === Use descriptive titles
444
+
445
+ Give journeys clear, descriptive titles:
446
+
447
+ [source,mermaid]
448
+ ----
449
+ %% Good
450
+ journey
451
+ title Customer Onboarding Journey
452
+
453
+ %% Less clear
454
+ journey
455
+ title Journey
456
+ ----
457
+
458
+ === Organize with meaningful sections
459
+
460
+ Group related tasks into logical sections:
461
+
462
+ [source,mermaid]
463
+ ----
464
+ %% Good - organized by phase
465
+ journey
466
+ section Discovery
467
+ ...
468
+ section Evaluation
469
+ ...
470
+ section Purchase
471
+ ...
472
+
473
+ %% Less organized
474
+ journey
475
+ section Steps
476
+ All tasks mixed together...
477
+ ----
478
+
479
+ === Use realistic satisfaction scores
480
+
481
+ Base scores on actual user research or realistic estimates:
482
+
483
+ [source,mermaid]
484
+ ----
485
+ %% Realistic - mix of high and low
486
+ journey
487
+ section Experience
488
+ Easy task: 5: User
489
+ Confusing form: 2: User
490
+ Helpful message: 4: User
491
+
492
+ %% Unrealistic - all perfect
493
+ journey
494
+ section Experience
495
+ Task 1: 5: User
496
+ Task 2: 5: User
497
+ Task 3: 5: User
498
+ ----
499
+
500
+ === Identify pain points
501
+
502
+ Use low scores to highlight areas needing improvement:
503
+
504
+ [source,mermaid]
505
+ ----
506
+ journey
507
+ section Checkout
508
+ Review cart: 4: Customer
509
+ Enter shipping address: 2: Customer %% Pain point!
510
+ Enter payment info: 2: Customer %% Pain point!
511
+ Confirm order: 5: Customer
512
+ ----
513
+
514
+ === Include relevant actors
515
+
516
+ Show all actors involved in each task:
517
+
518
+ [source,mermaid]
519
+ ----
520
+ %% Good - shows all involved parties
521
+ journey
522
+ section Support
523
+ Issue reported: 2: Customer
524
+ Ticket created: 3: Customer, System
525
+ Agent assigned: 4: Customer, Agent, System
526
+ Issue resolved: 5: Customer, Agent
527
+
528
+ %% Less informative - missing actors
529
+ journey
530
+ section Support
531
+ Issue reported: 2: Customer
532
+ Issue resolved: 5: Customer
533
+ ----
534
+
535
+ === Keep journeys focused
536
+
537
+ Don't try to map everything in one journey:
538
+
539
+ [source,mermaid]
540
+ ----
541
+ %% Good - focused on one journey
542
+ journey
543
+ title New User Onboarding
544
+ section Sign Up
545
+ ...
546
+ section Setup
547
+ ...
548
+
549
+ %% Too broad - multiple journeys mixed
550
+ journey
551
+ title Everything Users Do
552
+ section Onboarding
553
+ ...
554
+ section Daily Use
555
+ ...
556
+ section Advanced Features
557
+ ...
558
+ section Account Management
559
+ ...
560
+ ----
561
+
562
+ === Use consistent actor names
563
+
564
+ Maintain consistent naming throughout:
565
+
566
+ [source,mermaid]
567
+ ----
568
+ %% Good - consistent
569
+ journey
570
+ section Flow
571
+ Task 1: 5: Customer
572
+ Task 2: 4: Customer
573
+ Task 3: 5: Customer
574
+
575
+ %% Inconsistent
576
+ journey
577
+ section Flow
578
+ Task 1: 5: Customer
579
+ Task 2: 4: User
580
+ Task 3: 5: Client
581
+ ----
582
+
583
+ === Document both positive and negative experiences
584
+
585
+ Show the full range of user emotions:
586
+
587
+ [source,mermaid]
588
+ ----
589
+ journey
590
+ section Experience
591
+ Frustrating task: 1: User
592
+ Confusing step: 2: User
593
+ Acceptable process: 3: User
594
+ Good experience: 4: User
595
+ Delightful moment: 5: User
596
+ ----
597
+
598
+ == Related documentation
599
+
600
+ * <<index.adoc#,Diagram types overview>>
601
+ * <<sequence-diagram.adoc#,Sequence diagrams>>
602
+ * link:https://mermaid.js.org/syntax/userJourney.html[Official Mermaid user journey documentation]
@@ -0,0 +1,129 @@
1
+ ---
2
+ layout: default
3
+ title: Features
4
+ nav_order: 6
5
+ has_children: true
6
+ ---
7
+
8
+ == Features
9
+
10
+ Detailed documentation of Sirena's unique features and capabilities.
11
+
12
+ == What's in This Section
13
+
14
+ In-depth coverage of:
15
+
16
+ * **Theme System** - YAML-based theming with built-in themes
17
+ * **Batch Processing** - Processing multiple diagrams efficiently
18
+ * **CLI Tools** - Command-line interface capabilities
19
+ * **Parslet Parsing** - Grammar-based parsing architecture
20
+ * **SVG Generation** - Professional-quality output
21
+ * **Error Handling** - Clear, actionable error messages
22
+ * **Layout Engine** - ELK-based automatic layout
23
+ * **Text Measurement** - Accurate text rendering
24
+ * **Color Palettes** - Theme color system
25
+ * **Typography** - Font and text styling
26
+ * **Shape Styles** - Node and edge styling
27
+
28
+ == Feature Documentation Format
29
+
30
+ Each feature page includes:
31
+
32
+ * **Overview** - What the feature does
33
+ * **Use cases** - When to use this feature
34
+ * **How it works** - Technical explanation
35
+ * **Configuration** - How to configure
36
+ * **Examples** - Practical demonstrations
37
+ * **Best practices** - Recommended usage
38
+ * **Troubleshooting** - Common issues
39
+
40
+ == Core Features
41
+
42
+ === Rendering & Output
43
+
44
+ * link:{% link _features/svg-generation.adoc %}[SVG Generation] - High-quality scalable graphics
45
+ * link:{% link _features/layout-engine.adoc %}[Layout Engine] - Automatic diagram layout
46
+ * link:{% link _features/text-measurement.adoc %}[Text Measurement] - Accurate text sizing
47
+
48
+ === Theming & Styling
49
+
50
+ * link:{% link _features/theme-system.adoc %}[Theme System] - YAML-based themes
51
+ * link:{% link _features/color-palettes.adoc %}[Color Palettes] - Theme colors
52
+ * link:{% link _features/typography.adoc %}[Typography] - Font system
53
+ * link:{% link _features/shape-styles.adoc %}[Shape Styles] - Node and edge styling
54
+
55
+ === Parsing & Validation
56
+
57
+ * link:{% link _features/parslet-parsing.adoc %}[Parslet Parsing] - Grammar-based parser
58
+ * link:{% link _features/error-handling.adoc %}[Error Handling] - Clear error messages
59
+ * link:{% link _features/syntax-validation.adoc %}[Syntax Validation] - Pre-render validation
60
+
61
+ === Productivity Features
62
+
63
+ * link:{% link _features/batch-processing.adoc %}[Batch Processing] - Multiple diagrams at once
64
+ * link:{% link _features/cli-tools.adoc %}[CLI Tools] - Command-line interface
65
+ * link:{% link _features/caching.adoc %}[Caching] - Performance optimization
66
+
67
+ == Built-in Themes
68
+
69
+ Sirena includes four professional themes:
70
+
71
+ * **Default** - Classic Mermaid.js-compatible styling
72
+ * **Dark** - Dark background with high contrast
73
+ * **Light** - Minimalist light theme
74
+ * **High Contrast** - Maximum accessibility
75
+
76
+ See link:{% link _features/theme-system.adoc %}[Theme System] for details.
77
+
78
+ == Integration Features
79
+
80
+ === Framework Support
81
+
82
+ * **Rails** - Native Ruby on Rails integration
83
+ * **Jekyll** - Static site generation
84
+ * **Metanorma** - Technical documentation
85
+ * **Generic Ruby** - Any Ruby application
86
+
87
+ === Build Tool Integration
88
+
89
+ * **Rake Tasks** - Automated diagram generation
90
+ * **CI/CD** - GitHub Actions and other pipelines
91
+ * **Batch Scripts** - Shell integration
92
+
93
+ == Performance Features
94
+
95
+ * **Fast Parsing** - Parslet-based efficient parsing
96
+ * **Optimized Rendering** - Minimal memory footprint
97
+ * **Batch Processing** - Parallel rendering support
98
+ * **Caching** - Optional output caching
99
+
100
+ See link:{% link _guides/performance-optimization.adoc %}[Performance Optimization Guide] for tuning tips.
101
+
102
+ == Unique Advantages
103
+
104
+ === vs. Mermaid.js
105
+
106
+ * **No Node.js** - Pure Ruby, no JavaScript runtime
107
+ * **No Browser** - No Puppeteer/headless Chrome
108
+ * **Faster** - 16x faster for batch processing
109
+ * **Less Memory** - 8x lower memory usage
110
+ * **Native Ruby** - First-class Ruby integration
111
+
112
+ See link:{% link _pages/compatibility.adoc %}[Compatibility Comparison] for details.
113
+
114
+ == Extensibility
115
+
116
+ Sirena is designed for extension:
117
+
118
+ * **Custom Themes** - Create your own themes
119
+ * **Custom Parsers** - Extend syntax support
120
+ * **Custom Renderers** - Add rendering features
121
+ * **Plugins** - Extend functionality
122
+
123
+ See link:{% link _guides/extending-parsers.adoc %}[Extending Parsers Guide] for developer documentation.
124
+
125
+ == Related Documentation
126
+
127
+ * link:{% link _tutorials/index.adoc %}[Tutorials] - Learn by doing
128
+ * link:{% link _guides/index.adoc %}[Guides] - In-depth topics
129
+ * link:{% link _references/index.adoc %}[References] - API documentation