@legionworks/facet 1.9.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 (327) hide show
  1. package/LICENSE-APACHE +202 -0
  2. package/LICENSE-MIT +23 -0
  3. package/README.md +158 -0
  4. package/dist/gallery/chunk-4g8rem85.css +656 -0
  5. package/dist/gallery/chunk-c6s9k9ty.js +5970 -0
  6. package/dist/gallery/frame/artifact.css +8424 -0
  7. package/dist/gallery/frame/chunks/abnfDiagram-N423BO3Z-jj74szbm.js +155 -0
  8. package/dist/gallery/frame/chunks/architecture-TIHT7OUA-cvdjn7dt.js +10 -0
  9. package/dist/gallery/frame/chunks/architectureDiagram-T3A2C74G-n4z77eg6.js +8675 -0
  10. package/dist/gallery/frame/chunks/blockDiagram-VBNYF7ZC-7xsqzrd1.js +3529 -0
  11. package/dist/gallery/frame/chunks/c4Diagram-5PPSVZJV-z2zjs7wx.js +2413 -0
  12. package/dist/gallery/frame/chunks/classDiagram-JCYQIIEL-ve8rngqp.js +47 -0
  13. package/dist/gallery/frame/chunks/classDiagram-v2-OCEON4UE-8cfaxb8z.js +47 -0
  14. package/dist/gallery/frame/chunks/cose-bilkent-JH36ORCC-sn92qexx.js +4822 -0
  15. package/dist/gallery/frame/chunks/cynefin-VYW2F7L2-tqjv913d.js +10 -0
  16. package/dist/gallery/frame/chunks/cynefinDiagram-MW4NZA55-c1c0dj12.js +500 -0
  17. package/dist/gallery/frame/chunks/dagre-VZM6K2ZE-7tyg4yt2.js +476 -0
  18. package/dist/gallery/frame/chunks/diagram-7IWD3JNH-y4eng9sc.js +526 -0
  19. package/dist/gallery/frame/chunks/diagram-B4RE2ZJO-rn3p7j5h.js +673 -0
  20. package/dist/gallery/frame/chunks/diagram-LBJQPF4R-w4a2cm9q.js +255 -0
  21. package/dist/gallery/frame/chunks/diagram-Q27KOJAE-aqc2v7wy.js +575 -0
  22. package/dist/gallery/frame/chunks/diagram-UB23O5K3-xncy8nyd.js +355 -0
  23. package/dist/gallery/frame/chunks/ebnfDiagram-BXEA7PRR-acwgxz16.js +175 -0
  24. package/dist/gallery/frame/chunks/erDiagram-JOGREHBK-mzp5nswt.js +1332 -0
  25. package/dist/gallery/frame/chunks/eventmodeling-45OFAUF4-sg07qr0c.js +10 -0
  26. package/dist/gallery/frame/chunks/flowDiagram-UKHOOZJN-2e5ygs44.js +29 -0
  27. package/dist/gallery/frame/chunks/ganttDiagram-PKOTCBZU-p2hhh7hr.js +2620 -0
  28. package/dist/gallery/frame/chunks/gitGraph-TEB2WS4Q-j6kw0naa.js +10 -0
  29. package/dist/gallery/frame/chunks/gitGraphDiagram-DS77QQ5N-4z9z8wjm.js +1347 -0
  30. package/dist/gallery/frame/chunks/info-DKCQHKI2-mpt80jd3.js +10 -0
  31. package/dist/gallery/frame/chunks/infoDiagram-6WML65LV-5rqm3mgg.js +65 -0
  32. package/dist/gallery/frame/chunks/ishikawaDiagram-WSZJBQD7-b51z96jy.js +975 -0
  33. package/dist/gallery/frame/chunks/journeyDiagram-NVQOT4AX-9jbfp0pk.js +1272 -0
  34. package/dist/gallery/frame/chunks/kanban-definition-27J2QSJJ-4x0vx4se.js +1116 -0
  35. package/dist/gallery/frame/chunks/katex-xfgk95tv.js +14034 -0
  36. package/dist/gallery/frame/chunks/markdown-1s5vwkf2.js +9 -0
  37. package/dist/gallery/frame/chunks/markdown-2h6bwsms.js +3239 -0
  38. package/dist/gallery/frame/chunks/markdown-2x113yh8.js +107 -0
  39. package/dist/gallery/frame/chunks/markdown-30b7rwmp.js +1943 -0
  40. package/dist/gallery/frame/chunks/markdown-356bfj4g.js +2031 -0
  41. package/dist/gallery/frame/chunks/markdown-44n9ea69.js +2406 -0
  42. package/dist/gallery/frame/chunks/markdown-56enrf2r.js +39 -0
  43. package/dist/gallery/frame/chunks/markdown-5avymm8t.js +725 -0
  44. package/dist/gallery/frame/chunks/markdown-6r4svars.js +33 -0
  45. package/dist/gallery/frame/chunks/markdown-6zz8efx2.js +24 -0
  46. package/dist/gallery/frame/chunks/markdown-7jp6prnb.js +19 -0
  47. package/dist/gallery/frame/chunks/markdown-809k7q41.js +55 -0
  48. package/dist/gallery/frame/chunks/markdown-82xmzhzd.js +1076 -0
  49. package/dist/gallery/frame/chunks/markdown-92n37gd4.js +7627 -0
  50. package/dist/gallery/frame/chunks/markdown-ag2sssf8.js +36 -0
  51. package/dist/gallery/frame/chunks/markdown-b4s7ntq2.js +19 -0
  52. package/dist/gallery/frame/chunks/markdown-c9k0fvp1.js +100 -0
  53. package/dist/gallery/frame/chunks/markdown-ceefymn8.js +125 -0
  54. package/dist/gallery/frame/chunks/markdown-d1wfbs70.js +243 -0
  55. package/dist/gallery/frame/chunks/markdown-dy5sgjhc.js +11022 -0
  56. package/dist/gallery/frame/chunks/markdown-dz3z5w30.js +30868 -0
  57. package/dist/gallery/frame/chunks/markdown-eg6ngz7y.js +30340 -0
  58. package/dist/gallery/frame/chunks/markdown-ff5wvb43.js +1149 -0
  59. package/dist/gallery/frame/chunks/markdown-ffg06nfz.js +86 -0
  60. package/dist/gallery/frame/chunks/markdown-fvfncadf.js +472 -0
  61. package/dist/gallery/frame/chunks/markdown-gvyszqpv.js +19 -0
  62. package/dist/gallery/frame/chunks/markdown-gx1p0ew0.js +88 -0
  63. package/dist/gallery/frame/chunks/markdown-gxye5frz.js +65 -0
  64. package/dist/gallery/frame/chunks/markdown-h7pzv34e.js +105 -0
  65. package/dist/gallery/frame/chunks/markdown-hab789t9.js +47 -0
  66. package/dist/gallery/frame/chunks/markdown-hjp6sj8t.js +125 -0
  67. package/dist/gallery/frame/chunks/markdown-jka64qgp.js +1993 -0
  68. package/dist/gallery/frame/chunks/markdown-k8xkn8mw.js +56 -0
  69. package/dist/gallery/frame/chunks/markdown-m7frq8x8.js +112 -0
  70. package/dist/gallery/frame/chunks/markdown-p740v4qm.js +36 -0
  71. package/dist/gallery/frame/chunks/markdown-pxfeh231.js +57 -0
  72. package/dist/gallery/frame/chunks/markdown-pzgd8z3s.js +87 -0
  73. package/dist/gallery/frame/chunks/markdown-qx3cngz2.js +1673 -0
  74. package/dist/gallery/frame/chunks/markdown-rawhfvvc.js +85 -0
  75. package/dist/gallery/frame/chunks/markdown-rd8w0ng9.js +49 -0
  76. package/dist/gallery/frame/chunks/markdown-rm2yxfjj.js +2773 -0
  77. package/dist/gallery/frame/chunks/markdown-s1jatrnk.js +993 -0
  78. package/dist/gallery/frame/chunks/markdown-sgfg5vvq.js +59 -0
  79. package/dist/gallery/frame/chunks/markdown-t4ethv9d.js +409 -0
  80. package/dist/gallery/frame/chunks/markdown-tnmabqvz.js +36 -0
  81. package/dist/gallery/frame/chunks/markdown-tvdpppw8.js +5292 -0
  82. package/dist/gallery/frame/chunks/markdown-v0x27twr.js +22 -0
  83. package/dist/gallery/frame/chunks/markdown-v14td68x.js +36 -0
  84. package/dist/gallery/frame/chunks/markdown-w6sgd54z.js +36 -0
  85. package/dist/gallery/frame/chunks/markdown-xw8dsk8b.js +2125 -0
  86. package/dist/gallery/frame/chunks/markdown-y18mve73.js +85 -0
  87. package/dist/gallery/frame/chunks/markdown-yengsms5.js +427 -0
  88. package/dist/gallery/frame/chunks/markdown-z1wc0v0d.js +1826 -0
  89. package/dist/gallery/frame/chunks/markdown-zazx9h4n.js +329 -0
  90. package/dist/gallery/frame/chunks/mermaid-de7p4v0x.js +30 -0
  91. package/dist/gallery/frame/chunks/mindmap-definition-FAOFIHXS-ra44cbem.js +1216 -0
  92. package/dist/gallery/frame/chunks/packet-7NZHBO7P-xppm5913.js +10 -0
  93. package/dist/gallery/frame/chunks/pegDiagram-VL7TDLO6-a2a4wg03.js +163 -0
  94. package/dist/gallery/frame/chunks/pie-RZYD4A2V-hnbxk152.js +10 -0
  95. package/dist/gallery/frame/chunks/pieDiagram-7S7Q4E2Y-f1vxjtmx.js +311 -0
  96. package/dist/gallery/frame/chunks/quadrantDiagram-CIZ2JOQS-ywafa6kh.js +1390 -0
  97. package/dist/gallery/frame/chunks/radar-I7S5WNFK-ewqd27se.js +10 -0
  98. package/dist/gallery/frame/chunks/railroad-3IZDKUUU-5hy4bdx3.js +10 -0
  99. package/dist/gallery/frame/chunks/railroad-abnf-AHOZXSZD-bh5sxz0d.js +10 -0
  100. package/dist/gallery/frame/chunks/railroad-ebnf-EBAXGLYW-6b9c3zeh.js +10 -0
  101. package/dist/gallery/frame/chunks/railroad-peg-LSFZ7HO6-avc8v39s.js +10 -0
  102. package/dist/gallery/frame/chunks/railroadDiagram-AXF67PYL-qc61wax4.js +131 -0
  103. package/dist/gallery/frame/chunks/requirementDiagram-LRYGKXZP-9bs4786c.js +1295 -0
  104. package/dist/gallery/frame/chunks/sankeyDiagram-W5VNT64P-awt1em8b.js +1339 -0
  105. package/dist/gallery/frame/chunks/sequenceDiagram-SI44F4Z6-qaf9mz3t.js +4324 -0
  106. package/dist/gallery/frame/chunks/sizeCapture-X5ZJPWSS-9fq685xd.js +64 -0
  107. package/dist/gallery/frame/chunks/stateDiagram-OKZ733FA-vx7a7hh0.js +456 -0
  108. package/dist/gallery/frame/chunks/stateDiagram-v2-UEYNNEHI-x4m6ws5t.js +46 -0
  109. package/dist/gallery/frame/chunks/swimlanes-SLNWSIFB-e4mxm1gh.js +8287 -0
  110. package/dist/gallery/frame/chunks/swimlanesDiagram-ULZ7WXOC-0h93e2qq.js +42 -0
  111. package/dist/gallery/frame/chunks/timeline-definition-Z64GVDOM-wp0bhbzg.js +1549 -0
  112. package/dist/gallery/frame/chunks/treeView-QDETBFTQ-hcx7n0vt.js +10 -0
  113. package/dist/gallery/frame/chunks/treemap-6X3UGDF4-av02skdw.js +10 -0
  114. package/dist/gallery/frame/chunks/vennDiagram-T6HMQDX7-pmvk1p7n.js +2566 -0
  115. package/dist/gallery/frame/chunks/wardley-OPB4EBWU-njsp6e40.js +10 -0
  116. package/dist/gallery/frame/chunks/wardleyDiagram-T6FBY63Y-eggmnv4z.js +979 -0
  117. package/dist/gallery/frame/chunks/xychartDiagram-ELKLHX3M-q40tnpe5.js +1954 -0
  118. package/dist/gallery/frame/frame.css +183 -0
  119. package/dist/gallery/frame/runtime/chart.js +42744 -0
  120. package/dist/gallery/frame/runtime/html.js +14 -0
  121. package/dist/gallery/frame/runtime/markdown.js +1403 -0
  122. package/dist/gallery/frame/runtime/mermaid.js +32 -0
  123. package/dist/gallery/frame/runtime/svg.js +14 -0
  124. package/dist/gallery/frame/runtime/tsx.js +52 -0
  125. package/dist/gallery/index.html +104 -0
  126. package/docs/reference/cli.md +163 -0
  127. package/docs/reference/export.md +106 -0
  128. package/docs/reference/html.md +215 -0
  129. package/docs/reference/http.md +85 -0
  130. package/docs/reference/mcp.md +78 -0
  131. package/docs/reference/security.md +119 -0
  132. package/docs/reference/storage.md +93 -0
  133. package/docs/reference/tsx.md +101 -0
  134. package/docs/reference/validation.md +212 -0
  135. package/package.json +89 -0
  136. package/scripts/build-gallery.ts +127 -0
  137. package/scripts/launch-netns.sh +67 -0
  138. package/skills/facet/SKILL.md +100 -0
  139. package/src/cli/client.ts +311 -0
  140. package/src/cli/commands/create.ts +49 -0
  141. package/src/cli/commands/doctor.ts +249 -0
  142. package/src/cli/commands/export.ts +179 -0
  143. package/src/cli/commands/instantiate.ts +35 -0
  144. package/src/cli/commands/list.ts +49 -0
  145. package/src/cli/commands/open.ts +75 -0
  146. package/src/cli/commands/pin.ts +39 -0
  147. package/src/cli/commands/promote.ts +49 -0
  148. package/src/cli/commands/publish.ts +122 -0
  149. package/src/cli/commands/read-back.ts +56 -0
  150. package/src/cli/commands/status.ts +114 -0
  151. package/src/cli/commands/watch.ts +146 -0
  152. package/src/cli/main.ts +522 -0
  153. package/src/cli/output.ts +106 -0
  154. package/src/cli/parser.ts +376 -0
  155. package/src/cli/presenter.ts +212 -0
  156. package/src/cli/service-metadata.ts +134 -0
  157. package/src/cli/spawn-service.ts +326 -0
  158. package/src/css.d.ts +4 -0
  159. package/src/gallery-web/app.ts +1581 -0
  160. package/src/gallery-web/export-menu.ts +121 -0
  161. package/src/gallery-web/export.ts +112 -0
  162. package/src/gallery-web/favicon.ts +54 -0
  163. package/src/gallery-web/frame/entries/chart.ts +6 -0
  164. package/src/gallery-web/frame/entries/html.ts +6 -0
  165. package/src/gallery-web/frame/entries/markdown.ts +6 -0
  166. package/src/gallery-web/frame/entries/mermaid.ts +6 -0
  167. package/src/gallery-web/frame/entries/svg.ts +6 -0
  168. package/src/gallery-web/frame/entries/tsx.ts +6 -0
  169. package/src/gallery-web/frame/frame-payload.ts +91 -0
  170. package/src/gallery-web/frame/renderer-validation.ts +13 -0
  171. package/src/gallery-web/frame/renderers/chart.ts +182 -0
  172. package/src/gallery-web/frame/renderers/dompurify-shim.ts +112 -0
  173. package/src/gallery-web/frame/renderers/html.ts +48 -0
  174. package/src/gallery-web/frame/renderers/markdown.ts +81 -0
  175. package/src/gallery-web/frame/renderers/mermaid.ts +120 -0
  176. package/src/gallery-web/frame/renderers/registry.ts +260 -0
  177. package/src/gallery-web/frame/renderers/svg.ts +393 -0
  178. package/src/gallery-web/frame/renderers/tsx.ts +61 -0
  179. package/src/gallery-web/frame/runtime.ts +501 -0
  180. package/src/gallery-web/frame/styles/artifact.css +8424 -0
  181. package/src/gallery-web/frame/styles/frame.css +183 -0
  182. package/src/gallery-web/frame/styles/html-source.css +23 -0
  183. package/src/gallery-web/frame/view-box.ts +33 -0
  184. package/src/gallery-web/frame-html.ts +72 -0
  185. package/src/gallery-web/index.html +104 -0
  186. package/src/gallery-web/session.ts +107 -0
  187. package/src/gallery-web/sse-client.ts +212 -0
  188. package/src/gallery-web/styles/app.css +420 -0
  189. package/src/gallery-web/styles/tokens.css +112 -0
  190. package/src/gallery-web/styles/verdict.css +186 -0
  191. package/src/gallery-web/swap.ts +64 -0
  192. package/src/gallery-web/theme.ts +40 -0
  193. package/src/gallery-web/view-state.ts +93 -0
  194. package/src/harness-adapters/claude-code/README.md +10 -0
  195. package/src/harness-adapters/claude-code/facet.sh +4 -0
  196. package/src/harness-adapters/codex/README.md +10 -0
  197. package/src/harness-adapters/codex/facet.sh +4 -0
  198. package/src/harness-adapters/mcp/README.md +13 -0
  199. package/src/harness-adapters/mcp/cli-bridge.ts +216 -0
  200. package/src/harness-adapters/mcp/main.ts +15 -0
  201. package/src/harness-adapters/mcp/server.ts +164 -0
  202. package/src/harness-adapters/mcp/tool-schemas.ts +53 -0
  203. package/src/harness-adapters/opencode/README.md +10 -0
  204. package/src/harness-adapters/opencode/facet.sh +4 -0
  205. package/src/runtime/compiled-entrypoints.ts +69 -0
  206. package/src/service/dispatcher.ts +717 -0
  207. package/src/service/export.ts +218 -0
  208. package/src/service/http-utils.ts +55 -0
  209. package/src/service/lexical/expectations.ts +210 -0
  210. package/src/service/lifecycle/idle-controller.ts +125 -0
  211. package/src/service/lifecycle/orphan-cleanup.ts +128 -0
  212. package/src/service/lifecycle/process-lock.ts +235 -0
  213. package/src/service/main.ts +136 -0
  214. package/src/service/process.ts +240 -0
  215. package/src/service/router-guards.ts +239 -0
  216. package/src/service/router.ts +627 -0
  217. package/src/service/security/auth.ts +168 -0
  218. package/src/service/security/host-origin.ts +138 -0
  219. package/src/service/security/http-guards.ts +13 -0
  220. package/src/service/security/leases.ts +182 -0
  221. package/src/service/security/token-store.ts +138 -0
  222. package/src/service/server.ts +356 -0
  223. package/src/service/store/database.ts +61 -0
  224. package/src/service/store/evidence-retention.ts +234 -0
  225. package/src/service/store/migrations.ts +167 -0
  226. package/src/service/store/repository-lifecycle.ts +121 -0
  227. package/src/service/store/repository.ts +732 -0
  228. package/src/service/store/schema.ts +218 -0
  229. package/src/service/stored-verdict.ts +97 -0
  230. package/src/service/stream.ts +301 -0
  231. package/src/service/verdict-enrichment.ts +45 -0
  232. package/src/shared/build/frame-bundle-plugins.ts +61 -0
  233. package/src/shared/build-mode.ts +28 -0
  234. package/src/shared/config/evidence-read.ts +98 -0
  235. package/src/shared/config/limits.ts +56 -0
  236. package/src/shared/config/paths.ts +96 -0
  237. package/src/shared/contracts/artifact-types.ts +2 -0
  238. package/src/shared/contracts/artifact.ts +98 -0
  239. package/src/shared/contracts/commands/_shared.ts +59 -0
  240. package/src/shared/contracts/commands/guards.ts +86 -0
  241. package/src/shared/contracts/commands/index.ts +204 -0
  242. package/src/shared/contracts/commands/names.ts +35 -0
  243. package/src/shared/contracts/commands/requests.ts +149 -0
  244. package/src/shared/contracts/commands/results.ts +200 -0
  245. package/src/shared/contracts/envelope.ts +140 -0
  246. package/src/shared/contracts/events.ts +41 -0
  247. package/src/shared/contracts/observed-counts.ts +19 -0
  248. package/src/shared/contracts/renderers.ts +6 -0
  249. package/src/shared/contracts/validation.ts +296 -0
  250. package/src/shared/errors/facet-error.ts +127 -0
  251. package/src/shared/errors/store-error.ts +68 -0
  252. package/src/shared/evidence-image.ts +37 -0
  253. package/src/shared/export.ts +31 -0
  254. package/src/shared/html/policy.ts +108 -0
  255. package/src/shared/html/style-vocabulary.ts +352 -0
  256. package/src/shared/logging/logger.ts +108 -0
  257. package/src/shared/logging/redact.ts +49 -0
  258. package/src/shared/security/frozen-csp.ts +13 -0
  259. package/src/shared/storage-version.ts +2 -0
  260. package/src/shared/tsx/execution.ts +29 -0
  261. package/src/shared/tsx/import-policy.ts +94 -0
  262. package/src/shared/util/dir-permissions.ts +94 -0
  263. package/src/shared/util/mermaid-nodes.ts +230 -0
  264. package/src/shared/util/process.ts +67 -0
  265. package/src/shared/util/time.ts +21 -0
  266. package/src/shared/version.ts +3 -0
  267. package/src/validation/sandbox/limits.ts +41 -0
  268. package/src/validation/sandbox/netns.ts +177 -0
  269. package/src/validation/tier0/chart.ts +177 -0
  270. package/src/validation/tier0/dom-shim.ts +54 -0
  271. package/src/validation/tier0/html.ts +408 -0
  272. package/src/validation/tier0/markdown.ts +285 -0
  273. package/src/validation/tier0/mermaid.ts +98 -0
  274. package/src/validation/tier0/runner.ts +504 -0
  275. package/src/validation/tier0/svg.ts +321 -0
  276. package/src/validation/tier0/tsx/allowlist-resolver.ts +77 -0
  277. package/src/validation/tier0/tsx/ast-policy-capabilities.ts +238 -0
  278. package/src/validation/tier0/tsx/ast-policy-shared.ts +71 -0
  279. package/src/validation/tier0/tsx/ast-policy.ts +181 -0
  280. package/src/validation/tier0/tsx/compiler.ts +156 -0
  281. package/src/validation/tier0/worker-dispatch.ts +211 -0
  282. package/src/validation/tier0/worker-entry.ts +96 -0
  283. package/src/validation/tier0/worker-input.ts +75 -0
  284. package/src/validation/tier1/browser-process.ts +147 -0
  285. package/src/validation/tier1/cdp-pipe.ts +281 -0
  286. package/src/validation/tier1/entries/chart.ts +5 -0
  287. package/src/validation/tier1/entries/html.ts +6 -0
  288. package/src/validation/tier1/entries/markdown.ts +5 -0
  289. package/src/validation/tier1/entries/mermaid.ts +5 -0
  290. package/src/validation/tier1/entries/svg.ts +5 -0
  291. package/src/validation/tier1/entries/tsx.ts +5 -0
  292. package/src/validation/tier1/frame-target.ts +162 -0
  293. package/src/validation/tier1/harness-entry.ts +261 -0
  294. package/src/validation/tier1/harness.ts +215 -0
  295. package/src/validation/tier1/isolated-probe.ts +94 -0
  296. package/src/validation/tier1/launcher.ts +177 -0
  297. package/src/validation/tier1/limits.ts +80 -0
  298. package/src/validation/tier1/nonce.ts +17 -0
  299. package/src/validation/tier1/protocol-probe.ts +519 -0
  300. package/src/validation/tier1/runner.ts +1122 -0
  301. package/src/validation/tier1/verdict.ts +246 -0
  302. package/src/validation/tier1/webp.ts +69 -0
  303. package/templates/README.md +88 -0
  304. package/templates/bar-compare.vl.json +63 -0
  305. package/templates/capacity-report.tsx +102 -0
  306. package/templates/decision-record.md +24 -0
  307. package/templates/deployment-state.mmd +40 -0
  308. package/templates/exemplar.md +91 -0
  309. package/templates/facet-story.tsx +799 -0
  310. package/templates/fleet-dashboard.html +141 -0
  311. package/templates/html-release-ledger.html +91 -0
  312. package/templates/html-status-report.html +114 -0
  313. package/templates/incident-console.tsx +147 -0
  314. package/templates/legion-boundaries.mmd +23 -0
  315. package/templates/legion-flow.mmd +15 -0
  316. package/templates/legion-sequence.mmd +14 -0
  317. package/templates/legion-state.mmd +7 -0
  318. package/templates/metric-card.svg +29 -0
  319. package/templates/observability-map.svg +101 -0
  320. package/templates/pipeline-audit.md +108 -0
  321. package/templates/release-metrics.vl.json +98 -0
  322. package/templates/service-topology.mmd +47 -0
  323. package/templates/status-report.md +32 -0
  324. package/templates/system-map.svg +53 -0
  325. package/templates/timeseries.vl.json +71 -0
  326. package/templates/tsx-interactive-counter.tsx +19 -0
  327. package/templates/tsx-status-report.tsx +31 -0
