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,10 @@
1
+ # Ignore generated SVG files
2
+ */generated/
3
+
4
+ # Ignore macOS files
5
+ .DS_Store
6
+
7
+ # Ignore editor files
8
+ *.swp
9
+ *.swo
10
+ *~
@@ -0,0 +1,196 @@
1
+ = Sirena Examples
2
+
3
+ This directory contains examples for all 24 supported diagram types in Sirena, a pure Ruby Mermaid diagram renderer.
4
+
5
+ == Quick Start
6
+
7
+ [source,bash]
8
+ ----
9
+ # Render an example
10
+ bundle exec ruby exe/sirena render examples/flowchart/01-basic-flow.mmd -o output.svg
11
+
12
+ # Or use the library directly
13
+ ruby -r ./lib/sirena -e 'puts Sirena.render(File.read("examples/flowchart/01-basic-flow.mmd"))'
14
+ ----
15
+
16
+ == Diagram Types
17
+
18
+ Each diagram type has its own subdirectory with examples and documentation.
19
+
20
+ === Flowcharts & Graphs
21
+
22
+ ==== link:flowchart/README.adoc[Flowchart]
23
+ Process flows, workflows, and decision trees.
24
+
25
+ * link:flowchart/01-basic-flow.mmd[01-basic-flow] - Basic process flow
26
+ * link:flowchart/02-node-shapes.mmd[02-node-shapes] - Node shape varieties
27
+ * link:flowchart/03-edge-types.mmd[03-edge-types] - Connection types
28
+ * link:flowchart/04-subgraphs.mmd[04-subgraphs] - Grouped nodes
29
+ * link:flowchart/05-styling.mmd[05-styling] - Node hierarchy
30
+ * link:flowchart/06-complex-flow.mmd[06-complex-flow] - Multi-path workflow
31
+
32
+ ==== link:git_graph/[Git Graph]
33
+ Version control branching and merging visualization.
34
+
35
+ * link:git_graph/01-linear-history.mmd[01-linear-history] - Linear commit history
36
+
37
+ ==== link:mindmap/[Mindmap]
38
+ Hierarchical concept mapping and brainstorming.
39
+
40
+ * link:mindmap/01-simple-tree.mmd[01-simple-tree] - Basic mind map
41
+
42
+ === UML Diagrams
43
+
44
+ ==== link:sequence/[Sequence Diagram]
45
+ Object interaction and message passing over time.
46
+
47
+ * link:sequence/01-basic-sequence.mmd[01-basic-sequence] - Basic interactions
48
+
49
+ ==== link:class_diagram/[Class Diagram]
50
+ Object-oriented class structure and relationships.
51
+
52
+ * link:class_diagram/01-basic-classes.mmd[01-basic-classes] - Basic classes
53
+
54
+ ==== link:state_diagram/[State Diagram]
55
+ State machine and lifecycle visualization.
56
+
57
+ * link:state_diagram/01-simple-states.mmd[01-simple-states] - Basic states
58
+
59
+ ==== link:er_diagram/[ER Diagram]
60
+ Entity-relationship database modeling.
61
+
62
+ * link:er_diagram/01-basic-entities.mmd[01-basic-entities] - Basic entities
63
+
64
+ === Architecture & System Design
65
+
66
+ ==== link:c4/[C4 Diagram]
67
+ Software architecture at different abstraction levels.
68
+
69
+ * link:c4/01-context-diagram.mmd[01-context-diagram] - System context
70
+
71
+ ==== link:architecture/[Architecture Diagram]
72
+ Service-based architecture visualization.
73
+
74
+ * link:architecture/01-basic-services.mmd[01-basic-services] - Basic services
75
+
76
+ ==== link:block/[Block Diagram]
77
+ Block-based layouts and connections.
78
+
79
+ * link:block/01-basic-blocks.mmd[01-basic-blocks] - Basic blocks
80
+
81
+ === Project Management
82
+
83
+ ==== link:gantt/[Gantt Chart]
84
+ Project timeline and task scheduling.
85
+
86
+ * link:gantt/01-simple-timeline.mmd[01-simple-timeline] - Project timeline
87
+
88
+ ==== link:timeline/[Timeline]
89
+ Historical events and chronological visualization.
90
+
91
+ * link:timeline/01-simple-timeline.mmd[01-simple-timeline] - Event timeline
92
+
93
+ ==== link:kanban/[Kanban Board]
94
+ Task workflow and status tracking.
95
+
96
+ * link:kanban/01-simple-board.mmd[01-simple-board] - Basic board
97
+
98
+ ==== link:requirement/[Requirement Diagram]
99
+ System requirements and traceability.
100
+
101
+ * link:requirement/01-basic-requirements.mmd[01-basic-requirements] - Basic requirements
102
+
103
+ ==== link:user_journey/[User Journey]
104
+ User experience mapping and satisfaction tracking.
105
+
106
+ * link:user_journey/01-simple-journey.mmd[01-simple-journey] - Basic journey
107
+
108
+ === Data Visualization
109
+
110
+ ==== link:pie/[Pie Chart]
111
+ Proportional data visualization.
112
+
113
+ * link:pie/01-simple-chart.mmd[01-simple-chart] - Basic pie chart
114
+
115
+ ==== link:xychart/[XY Chart]
116
+ Line and bar charts with axes.
117
+
118
+ * link:xychart/01-line-chart.mmd[01-line-chart] - Line chart
119
+
120
+ ==== link:quadrant/[Quadrant Chart]
121
+ 2x2 matrix positioning and analysis.
122
+
123
+ * link:quadrant/01-basic-quadrant.mmd[01-basic-quadrant] - Basic quadrant
124
+
125
+ ==== link:radar/[Radar Chart]
126
+ Multi-dimensional data comparison.
127
+
128
+ * link:radar/01-simple-radar.mmd[01-simple-radar] - Skill assessment
129
+
130
+ ==== link:treemap/[Treemap]
131
+ Hierarchical data with size-based visualization.
132
+
133
+ * link:treemap/01-basic-treemap.mmd[01-basic-treemap] - Disk usage
134
+
135
+ ==== link:sankey/[Sankey Diagram]
136
+ Flow quantities between nodes.
137
+
138
+ * link:sankey/01-simple-flow.mmd[01-simple-flow] - Basic flow
139
+
140
+ === Network & Technical
141
+
142
+ ==== link:packet/[Packet Diagram]
143
+ Network protocol packet structure.
144
+
145
+ * link:packet/01-basic-packet.mmd[01-basic-packet] - TCP header
146
+
147
+ === Other
148
+
149
+ ==== link:info/[Info Display]
150
+ Informational messages and notices.
151
+
152
+ * link:info/01-basic-info.mmd[01-basic-info] - Basic info
153
+ * link:info/02-showinfo.mmd[02-showinfo] - Show info display
154
+
155
+ ==== link:error/[Error Display]
156
+ Error message visualization.
157
+
158
+ * link:error/01-basic-error.mmd[01-basic-error] - Basic error
159
+ * link:error/02-error-display.mmd[02-error-display] - Detailed error
160
+
161
+ == Example File Format
162
+
163
+ Each example consists of:
164
+
165
+ * `.mmd` file - Mermaid source code
166
+ * `.svg` file - Rendered SVG output (generated)
167
+ * `README.adoc` - Documentation (in subdirectory)
168
+
169
+ == Contributing Examples
170
+
171
+ To add a new example:
172
+
173
+ 1. Create `.mmd` file in appropriate subdirectory
174
+ 2. Generate SVG: `bundle exec ruby exe/sirena render FILE.mmd -o FILE.svg`
175
+ 3. Update subdirectory README.adoc
176
+ 4. Ensure example follows naming convention: `{number}-{name}.mmd`
177
+
178
+ == Testing Examples
179
+
180
+ Run all examples through the renderer:
181
+
182
+ [source,bash]
183
+ ----
184
+ for dir in examples/*/; do
185
+ for mmd in $dir*.mmd; do
186
+ svg="${mmd%.mmd}.svg"
187
+ bundle exec ruby exe/sirena render "$mmd" -o "$svg" && echo "✓ $mmd" || echo "✗ $mmd"
188
+ done
189
+ done
190
+ ----
191
+
192
+ == See Also
193
+
194
+ * link:../README.adoc[Main Sirena Documentation]
195
+ * link:../docs/[Additional Documentation]
196
+ * https://mermaid.js.org/[Mermaid Official Documentation]
@@ -0,0 +1,64 @@
1
+ # Sirena Examples
2
+
3
+ This directory contains example diagrams for all supported diagram types.
4
+
5
+ ## Structure
6
+
7
+ Each diagram type has its own directory with:
8
+ - `*.mmd` - Mermaid source files
9
+ - `*.yml` - Metadata for each example
10
+ - `generated/` - Auto-generated SVG files (git-ignored)
11
+
12
+ ## Usage
13
+
14
+ ```bash
15
+ # Generate all SVGs
16
+ rake examples:generate
17
+
18
+ # Create a new example
19
+ rake examples:create[flowchart,my-example]
20
+
21
+ # Validate all examples
22
+ rake examples:validate
23
+
24
+ # List all examples
25
+ rake examples:list
26
+
27
+ # Build everything (generate + docs + copy)
28
+ rake examples:build
29
+ ```
30
+
31
+ ## Adding Examples
32
+
33
+ 1. Create example files:
34
+ ```bash
35
+ rake examples:create[type,name]
36
+ ```
37
+
38
+ 2. Edit the `.mmd` and `.yml` files
39
+
40
+ 3. Generate SVG:
41
+ ```bash
42
+ rake examples:generate
43
+ ```
44
+
45
+ 4. Build documentation:
46
+ ```bash
47
+ rake examples:build
48
+ ```
49
+
50
+ ## Example Metadata
51
+
52
+ Each `.yml` file should contain:
53
+
54
+ ```yaml
55
+ title: "Example Title"
56
+ description: "What this example demonstrates"
57
+ complexity: basic # basic, intermediate, advanced
58
+ keywords:
59
+ - keyword1
60
+ - keyword2
61
+ use_cases:
62
+ - "Use case description"
63
+ theme: default # default, dark, light, high-contrast
64
+ ```
@@ -0,0 +1,9 @@
1
+ architecture-beta
2
+ service frontend(browser)[Frontend]
3
+ service backend(server)[Backend API]
4
+ service db(database)[Database]
5
+ service cache(disk)[Cache]
6
+
7
+ frontend L--R backend
8
+ backend L--R db
9
+ backend T--B cache
@@ -0,0 +1,37 @@
1
+ <svg
2
+ width="680.0"
3
+ height="160.0"
4
+ viewBox="0 0 680 160"
5
+ version="1.2"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <g id="edge-frontend-backend">
9
+ <path fill="none" stroke="#000000" stroke-width="2.0" d="M 160 80 L 200 80" marker-end="url(#arrowhead)"/>
10
+ </g>
11
+ <g id="edge-backend-db">
12
+ <path fill="none" stroke="#000000" stroke-width="2.0" d="M 320 80 L 360 80" marker-end="url(#arrowhead)"/>
13
+ </g>
14
+ <g id="edge-backend-cache">
15
+ <path fill="none" stroke="#000000" stroke-width="2.0" d="M 320 80 L 520 80" marker-end="url(#arrowhead)"/>
16
+ </g>
17
+ <g id="service-frontend">
18
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="40.0" y="40.0" width="120.0" height="80.0" rx="5.0" ry="5.0"/>
19
+ <text fill="#666" x="100.0" y="66.0" text-anchor="middle" font-size="24" dominant-baseline="middle">⊞</text>
20
+ <text fill="#000000" x="100.0" y="93.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12" dominant-baseline="middle">Frontend</text>
21
+ </g>
22
+ <g id="service-backend">
23
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="200.0" y="40.0" width="120.0" height="80.0" rx="5.0" ry="5.0"/>
24
+ <text fill="#666" x="260.0" y="66.0" text-anchor="middle" font-size="24" dominant-baseline="middle">▦</text>
25
+ <text fill="#000000" x="260.0" y="93.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12" dominant-baseline="middle">Backend API</text>
26
+ </g>
27
+ <g id="service-db">
28
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="360.0" y="40.0" width="120.0" height="80.0" rx="5.0" ry="5.0"/>
29
+ <text fill="#666" x="420.0" y="66.0" text-anchor="middle" font-size="24" dominant-baseline="middle">⬢</text>
30
+ <text fill="#000000" x="420.0" y="93.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12" dominant-baseline="middle">Database</text>
31
+ </g>
32
+ <g id="service-cache">
33
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="520.0" y="40.0" width="120.0" height="80.0" rx="5.0" ry="5.0"/>
34
+ <text fill="#666" x="580.0" y="66.0" text-anchor="middle" font-size="24" dominant-baseline="middle">◎</text>
35
+ <text fill="#000000" x="580.0" y="93.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12" dominant-baseline="middle">Cache</text>
36
+ </g>
37
+ </svg>
@@ -0,0 +1,16 @@
1
+ architecture-beta
2
+ group api(cloud)[API Services]
3
+
4
+ service webapp(server)[Web Server] in api
5
+ service auth(server)[Auth Service] in api
6
+ service data(database)[Data API] in api
7
+
8
+ group storage(disk)[Storage Layer]
9
+
10
+ service db(database)[Database] in storage
11
+ service cache(server)[Cache] in storage
12
+
13
+ webapp:R --> L:auth
14
+ webapp:B --> T:data
15
+ data:B --> T:db
16
+ auth:B --> T:cache
@@ -0,0 +1,55 @@
1
+ <svg
2
+ width="554.0"
3
+ height="350.0"
4
+ viewBox="0 0 554.0 350"
5
+ version="1.2"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <g id="group-api">
9
+ <rect fill="#f0f0f0" fill-opacity="0.3" stroke="#999" stroke-width="2" x="10.0" y="10.0" width="504.0" height="300.0" rx="8.0" ry="8.0" stroke-dasharray="5,5" fill-opacity="0.3"/>
10
+ <text fill="#333" x="20.0" y="30.0" font-size="14" font-weight="bold">API Services</text>
11
+ <text fill="#666" x="484.0" y="35.0" font-size="20">☁</text>
12
+ </g>
13
+ <g id="group-storage">
14
+ <rect fill="#f0f0f0" fill-opacity="0.3" stroke="#999" stroke-width="2" x="10.0" y="10.0" width="340.0" height="140.0" rx="8.0" ry="8.0" stroke-dasharray="5,5" fill-opacity="0.3"/>
15
+ <text fill="#333" x="20.0" y="30.0" font-size="14" font-weight="bold">Storage Layer</text>
16
+ <text fill="#666" x="320.0" y="35.0" font-size="20">◎</text>
17
+ </g>
18
+ <g id="edge-webapp-auth">
19
+ <path fill="none" stroke="#000000" stroke-width="2.0" d="M 160 80 L 200 240" marker-end="url(#arrowhead)"/>
20
+ </g>
21
+ <g id="edge-webapp-data">
22
+ <path fill="none" stroke="#000000" stroke-width="2.0" d="M 100 120 L 424.0 200" marker-end="url(#arrowhead)"/>
23
+ </g>
24
+ <g id="edge-data-db">
25
+ <path fill="none" stroke="#000000" stroke-width="2.0" d="M 424.0 280 L 100 40" marker-end="url(#arrowhead)"/>
26
+ </g>
27
+ <g id="edge-auth-cache">
28
+ <path fill="none" stroke="#000000" stroke-width="2.0" d="M 262.0 280 L 260 40" marker-end="url(#arrowhead)"/>
29
+ </g>
30
+ <g id="service-webapp">
31
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="40.0" y="40.0" width="120.0" height="80.0" rx="5.0" ry="5.0"/>
32
+ <text fill="#666" x="100.0" y="66.0" text-anchor="middle" font-size="24" dominant-baseline="middle">▦</text>
33
+ <text fill="#000000" x="100.0" y="93.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12" dominant-baseline="middle">Web Server</text>
34
+ </g>
35
+ <g id="service-auth">
36
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="200.0" y="200.0" width="124.0" height="80.0" rx="5.0" ry="5.0"/>
37
+ <text fill="#666" x="262.0" y="226.0" text-anchor="middle" font-size="24" dominant-baseline="middle">▦</text>
38
+ <text fill="#000000" x="262.0" y="253.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12" dominant-baseline="middle">Auth Service</text>
39
+ </g>
40
+ <g id="service-data">
41
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="364.0" y="200.0" width="120.0" height="80.0" rx="5.0" ry="5.0"/>
42
+ <text fill="#666" x="424.0" y="226.0" text-anchor="middle" font-size="24" dominant-baseline="middle">⬢</text>
43
+ <text fill="#000000" x="424.0" y="253.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12" dominant-baseline="middle">Data API</text>
44
+ </g>
45
+ <g id="service-db">
46
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="40.0" y="40.0" width="120.0" height="80.0" rx="5.0" ry="5.0"/>
47
+ <text fill="#666" x="100.0" y="66.0" text-anchor="middle" font-size="24" dominant-baseline="middle">⬢</text>
48
+ <text fill="#000000" x="100.0" y="93.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12" dominant-baseline="middle">Database</text>
49
+ </g>
50
+ <g id="service-cache">
51
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="200.0" y="40.0" width="120.0" height="80.0" rx="5.0" ry="5.0"/>
52
+ <text fill="#666" x="260.0" y="66.0" text-anchor="middle" font-size="24" dominant-baseline="middle">▦</text>
53
+ <text fill="#000000" x="260.0" y="93.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12" dominant-baseline="middle">Cache</text>
54
+ </g>
55
+ </svg>
@@ -0,0 +1,79 @@
1
+ = Architecture Diagram Examples
2
+
3
+ == Purpose
4
+
5
+ Architecture diagrams visualize system architecture, showing services, components, and their relationships in distributed systems.
6
+
7
+ == When to Use
8
+
9
+ * Microservices architecture documentation
10
+ * Service mesh visualization
11
+ * Cloud infrastructure diagrams
12
+ * System component relationships
13
+ * Deployment architecture
14
+
15
+ == Syntax Overview
16
+
17
+ [source,mermaid]
18
+ ----
19
+ architecture-beta
20
+ service api(server)[API]
21
+ service db(database)[Database]
22
+
23
+ api:R --> L:db
24
+ ----
25
+
26
+ == Examples
27
+
28
+ === 01: Basic Services
29
+
30
+ Demonstrates basic architecture with services and connections.
31
+
32
+ **File**: link:01-basic-services.mmd[01-basic-services.mmd]
33
+
34
+ [source,mermaid]
35
+ ----
36
+ include::01-basic-services.mmd[]
37
+ ----
38
+
39
+ image::01-basic-services.svg[]
40
+
41
+ === 02: Service Groups
42
+
43
+ Showcases grouped services and complex relationships.
44
+
45
+ **File**: link:02-service-groups.mmd[02-service-groups.mmd]
46
+
47
+ [source,mermaid]
48
+ ----
49
+ include::02-service-groups.mmd[]
50
+ ----
51
+
52
+ image::02-service-groups.svg[]
53
+
54
+ == Features Demonstrated
55
+
56
+ [%header,cols="1,1"]
57
+ |===
58
+ | Feature | Example
59
+
60
+ | Service definitions
61
+ | 01, 02
62
+
63
+ | Service connections
64
+ | 01, 02
65
+
66
+ | Service grouping
67
+ | 02
68
+
69
+ | Icon types
70
+ | 01, 02
71
+
72
+ | Directional connections
73
+ | 01, 02
74
+ |===
75
+
76
+ == Additional Resources
77
+
78
+ * link:../../README.adoc[Main Documentation]
79
+ * https://mermaid.js.org/syntax/architecture.html[Mermaid Architecture Documentation]
@@ -0,0 +1,13 @@
1
+ block-beta
2
+ columns 3
3
+ Frontend["Frontend App"]
4
+ Backend["Backend API"]
5
+ Database["Database"]
6
+ space
7
+ Cache["Redis Cache"]
8
+ Queue["Message Queue"]
9
+
10
+ Frontend --> Backend
11
+ Backend --> Database
12
+ Backend --> Cache
13
+ Backend --> Queue
@@ -0,0 +1,44 @@
1
+ <svg
2
+ width="494.0"
3
+ height="180.0"
4
+ viewBox="0 0 494.0 180"
5
+ version="1.2"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <g id="connection-Frontend-Backend">
9
+ <path fill="none" stroke="#000000" stroke-width="2.0" d="M 89.0 80 L 243.5 20"/>
10
+ <polygon fill="#000000" points="243.5,20 237.23718018105308,27.795966130981185 233.61708537405374,18.47422200295791"/>
11
+ </g>
12
+ <g id="connection-Backend-Database">
13
+ <path fill="none" stroke="#000000" stroke-width="2.0" d="M 243.5 80 L 384.0 20"/>
14
+ <polygon fill="#000000" points="384.0,20 377.99924907456574,27.99943675085313 374.0719090950772,18.802915632217506"/>
15
+ </g>
16
+ <g id="connection-Backend-Cache">
17
+ <path fill="none" stroke="#000000" stroke-width="2.0" d="M 243.5 80 L 243.5 100"/>
18
+ <polygon fill="#000000" points="243.5,100 238.5,91.33974596215562 248.5,91.33974596215562"/>
19
+ </g>
20
+ <g id="connection-Backend-Queue">
21
+ <path fill="none" stroke="#000000" stroke-width="2.0" d="M 243.5 80 L 401.5 100"/>
22
+ <polygon fill="#000000" points="401.5,100 392.2804041676987,103.87286104695387 393.5362060318601,93.95202632007889"/>
23
+ </g>
24
+ <g id="block-Frontend">
25
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="20.0" y="20.0" width="138.0" height="60.0"/>
26
+ <text fill="#000000" x="89.0" y="50.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">"Frontend App"</text>
27
+ </g>
28
+ <g id="block-Backend">
29
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="178.0" y="20.0" width="131.0" height="60.0"/>
30
+ <text fill="#000000" x="243.5" y="50.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">"Backend API"</text>
31
+ </g>
32
+ <g id="block-Database">
33
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="329.0" y="20.0" width="110.0" height="60.0"/>
34
+ <text fill="#000000" x="384.0" y="50.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">"Database"</text>
35
+ </g>
36
+ <g id="block-Cache">
37
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="178.0" y="100.0" width="131.0" height="60.0"/>
38
+ <text fill="#000000" x="243.5" y="130.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">"Redis Cache"</text>
39
+ </g>
40
+ <g id="block-Queue">
41
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="329.0" y="100.0" width="145.0" height="60.0"/>
42
+ <text fill="#000000" x="401.5" y="130.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">"Message Queue"</text>
43
+ </g>
44
+ </svg>
@@ -0,0 +1,13 @@
1
+ block-beta
2
+ columns 3
3
+ db(("Database"))
4
+ blockArrowId<["Arrow"]>(down)
5
+ blockArrowId2<["Arrow"]>(up)
6
+ A["Rectangle"]
7
+ B["Wide Block"]:2
8
+ C["Another"]
9
+ block:compound
10
+ D
11
+ E
12
+ end
13
+ F
@@ -0,0 +1,47 @@
1
+ <svg
2
+ width="393.0"
3
+ height="400.0"
4
+ viewBox="0 0 393.0 400"
5
+ version="1.2"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <g id="block-db">
9
+ <circle fill="#ffffff" stroke="#000000" stroke-width="2.0" cx="70.0" cy="50.0" r="30.0"/>
10
+ <text fill="#000000" x="70.0" y="50.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">Database</text>
11
+ </g>
12
+ <g id="block-blockArrowId">
13
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="140.0" y="20.0" width="50.0" height="30.0"/>
14
+ <text fill="#000000" x="165.0" y="35.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">"Arrow"</text>
15
+ </g>
16
+ <g id="block-blockArrowId2">
17
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="210.0" y="20.0" width="50.0" height="30.0"/>
18
+ <text fill="#000000" x="235.0" y="35.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">"Arrow"</text>
19
+ </g>
20
+ <g id="block-A">
21
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="20.0" y="100.0" width="103.0" height="60.0"/>
22
+ <text fill="#000000" x="71.5" y="130.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">Rectangle</text>
23
+ </g>
24
+ <g id="block-B">
25
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="143.0" y="100.0" width="220.0" height="60.0"/>
26
+ <text fill="#000000" x="253.0" y="130.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">Wide Block</text>
27
+ </g>
28
+ <g id="block-C">
29
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="20.0" y="180.0" width="100.0" height="60.0"/>
30
+ <text fill="#000000" x="70.0" y="210.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">Another</text>
31
+ </g>
32
+ <g id="block-compound">
33
+ <rect fill="none" stroke="#666" stroke-width="2" x="143.0" y="180.0" width="100.0" height="200.0" stroke-dasharray="5,5"/>
34
+ <g id="block-D">
35
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="163.0" y="200.0" width="100.0" height="60.0"/>
36
+ <text fill="#000000" x="213.0" y="230.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">D</text>
37
+ </g>
38
+ <g id="block-E">
39
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="163.0" y="280.0" width="100.0" height="60.0"/>
40
+ <text fill="#000000" x="213.0" y="310.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">E</text>
41
+ </g>
42
+ </g>
43
+ <g id="block-F">
44
+ <rect fill="#ffffff" stroke="#000000" stroke-width="2.0" x="273.0" y="180.0" width="100.0" height="60.0"/>
45
+ <text fill="#000000" x="323.0" y="210.0" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="14.0" dominant-baseline="middle">F</text>
46
+ </g>
47
+ </svg>