chalkbridge 1.0.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 (308) hide show
  1. package/LICENSE +27 -0
  2. package/README.md +66 -0
  3. package/THIRD-PARTY-NOTICES.md +438 -0
  4. package/dist/ar-SA-G6X2FPQ2-IHRIDPR4.js +20 -0
  5. package/dist/az-AZ-76LH7QW2-FWR3DD2C.js +20 -0
  6. package/dist/bg-BG-XCXSNQG7-IJ7WAACU.js +20 -0
  7. package/dist/bn-BD-2XOGV67Q-QYVETSYP.js +20 -0
  8. package/dist/ca-ES-6MX7JW3Y-SOBVUEZY.js +20 -0
  9. package/dist/canvas-roundrect-polyfill-H6Z5O4YN.js +20 -0
  10. package/dist/chunk-7D4SUZUM.js +35 -0
  11. package/dist/chunk-EAE6IZ6E.js +17692 -0
  12. package/dist/chunk-HFKCLTVU.js +1494 -0
  13. package/dist/chunk-OSMXI5VA.js +1638 -0
  14. package/dist/chunk-QGOK75XS.js +31 -0
  15. package/dist/cli.js +6159 -0
  16. package/dist/cs-CZ-2BRQDIVT-WY37XCXG.js +20 -0
  17. package/dist/da-DK-5WZEPLOC-OEXDYHXX.js +20 -0
  18. package/dist/de-DE-XR44H4JA-CHYMDV52.js +20 -0
  19. package/dist/directory-open-01563666-QRZ2F5WT.js +18 -0
  20. package/dist/directory-open-4ed118d0-YYFT6KAI.js +59 -0
  21. package/dist/el-GR-BZB4AONW-PFUEAYDI.js +20 -0
  22. package/dist/en-B4ZKOASM-RQVXIIF2.js +20 -0
  23. package/dist/es-ES-U4NZUMDT-U4COLEPD.js +20 -0
  24. package/dist/eu-ES-A7QVB2H4-2A3YPN4B.js +20 -0
  25. package/dist/fa-IR-HGAKTJCU-K3A3VMB3.js +20 -0
  26. package/dist/fi-FI-Z5N7JZ37-OAX5327W.js +20 -0
  27. package/dist/file-open-002ab408-3W4GHKWC.js +22 -0
  28. package/dist/file-open-7c801643-GAYNVN2D.js +19 -0
  29. package/dist/file-save-3189631c-N4WBRA7X.js +27 -0
  30. package/dist/file-save-745eba88-76KHW454.js +29 -0
  31. package/dist/fr-FR-RHASNOE6-VN34DFEI.js +20 -0
  32. package/dist/gl-ES-HMX3MZ6V-ZKLDSE57.js +20 -0
  33. package/dist/he-IL-6SHJWFNN-DVWDKP5N.js +20 -0
  34. package/dist/hi-IN-IWLTKZ5I-MXIXSFZQ.js +20 -0
  35. package/dist/hu-HU-A5ZG7DT2-UUR52ECU.js +20 -0
  36. package/dist/id-ID-SAP4L64H-DHYFFGCD.js +20 -0
  37. package/dist/image-GAAHSSAO-CFWZUGEZ.js +5 -0
  38. package/dist/image-blob-reduce-ZKP25K2R.js +20 -0
  39. package/dist/index.js +4 -0
  40. package/dist/it-IT-JPQ66NNP-FHS6FPFA.js +20 -0
  41. package/dist/ja-JP-DBVTYXUO-AMIMDPTA.js +20 -0
  42. package/dist/kaa-6HZHGXH3-BH4ZWU4H.js +20 -0
  43. package/dist/kab-KAB-ZGHBKWFO-HM6Q2QFU.js +20 -0
  44. package/dist/kk-KZ-P5N5QNE5-ZMSMI2MP.js +20 -0
  45. package/dist/km-KH-HSX4SM5Z-7WSA4RPS.js +20 -0
  46. package/dist/ko-KR-MTYHY66A-7D3G6L2U.js +20 -0
  47. package/dist/ku-TR-6OUDTVRD-OEGBBNNA.js +20 -0
  48. package/dist/lt-LT-XHIRWOB4-2IXXZF7J.js +20 -0
  49. package/dist/lv-LV-5QDEKY6T-54IAHK7L.js +20 -0
  50. package/dist/mermaid-to-excalidraw-F5UABDGX.js +20 -0
  51. package/dist/mr-IN-CRQNXWMA-Z54WQJ7P.js +20 -0
  52. package/dist/my-MM-5M5IBNSE-7NVT6WZR.js +20 -0
  53. package/dist/nb-NO-T6EIAALU-Y47L7MXQ.js +20 -0
  54. package/dist/nl-NL-IS3SIHDZ-SVJTPE6M.js +20 -0
  55. package/dist/nn-NO-6E72VCQL-IATBYLUX.js +20 -0
  56. package/dist/oc-FR-POXYY2M6-T6O6NZ6A.js +20 -0
  57. package/dist/pa-IN-N4M65BXN-CQTFKR27.js +20 -0
  58. package/dist/percentages-BXMCSKIN-F5SZRLIW.js +20 -0
  59. package/dist/pica-OHNN3T33.js +20 -0
  60. package/dist/pl-PL-T2D74RX3-H62G547Q.js +20 -0
  61. package/dist/prod-KHI2WQT3.js +43228 -0
  62. package/dist/pt-BR-5N22H2LF-IOFFSIBR.js +20 -0
  63. package/dist/pt-PT-UZXXM6DQ-Z3JYHPJA.js +20 -0
  64. package/dist/ro-RO-JPDTUUEW-TNJOBCBY.js +20 -0
  65. package/dist/ru-RU-B4JR7IUQ-LQHFF6I5.js +20 -0
  66. package/dist/si-LK-N5RQ5JYF-7AJ6QJ6S.js +20 -0
  67. package/dist/sk-SK-C5VTKIMK-UOMPMDMS.js +20 -0
  68. package/dist/sl-SI-NN7IZMDC-GCLRUNU3.js +20 -0
  69. package/dist/subset-shared.chunk-RYC3QF4F.js +5 -0
  70. package/dist/subset-worker.chunk-TIUZJQSN.js +18 -0
  71. package/dist/sv-SE-XGPEYMSR-3B5GU363.js +20 -0
  72. package/dist/ta-IN-2NMHFXQM-53HPRXR6.js +20 -0
  73. package/dist/th-TH-HPSO5L25-QHD7HILB.js +20 -0
  74. package/dist/tr-TR-DEFEU3FU-Q22C3NWC.js +20 -0
  75. package/dist/uk-UA-QMV73CPH-LREVZK2B.js +20 -0
  76. package/dist/vi-VN-M7AON7JQ-2CB5FIZH.js +20 -0
  77. package/dist/zh-CN-LNUGB5OW-A3VGS2O7.js +20 -0
  78. package/dist/zh-HK-E62DVLB3-3PKQ62NI.js +20 -0
  79. package/dist/zh-TW-RAJ6MFWO-2XI3I7Z6.js +20 -0
  80. package/guides/arrows.md +85 -0
  81. package/guides/elements.md +92 -0
  82. package/guides/icons.md +111 -0
  83. package/guides/layout.md +75 -0
  84. package/guides/styling.md +85 -0
  85. package/package.json +56 -0
  86. package/packs/generic/LICENSE +26 -0
  87. package/packs/generic/chalk-pack.json +115 -0
  88. package/packs/generic/svg/alert.svg +1 -0
  89. package/packs/generic/svg/api.svg +1 -0
  90. package/packs/generic/svg/browser.svg +1 -0
  91. package/packs/generic/svg/bucket.svg +1 -0
  92. package/packs/generic/svg/cache.svg +1 -0
  93. package/packs/generic/svg/cloud.svg +1 -0
  94. package/packs/generic/svg/cron.svg +1 -0
  95. package/packs/generic/svg/database.svg +1 -0
  96. package/packs/generic/svg/file.svg +1 -0
  97. package/packs/generic/svg/folder.svg +1 -0
  98. package/packs/generic/svg/globe.svg +1 -0
  99. package/packs/generic/svg/key.svg +1 -0
  100. package/packs/generic/svg/load-balancer.svg +1 -0
  101. package/packs/generic/svg/lock.svg +1 -0
  102. package/packs/generic/svg/metrics.svg +1 -0
  103. package/packs/generic/svg/mobile.svg +1 -0
  104. package/packs/generic/svg/queue.svg +1 -0
  105. package/packs/generic/svg/server.svg +1 -0
  106. package/packs/generic/svg/user.svg +1 -0
  107. package/packs/generic/svg/users.svg +1 -0
  108. package/packs/generic/svg/worker.svg +1 -0
  109. package/packs/recipes/aws.yml +63 -0
  110. package/packs/recipes/azure.yml +49 -0
  111. package/packs/recipes/devicon.yml +54 -0
  112. package/packs/recipes/gcp.yml +48 -0
  113. package/packs/recipes/simple-icons.yml +31 -0
  114. package/ui-dist/assets/Assistant-Bold-gm-uSS1B.woff2 +0 -0
  115. package/ui-dist/assets/Assistant-Medium-DrcxCXg3.woff2 +0 -0
  116. package/ui-dist/assets/Assistant-Regular-DVxZuzxb.woff2 +0 -0
  117. package/ui-dist/assets/Assistant-SemiBold-SCI4bEL9.woff2 +0 -0
  118. package/ui-dist/assets/abnfDiagram-VCTEODGH-BJtEDuNS.js +1 -0
  119. package/ui-dist/assets/ar-SA-G6X2FPQ2-B6obDqD5.js +10 -0
  120. package/ui-dist/assets/arc-DgcGdgmL.js +1 -0
  121. package/ui-dist/assets/architecture-7GRP2DOG-8nO9N-PA.js +1 -0
  122. package/ui-dist/assets/architectureDiagram-5GKGNRK7-CvbQe1_v.js +36 -0
  123. package/ui-dist/assets/array-BifhSqXX.js +1 -0
  124. package/ui-dist/assets/az-AZ-76LH7QW2-CfV9ZZWy.js +1 -0
  125. package/ui-dist/assets/bg-BG-XCXSNQG7-DUA8YPCl.js +5 -0
  126. package/ui-dist/assets/blockDiagram-NRAW4CY4-DocsEmiD.js +129 -0
  127. package/ui-dist/assets/bn-BD-2XOGV67Q-DvE_tajm.js +5 -0
  128. package/ui-dist/assets/c4Diagram-UCG6FXSJ-Tx_g_cO9.js +38 -0
  129. package/ui-dist/assets/ca-ES-6MX7JW3Y-DHdtT9lh.js +8 -0
  130. package/ui-dist/assets/channel-uzdT5KPV.js +1 -0
  131. package/ui-dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  132. package/ui-dist/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  133. package/ui-dist/assets/chunk-75Z2AOVW-LAZTrfqO.js +2 -0
  134. package/ui-dist/assets/chunk-DU6HZSFF-DYQVLGqe.js +127 -0
  135. package/ui-dist/assets/chunk-EIO257PC-B41AYx2_.js +22 -0
  136. package/ui-dist/assets/chunk-F27PBJKO-BTHkH7Vo.js +1 -0
  137. package/ui-dist/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
  138. package/ui-dist/assets/chunk-G27WJ6UU-BBBWLXXO.js +231 -0
  139. package/ui-dist/assets/chunk-GMAD6QVW-BkvPd3CL.js +72 -0
  140. package/ui-dist/assets/chunk-JQ64N6SF-CKrtUr61.js +1 -0
  141. package/ui-dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  142. package/ui-dist/assets/chunk-LCL6LL3I-B4K72jRj.js +206 -0
  143. package/ui-dist/assets/chunk-OBVCFTLP-CMCEQnr_.js +1 -0
  144. package/ui-dist/assets/chunk-P2QGCYS3-BNpg6XHk.js +1 -0
  145. package/ui-dist/assets/chunk-POPQ4Y6H-BaAoqHUX.js +1 -0
  146. package/ui-dist/assets/chunk-PWAF6VOD-CGQ4p70E.js +1 -0
  147. package/ui-dist/assets/chunk-R7TYR2AO-B2S7-r2z.js +10 -0
  148. package/ui-dist/assets/chunk-RHFEMEQ7-C_ziruXk.js +168 -0
  149. package/ui-dist/assets/chunk-SVP7TREG-FJEPEsgF.js +88 -0
  150. package/ui-dist/assets/chunk-TEH6E4GO-BvKV-yBX.js +62 -0
  151. package/ui-dist/assets/chunk-XXDRQBXY-BvKO0v-W.js +1 -0
  152. package/ui-dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  153. package/ui-dist/assets/classDiagram-DTDB5LWJ-CodHh4yt.js +1 -0
  154. package/ui-dist/assets/classDiagram-v2-JRS7N3AN-CodHh4yt.js +1 -0
  155. package/ui-dist/assets/cose-bilkent-JH36ORCC-Ch8c5TQK.js +1 -0
  156. package/ui-dist/assets/cs-CZ-2BRQDIVT-BamYs5wC.js +11 -0
  157. package/ui-dist/assets/cynefin-OW5HDTMX-Cj_nyyy3.js +1 -0
  158. package/ui-dist/assets/cynefinDiagram-5FMLGOSQ-B3Rm8-dE.js +62 -0
  159. package/ui-dist/assets/cytoscape.esm-C2x7inlt.js +321 -0
  160. package/ui-dist/assets/da-DK-5WZEPLOC-B8baJSus.js +5 -0
  161. package/ui-dist/assets/dagre-3AP2YEHR-BesdyiUo.js +4 -0
  162. package/ui-dist/assets/dagre-PrKaheQc.js +1 -0
  163. package/ui-dist/assets/de-DE-XR44H4JA-DKPtPOlk.js +8 -0
  164. package/ui-dist/assets/defaultLocale-BFoDCU3G.js +1 -0
  165. package/ui-dist/assets/diagram-S7CK7UJ4-jeIUYTnQ.js +30 -0
  166. package/ui-dist/assets/diagram-UQ7AKVKN-BmAlHtLI.js +41 -0
  167. package/ui-dist/assets/diagram-VSXAHHWV-B-S5XoGb.js +3 -0
  168. package/ui-dist/assets/diagram-VX7I27RA--KrWarId.js +24 -0
  169. package/ui-dist/assets/diagram-Z3DM3KII-B7MnKinD.js +24 -0
  170. package/ui-dist/assets/directory-open-01563666-D4xXyWb_.js +1 -0
  171. package/ui-dist/assets/directory-open-4ed118d0-1i309Asm.js +1 -0
  172. package/ui-dist/assets/dist-B_J_HbC0.js +1 -0
  173. package/ui-dist/assets/dist-C2o0r0se.js +62 -0
  174. package/ui-dist/assets/ebnfDiagram-PWID7BFC-C20WACav.js +1 -0
  175. package/ui-dist/assets/el-GR-BZB4AONW-FSgeiYUW.js +10 -0
  176. package/ui-dist/assets/en-B4ZKOASM-BAWBMIE-.js +1 -0
  177. package/ui-dist/assets/erDiagram-SSCWMZ5O-DU4Qz6qu.js +99 -0
  178. package/ui-dist/assets/es-ES-U4NZUMDT-CZ9XqqCk.js +9 -0
  179. package/ui-dist/assets/eu-ES-A7QVB2H4-CNagAo_o.js +11 -0
  180. package/ui-dist/assets/eventmodeling-NTZA5JFV-CLxW34Y6.js +1 -0
  181. package/ui-dist/assets/fa-IR-HGAKTJCU-CGpX3K56.js +8 -0
  182. package/ui-dist/assets/fi-FI-Z5N7JZ37-D8ErPXQZ.js +6 -0
  183. package/ui-dist/assets/file-open-002ab408-BHUWm0Sh.js +1 -0
  184. package/ui-dist/assets/file-open-7c801643-DZtJT5zp.js +1 -0
  185. package/ui-dist/assets/file-save-3189631c-CO9S4HFW.js +1 -0
  186. package/ui-dist/assets/file-save-745eba88-Bwdfz6OZ.js +1 -0
  187. package/ui-dist/assets/flowDiagram-A5DVABFB-mMONVpxe.js +1 -0
  188. package/ui-dist/assets/fr-FR-RHASNOE6-CgP9qmF-.js +9 -0
  189. package/ui-dist/assets/ganttDiagram-EL5Y4UJY-CNqGfKGy.js +292 -0
  190. package/ui-dist/assets/gitGraph-4MIJSDKK-Cjg2l4tr.js +1 -0
  191. package/ui-dist/assets/gitGraphDiagram-WWUBYQGX-C1RblGyv.js +106 -0
  192. package/ui-dist/assets/gl-ES-HMX3MZ6V-D64w31ga.js +10 -0
  193. package/ui-dist/assets/graphlib-DS17s2tU.js +1 -0
  194. package/ui-dist/assets/he-IL-6SHJWFNN-prTy1rRE.js +10 -0
  195. package/ui-dist/assets/hi-IN-IWLTKZ5I-uvdg8ovV.js +4 -0
  196. package/ui-dist/assets/hu-HU-A5ZG7DT2-OIhzhh7g.js +7 -0
  197. package/ui-dist/assets/id-ID-SAP4L64H-Bs8DbFR5.js +10 -0
  198. package/ui-dist/assets/image-GAAHSSAO-D1P4Y62B.js +1 -0
  199. package/ui-dist/assets/image-blob-reduce.esm-Dj7YBvMv.js +2 -0
  200. package/ui-dist/assets/index-4BcZoMTG.css +1 -0
  201. package/ui-dist/assets/index-CknJbzCM.js +269 -0
  202. package/ui-dist/assets/info-A6RAGUB7-DdLeprH9.js +1 -0
  203. package/ui-dist/assets/infoDiagram-RXCK75RN-B1aPG_BB.js +2 -0
  204. package/ui-dist/assets/init-C-OQMol4.js +1 -0
  205. package/ui-dist/assets/ishikawaDiagram-5VMMS53U-ChG5EVuT.js +70 -0
  206. package/ui-dist/assets/it-IT-JPQ66NNP-CVy3c_Ht.js +11 -0
  207. package/ui-dist/assets/ja-JP-DBVTYXUO-EcX4mq4z.js +8 -0
  208. package/ui-dist/assets/journeyDiagram-EYS64GPL-BZ4Ytc1U.js +139 -0
  209. package/ui-dist/assets/kaa-6HZHGXH3-BwP9az-p.js +1 -0
  210. package/ui-dist/assets/kab-KAB-ZGHBKWFO-By-AIEWs.js +8 -0
  211. package/ui-dist/assets/kanban-definition-3QL26DDD-Dm8bYrkM.js +89 -0
  212. package/ui-dist/assets/katex-CXMH3UgJ.js +257 -0
  213. package/ui-dist/assets/kk-KZ-P5N5QNE5-DYNjxBd-.js +1 -0
  214. package/ui-dist/assets/km-KH-HSX4SM5Z-DS2ZYG-3.js +11 -0
  215. package/ui-dist/assets/ko-KR-MTYHY66A-DOz4vl1z.js +9 -0
  216. package/ui-dist/assets/ku-TR-6OUDTVRD-CxEEWxJq.js +9 -0
  217. package/ui-dist/assets/line-B65qaCJb.js +1 -0
  218. package/ui-dist/assets/linear-n-3HSMUF.js +1 -0
  219. package/ui-dist/assets/lt-LT-XHIRWOB4-CkgB2O8i.js +3 -0
  220. package/ui-dist/assets/lv-LV-5QDEKY6T-BUDeq4Hb.js +7 -0
  221. package/ui-dist/assets/mermaid-parser.core-C60rNywA.js +7 -0
  222. package/ui-dist/assets/mindmap-definition-FBJOCRG2-DAu41qFN.js +96 -0
  223. package/ui-dist/assets/mr-IN-CRQNXWMA-DtuuryqC.js +13 -0
  224. package/ui-dist/assets/my-MM-5M5IBNSE-CC79-XBH.js +1 -0
  225. package/ui-dist/assets/nb-NO-T6EIAALU-CKNIbK-0.js +10 -0
  226. package/ui-dist/assets/nl-NL-IS3SIHDZ-B3dYZhvS.js +8 -0
  227. package/ui-dist/assets/nn-NO-6E72VCQL-CdPrOnP4.js +8 -0
  228. package/ui-dist/assets/oc-FR-POXYY2M6-DUmzGjKc.js +8 -0
  229. package/ui-dist/assets/ordinal-BDEzSJ7C.js +1 -0
  230. package/ui-dist/assets/pa-IN-N4M65BXN-DH39ZTHj.js +4 -0
  231. package/ui-dist/assets/packet-AYTQ26CC-DdR4jEOZ.js +1 -0
  232. package/ui-dist/assets/path-fybaL0A-.js +1 -0
  233. package/ui-dist/assets/pegDiagram-XKGWAZYB-Dx1lj8MV.js +1 -0
  234. package/ui-dist/assets/percentages-BXMCSKIN-d5p7s-wT.js +1 -0
  235. package/ui-dist/assets/pica-xkWDouSg.js +2 -0
  236. package/ui-dist/assets/pie-WAS4IAKB-cVrV21tR.js +1 -0
  237. package/ui-dist/assets/pieDiagram-E7YTZNPT-CcvgLYQz.js +39 -0
  238. package/ui-dist/assets/pl-PL-T2D74RX3-BNYpL8df.js +9 -0
  239. package/ui-dist/assets/pt-BR-5N22H2LF-RWmGHl_8.js +9 -0
  240. package/ui-dist/assets/pt-PT-UZXXM6DQ-smq6YmTY.js +9 -0
  241. package/ui-dist/assets/quadrantDiagram-AXDQQJYC-C4xDsL0E.js +7 -0
  242. package/ui-dist/assets/radar-RG4KPBEZ-DYaemlGZ.js +1 -0
  243. package/ui-dist/assets/railroad-74A4TZTK-BbRg5RPZ.js +1 -0
  244. package/ui-dist/assets/railroad-abnf-HS5TGJTU-BoiCOpxv.js +1 -0
  245. package/ui-dist/assets/railroad-ebnf-LZEXJU2U-ArFqgLSZ.js +1 -0
  246. package/ui-dist/assets/railroad-peg-WCYAUIDC-BAks8GCx.js +1 -0
  247. package/ui-dist/assets/railroadDiagram-O6MQD6OU-CR1fbGhX.js +1 -0
  248. package/ui-dist/assets/requirementDiagram-EFPCY7ZU-CFp52i96.js +84 -0
  249. package/ui-dist/assets/ro-RO-JPDTUUEW-BOjKaxCz.js +11 -0
  250. package/ui-dist/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
  251. package/ui-dist/assets/rough.esm-Dy-Kn_BL.js +1 -0
  252. package/ui-dist/assets/roundRect-D01gJrlt.js +1 -0
  253. package/ui-dist/assets/ru-RU-B4JR7IUQ-DOK2ZlyX.js +9 -0
  254. package/ui-dist/assets/sankeyDiagram-P5KCCOFB-CZWdGNnS.js +40 -0
  255. package/ui-dist/assets/sequenceDiagram-WJ2MYXX4-D4X03yFA.js +162 -0
  256. package/ui-dist/assets/si-LK-N5RQ5JYF-BtKkEPfN.js +1 -0
  257. package/ui-dist/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
  258. package/ui-dist/assets/sk-SK-C5VTKIMK-DehBWGkI.js +6 -0
  259. package/ui-dist/assets/sl-SI-NN7IZMDC-ClR46UYx.js +6 -0
  260. package/ui-dist/assets/src-oBChb5qS.js +1 -0
  261. package/ui-dist/assets/stateDiagram-HBIQ2CUA-Bg1Uy2K-.js +1 -0
  262. package/ui-dist/assets/stateDiagram-v2-4QOOHH4V-Ci4MD4Pt.js +1 -0
  263. package/ui-dist/assets/subset-shared.chunk-DQ-JqEaX.js +1 -0
  264. package/ui-dist/assets/subset-worker.chunk-BLppPGco.js +1 -0
  265. package/ui-dist/assets/sv-SE-XGPEYMSR-Cq54FLpH.js +10 -0
  266. package/ui-dist/assets/swimlanes-XN3QIQJK-Ca4vLBMp.js +1 -0
  267. package/ui-dist/assets/swimlanesDiagram-VK2B7HYN-BKiafpMh.js +8 -0
  268. package/ui-dist/assets/ta-IN-2NMHFXQM-SCh3n0lB.js +9 -0
  269. package/ui-dist/assets/th-TH-HPSO5L25-BotlAjVv.js +2 -0
  270. package/ui-dist/assets/timeline-definition-24CTP7MA-CjHCKN4P.js +120 -0
  271. package/ui-dist/assets/tr-TR-DEFEU3FU-B4u6Au2y.js +7 -0
  272. package/ui-dist/assets/treeView-Q6P3EWNA-CKMtikLc.js +1 -0
  273. package/ui-dist/assets/treemap-WGGIJYW6-B51xYeX7.js +1 -0
  274. package/ui-dist/assets/uk-UA-QMV73CPH-CtQkKgv_.js +6 -0
  275. package/ui-dist/assets/vennDiagram-4TSXK5OY-CSH3IvAD.js +34 -0
  276. package/ui-dist/assets/vi-VN-M7AON7JQ-CjZyv0HH.js +5 -0
  277. package/ui-dist/assets/wardley-WFR3VGLG-wnJkewtF.js +1 -0
  278. package/ui-dist/assets/wardleyDiagram-VM6X3IG4-BJuisjH-.js +78 -0
  279. package/ui-dist/assets/xychartDiagram-S5SC5T6Z-hiDu0XBA.js +7 -0
  280. package/ui-dist/assets/zh-CN-LNUGB5OW-DyyyDDxj.js +10 -0
  281. package/ui-dist/assets/zh-HK-E62DVLB3-Ch2pxiFR.js +1 -0
  282. package/ui-dist/assets/zh-TW-RAJ6MFWO-CSf1_B6H.js +9 -0
  283. package/ui-dist/fonts/Assistant/Assistant-Bold.woff2 +0 -0
  284. package/ui-dist/fonts/Assistant/Assistant-Medium.woff2 +0 -0
  285. package/ui-dist/fonts/Assistant/Assistant-Regular.woff2 +0 -0
  286. package/ui-dist/fonts/Assistant/Assistant-SemiBold.woff2 +0 -0
  287. package/ui-dist/fonts/Cascadia/CascadiaCode-Regular.woff2 +0 -0
  288. package/ui-dist/fonts/ComicShanns/ComicShanns-Regular-279a7b317d12eb88de06167bd672b4b4.woff2 +0 -0
  289. package/ui-dist/fonts/ComicShanns/ComicShanns-Regular-6e066e8de2ac57ea9283adb9c24d7f0c.woff2 +0 -0
  290. package/ui-dist/fonts/ComicShanns/ComicShanns-Regular-dc6a8806fa96795d7b3be5026f989a17.woff2 +0 -0
  291. package/ui-dist/fonts/ComicShanns/ComicShanns-Regular-fcb0fc02dcbee4c9846b3e2508668039.woff2 +0 -0
  292. package/ui-dist/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 +0 -0
  293. package/ui-dist/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 +0 -0
  294. package/ui-dist/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 +0 -0
  295. package/ui-dist/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 +0 -0
  296. package/ui-dist/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 +0 -0
  297. package/ui-dist/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 +0 -0
  298. package/ui-dist/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 +0 -0
  299. package/ui-dist/fonts/Liberation/LiberationSans-Regular.woff2 +0 -0
  300. package/ui-dist/fonts/Lilita/Lilita-Regular-i7dPIFZ9Zz-WBtRtedDbYE98RXi4EwSsbg.woff2 +0 -0
  301. package/ui-dist/fonts/Lilita/Lilita-Regular-i7dPIFZ9Zz-WBtRtedDbYEF8RXi4EwQ.woff2 +0 -0
  302. package/ui-dist/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTA3j6zbXWjgevT5.woff2 +0 -0
  303. package/ui-dist/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTQ3j6zbXWjgeg.woff2 +0 -0
  304. package/ui-dist/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTk3j6zbXWjgevT5.woff2 +0 -0
  305. package/ui-dist/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTo3j6zbXWjgevT5.woff2 +0 -0
  306. package/ui-dist/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTs3j6zbXWjgevT5.woff2 +0 -0
  307. package/ui-dist/fonts/Virgil/Virgil-Regular.woff2 +0 -0
  308. package/ui-dist/index.html +14 -0
