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,603 @@
1
+ = Mindmap diagrams
2
+ :toc:
3
+ :toclevels: 3
4
+
5
+ == Overview
6
+
7
+ Mindmap diagrams in Sirena visualize hierarchical information and ideas in a
8
+ radial tree structure. They help organize thoughts, concepts, and relationships
9
+ in a visual format that mirrors how we naturally think and make connections.
10
+
11
+ Mindmaps are useful for:
12
+
13
+ * Brainstorming and idea generation
14
+ * Organizing project requirements
15
+ * Creating study guides and learning materials
16
+ * Documenting system architectures
17
+ * Planning and strategic thinking
18
+ * Note-taking and knowledge mapping
19
+
20
+ == Syntax specification
21
+
22
+ === Diagram declaration
23
+
24
+ Mindmaps are declared using the `mindmap` keyword:
25
+
26
+ [source,mermaid]
27
+ ----
28
+ mindmap
29
+ <root-node>
30
+ <child-nodes>
31
+ ----
32
+
33
+ === Nodes
34
+
35
+ ==== Root node
36
+
37
+ The root node is the central concept of the mindmap and must be defined first:
38
+
39
+ [source,mermaid]
40
+ ----
41
+ mindmap
42
+ Central Idea
43
+ ----
44
+
45
+ ==== Child nodes
46
+
47
+ Child nodes are defined through indentation (2 or 4 spaces per level):
48
+
49
+ [source,mermaid]
50
+ ----
51
+ mindmap
52
+ Root
53
+ Child 1
54
+ Child 2
55
+ Grandchild 2.1
56
+ Grandchild 2.2
57
+ Child 3
58
+ ----
59
+
60
+ === Node shapes
61
+
62
+ Nodes can have different visual shapes using special markers:
63
+
64
+ [cols="2,2,3"]
65
+ |===
66
+ |Shape |Syntax |Description
67
+
68
+ |Default (Rounded)
69
+ |`Node text`
70
+ |Plain text creates a rounded rectangle
71
+
72
+ |Circle
73
+ |`((Node text))`
74
+ |Double parentheses create a circle
75
+
76
+ |Cloud
77
+ |`)Node text(`
78
+ |Parentheses reversed create a cloud shape
79
+
80
+ |Bang
81
+ |`))Node text((`
82
+ |Double reversed parentheses create an emphasized cloud
83
+
84
+ |Hexagon
85
+ |`{{Node text}}`
86
+ |Double curly braces create a hexagon
87
+
88
+ |Square
89
+ |`[Node text]`
90
+ |Square brackets create a rectangle
91
+ |===
92
+
93
+ ==== Shape examples
94
+
95
+ .Using different node shapes
96
+ [example]
97
+ ====
98
+ [source,mermaid]
99
+ ----
100
+ mindmap
101
+ root((Central Idea))
102
+ Branch 1
103
+ )Cloud Branch(
104
+ {{Hexagon Branch}}
105
+ [Square Branch]
106
+ ))Important Branch((
107
+ ----
108
+ ====
109
+
110
+ === Icons and classes
111
+
112
+ ==== Icons
113
+
114
+ Add icons to nodes using the `::icon()` syntax:
115
+
116
+ [source,mermaid]
117
+ ----
118
+ mindmap
119
+ root[Project]
120
+ ::icon(fa fa-folder)
121
+ Documentation
122
+ ::icon(fa fa-book)
123
+ ----
124
+
125
+ Where:
126
+
127
+ `::icon(name)`:: Icon identifier placed on the line after the node
128
+
129
+ ==== Classes
130
+
131
+ Apply CSS classes to nodes using the `:::` syntax:
132
+
133
+ [source,mermaid]
134
+ ----
135
+ mindmap
136
+ root[Styled Node]
137
+ :::highlight important
138
+ ----
139
+
140
+ Where:
141
+
142
+ `:::class1 class2`:: Space-separated class names placed after the node
143
+
144
+ ==== Combined icons and classes
145
+
146
+ .Using both icons and classes
147
+ [example]
148
+ ====
149
+ [source,mermaid]
150
+ ----
151
+ mindmap
152
+ root[Main Topic]
153
+ :::primary-node
154
+ ::icon(star)
155
+ Subtopic
156
+ :::secondary-node
157
+ ::icon(check)
158
+ ----
159
+ ====
160
+
161
+ == Examples
162
+
163
+ === Simple mindmap
164
+
165
+ .Basic three-level mindmap
166
+ [example]
167
+ ====
168
+ [source,mermaid]
169
+ ----
170
+ mindmap
171
+ Central Idea
172
+ Branch 1
173
+ Detail 1.1
174
+ Detail 1.2
175
+ Branch 2
176
+ Detail 2.1
177
+ Branch 3
178
+ ----
179
+
180
+ This creates a simple mindmap with:
181
+
182
+ * One root node (Central Idea)
183
+ * Three main branches
184
+ * Various details under branches
185
+ ====
186
+
187
+ === Mindmap with shapes
188
+
189
+ .Using different node shapes for visual hierarchy
190
+ [example]
191
+ ====
192
+ [source,mermaid]
193
+ ----
194
+ mindmap
195
+ root((Project Goals))
196
+ Features
197
+ )Must Have(
198
+ Login
199
+ Dashboard
200
+ )Nice to Have(
201
+ Dark Mode
202
+ Notifications
203
+ Timeline
204
+ {{Q1}}
205
+ Planning
206
+ Design
207
+ {{Q2}}
208
+ Development
209
+ {{Q3}}
210
+ Testing
211
+ {{Q4}}
212
+ Launch
213
+ Resources
214
+ [Team]
215
+ [Budget]
216
+ [Tools]
217
+ ----
218
+
219
+ This demonstrates:
220
+
221
+ * Circle root for main concept
222
+ * Cloud shapes for priority categories
223
+ * Hexagons for time periods
224
+ * Squares for resources
225
+ * Plain text for details
226
+ ====
227
+
228
+ === Research topics mindmap
229
+
230
+ .Organizing research with icons
231
+ [example]
232
+ ====
233
+ [source,mermaid]
234
+ ----
235
+ mindmap
236
+ root((Research Topic))
237
+ Literature Review
238
+ ::icon(fa fa-book)
239
+ Historical Context
240
+ Current Studies
241
+ Key Authors
242
+ Methodology
243
+ ::icon(fa fa-flask)
244
+ Qualitative Methods
245
+ Quantitative Methods
246
+ Mixed Methods
247
+ Data Collection
248
+ ::icon(fa fa-database)
249
+ Surveys
250
+ Interviews
251
+ Observations
252
+ Analysis
253
+ ::icon(fa fa-chart-bar)
254
+ Statistical Tools
255
+ Coding Framework
256
+ ----
257
+
258
+ This shows:
259
+
260
+ * Icons indicating the type of content
261
+ * Clear hierarchical organization
262
+ * Subject-specific categorization
263
+ ====
264
+
265
+ === Software architecture mindmap
266
+
267
+ .Documenting system architecture
268
+ [example]
269
+ ====
270
+ [source,mermaid]
271
+ ----
272
+ mindmap
273
+ root((Application))
274
+ Frontend
275
+ {{React}}
276
+ Components
277
+ State Management
278
+ Routing
279
+ {{Styling}}
280
+ CSS Modules
281
+ Tailwind
282
+ Backend
283
+ {{Node.js}}
284
+ Express
285
+ APIs
286
+ Middleware
287
+ {{Database}}
288
+ PostgreSQL
289
+ Redis Cache
290
+ Infrastructure
291
+ {{Cloud}}
292
+ AWS EC2
293
+ S3 Storage
294
+ {{CI/CD}}
295
+ GitHub Actions
296
+ Docker
297
+ ----
298
+
299
+ This illustrates:
300
+
301
+ * Technology stack organization
302
+ * Component relationships
303
+ * Infrastructure layers
304
+ ====
305
+
306
+ === Learning roadmap
307
+
308
+ .Creating a study plan
309
+ [example]
310
+ ====
311
+ [source,mermaid]
312
+ ----
313
+ mindmap
314
+ root((Web Development))
315
+ Fundamentals
316
+ HTML
317
+ Semantic Markup
318
+ Forms
319
+ Accessibility
320
+ CSS
321
+ Layouts
322
+ Responsive Design
323
+ Animations
324
+ JavaScript
325
+ ES6+ Features
326
+ DOM Manipulation
327
+ Async Programming
328
+ Frameworks
329
+ React
330
+ Vue
331
+ Angular
332
+ Backend
333
+ Node.js
334
+ Python
335
+ Databases
336
+ DevOps
337
+ Git
338
+ CI/CD
339
+ Cloud Platforms
340
+ ----
341
+
342
+ This shows:
343
+
344
+ * Progressive learning path
345
+ * Skill categorization
346
+ * Topic dependencies
347
+ ====
348
+
349
+ === Project planning mindmap
350
+
351
+ .Planning a project with mixed notation
352
+ [example]
353
+ ====
354
+ [source,mermaid]
355
+ ----
356
+ mindmap
357
+ root((Website Redesign))
358
+ ))Phase 1: Discovery((
359
+ User Research
360
+ Surveys
361
+ Interviews
362
+ Competitor Analysis
363
+ Requirements
364
+ ))Phase 2: Design((
365
+ Wireframes
366
+ Mockups
367
+ Design System
368
+ Prototype
369
+ ))Phase 3: Development((
370
+ Frontend Build
371
+ Backend Integration
372
+ Testing
373
+ QA
374
+ ))Phase 4: Launch((
375
+ Deployment
376
+ Monitoring
377
+ User Training
378
+ ----
379
+
380
+ This demonstrates:
381
+
382
+ * Bang shapes for major phases
383
+ * Sequential workflow visualization
384
+ * Deliverables per phase
385
+ ====
386
+
387
+ == Features
388
+
389
+ === Indentation-based hierarchy
390
+
391
+ Hierarchy is determined by indentation level:
392
+
393
+ [source,mermaid]
394
+ ----
395
+ mindmap
396
+ root
397
+ level 1
398
+ level 2
399
+ level 3
400
+ level 4
401
+ ----
402
+
403
+ Use consistent indentation (2 or 4 spaces per level).
404
+
405
+ === Flexible tree depth
406
+
407
+ Mindmaps support unlimited nesting levels:
408
+
409
+ [source,mermaid]
410
+ ----
411
+ mindmap
412
+ root
413
+ branch
414
+ sub-branch
415
+ detail
416
+ sub-detail
417
+ deep-detail
418
+ ----
419
+
420
+ === Multiple root branches
421
+
422
+ The root can have many direct children:
423
+
424
+ [source,mermaid]
425
+ ----
426
+ mindmap
427
+ root
428
+ branch-1
429
+ branch-2
430
+ branch-3
431
+ branch-4
432
+ branch-5
433
+ ----
434
+
435
+ === Text with special characters
436
+
437
+ Node text can include various characters:
438
+
439
+ [source,mermaid]
440
+ ----
441
+ mindmap
442
+ root
443
+ Node with spaces
444
+ Node-with-hyphens
445
+ Node_with_underscores
446
+ Node (with parentheses)
447
+ ----
448
+
449
+ Note: Use appropriate shape markers to avoid syntax conflicts.
450
+
451
+ == Limitations
452
+
453
+ === Currently not supported
454
+
455
+ The following Mermaid mindmap features are not yet supported in Sirena:
456
+
457
+ * Comments using `%%`
458
+ * HTML line breaks `<br/>` in node text
459
+ * Markdown formatting in node content
460
+ * Custom themes beyond shape-based styling
461
+ * Click events and links
462
+
463
+ === Known issues
464
+
465
+ * Very deep hierarchies may require layout adjustment
466
+ * Long node text may overlap in dense mindmaps
467
+ * Icon rendering depends on icon library availability
468
+
469
+ == Best practices
470
+
471
+ === Keep the root concise
472
+
473
+ Use a clear, focused root concept:
474
+
475
+ [source,mermaid]
476
+ ----
477
+ %% Good
478
+ mindmap
479
+ root((Product Strategy))
480
+
481
+ %% Too broad
482
+ mindmap
483
+ root((Everything About Our Company And All Its Products))
484
+ ----
485
+
486
+ === Use shapes meaningfully
487
+
488
+ Apply shapes consistently to indicate node types:
489
+
490
+ [source,mermaid]
491
+ ----
492
+ mindmap
493
+ root((Main Goal))
494
+ {{Category 1}} %% Hexagons for categories
495
+ [Action Item] %% Squares for actions
496
+ [Action Item]
497
+ {{Category 2}}
498
+ [Action Item]
499
+ [Action Item]
500
+ ----
501
+
502
+ === Limit depth
503
+
504
+ Keep hierarchies manageable (typically 3-4 levels):
505
+
506
+ [source,mermaid]
507
+ ----
508
+ %% Good - Clear and scannable
509
+ mindmap
510
+ root
511
+ branch
512
+ detail
513
+ detail
514
+
515
+ %% Too deep - Hard to follow
516
+ mindmap
517
+ root
518
+ branch
519
+ sub-branch
520
+ detail
521
+ sub-detail
522
+ deep-detail
523
+ very-deep-detail
524
+ ----
525
+
526
+ === Group related concepts
527
+
528
+ Organize related ideas under common branches:
529
+
530
+ [source,mermaid]
531
+ ----
532
+ mindmap
533
+ root((Project))
534
+ Technical Requirements
535
+ Performance
536
+ Security
537
+ Scalability
538
+ Business Requirements
539
+ Budget
540
+ Timeline
541
+ ROI
542
+ ----
543
+
544
+ === Use consistent indentation
545
+
546
+ Choose 2 or 4 spaces and use it throughout:
547
+
548
+ [source,mermaid]
549
+ ----
550
+ %% Good - Consistent 2-space
551
+ mindmap
552
+ root
553
+ level-1
554
+ level-2
555
+ level-3
556
+
557
+ %% Inconsistent - Avoid
558
+ mindmap
559
+ root
560
+ level-1
561
+ level-2
562
+ level-3
563
+ ----
564
+
565
+ === Add visual hierarchy
566
+
567
+ Use different shapes to create visual levels:
568
+
569
+ [source,mermaid]
570
+ ----
571
+ mindmap
572
+ root((Theme))
573
+ {{Main Branch}}
574
+ )Important Concept(
575
+ Regular Detail
576
+ Regular Detail
577
+ ----
578
+
579
+ === Keep node text concise
580
+
581
+ Use brief, descriptive labels:
582
+
583
+ [source,mermaid]
584
+ ----
585
+ %% Good
586
+ mindmap
587
+ root
588
+ Clear Label
589
+ Brief Description
590
+ Concise Point
591
+
592
+ %% Too verbose
593
+ mindmap
594
+ root
595
+ This is a very long description that explains everything in detail
596
+ Another lengthy explanation that should probably be shortened
597
+ ----
598
+
599
+ == Related documentation
600
+
601
+ * <<index.adoc#,Diagram types overview>>
602
+ * <<flowchart.adoc#,Flowchart diagrams>>
603
+ * link:https://mermaid.js.org/syntax/mindmap.html[Official Mermaid mindmap documentation]