@@ -0,0 +1,86 @@
1
+ import {
2
+ AbstractMermaidTokenBuilder,
3
+ CommonValueConverter,
4
+ EmptyFileSystem,
5
+ EventModelingGeneratedModule,
6
+ MermaidGeneratedSharedModule,
7
+ __name,
8
+ createDefaultCoreModule,
9
+ createDefaultSharedCoreModule,
10
+ inject
11
+ } from "./markdown-dz3z5w30.js";
12
+
13
+ // node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-5JV3BV7I.mjs
14
+ var EventModelingTokenBuilder = class extends AbstractMermaidTokenBuilder {
15
+ static {
16
+ __name(this, "EventModelingTokenBuilder");
17
+ }
18
+ constructor() {
19
+ super(["eventmodeling"]);
20
+ }
21
+ };
22
+ var COMMAND_TYPES = /* @__PURE__ */ new Set(["cmd", "command"]);
23
+ var EVENT_TYPES = /* @__PURE__ */ new Set(["evt", "event"]);
24
+ var READMODEL_TYPES = /* @__PURE__ */ new Set(["rmo", "readmodel"]);
25
+ var PROCESSOR_TYPES = /* @__PURE__ */ new Set(["pcr", "processor"]);
26
+ var UI_TYPES = /* @__PURE__ */ new Set(["ui"]);
27
+ function registerValidationChecks(services) {
28
+ const validator = services.validation.EventModelingValidator;
29
+ const registry = services.validation.ValidationRegistry;
30
+ if (registry) {
31
+ const checks = {
32
+ EmTimeFrame: validator.checkSourceFrameTypes.bind(validator),
33
+ EmResetFrame: validator.checkSourceFrameTypes.bind(validator)
34
+ };
35
+ registry.register(checks, validator);
36
+ }
37
+ }
38
+ __name(registerValidationChecks, "registerValidationChecks");
39
+ var EventModelingValidator = class {
40
+ static {
41
+ __name(this, "EventModelingValidator");
42
+ }
43
+ checkSourceFrameTypes(frame, accept) {
44
+ if (frame.sourceFrames.length === 0) {
45
+ return;
46
+ }
47
+ if (COMMAND_TYPES.has(frame.modelEntityType)) {
48
+ this.validateSources(frame, /* @__PURE__ */ new Set([...UI_TYPES, ...PROCESSOR_TYPES]), "command", "ui or processor", accept);
49
+ } else if (EVENT_TYPES.has(frame.modelEntityType)) {
50
+ this.validateSources(frame, COMMAND_TYPES, "event", "command", accept);
51
+ } else if (READMODEL_TYPES.has(frame.modelEntityType)) {
52
+ this.validateSources(frame, EVENT_TYPES, "read model", "event", accept);
53
+ } else if (PROCESSOR_TYPES.has(frame.modelEntityType)) {
54
+ this.validateSources(frame, READMODEL_TYPES, "processor", "read model", accept);
55
+ } else if (UI_TYPES.has(frame.modelEntityType)) {
56
+ this.validateSources(frame, READMODEL_TYPES, "ui", "read model", accept);
57
+ }
58
+ }
59
+ validateSources(frame, allowedSourceTypes, targetLabel, expectedSourceLabel, accept) {
60
+ for (const sourceRef of frame.sourceFrames) {
61
+ const source = sourceRef.ref;
62
+ if (source !== undefined && !allowedSourceTypes.has(source.modelEntityType)) {
63
+ accept("error", `A ${targetLabel} can only receive input from a ${expectedSourceLabel}, not from '${source.modelEntityType}'.`, { node: frame, property: "sourceFrames" });
64
+ }
65
+ }
66
+ }
67
+ };
68
+ var EventModelingModule = {
69
+ parser: {
70
+ TokenBuilder: /* @__PURE__ */ __name(() => new EventModelingTokenBuilder, "TokenBuilder"),
71
+ ValueConverter: /* @__PURE__ */ __name(() => new CommonValueConverter, "ValueConverter")
72
+ },
73
+ validation: {
74
+ EventModelingValidator: /* @__PURE__ */ __name(() => new EventModelingValidator, "EventModelingValidator")
75
+ }
76
+ };
77
+ function createEventModelingServices(context = EmptyFileSystem) {
78
+ const shared = inject(createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule);
79
+ const EventModel = inject(createDefaultCoreModule({ shared }), EventModelingGeneratedModule, EventModelingModule);
80
+ shared.ServiceRegistry.register(EventModel);
81
+ registerValidationChecks(EventModel);
82
+ return { shared, EventModel };
83
+ }
84
+ __name(createEventModelingServices, "createEventModelingServices");
85
+
86
+ export { EventModelingModule, createEventModelingServices };
@@ -0,0 +1,472 @@
1
+ import {
2
+ FacetRenderError,
3
+ appendRenderError,
4
+ countPageShim,
5
+ dispatchRender,
6
+ isRenderer,
7
+ isTsxExecutionMode
8
+ } from "./markdown-d1wfbs70.js";
9
+
10
+ // src/gallery-web/theme.ts
11
+ function isResolvedGalleryTheme(value) {
12
+ return value === "dark" || value === "light";
13
+ }
14
+
15
+ // src/gallery-web/frame/renderer-validation.ts
16
+ function validateRenderer(value) {
17
+ if (!isRenderer(value)) {
18
+ throw new FacetRenderError("artifact payload is missing a supported renderer", "invalid_request");
19
+ }
20
+ return value;
21
+ }
22
+
23
+ // src/gallery-web/frame/frame-payload.ts
24
+ var GESTURE_MODES = ["native", "panzoom"];
25
+ function isGestureMode(value) {
26
+ return typeof value === "string" && GESTURE_MODES.includes(value);
27
+ }
28
+ function isUint8Array(value) {
29
+ return Object.prototype.toString.call(value) === "[object Uint8Array]";
30
+ }
31
+ function decodePayloadBytes(bytes) {
32
+ if (typeof bytes !== "string")
33
+ return new Uint8Array(bytes);
34
+ const binary = atob(bytes);
35
+ const out = new Uint8Array(binary.length);
36
+ for (let i = 0;i < binary.length; i += 1)
37
+ out[i] = binary.charCodeAt(i);
38
+ return out;
39
+ }
40
+ function parseViewBox(value) {
41
+ if (value === null)
42
+ return null;
43
+ const values = value.trim().split(/[\s,]+/).map(Number);
44
+ if (values.length !== 4 || values.some((entry) => !Number.isFinite(entry)) || values[2] <= 0 || values[3] <= 0)
45
+ return null;
46
+ return { minX: values[0], minY: values[1], width: values[2], height: values[3] };
47
+ }
48
+ function isFrameViewState(value) {
49
+ if (value === null || typeof value !== "object")
50
+ return false;
51
+ const state = value;
52
+ return typeof state.zoom === "number" && Number.isFinite(state.zoom) && state.zoom > 0 && typeof state.panX === "number" && Number.isFinite(state.panX) && typeof state.panY === "number" && Number.isFinite(state.panY);
53
+ }
54
+
55
+ // src/gallery-web/view-state.ts
56
+ var MIN_ZOOM = 0.25;
57
+ var MAX_ZOOM = 8;
58
+ function clampZoom(zoom) {
59
+ if (!Number.isFinite(zoom))
60
+ return 1;
61
+ return Math.max(MIN_ZOOM, Math.min(MAX_ZOOM, zoom));
62
+ }
63
+ var EMPTY_VIEW_STATE = { zoom: 1, panX: 0, panY: 0 };
64
+ function resetViewState(_state) {
65
+ return { ...EMPTY_VIEW_STATE };
66
+ }
67
+ function normalizeViewState(state) {
68
+ return { zoom: state.zoom, panX: state.panX ?? 0, panY: state.panY ?? 0 };
69
+ }
70
+ function zoomAtPoint(state, nextZoom, cursorX, cursorY) {
71
+ const zoom = clampZoom(nextZoom);
72
+ const ratio = zoom / state.zoom;
73
+ const panX = state.panX ?? 0;
74
+ const panY = state.panY ?? 0;
75
+ return {
76
+ zoom,
77
+ panX: cursorX - (cursorX - panX) * ratio,
78
+ panY: cursorY - (cursorY - panY) * ratio
79
+ };
80
+ }
81
+ var ZOOM_KEY_FACTOR = Math.exp(100 * 0.001);
82
+ var PAN_STEP_PX = 10;
83
+ var PAN_STEP_PX_SHIFT = 50;
84
+ function nextViewStateForKey(state, key, shiftKey, rect) {
85
+ if (key === "+" || key === "=") {
86
+ return zoomAtPoint(state, clampZoom(state.zoom * ZOOM_KEY_FACTOR), rect.width / 2, rect.height / 2);
87
+ }
88
+ if (key === "-") {
89
+ return zoomAtPoint(state, clampZoom(state.zoom / ZOOM_KEY_FACTOR), rect.width / 2, rect.height / 2);
90
+ }
91
+ if (key === "0") {
92
+ return resetViewState(state);
93
+ }
94
+ if (key === "ArrowLeft" || key === "ArrowRight" || key === "ArrowUp" || key === "ArrowDown") {
95
+ const amount = shiftKey ? PAN_STEP_PX_SHIFT : PAN_STEP_PX;
96
+ const dx = key === "ArrowLeft" ? -amount : key === "ArrowRight" ? amount : 0;
97
+ const dy = key === "ArrowUp" ? -amount : key === "ArrowDown" ? amount : 0;
98
+ return {
99
+ ...state,
100
+ panX: (state.panX ?? 0) + dx,
101
+ panY: (state.panY ?? 0) + dy
102
+ };
103
+ }
104
+ return null;
105
+ }
106
+
107
+ // src/gallery-web/frame/runtime.ts
108
+ var STANDALONE_DIAGRAM_TYPES = new Set(["mermaid", "svg", "chart"]);
109
+ var DIAGRAM_REGION_SELECTOR = "[data-facet-diagram-region]";
110
+ function nextDiagramRegionEngagement(state, event) {
111
+ if (event.type === "dismiss")
112
+ return { activeRegion: null, armedRegion: null };
113
+ if (event.type === "pointerenter") {
114
+ return state.activeRegion === event.region ? state : { ...state, armedRegion: event.region };
115
+ }
116
+ if (event.type === "pointerleave") {
117
+ return state.armedRegion === event.region ? { ...state, armedRegion: null } : state;
118
+ }
119
+ return state.armedRegion === event.region ? { activeRegion: event.region, armedRegion: null } : state;
120
+ }
121
+ function asStylable(node) {
122
+ return node !== null && "style" in node ? node : null;
123
+ }
124
+ function setPointerEventsIfStylable(node, value) {
125
+ const stylable = asStylable(node);
126
+ if (stylable !== null)
127
+ stylable.style.pointerEvents = value;
128
+ }
129
+ function setPointerEventsForAllChildren(container, value) {
130
+ for (const child of Array.from(container.children)) {
131
+ setPointerEventsIfStylable(child, value);
132
+ }
133
+ }
134
+ function renderedSvg(container) {
135
+ const root = container.children.length === 1 ? container.firstElementChild : null;
136
+ if (root?.nodeName.toLowerCase() !== "svg")
137
+ return null;
138
+ const viewBox = parseViewBox(root.getAttribute("viewBox"));
139
+ if (viewBox === null)
140
+ return null;
141
+ return { svg: root, viewBox };
142
+ }
143
+ function installDiagramRegionGestures(container) {
144
+ const regions = Array.from(container.querySelectorAll(DIAGRAM_REGION_SELECTOR));
145
+ let enabled = false;
146
+ let engagement = { activeRegion: null, armedRegion: null };
147
+ let controls = [];
148
+ const transition = (event) => {
149
+ engagement = nextDiagramRegionEngagement(engagement, event);
150
+ controls.forEach((control) => control.sync());
151
+ };
152
+ controls = regions.flatMap((region, index) => {
153
+ const svg = region.querySelector(":scope > svg");
154
+ if (svg === null)
155
+ return [];
156
+ const rect = svg.getBoundingClientRect();
157
+ const naturalWidth = rect.width;
158
+ const naturalHeight = rect.height;
159
+ if (naturalWidth <= 0 || naturalHeight <= 0)
160
+ return [];
161
+ region.style.width = `${Math.ceil(naturalWidth)}px`;
162
+ region.style.height = `${Math.ceil(naturalHeight)}px`;
163
+ region.style.overflow = "hidden";
164
+ const regionId = String(index);
165
+ let zoom = 1;
166
+ let drag = null;
167
+ const sync = () => {
168
+ if (engagement.activeRegion === regionId)
169
+ region.setAttribute("data-facet-diagram-engaged", "true");
170
+ else
171
+ region.removeAttribute("data-facet-diagram-engaged");
172
+ };
173
+ const eventRegion = (event) => {
174
+ const target = event.target;
175
+ return target instanceof Element ? target.closest(DIAGRAM_REGION_SELECTOR) : null;
176
+ };
177
+ region.addEventListener("pointerenter", () => {
178
+ if (enabled)
179
+ transition({ type: "pointerenter", region: regionId });
180
+ });
181
+ region.addEventListener("pointerleave", () => {
182
+ if (enabled)
183
+ transition({ type: "pointerleave", region: regionId });
184
+ });
185
+ region.addEventListener("pointerdown", (event) => {
186
+ if (!enabled || eventRegion(event) !== region)
187
+ return;
188
+ transition({ type: "activate", region: regionId });
189
+ if (engagement.activeRegion !== regionId)
190
+ return;
191
+ region.focus({ preventScroll: true });
192
+ drag = { x: event.clientX, y: event.clientY, pointerId: event.pointerId };
193
+ region.setPointerCapture(event.pointerId);
194
+ region.style.cursor = "grabbing";
195
+ event.preventDefault();
196
+ });
197
+ region.addEventListener("pointermove", (event) => {
198
+ if (drag === null || event.pointerId !== drag.pointerId || eventRegion(event) !== region)
199
+ return;
200
+ region.scrollLeft = Math.max(0, region.scrollLeft - (event.clientX - drag.x));
201
+ region.scrollTop = Math.max(0, region.scrollTop - (event.clientY - drag.y));
202
+ drag = { ...drag, x: event.clientX, y: event.clientY };
203
+ event.preventDefault();
204
+ });
205
+ const endDrag = (event) => {
206
+ if (drag === null || event.pointerId !== drag.pointerId)
207
+ return;
208
+ releaseDrag();
209
+ };
210
+ const releaseDrag = () => {
211
+ const activeDrag = drag;
212
+ drag = null;
213
+ if (activeDrag !== null && region.isConnected && region.hasPointerCapture(activeDrag.pointerId)) {
214
+ region.releasePointerCapture(activeDrag.pointerId);
215
+ }
216
+ region.style.cursor = "";
217
+ };
218
+ region.addEventListener("pointerup", endDrag);
219
+ region.addEventListener("pointercancel", endDrag);
220
+ region.addEventListener("wheel", (event) => {
221
+ if (!enabled || engagement.activeRegion !== regionId || eventRegion(event) !== region)
222
+ return;
223
+ event.preventDefault();
224
+ const nextZoom = clampZoom(zoom * Math.exp(-event.deltaY * 0.001));
225
+ const regionRect = region.getBoundingClientRect();
226
+ const cursorX = event.clientX - regionRect.left;
227
+ const cursorY = event.clientY - regionRect.top;
228
+ const scale = nextZoom / zoom;
229
+ zoom = nextZoom;
230
+ svg.style.width = `${Math.ceil(naturalWidth * zoom)}px`;
231
+ svg.style.maxWidth = "none";
232
+ svg.style.height = "auto";
233
+ region.scrollLeft = Math.max(0, (region.scrollLeft + cursorX) * scale - cursorX);
234
+ region.scrollTop = Math.max(0, (region.scrollTop + cursorY) * scale - cursorY);
235
+ }, { passive: false });
236
+ return [
237
+ {
238
+ region,
239
+ regionId,
240
+ sync,
241
+ dismiss: () => {
242
+ releaseDrag();
243
+ },
244
+ reset: () => {
245
+ zoom = 1;
246
+ svg.style.width = `${Math.ceil(naturalWidth)}px`;
247
+ svg.style.maxWidth = "none";
248
+ svg.style.height = "auto";
249
+ region.scrollLeft = 0;
250
+ region.scrollTop = 0;
251
+ releaseDrag();
252
+ }
253
+ }
254
+ ];
255
+ });
256
+ return {
257
+ setEnabled(nextEnabled) {
258
+ enabled = nextEnabled;
259
+ if (!enabled) {
260
+ controls.forEach((control) => control.dismiss());
261
+ transition({ type: "dismiss" });
262
+ }
263
+ },
264
+ dismiss() {
265
+ const wasEngaged = engagement.activeRegion !== null;
266
+ controls.forEach((control) => control.dismiss());
267
+ transition({ type: "dismiss" });
268
+ return wasEngaged;
269
+ },
270
+ reset() {
271
+ controls.forEach((control) => control.reset());
272
+ transition({ type: "dismiss" });
273
+ }
274
+ };
275
+ }
276
+ function validatePayload(value) {
277
+ if (value === null || typeof value !== "object") {
278
+ throw new FacetRenderError("artifact payload is missing", "invalid_request");
279
+ }
280
+ const payload = value;
281
+ if (typeof payload.artifactType !== "string") {
282
+ throw new FacetRenderError("artifact payload is missing artifactType", "invalid_request");
283
+ }
284
+ if (!isResolvedGalleryTheme(payload.theme)) {
285
+ throw new FacetRenderError("artifact payload has invalid theme", "invalid_request");
286
+ }
287
+ if (typeof payload.bytes !== "string" && !isUint8Array(payload.bytes)) {
288
+ throw new FacetRenderError("artifact payload is missing bytes", "invalid_request");
289
+ }
290
+ if (payload.execution !== undefined && !isTsxExecutionMode(payload.execution)) {
291
+ throw new FacetRenderError("artifact payload has invalid execution", "invalid_request");
292
+ }
293
+ return {
294
+ artifactType: payload.artifactType,
295
+ renderer: validateRenderer(payload.renderer),
296
+ bytes: decodePayloadBytes(payload.bytes),
297
+ theme: payload.theme,
298
+ ...payload.execution === undefined ? {} : { execution: payload.execution }
299
+ };
300
+ }
301
+ function installGalleryFrameApi(registry) {
302
+ const container = document.getElementById("artifact");
303
+ if (container === null)
304
+ throw new Error("frame runtime: #artifact container missing");
305
+ let rendered = false;
306
+ document.documentElement.style.height = "100%";
307
+ document.documentElement.style.overflow = "hidden";
308
+ document.body.style.height = "100%";
309
+ document.body.style.margin = "0";
310
+ document.body.style.padding = "0";
311
+ document.body.style.overflow = "hidden";
312
+ container.style.height = "100%";
313
+ container.style.width = "100%";
314
+ container.style.overflow = "auto";
315
+ container.style.boxSizing = "border-box";
316
+ let currentRenderResult = null;
317
+ let diagramRegions = null;
318
+ let gestureMode = "native";
319
+ let drag = null;
320
+ let capturedPointerId = null;
321
+ const onWheel = (event) => {
322
+ event.preventDefault();
323
+ const rect = container.getBoundingClientRect();
324
+ const state = currentRenderResult?.readViewState() ?? EMPTY_VIEW_STATE;
325
+ const factor = Math.exp(-event.deltaY * 0.001);
326
+ const nextZoom = clampZoom(state.zoom * factor);
327
+ const cursorX = event.clientX - rect.left;
328
+ const cursorY = event.clientY - rect.top;
329
+ const next = zoomAtPoint(state, nextZoom, cursorX, cursorY);
330
+ currentRenderResult?.applyViewState(normalizeViewState(next));
331
+ };
332
+ const onPointerDown = (event) => {
333
+ drag = { x: event.clientX, y: event.clientY };
334
+ container.setPointerCapture(event.pointerId);
335
+ capturedPointerId = event.pointerId;
336
+ container.style.cursor = "grabbing";
337
+ };
338
+ const onPointerMove = (event) => {
339
+ if (drag === null)
340
+ return;
341
+ const dx = event.clientX - drag.x;
342
+ const dy = event.clientY - drag.y;
343
+ drag = { x: event.clientX, y: event.clientY };
344
+ const state = normalizeViewState(currentRenderResult?.readViewState() ?? EMPTY_VIEW_STATE);
345
+ currentRenderResult?.applyViewState({
346
+ ...state,
347
+ panX: state.panX + dx,
348
+ panY: state.panY + dy
349
+ });
350
+ };
351
+ const onPointerEnd = (event) => {
352
+ drag = null;
353
+ container.releasePointerCapture(event.pointerId);
354
+ capturedPointerId = null;
355
+ container.style.cursor = "auto";
356
+ };
357
+ let gesturesInstalled = false;
358
+ const installGestureListeners = () => {
359
+ if (gesturesInstalled)
360
+ return;
361
+ gesturesInstalled = true;
362
+ container.addEventListener("wheel", onWheel, { passive: false });
363
+ container.addEventListener("pointerdown", onPointerDown);
364
+ container.addEventListener("pointermove", onPointerMove);
365
+ container.addEventListener("pointerup", onPointerEnd);
366
+ container.addEventListener("pointercancel", onPointerEnd);
367
+ };
368
+ const removeGestureListeners = () => {
369
+ if (!gesturesInstalled)
370
+ return;
371
+ gesturesInstalled = false;
372
+ container.removeEventListener("wheel", onWheel);
373
+ container.removeEventListener("pointerdown", onPointerDown);
374
+ container.removeEventListener("pointermove", onPointerMove);
375
+ container.removeEventListener("pointerup", onPointerEnd);
376
+ container.removeEventListener("pointercancel", onPointerEnd);
377
+ if (capturedPointerId !== null) {
378
+ container.releasePointerCapture(capturedPointerId);
379
+ capturedPointerId = null;
380
+ }
381
+ };
382
+ const setGestureMode = (mode) => {
383
+ if (!isGestureMode(mode)) {
384
+ throw new FacetRenderError("gesture mode is invalid", "invalid_request");
385
+ }
386
+ gestureMode = mode;
387
+ if (mode === "panzoom") {
388
+ installGestureListeners();
389
+ } else {
390
+ removeGestureListeners();
391
+ drag = null;
392
+ container.style.cursor = "auto";
393
+ }
394
+ diagramRegions?.setEnabled(mode === "native");
395
+ setPointerEventsForAllChildren(container, mode === "panzoom" ? "none" : "");
396
+ };
397
+ const api = {
398
+ async render(payload) {
399
+ if (rendered)
400
+ throw new FacetRenderError("frame already rendered", "invalid_request");
401
+ const validated = validatePayload(payload);
402
+ rendered = true;
403
+ try {
404
+ await dispatchRender(registry, { container, theme: validated.theme }, validated);
405
+ } catch (error) {
406
+ appendRenderError(container, error instanceof Error ? error.message : String(error));
407
+ throw error;
408
+ }
409
+ diagramRegions = installDiagramRegionGestures(container);
410
+ const svg = renderedSvg(container);
411
+ const viewMode = svg === null ? "css" : "native";
412
+ let viewState = { ...EMPTY_VIEW_STATE };
413
+ const applyViewState = (state) => {
414
+ if (!isFrameViewState(state)) {
415
+ throw new FacetRenderError("view state is invalid", "invalid_request");
416
+ }
417
+ viewState = { zoom: state.zoom, panX: state.panX, panY: state.panY };
418
+ if (svg !== null) {
419
+ svg.svg.style.width = `${Math.ceil(svg.viewBox.width * state.zoom)}px`;
420
+ svg.svg.style.maxWidth = "none";
421
+ svg.svg.style.height = "auto";
422
+ } else {
423
+ const root = asStylable(container.firstElementChild);
424
+ if (root !== null) {
425
+ root.style.transformOrigin = "top left";
426
+ root.style.transform = `scale(${state.zoom})`;
427
+ }
428
+ }
429
+ container.scrollLeft = Math.max(0, -state.panX);
430
+ container.scrollTop = Math.max(0, -state.panY);
431
+ };
432
+ const defaultGestureMode = STANDALONE_DIAGRAM_TYPES.has(validated.artifactType) ? "panzoom" : "native";
433
+ setGestureMode(defaultGestureMode);
434
+ currentRenderResult = {
435
+ observed: countPageShim(),
436
+ viewMode,
437
+ applyViewState,
438
+ readViewState: () => ({ ...viewState }),
439
+ defaultGestureMode,
440
+ gestureMode: () => gestureMode,
441
+ setGestureMode,
442
+ resetDiagramRegions: () => diagramRegions?.reset()
443
+ };
444
+ return currentRenderResult;
445
+ }
446
+ };
447
+ Reflect.set(window, "__facetFrame", api);
448
+ document.addEventListener("pointerdown", (event) => {
449
+ const target = event.target;
450
+ if (target instanceof Element && target.closest(DIAGRAM_REGION_SELECTOR) !== null)
451
+ return;
452
+ diagramRegions?.dismiss();
453
+ });
454
+ document.addEventListener("keydown", (event) => {
455
+ const result = currentRenderResult;
456
+ if (!result)
457
+ return;
458
+ if (event.key === "Escape" && diagramRegions?.dismiss()) {
459
+ event.preventDefault();
460
+ return;
461
+ }
462
+ const next = nextViewStateForKey(result.readViewState(), event.key, event.shiftKey, container.getBoundingClientRect());
463
+ if (next === null)
464
+ return;
465
+ event.preventDefault();
466
+ if (event.key === "0")
467
+ result.setGestureMode(result.defaultGestureMode);
468
+ result.applyViewState(normalizeViewState(next));
469
+ });
470
+ }
471
+
472
+ export { installGalleryFrameApi };
@@ -0,0 +1,19 @@
1
+ import {
2
+ select_default
3
+ } from "./markdown-xw8dsk8b.js";
4
+ import {
5
+ __name
6
+ } from "./markdown-1s5vwkf2.js";
7
+
8
+ // node_modules/mermaid/dist/chunks/mermaid.core/chunk-XXDRQBXY.mjs
9
+ var getDiagramElement = /* @__PURE__ */ __name((id, securityLevel) => {
10
+ let sandboxElement;
11
+ if (securityLevel === "sandbox") {
12
+ sandboxElement = select_default("#i" + id);
13
+ }
14
+ const root = securityLevel === "sandbox" ? select_default(sandboxElement.nodes()[0].contentDocument.body) : select_default("body");
15
+ const svg = root.select(`[id="${id}"]`);
16
+ return svg;
17
+ }, "getDiagramElement");
18
+
19
+ export { getDiagramElement };
@@ -0,0 +1,88 @@
1
+ import {
2
+ AbstractMermaidTokenBuilder,
3
+ AbstractMermaidValueConverter,
4
+ EmptyFileSystem,
5
+ MermaidGeneratedSharedModule,
6
+ RailroadEbnfGrammarGeneratedModule,
7
+ __name,
8
+ createDefaultCoreModule,
9
+ createDefaultSharedCoreModule,
10
+ inject
11
+ } from "./markdown-dz3z5w30.js";
12
+
13
+ // node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-U6XO7XAA.mjs
14
+ var RailroadEbnfTokenBuilder = class extends AbstractMermaidTokenBuilder {
15
+ static {
16
+ __name(this, "RailroadEbnfTokenBuilder");
17
+ }
18
+ constructor() {
19
+ super(["railroad-ebnf-beta"]);
20
+ }
21
+ };
22
+ var decodeEscapedString = /* @__PURE__ */ __name((input) => {
23
+ const content = input.slice(1, -1);
24
+ let value = "";
25
+ for (let index = 0;index < content.length; index++) {
26
+ const character = content[index];
27
+ if (character === "\\" && index + 1 < content.length) {
28
+ index++;
29
+ const escaped = content[index];
30
+ switch (escaped) {
31
+ case "n":
32
+ value += `
33
+ `;
34
+ break;
35
+ case "r":
36
+ value += "\r";
37
+ break;
38
+ case "t":
39
+ value += "\t";
40
+ break;
41
+ default:
42
+ value += escaped;
43
+ }
44
+ continue;
45
+ }
46
+ value += character;
47
+ }
48
+ return value;
49
+ }, "decodeEscapedString");
50
+ var RailroadEbnfValueConverter = class extends AbstractMermaidValueConverter {
51
+ static {
52
+ __name(this, "RailroadEbnfValueConverter");
53
+ }
54
+ runConverter(rule, input, cstNode) {
55
+ const value = super.runConverter(rule, input, cstNode);
56
+ if (rule.name === "TITLE" && typeof value === "string") {
57
+ const trimmedValue = value.trim();
58
+ if (trimmedValue.startsWith('"') && trimmedValue.endsWith('"') || trimmedValue.startsWith("'") && trimmedValue.endsWith("'")) {
59
+ return decodeEscapedString(trimmedValue);
60
+ }
61
+ }
62
+ return value;
63
+ }
64
+ runCustomConverter(rule, input, _cstNode) {
65
+ if (rule.name === "EBNF_STRING") {
66
+ return decodeEscapedString(input);
67
+ }
68
+ if (rule.name === "EBNF_SPECIAL_SEQUENCE") {
69
+ return input.slice(1, -1).trim();
70
+ }
71
+ return;
72
+ }
73
+ };
74
+ var RailroadEbnfModule = {
75
+ parser: {
76
+ TokenBuilder: /* @__PURE__ */ __name(() => new RailroadEbnfTokenBuilder, "TokenBuilder"),
77
+ ValueConverter: /* @__PURE__ */ __name(() => new RailroadEbnfValueConverter, "ValueConverter")
78
+ }
79
+ };
80
+ function createRailroadEbnfServices(context = EmptyFileSystem) {
81
+ const shared = inject(createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule);
82
+ const RailroadEbnf = inject(createDefaultCoreModule({ shared }), RailroadEbnfGrammarGeneratedModule, RailroadEbnfModule);
83
+ shared.ServiceRegistry.register(RailroadEbnf);
84
+ return { shared, RailroadEbnf };
85
+ }
86
+ __name(createRailroadEbnfServices, "createRailroadEbnfServices");
87
+
88
+ export { RailroadEbnfModule, createRailroadEbnfServices };