@@ -0,0 +1,1494 @@
1
+ import { z } from 'zod';
2
+
3
+ // src/domain/result.ts
4
+ var ok = (value) => ({ ok: true, value });
5
+ var fail = (error) => ({ ok: false, error });
6
+ var isOk = (r) => r.ok;
7
+ var isFail = (r) => !r.ok;
8
+ var partition = (results) => {
9
+ const applied = [];
10
+ const rejected = [];
11
+ for (const r of results) {
12
+ if (r.ok) applied.push(r.value);
13
+ else rejected.push(r.error);
14
+ }
15
+ return { applied, rejected };
16
+ };
17
+ var nonEmpty = z.string().min(1);
18
+ var SceneId = nonEmpty.brand();
19
+ var ElementId = nonEmpty.brand();
20
+ var GroupId = nonEmpty.brand();
21
+ var FrameId = nonEmpty.brand();
22
+ var IconId = nonEmpty.brand();
23
+ var PackName = z.string().regex(/^[a-z0-9][a-z0-9-]*$/, "pack names are lowercase kebab-case").brand();
24
+ var SnapshotId = nonEmpty.brand();
25
+ var frameIdOf = (id) => FrameId.parse(id);
26
+
27
+ // ../shared/dist/element.js
28
+ var isFiniteNumber = (v) => typeof v === "number" && Number.isFinite(v);
29
+ var isNonEmptyString = (v) => typeof v === "string" && v.length > 0;
30
+ var Angle = z.custom(isFiniteNumber, {
31
+ message: "angle must be a finite number of radians"
32
+ });
33
+ var Index = z.custom(isNonEmptyString, {
34
+ message: "index must be a non-empty fractional-index string"
35
+ });
36
+ var LineHeight = z.custom(isFiniteNumber, {
37
+ message: "lineHeight is unitless \u2014 multiply by fontSize to get px"
38
+ });
39
+ var Point = z.custom((v) => Array.isArray(v) && v.length === 2 && v.every(isFiniteNumber), { message: "a point is [x, y]" });
40
+ var point = (x, y) => Point.parse([x, y]);
41
+ var FileId = z.custom(isNonEmptyString, {
42
+ message: "fileId must be a non-empty string"
43
+ });
44
+ var FillStyle = z.enum(["hachure", "cross-hatch", "solid", "zigzag"]);
45
+ var StrokeStyle = z.enum(["solid", "dashed", "dotted"]);
46
+ var TextAlign = z.enum(["left", "center", "right"]);
47
+ var VerticalAlign = z.enum(["top", "middle", "bottom"]);
48
+ var Arrowhead = z.enum([
49
+ "arrow",
50
+ "bar",
51
+ "dot",
52
+ "circle",
53
+ "circle_outline",
54
+ "triangle",
55
+ "triangle_outline",
56
+ "diamond",
57
+ "diamond_outline",
58
+ "crowfoot_one",
59
+ "crowfoot_many",
60
+ "crowfoot_one_or_many"
61
+ ]);
62
+ var ROUNDNESS = {
63
+ LEGACY: 1,
64
+ PROPORTIONAL_RADIUS: 2,
65
+ ADAPTIVE_RADIUS: 3
66
+ };
67
+ var RoundnessType = z.union([z.literal(1), z.literal(2), z.literal(3)]);
68
+ var Roundness = z.object({
69
+ type: RoundnessType,
70
+ value: z.number().optional()
71
+ });
72
+ var FONT_FAMILY = {
73
+ Excalifont: 5};
74
+ var FontFamily = z.number().int();
75
+ var BoundElementRef = z.object({
76
+ id: ElementId,
77
+ type: z.enum(["arrow", "text"])
78
+ });
79
+ var PointBinding = z.object({
80
+ elementId: ElementId,
81
+ focus: z.number(),
82
+ gap: z.number()
83
+ });
84
+ var ChalkAuthor = z.enum(["human", "claude"]);
85
+ var ChalkMeta = z.object({
86
+ author: ChalkAuthor,
87
+ kind: z.enum(["icon", "note", "embed"]).optional(),
88
+ iconId: IconId.optional(),
89
+ anchorIds: z.array(ElementId).optional()
90
+ });
91
+ var CustomData = z.looseObject({ chalk: ChalkMeta.optional() });
92
+ var base = {
93
+ id: ElementId,
94
+ x: z.number(),
95
+ y: z.number(),
96
+ width: z.number(),
97
+ height: z.number(),
98
+ angle: Angle,
99
+ strokeColor: z.string(),
100
+ backgroundColor: z.string(),
101
+ fillStyle: FillStyle,
102
+ strokeWidth: z.number(),
103
+ strokeStyle: StrokeStyle,
104
+ roughness: z.number(),
105
+ opacity: z.number(),
106
+ roundness: Roundness.nullable(),
107
+ groupIds: z.array(GroupId),
108
+ frameId: FrameId.nullable(),
109
+ /**
110
+ * Defaulted rather than required: a file written by another tool may leave it out,
111
+ * and `null` is what "no bindings" means. It also keeps every caller out of the
112
+ * business of *assigning* a binding field — the one thing invariant 16 exists to stop,
113
+ * and what `tooling/lint-rules/no-hand-bindings.test.ts` checks for by name.
114
+ */
115
+ boundElements: z.array(BoundElementRef).nullable().default(null),
116
+ link: z.string().nullable(),
117
+ locked: z.boolean(),
118
+ index: Index.nullable(),
119
+ // Server-managed. Parsed here because the browser and the disk send them;
120
+ // rejected from Claude by the tool input schemas (invariant 29), not by this file.
121
+ seed: z.number(),
122
+ version: z.number(),
123
+ versionNonce: z.number(),
124
+ updated: z.number(),
125
+ isDeleted: z.boolean(),
126
+ customData: CustomData.optional()
127
+ };
128
+ var linear = {
129
+ ...base,
130
+ points: z.array(Point),
131
+ lastCommittedPoint: Point.nullable(),
132
+ startBinding: PointBinding.nullable(),
133
+ endBinding: PointBinding.nullable(),
134
+ startArrowhead: Arrowhead.nullable(),
135
+ endArrowhead: Arrowhead.nullable()
136
+ };
137
+ var RectangleElement = z.looseObject({ ...base, type: z.literal("rectangle") });
138
+ var DiamondElement = z.looseObject({ ...base, type: z.literal("diamond") });
139
+ var EllipseElement = z.looseObject({ ...base, type: z.literal("ellipse") });
140
+ var EmbeddableElement = z.looseObject({ ...base, type: z.literal("embeddable") });
141
+ var TextElement = z.looseObject({
142
+ ...base,
143
+ type: z.literal("text"),
144
+ text: z.string(),
145
+ originalText: z.string(),
146
+ fontSize: z.number(),
147
+ fontFamily: FontFamily,
148
+ textAlign: TextAlign,
149
+ verticalAlign: VerticalAlign,
150
+ lineHeight: LineHeight,
151
+ autoResize: z.boolean(),
152
+ containerId: ElementId.nullable()
153
+ });
154
+ var LineElement = z.looseObject({ ...linear, type: z.literal("line") });
155
+ var ArrowElement = z.looseObject({
156
+ ...linear,
157
+ type: z.literal("arrow"),
158
+ elbowed: z.boolean().default(false)
159
+ });
160
+ var FreedrawElement = z.looseObject({
161
+ ...base,
162
+ type: z.literal("freedraw"),
163
+ points: z.array(Point),
164
+ pressures: z.array(z.number()),
165
+ simulatePressure: z.boolean(),
166
+ lastCommittedPoint: Point.nullable()
167
+ });
168
+ var ImageElement = z.looseObject({
169
+ ...base,
170
+ type: z.literal("image"),
171
+ fileId: FileId.nullable(),
172
+ status: z.enum(["pending", "saved", "error"]),
173
+ scale: z.tuple([z.number(), z.number()]),
174
+ crop: z.object({
175
+ x: z.number(),
176
+ y: z.number(),
177
+ width: z.number(),
178
+ height: z.number(),
179
+ naturalWidth: z.number(),
180
+ naturalHeight: z.number()
181
+ }).nullable()
182
+ });
183
+ var FrameElement = z.looseObject({
184
+ ...base,
185
+ type: z.literal("frame"),
186
+ name: z.string().nullable()
187
+ });
188
+ var SceneElement = z.discriminatedUnion("type", [
189
+ RectangleElement,
190
+ DiamondElement,
191
+ EllipseElement,
192
+ TextElement,
193
+ LineElement,
194
+ ArrowElement,
195
+ FreedrawElement,
196
+ ImageElement,
197
+ FrameElement,
198
+ EmbeddableElement
199
+ ]);
200
+ var ElementType = z.enum([
201
+ "rectangle",
202
+ "diamond",
203
+ "ellipse",
204
+ "text",
205
+ "line",
206
+ "arrow",
207
+ "freedraw",
208
+ "image",
209
+ "frame",
210
+ "embeddable"
211
+ ]);
212
+ var SERVER_MANAGED_FIELDS = [
213
+ "seed",
214
+ "version",
215
+ "versionNonce",
216
+ "updated",
217
+ "isDeleted",
218
+ "index"
219
+ ];
220
+ var BINDING_FIELDS = [
221
+ "boundElements",
222
+ "containerId",
223
+ "startBinding",
224
+ "endBinding"
225
+ ];
226
+ var SceneFile = z.object({
227
+ id: FileId,
228
+ mimeType: z.string(),
229
+ dataURL: z.string(),
230
+ created: z.number(),
231
+ lastRetrieved: z.number().optional()
232
+ });
233
+ var SceneFiles = z.record(z.string(), SceneFile);
234
+ var skeletonStyle = {
235
+ width: z.number().optional(),
236
+ height: z.number().optional(),
237
+ angle: Angle.optional(),
238
+ strokeColor: z.string().optional(),
239
+ backgroundColor: z.string().optional(),
240
+ fillStyle: FillStyle.optional(),
241
+ strokeWidth: z.number().optional(),
242
+ strokeStyle: StrokeStyle.optional(),
243
+ roughness: z.number().optional(),
244
+ opacity: z.number().optional(),
245
+ roundness: Roundness.nullish(),
246
+ groupIds: z.array(GroupId).optional(),
247
+ frameId: FrameId.nullish(),
248
+ link: z.string().nullish(),
249
+ locked: z.boolean().optional(),
250
+ customData: CustomData.optional()
251
+ };
252
+ var SkeletonLabel = z.object({
253
+ text: z.string(),
254
+ fontSize: z.number().optional(),
255
+ fontFamily: FontFamily.optional(),
256
+ textAlign: TextAlign.optional(),
257
+ verticalAlign: VerticalAlign.optional(),
258
+ strokeColor: z.string().optional()
259
+ });
260
+ var SkeletonEndpoint = z.union([
261
+ z.object({ id: ElementId, type: z.enum(["rectangle", "diamond", "ellipse"]).optional() }),
262
+ z.object({ type: z.enum(["rectangle", "diamond", "ellipse"]), id: ElementId.optional() })
263
+ ]);
264
+ var ContainerSkeleton = z.strictObject({
265
+ ...skeletonStyle,
266
+ type: z.enum(["rectangle", "diamond", "ellipse"]),
267
+ id: ElementId,
268
+ x: z.number(),
269
+ y: z.number(),
270
+ label: SkeletonLabel.optional()
271
+ });
272
+ var LinearSkeleton = z.strictObject({
273
+ ...skeletonStyle,
274
+ type: z.enum(["arrow", "line"]),
275
+ id: ElementId,
276
+ x: z.number(),
277
+ y: z.number(),
278
+ label: SkeletonLabel.optional(),
279
+ start: SkeletonEndpoint.optional(),
280
+ end: SkeletonEndpoint.optional(),
281
+ points: z.array(Point).optional(),
282
+ startArrowhead: Arrowhead.nullish(),
283
+ endArrowhead: Arrowhead.nullish(),
284
+ elbowed: z.boolean().optional()
285
+ });
286
+ var TextSkeleton = z.strictObject({
287
+ ...skeletonStyle,
288
+ type: z.literal("text"),
289
+ id: ElementId,
290
+ x: z.number(),
291
+ y: z.number(),
292
+ text: z.string(),
293
+ fontSize: z.number().optional(),
294
+ fontFamily: FontFamily.optional(),
295
+ textAlign: TextAlign.optional(),
296
+ verticalAlign: VerticalAlign.optional()
297
+ });
298
+ var FrameSkeleton = z.strictObject({
299
+ type: z.literal("frame"),
300
+ id: ElementId,
301
+ children: z.array(ElementId),
302
+ name: z.string().optional(),
303
+ x: z.number().optional(),
304
+ y: z.number().optional(),
305
+ width: z.number().optional(),
306
+ height: z.number().optional(),
307
+ customData: CustomData.optional()
308
+ });
309
+ var ImageSkeleton = z.strictObject({
310
+ ...skeletonStyle,
311
+ type: z.literal("image"),
312
+ id: ElementId,
313
+ x: z.number(),
314
+ y: z.number(),
315
+ fileId: FileId
316
+ });
317
+ var EmbeddableSkeleton = z.strictObject({
318
+ ...skeletonStyle,
319
+ type: z.literal("embeddable"),
320
+ id: ElementId,
321
+ x: z.number(),
322
+ y: z.number(),
323
+ link: z.string()
324
+ });
325
+ z.union([
326
+ ContainerSkeleton,
327
+ LinearSkeleton,
328
+ TextSkeleton,
329
+ FrameSkeleton,
330
+ ImageSkeleton,
331
+ EmbeddableSkeleton
332
+ ]);
333
+
334
+ // ../shared/dist/describe.js
335
+ var DetailLevel = z.enum(["compact", "full"]);
336
+ var ElementFlag = z.enum(["selected", "link", "locked"]);
337
+ var FLAG_GLYPH = {
338
+ selected: "*",
339
+ link: "\u2197link",
340
+ locked: "\u{1F512}"
341
+ };
342
+ var Bounds = z.object({
343
+ x: z.number(),
344
+ y: z.number(),
345
+ width: z.number(),
346
+ height: z.number()
347
+ });
348
+ var DescribedKind = z.object({
349
+ type: ElementType,
350
+ iconId: IconId.nullish()
351
+ });
352
+ var DescribedFrame = z.object({
353
+ id: FrameId,
354
+ /** The stable short handle shown in the DSL — `F1`, `F2`. */
355
+ handle: z.string(),
356
+ name: z.string().nullable(),
357
+ bounds: Bounds
358
+ });
359
+ var DescribedStyle = z.object({
360
+ strokeColor: z.string(),
361
+ backgroundColor: z.string(),
362
+ strokeStyle: z.string(),
363
+ fillStyle: z.string(),
364
+ opacity: z.number(),
365
+ fontSize: z.number().nullish(),
366
+ fontFamily: z.number().nullish()
367
+ });
368
+ var DescribedElement = z.object({
369
+ id: ElementId,
370
+ /** Short, human-quotable id prefix — what Claude and the user say out loud. */
371
+ shortId: z.string(),
372
+ kind: DescribedKind,
373
+ label: z.string().nullable(),
374
+ bounds: Bounds.nullable(),
375
+ version: z.number().int(),
376
+ author: ChalkAuthor,
377
+ frameHandle: z.string().nullable(),
378
+ flags: z.array(ElementFlag),
379
+ /** Populated for arrows and lines only. */
380
+ from: ElementId.nullish(),
381
+ to: ElementId.nullish(),
382
+ style: DescribedStyle.nullish()
383
+ });
384
+ var SceneDescription = z.object({
385
+ sceneId: SceneId,
386
+ name: z.string(),
387
+ sceneVersion: z.number().int(),
388
+ elementCount: z.number().int(),
389
+ updatedAgoMs: z.number().int(),
390
+ frames: z.array(DescribedFrame),
391
+ elements: z.array(DescribedElement),
392
+ detail: DetailLevel
393
+ });
394
+ var DescribedEdge = z.object({
395
+ id: ElementId,
396
+ shortId: z.string(),
397
+ from: ElementId,
398
+ fromLabel: z.string().nullable(),
399
+ to: ElementId,
400
+ toLabel: z.string().nullable(),
401
+ label: z.string().nullable()
402
+ });
403
+ var SelectionDescription = z.object({
404
+ sceneId: SceneId,
405
+ elements: z.array(DescribedElement),
406
+ edgesInside: z.array(DescribedEdge),
407
+ edgesCrossingBoundary: z.array(DescribedEdge),
408
+ frames: z.array(DescribedFrame),
409
+ selectedAgoMs: z.number().int().nullable(),
410
+ /** True past `STALE_SELECTION_MS`; the renderer appends the confirm-with-the-user note. */
411
+ stale: z.boolean()
412
+ });
413
+ var STALE_SELECTION_MS = 12e4;
414
+ var KIND_ABBREVIATION = {
415
+ rectangle: "rect",
416
+ diamond: "diamond",
417
+ ellipse: "ellipse",
418
+ text: "text",
419
+ line: "line",
420
+ arrow: "arrow",
421
+ freedraw: "draw",
422
+ image: "image",
423
+ frame: "frame",
424
+ embeddable: "embed"
425
+ };
426
+ var PackKind = z.enum(["bundled", "npm", "vendor", "library"]);
427
+ var iconIdOf = (pack, name) => IconId.parse(`${pack}/${name}`);
428
+ var IconSummary = z.object({
429
+ id: IconId,
430
+ pack: PackName,
431
+ name: z.string(),
432
+ tags: z.array(z.string()),
433
+ license: z.string()
434
+ });
435
+ var IconArt = z.discriminatedUnion("kind", [
436
+ z.object({
437
+ kind: z.literal("svg"),
438
+ svg: z.string().min(1),
439
+ width: z.number().positive(),
440
+ height: z.number().positive()
441
+ }),
442
+ z.object({
443
+ kind: z.literal("elements"),
444
+ elements: z.array(SceneElement).min(1),
445
+ width: z.number().positive(),
446
+ height: z.number().positive()
447
+ })
448
+ ]);
449
+ var IconItem = IconSummary.extend({ art: IconArt });
450
+ var PackReceipt = z.object({
451
+ pack: PackName,
452
+ kind: PackKind,
453
+ version: z.string(),
454
+ source: z.string(),
455
+ license: z.string(),
456
+ iconCount: z.number().int().nonnegative(),
457
+ installedAt: z.number().int()
458
+ });
459
+ var PackRecipe = z.object({
460
+ name: PackName,
461
+ kind: PackKind.default("vendor"),
462
+ license: z.string(),
463
+ source: z.string(),
464
+ /**
465
+ * The npm package to install for `kind: npm`. Defaults to the `@chalkbridge/pack-<name>`
466
+ * convention (§2.6), and named explicitly when an upstream project already publishes
467
+ * its own SVGs — Devicon and Simple Icons both do, and re-publishing them under our
468
+ * scope would be a fork of somebody else artwork for no reason.
469
+ */
470
+ npmPackage: z.string().optional(),
471
+ /** Where the SVGs are, inside the installed package or the unzipped folder. */
472
+ svgDir: z.string().default(""),
473
+ /**
474
+ * Only ingest files whose path contains one of these, case-insensitively.
475
+ *
476
+ * Icon sets routinely ship four variants of every glyph. Without this, `react-line`,
477
+ * `react-original` and `react-plain` all normalise to `react`, two of the three are
478
+ * skipped as duplicates, and *which* one survives depends on directory order.
479
+ */
480
+ include: z.array(z.string()).default([]),
481
+ /** Shown verbatim by `chalk_install_pack` and `chalkbridge icons install`. */
482
+ instructions: z.array(z.string()).default([]),
483
+ tagRules: z.object({
484
+ fromPathSegments: z.boolean().default(true),
485
+ strip: z.array(z.string()).default([])
486
+ }).default({ fromPathSegments: true, strip: [] }),
487
+ synonyms: z.record(z.string(), z.array(z.string())).default({})
488
+ });
489
+ var PackHealth = z.object({
490
+ pack: PackName,
491
+ kind: PackKind,
492
+ /** What the receipt claims. */
493
+ expected: z.number().int().nonnegative(),
494
+ /** What the `icons` table actually holds. */
495
+ indexed: z.number().int().nonnegative(),
496
+ /** Whether the pack's directory is still where the receipt says. `null` for bundled. */
497
+ filesPresent: z.boolean().nullable(),
498
+ problems: z.array(z.string())
499
+ });
500
+ var AppState = z.looseObject({
501
+ viewBackgroundColor: z.string().optional(),
502
+ gridSize: z.number().nullish(),
503
+ gridModeEnabled: z.boolean().optional(),
504
+ theme: z.enum(["light", "dark"]).optional(),
505
+ name: z.string().nullish()
506
+ });
507
+ var SceneResolvedVia = z.enum(["requested", "browser", "most-recent"]);
508
+ var SceneSettings = z.object({
509
+ viewBackgroundColor: z.string().nullable(),
510
+ gridSize: z.number().nullable(),
511
+ gridModeEnabled: z.boolean().nullable(),
512
+ theme: z.enum(["light", "dark"]).nullable(),
513
+ name: z.string().nullable()
514
+ });
515
+ var SceneSettingsPatch = z.strictObject({
516
+ viewBackgroundColor: z.string().optional(),
517
+ gridSize: z.number().nullish(),
518
+ gridModeEnabled: z.boolean().optional(),
519
+ theme: z.enum(["light", "dark"]).optional(),
520
+ name: z.string().optional()
521
+ }, {
522
+ // The refusal has to teach, and it has to do it *from the schema*: an MCP client
523
+ // validates against the published `inputSchema` and never reaches a handler, so a
524
+ // message written in `interfaces/` would never be seen. Zod's default here is
525
+ // "Unrecognized key: scrollX", which says what happened and nothing about what to do.
526
+ error: (issue) => issue.code === "unrecognized_keys" ? `${issue.keys.join(", ")} is not a scene setting \u2014 the viewport belongs to the user, and chalk_focus is how you draw their attention to something` : void 0
527
+ });
528
+ var Scene = z.object({
529
+ id: SceneId,
530
+ name: z.string(),
531
+ /** Where it lives in the repo, relative to the repo root. `null` until first saved. */
532
+ repoPath: z.string().nullable(),
533
+ elements: z.array(SceneElement),
534
+ appState: AppState,
535
+ files: SceneFiles,
536
+ /**
537
+ * Bumped on every mutation, independent of per-element `version`. This is what the
538
+ * browser reconciles against and what `chalk_describe_scene` reports.
539
+ */
540
+ sceneVersion: z.number().int().nonnegative(),
541
+ updatedAt: z.number().int(),
542
+ /**
543
+ * The mtime of the `.excalidraw` file as Chalkbridge last wrote it, or `null` if it
544
+ * has never been written. A watcher event carrying a different mtime is somebody
545
+ * else's edit, which is how invariant 24 tells "our own write echoing back" from "a
546
+ * change that must not silently win".
547
+ */
548
+ diskMtime: z.number().int().nullable(),
549
+ /**
550
+ * The `sceneVersion` that last reached the `.excalidraw` file, or `null` if none has.
551
+ *
552
+ * This is what makes "is the repo file up to date?" answerable after a restart. It
553
+ * matters because a bridge does not always get to shut down gracefully — on Windows a
554
+ * `SIGTERM` from another process terminates it outright, and the handler that flushes
555
+ * pending writes never runs. The work is safe either way (it is in `chalk.db`), but
556
+ * without this the file would stay behind until the next edit.
557
+ */
558
+ writtenSceneVersion: z.number().int().nullable()
559
+ });
560
+ var SceneSummary = z.object({
561
+ id: SceneId,
562
+ name: z.string(),
563
+ repoPath: z.string().nullable(),
564
+ elementCount: z.number().int().nonnegative(),
565
+ sceneVersion: z.number().int().nonnegative(),
566
+ updatedAt: z.number().int()
567
+ });
568
+ z.object({
569
+ sceneId: SceneId,
570
+ elementIds: z.array(ElementId),
571
+ at: z.number().int()
572
+ });
573
+ var HealthResponse = z.object({
574
+ service: z.literal("chalkbridge"),
575
+ version: z.string(),
576
+ pid: z.number().int(),
577
+ repoRoot: z.string(),
578
+ port: z.number().int(),
579
+ /** How many browser tabs are subscribed. Zero is what triggers auto-open. */
580
+ uiClients: z.number().int().nonnegative(),
581
+ sceneCount: z.number().int().nonnegative(),
582
+ uptimeMs: z.number().int().nonnegative()
583
+ });
584
+ var DebugElementRequest = z.object({
585
+ sceneId: SceneId.optional(),
586
+ x: z.number().default(120),
587
+ y: z.number().default(140),
588
+ label: z.string().default("hello from the bridge")
589
+ });
590
+ z.object({
591
+ sceneId: SceneId,
592
+ sceneVersion: z.number().int(),
593
+ created: z.array(ElementId),
594
+ /** Browsers the patch was pushed to. Zero is a success, not a failure — §4. */
595
+ broadcastTo: z.number().int().nonnegative()
596
+ });
597
+ var EXCALIDRAW_FILE_TYPE = "excalidraw";
598
+ var EXCALIDRAW_FILE_VERSION = 2;
599
+ var ExcalidrawFile = z.looseObject({
600
+ type: z.literal(EXCALIDRAW_FILE_TYPE),
601
+ version: z.number().int(),
602
+ /** Which app wrote it. Informational — Excalidraw's `restore` ignores it. */
603
+ source: z.string(),
604
+ elements: z.array(SceneElement),
605
+ appState: AppState.default({}),
606
+ files: SceneFiles.default({})
607
+ });
608
+ var ApiError = z.object({
609
+ code: z.string(),
610
+ message: z.string(),
611
+ hint: z.string().optional(),
612
+ tool: z.string().optional()
613
+ });
614
+
615
+ // ../shared/dist/protocol.js
616
+ var PROTOCOL_VERSION = 1;
617
+ var PatchOrigin = z.enum(["claude", "restore", "import", "disk"]);
618
+ var ClaudeActivity = z.enum(["idle", "reading", "writing"]);
619
+ var ExportFormat = z.enum(["png", "svg"]);
620
+ var AppStatePatch = AppState;
621
+ var Hello = z.object({
622
+ t: z.literal("hello"),
623
+ protocolVersion: z.number().int(),
624
+ clientId: z.string().min(1),
625
+ sceneId: SceneId.nullish()
626
+ });
627
+ var SceneDelta = z.object({
628
+ t: z.literal("scene_delta"),
629
+ sceneId: SceneId,
630
+ elements: z.array(SceneElement),
631
+ appState: AppStatePatch.optional(),
632
+ files: SceneFiles.optional(),
633
+ at: z.number().int()
634
+ });
635
+ var Selection = z.object({
636
+ t: z.literal("selection"),
637
+ sceneId: SceneId,
638
+ elementIds: z.array(ElementId),
639
+ at: z.number().int()
640
+ });
641
+ var ExportResult = z.object({
642
+ t: z.literal("export_result"),
643
+ requestId: z.string().min(1),
644
+ ok: z.boolean(),
645
+ dataUrl: z.string().optional(),
646
+ error: z.string().optional()
647
+ });
648
+ var ClientMessage = z.discriminatedUnion("t", [
649
+ Hello,
650
+ SceneDelta,
651
+ Selection,
652
+ ExportResult
653
+ ]);
654
+ var ScenePatch = z.object({
655
+ t: z.literal("scene_patch"),
656
+ sceneId: SceneId,
657
+ origin: PatchOrigin,
658
+ sceneVersion: z.number().int(),
659
+ elements: z.array(SceneElement),
660
+ removedIds: z.array(ElementId).optional(),
661
+ appState: AppStatePatch.optional(),
662
+ files: SceneFiles.optional()
663
+ });
664
+ var ExportRequest = z.object({
665
+ t: z.literal("export_request"),
666
+ requestId: z.string().min(1),
667
+ sceneId: SceneId,
668
+ format: ExportFormat,
669
+ elementIds: z.array(ElementId).optional(),
670
+ scale: z.number().optional(),
671
+ background: z.boolean().optional(),
672
+ darkMode: z.boolean().optional(),
673
+ padding: z.number().optional(),
674
+ embedScene: z.boolean().optional()
675
+ });
676
+ var Presence = z.object({
677
+ t: z.literal("presence"),
678
+ activity: ClaudeActivity,
679
+ lastReadAt: z.number().int().nullish()
680
+ });
681
+ var Focus = z.object({
682
+ t: z.literal("focus"),
683
+ sceneId: SceneId,
684
+ elementIds: z.array(ElementId),
685
+ zoomToFit: z.boolean()
686
+ });
687
+ var DiskConflict = z.object({
688
+ t: z.literal("disk_conflict"),
689
+ sceneId: SceneId,
690
+ path: z.string(),
691
+ diskMtime: z.number().int(),
692
+ message: z.string()
693
+ });
694
+ z.discriminatedUnion("t", [
695
+ ScenePatch,
696
+ ExportRequest,
697
+ Presence,
698
+ Focus,
699
+ DiskConflict
700
+ ]);
701
+ function assertNever(value) {
702
+ throw new Error(`unhandled variant: ${JSON.stringify(value)}`);
703
+ }
704
+ var ROLES = ["compute", "storage", "edge", "external", "hotspot"];
705
+ var Role = z.enum(ROLES, {
706
+ error: (issue) => `unknown role ${JSON.stringify(issue.input)} \u2014 valid: ${ROLES.join(", ")}`
707
+ });
708
+ var HOUSE = {
709
+ roughness: 1,
710
+ strokeWidth: 2,
711
+ fillStyle: "solid",
712
+ /**
713
+ * 5 = Excalifont, the installed `DEFAULT_FONT_FAMILY`. BUILD-SPEC §12.2 originally
714
+ * said 1 (Virgil), which is the *legacy* hand-drawn face — text drawn by Claude
715
+ * would not have matched text drawn by the user in the same scene. Verified against
716
+ * the installed 0.18.1; see `style.test.ts`.
717
+ */
718
+ fontFamily: FONT_FAMILY.Excalifont,
719
+ fontSize: 20,
720
+ /** 3 = ADAPTIVE_RADIUS. The expander leaves `roundness: null`, so this is explicit. */
721
+ roundness: { type: ROUNDNESS.ADAPTIVE_RADIUS },
722
+ roles: {
723
+ compute: { strokeColor: "#1971c2", backgroundColor: "#a5d8ff" },
724
+ storage: { strokeColor: "#2f9e44", backgroundColor: "#b2f2bb" },
725
+ edge: { strokeColor: "#f08c00", backgroundColor: "#ffec99" },
726
+ external: { strokeColor: "#1e1e1e", backgroundColor: "transparent" },
727
+ hotspot: { strokeColor: "#e03131", backgroundColor: "#ffc9c9" }
728
+ },
729
+ sizes: { service: [180, 80], icon: 64, framePad: 40 },
730
+ spacing: { h: 60, v: 100 }
731
+ };
732
+ var CreatableType = z.enum(["rectangle", "diamond", "ellipse", "text", "line"], {
733
+ error: (issue) => issue.input === "arrow" ? "arrow rejected \u2014 use chalk_connect(fromId, toId), it handles the bindings" : `unknown element type ${JSON.stringify(issue.input)} \u2014 valid: rectangle, diamond, ellipse, text, line, and chalk_connect for arrows`
734
+ });
735
+ var refusedFieldMessage = (keys) => {
736
+ const bindings = keys.filter((key) => BINDING_FIELDS.includes(key));
737
+ const managed = keys.filter((key) => SERVER_MANAGED_FIELDS.includes(key));
738
+ if (bindings.length > 0) {
739
+ return `${bindings.join(", ")} is server-managed \u2014 pass label: { text } for a caption, and use chalk_connect for an arrow`;
740
+ }
741
+ if (managed.length > 0) {
742
+ return `${managed.join(", ")} is server-managed \u2014 Chalkbridge assigns it; use expectedVersion on chalk_update_elements to say what you read`;
743
+ }
744
+ return `${keys.join(", ")} is not an element property`;
745
+ };
746
+ var ElementInput = z.strictObject({
747
+ type: CreatableType,
748
+ id: ElementId.optional(),
749
+ x: z.number(),
750
+ y: z.number(),
751
+ // ---- Tier 1 -------------------------------------------------------------
752
+ role: Role.optional(),
753
+ label: z.string().optional(),
754
+ // ---- Tier 2 -------------------------------------------------------------
755
+ width: z.number().positive().optional(),
756
+ height: z.number().positive().optional(),
757
+ text: z.string().optional(),
758
+ strokeColor: z.string().optional(),
759
+ backgroundColor: z.string().optional(),
760
+ fillStyle: FillStyle.optional(),
761
+ strokeWidth: z.union([z.literal(1), z.literal(2), z.literal(4)]).optional(),
762
+ strokeStyle: StrokeStyle.optional(),
763
+ roughness: z.union([z.literal(0), z.literal(1), z.literal(2)]).optional(),
764
+ opacity: z.number().min(0).max(100).optional(),
765
+ roundness: Roundness.nullish(),
766
+ /** Radians, not degrees — EXCALIDRAW-SURFACE §3. */
767
+ angle: z.number().optional(),
768
+ fontSize: z.number().positive().optional(),
769
+ fontFamily: FontFamily.optional(),
770
+ textAlign: TextAlign.optional(),
771
+ verticalAlign: VerticalAlign.optional(),
772
+ link: z.string().nullish(),
773
+ locked: z.boolean().optional(),
774
+ groupIds: z.array(GroupId).optional(),
775
+ frameId: FrameId.nullish()
776
+ }, {
777
+ error: (issue) => issue.code === "unrecognized_keys" ? refusedFieldMessage(issue.keys) : void 0
778
+ });
779
+ var ElementPatch = ElementInput.partial().omit({ type: true, id: true });
780
+ [...SERVER_MANAGED_FIELDS, ...BINDING_FIELDS];
781
+ var VersionedUpdate = z.object({
782
+ id: ElementId,
783
+ expectedVersion: z.number().int().nonnegative(),
784
+ patch: ElementPatch
785
+ });
786
+ var ALIGN_OPS = [
787
+ "align-left",
788
+ "align-right",
789
+ "align-top",
790
+ "align-bottom",
791
+ "align-center-h",
792
+ "align-center-v"
793
+ ];
794
+ var DISTRIBUTE_OPS = ["distribute-h", "distribute-v"];
795
+ var Z_ORDER_OPS = [
796
+ "bring-to-front",
797
+ "send-to-back",
798
+ "bring-forward",
799
+ "send-backward"
800
+ ];
801
+ var FLIP_OPS = ["flip-horizontal", "flip-vertical"];
802
+ var ARRANGE_OPS = [
803
+ ...ALIGN_OPS,
804
+ ...DISTRIBUTE_OPS,
805
+ ...Z_ORDER_OPS,
806
+ ...FLIP_OPS,
807
+ "grid",
808
+ /**
809
+ * The layered graph layout — §12.5, and the replacement for `chalk_from_mermaid`,
810
+ * which was cut. Ranks from edge direction, ordering within a rank to reduce
811
+ * crossings, spacing from `HOUSE.spacing`. It reads the arrows among the named
812
+ * elements out of the scene, so the caller names boxes, not edges.
813
+ */
814
+ "layout-layered"
815
+ ];
816
+ var ArrangeOp = z.enum(ARRANGE_OPS);
817
+ var ArrangeInput = z.object({
818
+ elementIds: z.array(ElementId).min(1),
819
+ op: ArrangeOp,
820
+ /** Gap in px for distribute and grid. Defaults to `HOUSE.spacing`. */
821
+ spacing: z.number().positive().optional(),
822
+ /** `grid` only. */
823
+ columns: z.number().int().positive().optional()
824
+ });
825
+ var ConnectInput = z.object({
826
+ fromId: ElementId,
827
+ toId: ElementId,
828
+ label: z.string().optional(),
829
+ startArrowhead: Arrowhead.nullish(),
830
+ endArrowhead: Arrowhead.nullish(),
831
+ strokeStyle: StrokeStyle.optional(),
832
+ /**
833
+ * Element-level arrow shape. `sharp` and `round` set `roundness`; `elbow` sets
834
+ * `elbowed` — there is no single upstream field for this (EXCALIDRAW-SURFACE §5).
835
+ */
836
+ arrowType: z.enum(["sharp", "round", "elbow"]).optional()
837
+ });
838
+ var RawElementJson = z.looseObject({ id: ElementId });
839
+ var ListScenesInput = z.object({});
840
+ var ListScenesOutput = z.object({
841
+ scenes: z.array(SceneSummary)
842
+ });
843
+ var DescribeSceneInput = z.object({
844
+ sceneId: SceneId.optional(),
845
+ detail: DetailLevel.default("compact")
846
+ });
847
+ var DescribeSceneOutput = z.object({
848
+ description: SceneDescription,
849
+ resolvedVia: SceneResolvedVia
850
+ });
851
+ var GetSelectionInput = z.object({
852
+ neighborDepth: z.number().int().min(0).max(3).default(1),
853
+ sceneId: SceneId.optional(),
854
+ detail: DetailLevel.default("compact")
855
+ });
856
+ var GetSelectionOutput = z.object({
857
+ selection: SelectionDescription,
858
+ /** Invariant 30 — an empty selection is a normal result, never an error. */
859
+ empty: z.boolean(),
860
+ /**
861
+ * The sentence §11.3 requires: the staleness warning past 120 s, or what to do when
862
+ * nothing is selected. `null` when the selection is fresh and non-empty.
863
+ */
864
+ note: z.string().nullable()
865
+ });
866
+ var GetElementsInput = z.object({
867
+ ids: z.array(ElementId).min(1),
868
+ sceneId: SceneId.optional()
869
+ });
870
+ var GetElementsOutput = z.object({
871
+ sceneId: SceneId,
872
+ elements: z.array(RawElementJson),
873
+ /** Asked for and not in the scene. A normal result — ids go stale. */
874
+ missing: z.array(ElementId)
875
+ });
876
+ var SceneSettingsInput = z.object({
877
+ sceneId: SceneId.optional(),
878
+ patch: SceneSettingsPatch.optional()
879
+ });
880
+ var SceneSettingsOutput = z.object({
881
+ sceneId: SceneId,
882
+ settings: SceneSettings,
883
+ /** False for a read, and for a patch that asked for what was already true. */
884
+ changed: z.boolean(),
885
+ sceneVersion: z.number().int()
886
+ });
887
+ var GUIDE_TOPICS = ["elements", "styling", "layout", "arrows", "icons"];
888
+ var GuideTopic = z.enum(GUIDE_TOPICS);
889
+ var ReadMeInput = z.object({
890
+ topics: z.array(GuideTopic).min(1)
891
+ });
892
+ var ReadMeOutput = z.object({
893
+ guides: z.array(z.object({ topic: GuideTopic, markdown: z.string() })),
894
+ /** Every topic this build ships, so a wrong guess costs one call rather than two. */
895
+ available: z.array(GuideTopic),
896
+ missing: z.array(GuideTopic)
897
+ });
898
+ var writeResult = {
899
+ sceneId: SceneId,
900
+ sceneVersion: z.number().int(),
901
+ broadcastTo: z.number().int().nonnegative()
902
+ };
903
+ var ToolRejection = z.object({
904
+ id: ElementId,
905
+ code: z.string(),
906
+ message: z.string(),
907
+ hint: z.string().nullable(),
908
+ tool: z.string().nullable()
909
+ });
910
+ var CreateElementsInput = z.object({
911
+ elements: z.array(ElementInput).min(1),
912
+ sceneId: SceneId.optional()
913
+ });
914
+ var CreateElementsOutput = z.object({
915
+ ...writeResult,
916
+ created: z.array(ElementId),
917
+ /**
918
+ * BUILD-SPEC §12.5 — placing many boxes by hand comes out looking like it was done one
919
+ * pair of coordinates at a time. Past a handful of elements dropped at the same spot,
920
+ * the tool says so and names the op that fixes it (§12.6).
921
+ */
922
+ layoutHint: z.string().nullable()
923
+ });
924
+ var ConnectToolInput = ConnectInput.extend({ sceneId: SceneId.optional() });
925
+ var ConnectOutput = z.object({
926
+ ...writeResult,
927
+ arrowId: ElementId
928
+ });
929
+ var UpdateElementsInput = z.object({
930
+ updates: z.array(VersionedUpdate).min(1),
931
+ sceneId: SceneId.optional()
932
+ });
933
+ var UpdateElementsOutput = z.object({
934
+ ...writeResult,
935
+ applied: z.array(ElementId),
936
+ rejected: z.array(ToolRejection)
937
+ });
938
+ var VersionedDelete = z.object({
939
+ id: ElementId,
940
+ expectedVersion: z.number().int().nonnegative().optional()
941
+ });
942
+ var DeleteElementsInput = z.object({
943
+ deletions: z.array(VersionedDelete).min(1),
944
+ sceneId: SceneId.optional()
945
+ });
946
+ var DeleteElementsOutput = z.object({
947
+ ...writeResult,
948
+ deleted: z.array(ElementId),
949
+ rejected: z.array(ToolRejection)
950
+ });
951
+ var ArrangeToolInput = ArrangeInput.extend({ sceneId: SceneId.optional() });
952
+ var ArrangeOutput = z.object({
953
+ ...writeResult,
954
+ moved: z.array(ElementId)
955
+ });
956
+ var GroupInput = z.object({
957
+ elementIds: z.array(ElementId).min(2),
958
+ sceneId: SceneId.optional()
959
+ });
960
+ var GroupOutput = z.object({
961
+ ...writeResult,
962
+ groupId: GroupId,
963
+ grouped: z.array(ElementId)
964
+ });
965
+ var UngroupInput = z.object({
966
+ groupId: GroupId,
967
+ sceneId: SceneId.optional()
968
+ });
969
+ var UngroupOutput = z.object({
970
+ ...writeResult,
971
+ ungrouped: z.array(ElementId)
972
+ });
973
+ var FrameInput = z.object({
974
+ op: z.enum(["create", "add", "remove"]),
975
+ elementIds: z.array(ElementId).default([]),
976
+ name: z.string().optional(),
977
+ frameId: FrameId.optional(),
978
+ sceneId: SceneId.optional()
979
+ });
980
+ var FrameOutput = z.object({
981
+ ...writeResult,
982
+ frameId: FrameId,
983
+ children: z.array(ElementId)
984
+ });
985
+ var AnnotateInput = z.object({
986
+ elementIds: z.array(ElementId).min(1),
987
+ text: z.string().min(1),
988
+ sceneId: SceneId.optional()
989
+ });
990
+ var AnnotateOutput = z.object({
991
+ ...writeResult,
992
+ noteId: ElementId
993
+ });
994
+ var EmbedInput = z.object({
995
+ link: z.string().min(1),
996
+ x: z.number(),
997
+ y: z.number(),
998
+ width: z.number().positive().optional(),
999
+ height: z.number().positive().optional(),
1000
+ sceneId: SceneId.optional()
1001
+ });
1002
+ var EmbedOutput = z.object({
1003
+ ...writeResult,
1004
+ elementId: ElementId
1005
+ });
1006
+ var FocusInput = z.object({
1007
+ elementIds: z.array(ElementId).min(1),
1008
+ zoomToFit: z.boolean().default(false),
1009
+ sceneId: SceneId.optional()
1010
+ });
1011
+ var FocusOutput = z.object({
1012
+ sceneId: SceneId,
1013
+ focused: z.array(ElementId),
1014
+ broadcastTo: z.number().int().nonnegative()
1015
+ });
1016
+ var RawElementInput = z.looseObject({
1017
+ type: ElementType,
1018
+ x: z.number(),
1019
+ y: z.number(),
1020
+ id: ElementId.optional()
1021
+ });
1022
+ var RawElementsInput = z.object({
1023
+ elements: z.array(RawElementInput).min(1),
1024
+ sceneId: SceneId.optional()
1025
+ });
1026
+ var RawElementsOutput = z.object({
1027
+ ...writeResult,
1028
+ created: z.array(ElementId),
1029
+ rejected: z.array(ToolRejection)
1030
+ });
1031
+ var SearchIconsInput = z.object({
1032
+ query: z.string().min(1),
1033
+ pack: PackName.optional(),
1034
+ limit: z.number().int().min(1).max(50).default(12),
1035
+ offset: z.number().int().min(0).default(0)
1036
+ });
1037
+ var SearchIconsOutput = z.object({
1038
+ items: z.array(IconSummary),
1039
+ total: z.number().int().nonnegative(),
1040
+ offset: z.number().int().nonnegative(),
1041
+ limit: z.number().int().positive(),
1042
+ /** `null` when this page is the last — one less thing to compute at the call site. */
1043
+ nextOffset: z.number().int().nonnegative().nullable(),
1044
+ /** Every pack in the catalog, so an empty result tells an empty query from an empty machine. */
1045
+ packs: z.array(PackName),
1046
+ /**
1047
+ * What to do when nothing matched. Invariant 31 in its softest form: a search that
1048
+ * comes back empty on a machine carrying only `generic` should say
1049
+ * `chalk_install_pack` out loud rather than leave Claude to infer it.
1050
+ */
1051
+ note: z.string().nullable()
1052
+ });
1053
+ var PlaceIconInput = z.object({
1054
+ iconId: IconId,
1055
+ x: z.number(),
1056
+ y: z.number(),
1057
+ /** Longest side in px. Defaults to `HOUSE.sizes.icon`; the aspect comes from the icon. */
1058
+ size: z.number().positive().optional(),
1059
+ /** A caption centred beneath it. An unlabelled icon says "a thing was here". */
1060
+ label: z.string().optional(),
1061
+ sceneId: SceneId.optional()
1062
+ });
1063
+ var PlaceIconOutput = z.object({
1064
+ ...writeResult,
1065
+ elementId: ElementId,
1066
+ /** The caption element, or `null` when no `label` was given. */
1067
+ labelId: ElementId.nullable(),
1068
+ iconId: IconId
1069
+ });
1070
+ var InstallPackInput = z.object({
1071
+ pack: PackName,
1072
+ /**
1073
+ * A local archive or directory the user downloaded themselves — the second step of a
1074
+ * vendor install. Absent for a permissive pack, which has no second step.
1075
+ */
1076
+ from: z.string().optional()
1077
+ });
1078
+ var InstallPackOutput = z.object({
1079
+ pack: PackName,
1080
+ /** False for a vendor set with no `from`: nothing was fetched, and that is correct. */
1081
+ installed: z.boolean(),
1082
+ kind: PackKind,
1083
+ iconCount: z.number().int().nonnegative(),
1084
+ license: z.string(),
1085
+ source: z.string(),
1086
+ /**
1087
+ * For a vendor set, the steps the user takes. Empty for anything installed. Structured
1088
+ * rather than prose so Claude relays them verbatim.
1089
+ */
1090
+ instructions: z.array(z.string()),
1091
+ note: z.string().nullable()
1092
+ });
1093
+ var ListPacksInput = z.object({});
1094
+ var ListPacksOutput = z.object({
1095
+ packs: z.array(PackReceipt),
1096
+ /** Recipes and npm packs this build knows about that are not installed. */
1097
+ available: z.array(z.object({ pack: PackName, kind: PackKind, license: z.string() })),
1098
+ catalogPath: z.string(),
1099
+ health: z.array(PackHealth)
1100
+ });
1101
+ var RemovePackInput = z.object({ pack: PackName });
1102
+ var RemovePackOutput = z.object({
1103
+ pack: PackName,
1104
+ removed: z.boolean(),
1105
+ iconsDropped: z.number().int().nonnegative()
1106
+ });
1107
+ var SnapshotInput = z.object({
1108
+ label: z.string().min(1).optional(),
1109
+ sceneId: SceneId.optional()
1110
+ });
1111
+ var SnapshotSummary = z.object({
1112
+ id: SnapshotId,
1113
+ sceneId: SceneId,
1114
+ label: z.string(),
1115
+ createdAt: z.number().int(),
1116
+ elementCount: z.number().int().nonnegative()
1117
+ });
1118
+ var SnapshotOutput = z.object({
1119
+ sceneId: SceneId,
1120
+ /** The one just taken, or `null` when this was a listing. */
1121
+ created: SnapshotSummary.nullable(),
1122
+ snapshots: z.array(SnapshotSummary)
1123
+ });
1124
+ var RestoreSnapshotInput = z.object({
1125
+ snapshotId: SnapshotId,
1126
+ sceneId: SceneId.optional()
1127
+ });
1128
+ var RestoreSnapshotOutput = z.object({
1129
+ ...writeResult,
1130
+ snapshotId: SnapshotId,
1131
+ label: z.string(),
1132
+ restored: z.number().int().nonnegative()
1133
+ });
1134
+ var ExportSceneInput = z.object({
1135
+ /** Repo-relative or absolute. Defaults to where the scene already lives. */
1136
+ path: z.string().optional(),
1137
+ sceneId: SceneId.optional()
1138
+ });
1139
+ var ExportSceneOutput = z.object({
1140
+ sceneId: SceneId,
1141
+ path: z.string(),
1142
+ repoPath: z.string(),
1143
+ bytes: z.number().int().nonnegative(),
1144
+ sceneVersion: z.number().int()
1145
+ });
1146
+ var ImportSceneInput = z.object({
1147
+ path: z.string().optional(),
1148
+ sceneId: SceneId.optional()
1149
+ });
1150
+ var ImportSceneOutput = z.object({
1151
+ sceneId: SceneId,
1152
+ path: z.string(),
1153
+ sceneVersion: z.number().int(),
1154
+ elementCount: z.number().int().nonnegative(),
1155
+ broadcastTo: z.number().int().nonnegative()
1156
+ });
1157
+ var exportImageOptions = {
1158
+ /** Absent means the whole scene. */
1159
+ elementIds: z.array(ElementId).optional(),
1160
+ background: z.boolean().default(true),
1161
+ padding: z.number().min(0).max(200).default(16),
1162
+ sceneId: SceneId.optional()
1163
+ };
1164
+ var ExportImageInput = z.object({
1165
+ ...exportImageOptions,
1166
+ format: ExportFormat.default("png"),
1167
+ scale: z.number().min(0.5).max(4).default(2),
1168
+ darkMode: z.boolean().default(false),
1169
+ /** Embeds the scene in the PNG, so the image reopens as a diagram. */
1170
+ embedScene: z.boolean().default(false),
1171
+ /**
1172
+ * Where to write it. Repo-relative or absolute; defaults to the scene name with the
1173
+ * format extension, beside the `.excalidraw` file.
1174
+ *
1175
+ * A path rather than a data URL, because a 2× PNG of a real diagram is megabytes and a
1176
+ * tool result is a context window. `chalk_screenshot` is the one that hands Claude
1177
+ * pixels, and it is capped for exactly this reason.
1178
+ */
1179
+ path: z.string().optional()
1180
+ });
1181
+ var ExportImageOutput = z.object({
1182
+ sceneId: SceneId,
1183
+ format: ExportFormat,
1184
+ path: z.string(),
1185
+ repoPath: z.string(),
1186
+ bytes: z.number().int().nonnegative(),
1187
+ elementCount: z.number().int().nonnegative()
1188
+ });
1189
+ var ScreenshotInput = z.object({
1190
+ ...exportImageOptions,
1191
+ theme: z.enum(["light", "dark"]).default("light"),
1192
+ scale: z.number().min(0.5).max(2).default(1)
1193
+ });
1194
+ var ScreenshotOutput = z.object({
1195
+ sceneId: SceneId,
1196
+ bytes: z.number().int().nonnegative(),
1197
+ elementCount: z.number().int().nonnegative(),
1198
+ /** What was actually shot — the whole scene, or the ids that were asked for. */
1199
+ scope: z.enum(["scene", "elements"])
1200
+ });
1201
+ var ScreenshotResponse = ScreenshotOutput.extend({
1202
+ base64: z.string(),
1203
+ mimeType: z.string()
1204
+ });
1205
+
1206
+ // src/domain/equal.ts
1207
+ var isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1208
+ function deepEqual(a, b) {
1209
+ if (Object.is(a, b)) return true;
1210
+ if (Array.isArray(a) || Array.isArray(b)) {
1211
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
1212
+ return a.every((value, index) => deepEqual(value, b[index]));
1213
+ }
1214
+ if (!isRecord(a) || !isRecord(b)) return false;
1215
+ const entries = Object.entries(a);
1216
+ const other = new Map(Object.entries(b));
1217
+ if (entries.length !== other.size) return false;
1218
+ return entries.every(([key, value]) => other.has(key) && deepEqual(value, other.get(key)));
1219
+ }
1220
+
1221
+ // src/domain/errors.ts
1222
+ var err = (code, message, extra) => ({ code, message, ...extra });
1223
+ var expanderUnavailable = (reason) => err("EXPANDER_UNAVAILABLE", `could not load the Excalidraw element expander: ${reason}`, {
1224
+ hint: "this is a Chalkbridge bug, not something to retry \u2014 report it with the reason above"
1225
+ });
1226
+ var expansionFailed = (reason) => err("EXPANSION_FAILED", `Excalidraw could not expand these elements: ${reason}`, {
1227
+ hint: "check that every arrow endpoint refers to an element in the same batch or already in the scene",
1228
+ tool: "chalk_describe_scene"
1229
+ });
1230
+ var unknownScene = (requested, available) => err("UNKNOWN_SCENE", `no scene with id "${requested}" in this project`, {
1231
+ hint: available.length === 0 ? "this project has no scenes yet" : `known scenes: ${available.join(", ")}`,
1232
+ tool: "chalk_list_scenes"
1233
+ });
1234
+ var noScenes = () => err("NO_SCENES", "this project has no scenes yet", {
1235
+ hint: "draw something, or ask the user to open a canvas \u2014 a scene is created on first write",
1236
+ tool: "chalk_create_elements"
1237
+ });
1238
+ var notARepo = (startDir) => err("NOT_A_REPO", `no git repository found at or above ${startDir}`, {
1239
+ hint: "Chalkbridge binds to a repo \u2014 run `git init` here, or start Claude Code from inside one"
1240
+ });
1241
+ var bridgeSpawnFailed = (reason) => err("BRIDGE_SPAWN_FAILED", `could not start the Chalkbridge bridge: ${reason}`, {
1242
+ hint: "start it yourself with `chalkbridge serve` and check the output, or set CHALK_NO_AUTOSTART=1 if you manage it another way"
1243
+ });
1244
+ var bridgeUnreachable = (port) => port === null ? err("BRIDGE_UNREACHABLE", "no bridge is running for this project", {
1245
+ hint: "start one with `chalkbridge serve`, or unset CHALK_NO_AUTOSTART and Chalkbridge will start it for you",
1246
+ detail: { port: null }
1247
+ }) : err("BRIDGE_UNREACHABLE", `nothing is answering on 127.0.0.1:${port}`, {
1248
+ hint: "the bridge may have exited \u2014 `chalkbridge health` reports what is running",
1249
+ detail: { port }
1250
+ });
1251
+ var portUnavailable = (from, tried) => err("PORT_UNAVAILABLE", `no free port between ${from} and ${from + tried - 1}`, {
1252
+ hint: "something is occupying the whole range \u2014 set CHALK_PORT to pick a different one",
1253
+ detail: { from, tried }
1254
+ });
1255
+ var staleVersion = (id, expected, actual) => err(
1256
+ "STALE_VERSION",
1257
+ `element ${id} changed since your read (expected v${expected}, now v${actual})`,
1258
+ {
1259
+ hint: "re-read with chalk_get_elements, then retry \u2014 the rest of this batch was applied",
1260
+ tool: "chalk_get_elements",
1261
+ detail: { id, expected, actual }
1262
+ }
1263
+ );
1264
+ var unknownElement = (id) => err("UNKNOWN_ELEMENT", `no element ${id} in this scene`, {
1265
+ hint: "the id may be from another scene, or mistyped \u2014 chalk_describe_scene lists what is there",
1266
+ tool: "chalk_describe_scene",
1267
+ detail: { id }
1268
+ });
1269
+ var emptySelection = (tool) => err("EMPTY_SELECTION", "no elements named \u2014 there is nothing to act on", {
1270
+ hint: "pass the ids you mean, or call chalk_get_selection to find out what the user is pointing at",
1271
+ tool: "chalk_get_selection",
1272
+ detail: { tool }
1273
+ });
1274
+ var idCollision = (id) => err("ID_COLLISION", `element ${id} already exists`, {
1275
+ hint: "to change it, use chalk_update_elements with its current version",
1276
+ tool: "chalk_update_elements",
1277
+ detail: { id }
1278
+ });
1279
+ var diskConflict = (path, diskMtime) => err("DISK_CONFLICT", `${path} changed on disk outside Chalkbridge`, {
1280
+ hint: "the canvas is unchanged \u2014 reload the file with chalk_import_scene to take the disk version, or save over it with chalk_export_scene",
1281
+ tool: "chalk_import_scene",
1282
+ detail: { path, diskMtime }
1283
+ });
1284
+ var unreadableSceneFile = (path, reason) => err("UNREADABLE_SCENE_FILE", `${path} is not a readable Excalidraw file: ${reason}`, {
1285
+ hint: "it was left alone \u2014 open it in Excalidraw to check it, or delete it",
1286
+ detail: { path }
1287
+ });
1288
+ var storeUnavailable = (path, reason) => err("STORE_UNAVAILABLE", `could not open the project database at ${path}: ${reason}`, {
1289
+ hint: "delete .chalk/chalk.db and Chalkbridge will rebuild it from the .excalidraw files in the repo"
1290
+ });
1291
+ var catalogUnavailable = (path, reason) => err("CATALOG_UNAVAILABLE", `could not open the icon catalog at ${path}: ${reason}`, {
1292
+ hint: "delete that file and Chalkbridge will rebuild it \u2014 the bundled pack re-ingests on the next search, and any installed pack can be reinstalled with chalk_install_pack",
1293
+ tool: "chalk_install_pack",
1294
+ detail: { path }
1295
+ });
1296
+ var unknownIcon = (id, packs) => err("UNKNOWN_ICON", `no icon "${id}" in the catalog`, {
1297
+ hint: packs.length === 0 ? "no packs are installed yet \u2014 chalk_search_icons will ingest the bundled generic set on its first call" : `search for one with chalk_search_icons; installed packs: ${packs.join(", ")}`,
1298
+ tool: "chalk_search_icons",
1299
+ detail: { id }
1300
+ });
1301
+ var packInstallFailed = (pack, reason) => err("PACK_INSTALL_FAILED", `could not install the icon pack "${pack}": ${reason}`, {
1302
+ hint: "check the machine can reach the npm registry, or install the package yourself and point chalk_install_pack at it with `from`",
1303
+ tool: "chalk_install_pack",
1304
+ detail: { pack }
1305
+ });
1306
+ var notAPack = (path, reason) => err("NOT_A_PACK", `${path} is not an icon pack: ${reason}`, {
1307
+ hint: "point at the unzipped folder that contains the SVGs, not at the archive itself",
1308
+ tool: "chalk_install_pack",
1309
+ detail: { path }
1310
+ });
1311
+ var noBrowser = (what) => err("NO_BROWSER", `${what} needs the canvas open in a browser, and no tab is connected`, {
1312
+ hint: "ask the user to open the canvas \u2014 Chalkbridge opens one automatically on the next tool call unless CHALK_NO_OPEN is set \u2014 then retry",
1313
+ tool: "chalk_describe_scene"
1314
+ });
1315
+ var exportFailed = (reason) => err("EXPORT_FAILED", `the browser could not render that export: ${reason}`, {
1316
+ hint: "try a smaller scale, or export the whole scene rather than a subset",
1317
+ tool: "chalk_export_image"
1318
+ });
1319
+ var exportTimedOut = (ms) => err("EXPORT_TIMED_OUT", `the browser did not answer the export within ${ms} ms`, {
1320
+ hint: "a very large scene at a high scale can outrun this \u2014 retry with a lower scale, or with elementIds naming the part you need",
1321
+ tool: "chalk_export_image",
1322
+ detail: { ms }
1323
+ });
1324
+ var unknownSnapshot = (id, available) => err("UNKNOWN_SNAPSHOT", `no snapshot with id "${id}" for this scene`, {
1325
+ hint: available.length === 0 ? "this scene has no snapshots \u2014 chalk_snapshot with a label takes one" : `snapshots for this scene: ${available.join(", ")}`,
1326
+ tool: "chalk_snapshot",
1327
+ detail: { id }
1328
+ });
1329
+ var sceneFileMissing = (path) => err("SCENE_FILE_MISSING", `no file at ${path}`, {
1330
+ hint: "check the path \u2014 chalk_list_scenes reports where each scene lives in the repo",
1331
+ tool: "chalk_list_scenes",
1332
+ detail: { path }
1333
+ });
1334
+ var pathOutsideRepo = (path, repoRoot) => err("PATH_OUTSIDE_REPO", `${path} is outside this project`, {
1335
+ hint: `Chalkbridge writes inside ${repoRoot} \u2014 give a path relative to the repository root`,
1336
+ detail: { path, repoRoot }
1337
+ });
1338
+ var describeThrown = (thrown) => {
1339
+ if (thrown instanceof Error) return thrown.message;
1340
+ if (typeof thrown === "string") return thrown;
1341
+ return JSON.stringify(thrown);
1342
+ };
1343
+
1344
+ // src/adapters/excalidraw/dom-shim.ts
1345
+ var ASSET_BASE = "http://127.0.0.1/chalkbridge-assets/";
1346
+ var noop = () => void 0;
1347
+ var fakeContext = () => ({
1348
+ measureText: (text) => ({
1349
+ width: text.length * 10,
1350
+ actualBoundingBoxAscent: 8,
1351
+ actualBoundingBoxDescent: 2
1352
+ }),
1353
+ font: "",
1354
+ save: noop,
1355
+ restore: noop,
1356
+ fillText: noop
1357
+ });
1358
+ var fakeElement = () => ({
1359
+ style: {},
1360
+ getContext: fakeContext,
1361
+ setAttribute: noop,
1362
+ appendChild: noop,
1363
+ remove: noop
1364
+ });
1365
+ var fakeDocument = () => ({
1366
+ createElement: fakeElement,
1367
+ createElementNS: fakeElement,
1368
+ documentElement: fakeElement(),
1369
+ body: fakeElement(),
1370
+ head: fakeElement(),
1371
+ fonts: { addEventListener: noop, load: async () => [], ready: Promise.resolve(), add: noop },
1372
+ addEventListener: noop,
1373
+ removeEventListener: noop,
1374
+ querySelector: () => null,
1375
+ querySelectorAll: () => []
1376
+ });
1377
+ var ShimFontFace = class {
1378
+ family;
1379
+ source;
1380
+ unicodeRange = "U+0-10FFFF";
1381
+ constructor(family, source) {
1382
+ this.family = family;
1383
+ this.source = source;
1384
+ }
1385
+ load() {
1386
+ return Promise.resolve(this);
1387
+ }
1388
+ };
1389
+ var ShimElement = class {
1390
+ };
1391
+ function installDomShim() {
1392
+ const target = globalThis;
1393
+ const previous = /* @__PURE__ */ new Map();
1394
+ const set = (key, value) => {
1395
+ previous.set(key, { present: key in target, value: target[key] });
1396
+ target[key] = value;
1397
+ };
1398
+ const documentShim = fakeDocument();
1399
+ set("document", documentShim);
1400
+ set("window", {
1401
+ EXCALIDRAW_ASSET_PATH: ASSET_BASE,
1402
+ location: { origin: "http://127.0.0.1", href: "http://127.0.0.1/" },
1403
+ document: documentShim,
1404
+ devicePixelRatio: 1,
1405
+ matchMedia: () => ({ matches: false, addEventListener: noop, removeEventListener: noop }),
1406
+ addEventListener: noop,
1407
+ removeEventListener: noop
1408
+ });
1409
+ set("devicePixelRatio", 1);
1410
+ set("FontFace", ShimFontFace);
1411
+ set("Element", ShimElement);
1412
+ return () => {
1413
+ for (const [key, { present, value }] of previous) {
1414
+ if (present) target[key] = value;
1415
+ else delete target[key];
1416
+ }
1417
+ };
1418
+ }
1419
+
1420
+ // src/adapters/excalidraw/node-expander.ts
1421
+ var WARM_UP = [
1422
+ { type: "rectangle", id: "warmup-a", x: 0, y: 0, width: 10, height: 10, label: { text: "a" } },
1423
+ {
1424
+ type: "arrow",
1425
+ id: "warmup-e",
1426
+ x: 20,
1427
+ y: 5,
1428
+ label: { text: "e" },
1429
+ start: { id: "warmup-a" },
1430
+ end: { type: "ellipse" }
1431
+ },
1432
+ { type: "text", id: "warmup-t", x: 0, y: 40, text: "t" }
1433
+ ];
1434
+ var converter = null;
1435
+ async function loadConverter() {
1436
+ const uninstall = installDomShim();
1437
+ try {
1438
+ const { convertToExcalidrawElements } = await import('./prod-KHI2WQT3.js');
1439
+ convertToExcalidrawElements([...WARM_UP], { regenerateIds: false });
1440
+ return ok(convertToExcalidrawElements);
1441
+ } catch (thrown) {
1442
+ return fail(expanderUnavailable(describeThrown(thrown)));
1443
+ } finally {
1444
+ uninstall();
1445
+ }
1446
+ }
1447
+ function createNodeSkeletonExpander() {
1448
+ return {
1449
+ async expand(skeletons, context) {
1450
+ if (skeletons.length === 0) return ok({ created: [], changed: [] });
1451
+ converter ??= loadConverter();
1452
+ const loaded = await converter;
1453
+ if (!loaded.ok) return loaded;
1454
+ let raw;
1455
+ try {
1456
+ raw = loaded.value([...context ?? [], ...skeletons], { regenerateIds: false });
1457
+ } catch (thrown) {
1458
+ return fail(expansionFailed(describeThrown(thrown)));
1459
+ }
1460
+ const parsed = SceneElement.array().safeParse(raw);
1461
+ if (!parsed.success) {
1462
+ return fail(expansionFailed(parsed.error.issues.map((i) => i.message).join("; ")));
1463
+ }
1464
+ return ok(split(parsed.data, context ?? []));
1465
+ }
1466
+ };
1467
+ }
1468
+ function split(elements, context) {
1469
+ const before = new Map(context.map((element) => [element.id, element]));
1470
+ const created = [];
1471
+ const changed = [];
1472
+ for (const element of elements) {
1473
+ const original = before.get(element.id);
1474
+ if (original === void 0) {
1475
+ created.push(element);
1476
+ continue;
1477
+ }
1478
+ const merged = {
1479
+ ...original,
1480
+ boundElements: element.boundElements,
1481
+ frameId: element.frameId
1482
+ };
1483
+ if (!deepEqual(stable(merged), stable(original))) changed.push(merged);
1484
+ }
1485
+ return { created, changed };
1486
+ }
1487
+ var stable = (element) => {
1488
+ const { version, versionNonce, updated, ...rest } = element;
1489
+ return rest;
1490
+ };
1491
+
1492
+ export { AnnotateInput, AnnotateOutput, ApiError, ArrangeOutput, ArrangeToolInput, BINDING_FIELDS, ClientMessage, ConnectOutput, ConnectToolInput, CreateElementsInput, CreateElementsOutput, DebugElementRequest, DeleteElementsInput, DeleteElementsOutput, DescribeSceneInput, DescribeSceneOutput, DetailLevel, EXCALIDRAW_FILE_TYPE, EXCALIDRAW_FILE_VERSION, ElementId, EmbedInput, EmbedOutput, ExcalidrawFile, ExportImageInput, ExportImageOutput, ExportSceneInput, ExportSceneOutput, FLAG_GLYPH, FileId, FocusInput, FocusOutput, FrameId, FrameInput, FrameOutput, GUIDE_TOPICS, GetElementsInput, GetElementsOutput, GetSelectionInput, GetSelectionOutput, GroupId, GroupInput, GroupOutput, GuideTopic, HOUSE, HealthResponse, IconId, IconItem, ImportSceneInput, ImportSceneOutput, Index, InstallPackInput, InstallPackOutput, KIND_ABBREVIATION, ListPacksInput, ListPacksOutput, ListScenesInput, ListScenesOutput, PROTOCOL_VERSION, PackKind, PackName, PackRecipe, PlaceIconInput, PlaceIconOutput, ROUNDNESS, RawElementsInput, RawElementsOutput, ReadMeInput, ReadMeOutput, RemovePackInput, RemovePackOutput, RestoreSnapshotInput, RestoreSnapshotOutput, SERVER_MANAGED_FIELDS, STALE_SELECTION_MS, Scene, SceneElement, SceneId, SceneSettingsInput, SceneSettingsOutput, ScreenshotInput, ScreenshotOutput, ScreenshotResponse, SearchIconsInput, SearchIconsOutput, SnapshotId, SnapshotInput, SnapshotOutput, UngroupInput, UngroupOutput, UpdateElementsInput, UpdateElementsOutput, assertNever, bridgeSpawnFailed, bridgeUnreachable, catalogUnavailable, createNodeSkeletonExpander, deepEqual, describeThrown, diskConflict, emptySelection, expansionFailed, exportFailed, exportTimedOut, fail, frameIdOf, iconIdOf, idCollision, isFail, isOk, noBrowser, noScenes, notAPack, notARepo, ok, packInstallFailed, partition, pathOutsideRepo, point, portUnavailable, refusedFieldMessage, sceneFileMissing, staleVersion, storeUnavailable, unknownElement, unknownIcon, unknownScene, unknownSnapshot, unreadableSceneFile };
1493
+ //# sourceMappingURL=chunk-HFKCLTVU.js.map
1494
+ //# sourceMappingURL=chunk-HFKCLTVU.js.map