chalkbridge 1.0.4 → 1.1.1

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 (153) hide show
  1. package/dist/{chunk-U2ZMSGNS.js → chunk-XFH76JS6.js} +306 -11
  2. package/dist/cli.js +1346 -189
  3. package/dist/index.js +1 -1
  4. package/guides/icons.md +22 -3
  5. package/guides/layout.md +70 -4
  6. package/package.json +1 -1
  7. package/ui-dist/assets/{abnfDiagram-VCTEODGH-C_cqCKun.js → abnfDiagram-VCTEODGH-Bwcewgyl.js} +1 -1
  8. package/ui-dist/assets/{ar-SA-G6X2FPQ2-CEKRHtmX.js → ar-SA-G6X2FPQ2-58dCrzRZ.js} +1 -1
  9. package/ui-dist/assets/architecture-7GRP2DOG-Df8gKqbg.js +1 -0
  10. package/ui-dist/assets/{architectureDiagram-5GKGNRK7-BuWVonvB.js → architectureDiagram-5GKGNRK7-CMPSnIrP.js} +1 -1
  11. package/ui-dist/assets/{az-AZ-76LH7QW2-mn2Y6BCY.js → az-AZ-76LH7QW2-CCpEVexR.js} +1 -1
  12. package/ui-dist/assets/{bg-BG-XCXSNQG7-CraLx0fE.js → bg-BG-XCXSNQG7-DDlArZMH.js} +1 -1
  13. package/ui-dist/assets/{blockDiagram-NRAW4CY4-83XozRPe.js → blockDiagram-NRAW4CY4-D7TrKIo5.js} +1 -1
  14. package/ui-dist/assets/{bn-BD-2XOGV67Q-CsTrJsPu.js → bn-BD-2XOGV67Q-BXyhMN4V.js} +1 -1
  15. package/ui-dist/assets/{c4Diagram-UCG6FXSJ-DTdS8B8G.js → c4Diagram-UCG6FXSJ-CazStwlL.js} +1 -1
  16. package/ui-dist/assets/{ca-ES-6MX7JW3Y-DD8cv_ze.js → ca-ES-6MX7JW3Y-JHxjajfS.js} +1 -1
  17. package/ui-dist/assets/channel-C4uQlBVf.js +1 -0
  18. package/ui-dist/assets/{chunk-75Z2AOVW-DQDqkKP0.js → chunk-75Z2AOVW-BJsQGYsA.js} +1 -1
  19. package/ui-dist/assets/{chunk-DU6HZSFF-_YwywVCK.js → chunk-DU6HZSFF-C1xw9RZQ.js} +1 -1
  20. package/ui-dist/assets/{chunk-EIO257PC-CLwbKeso.js → chunk-EIO257PC-BrhyYOZD.js} +1 -1
  21. package/ui-dist/assets/{chunk-F27PBJKO-BwhryBf6.js → chunk-F27PBJKO-f6XMRQIS.js} +1 -1
  22. package/ui-dist/assets/{chunk-G27WJ6UU-BixSJdhz.js → chunk-G27WJ6UU-Cws9GsBU.js} +1 -1
  23. package/ui-dist/assets/{chunk-GMAD6QVW-Bp7aUQup.js → chunk-GMAD6QVW-CbhLp4Jt.js} +1 -1
  24. package/ui-dist/assets/{chunk-JQ64N6SF-Dt5bAScf.js → chunk-JQ64N6SF-B5lJbHea.js} +1 -1
  25. package/ui-dist/assets/{chunk-LCL6LL3I-B5MsvPPp.js → chunk-LCL6LL3I-bGYRjzHM.js} +1 -1
  26. package/ui-dist/assets/{chunk-OBVCFTLP-DBqcHzNF.js → chunk-OBVCFTLP-CxeUZPN4.js} +1 -1
  27. package/ui-dist/assets/{chunk-P2QGCYS3-TMRACTMO.js → chunk-P2QGCYS3-CZEugM1f.js} +1 -1
  28. package/ui-dist/assets/{chunk-POPQ4Y6H-BsmX_MmQ.js → chunk-POPQ4Y6H-CoDq2Q_g.js} +1 -1
  29. package/ui-dist/assets/{chunk-PWAF6VOD-g4MniF8u.js → chunk-PWAF6VOD-CX_HLotF.js} +1 -1
  30. package/ui-dist/assets/{chunk-R7TYR2AO-S7THFl9x.js → chunk-R7TYR2AO-B4M26mv9.js} +1 -1
  31. package/ui-dist/assets/{chunk-RHFEMEQ7-CZYull6D.js → chunk-RHFEMEQ7-CVXQBX33.js} +1 -1
  32. package/ui-dist/assets/{chunk-SVP7TREG-DCss0vmb.js → chunk-SVP7TREG-L7TJWT_o.js} +1 -1
  33. package/ui-dist/assets/{chunk-TEH6E4GO-B-6h5v_5.js → chunk-TEH6E4GO-Dct0SlmV.js} +1 -1
  34. package/ui-dist/assets/classDiagram-DTDB5LWJ-DRbrF0Ha.js +1 -0
  35. package/ui-dist/assets/classDiagram-v2-JRS7N3AN-DRbrF0Ha.js +1 -0
  36. package/ui-dist/assets/{cs-CZ-2BRQDIVT-C9fIM1z5.js → cs-CZ-2BRQDIVT-CvvJph-H.js} +1 -1
  37. package/ui-dist/assets/{cynefin-OW5HDTMX-CtdCt-Da.js → cynefin-OW5HDTMX-Ei_Xgi2_.js} +1 -1
  38. package/ui-dist/assets/{cynefinDiagram-5FMLGOSQ-CF9L7X85.js → cynefinDiagram-5FMLGOSQ-AFFSo_cm.js} +1 -1
  39. package/ui-dist/assets/{da-DK-5WZEPLOC-DXGP9-TU.js → da-DK-5WZEPLOC-BaezbVeN.js} +1 -1
  40. package/ui-dist/assets/{dagre-3AP2YEHR-Bt0GOj3f.js → dagre-3AP2YEHR-B-FVEWH2.js} +1 -1
  41. package/ui-dist/assets/{de-DE-XR44H4JA-ChR8kF4h.js → de-DE-XR44H4JA-BAGdMA-L.js} +1 -1
  42. package/ui-dist/assets/{diagram-S7CK7UJ4-D2NIL20U.js → diagram-S7CK7UJ4-eyl1yJj7.js} +1 -1
  43. package/ui-dist/assets/{diagram-UQ7AKVKN-Dty3qvRq.js → diagram-UQ7AKVKN-CugR7jCP.js} +1 -1
  44. package/ui-dist/assets/{diagram-VSXAHHWV-znpNlomZ.js → diagram-VSXAHHWV-Dz85hV5k.js} +1 -1
  45. package/ui-dist/assets/{diagram-VX7I27RA-DMKYB58y.js → diagram-VX7I27RA-BYSNxzTB.js} +1 -1
  46. package/ui-dist/assets/{diagram-Z3DM3KII-BLsAgfm1.js → diagram-Z3DM3KII-BN4pFJaP.js} +1 -1
  47. package/ui-dist/assets/{dist-Biz3NhE4.js → dist-CVqcfLn4.js} +4 -4
  48. package/ui-dist/assets/{ebnfDiagram-PWID7BFC-sN1WpIzH.js → ebnfDiagram-PWID7BFC-Ddprc5Rv.js} +1 -1
  49. package/ui-dist/assets/{el-GR-BZB4AONW-BMi-5oTn.js → el-GR-BZB4AONW-C8EbIpNQ.js} +1 -1
  50. package/ui-dist/assets/{en-B4ZKOASM-DTTcVPyw.js → en-B4ZKOASM-BZp0XUv6.js} +1 -1
  51. package/ui-dist/assets/{erDiagram-SSCWMZ5O-qLib13wp.js → erDiagram-SSCWMZ5O-BoMeaxjf.js} +1 -1
  52. package/ui-dist/assets/{es-ES-U4NZUMDT-DSk-whe2.js → es-ES-U4NZUMDT-CA2eQinb.js} +1 -1
  53. package/ui-dist/assets/{eu-ES-A7QVB2H4-Dlhf1HMz.js → eu-ES-A7QVB2H4-CcaNArBV.js} +1 -1
  54. package/ui-dist/assets/eventmodeling-NTZA5JFV-CSPN2jeA.js +1 -0
  55. package/ui-dist/assets/{fa-IR-HGAKTJCU-C4NL1SUQ.js → fa-IR-HGAKTJCU-BH7DgnZN.js} +1 -1
  56. package/ui-dist/assets/{fi-FI-Z5N7JZ37-BPDGFbjy.js → fi-FI-Z5N7JZ37-DWg6APJ2.js} +1 -1
  57. package/ui-dist/assets/flowDiagram-A5DVABFB-YrkFRLG9.js +1 -0
  58. package/ui-dist/assets/{fr-FR-RHASNOE6-BKM44_qc.js → fr-FR-RHASNOE6-qBJplDsT.js} +1 -1
  59. package/ui-dist/assets/{ganttDiagram-EL5Y4UJY-Cm_9m3AA.js → ganttDiagram-EL5Y4UJY-4wx5f9nv.js} +1 -1
  60. package/ui-dist/assets/{gitGraph-4MIJSDKK-B53Ccobw.js → gitGraph-4MIJSDKK-DDYlgTud.js} +1 -1
  61. package/ui-dist/assets/{gitGraphDiagram-WWUBYQGX-CshbIfrd.js → gitGraphDiagram-WWUBYQGX-DAhZkdQa.js} +1 -1
  62. package/ui-dist/assets/{gl-ES-HMX3MZ6V-CYq-Wgeo.js → gl-ES-HMX3MZ6V-CTvRbK-4.js} +1 -1
  63. package/ui-dist/assets/{he-IL-6SHJWFNN-CejOCh7c.js → he-IL-6SHJWFNN-w2aMYZZd.js} +1 -1
  64. package/ui-dist/assets/{hi-IN-IWLTKZ5I-DdZM6com.js → hi-IN-IWLTKZ5I-DX4ZRE2H.js} +1 -1
  65. package/ui-dist/assets/{hu-HU-A5ZG7DT2-DcLFRMuO.js → hu-HU-A5ZG7DT2-naHDPNOM.js} +1 -1
  66. package/ui-dist/assets/{id-ID-SAP4L64H-1x9JAf0A.js → id-ID-SAP4L64H-D5QxdnZa.js} +1 -1
  67. package/ui-dist/assets/image-GAAHSSAO-C9O0QZ3x.js +1 -0
  68. package/ui-dist/assets/{index-CzWe1zeF.js → index-W8DLsYN7.js} +8 -8
  69. package/ui-dist/assets/{info-A6RAGUB7-Cge9ecX_.js → info-A6RAGUB7-RXb_MEIH.js} +1 -1
  70. package/ui-dist/assets/{infoDiagram-RXCK75RN-VS1BTI_H.js → infoDiagram-RXCK75RN-DzaEiHqC.js} +1 -1
  71. package/ui-dist/assets/{ishikawaDiagram-5VMMS53U-Cbf1xbxj.js → ishikawaDiagram-5VMMS53U-C9We7rRC.js} +1 -1
  72. package/ui-dist/assets/{it-IT-JPQ66NNP-DgmQi0B_.js → it-IT-JPQ66NNP-B0YDAONu.js} +1 -1
  73. package/ui-dist/assets/{ja-JP-DBVTYXUO-BpmMfXE3.js → ja-JP-DBVTYXUO-CjS5c0my.js} +1 -1
  74. package/ui-dist/assets/{journeyDiagram-EYS64GPL-C8RWIfHV.js → journeyDiagram-EYS64GPL-BnolpCVx.js} +1 -1
  75. package/ui-dist/assets/{kaa-6HZHGXH3-CczLR43o.js → kaa-6HZHGXH3-BCxOG4kc.js} +1 -1
  76. package/ui-dist/assets/{kab-KAB-ZGHBKWFO-Cx74DVre.js → kab-KAB-ZGHBKWFO-D3QotDYI.js} +1 -1
  77. package/ui-dist/assets/{kanban-definition-3QL26DDD-R8ng9q7k.js → kanban-definition-3QL26DDD-Cy9HKz-0.js} +1 -1
  78. package/ui-dist/assets/{kk-KZ-P5N5QNE5-BPvg9KTT.js → kk-KZ-P5N5QNE5-BrSjotfG.js} +1 -1
  79. package/ui-dist/assets/{km-KH-HSX4SM5Z-Blgo7Zit.js → km-KH-HSX4SM5Z-fb8nqdkK.js} +1 -1
  80. package/ui-dist/assets/{ko-KR-MTYHY66A-DZdo-KOi.js → ko-KR-MTYHY66A-BXj8eDyy.js} +1 -1
  81. package/ui-dist/assets/{ku-TR-6OUDTVRD-CTpgWpW_.js → ku-TR-6OUDTVRD-COZArCj9.js} +1 -1
  82. package/ui-dist/assets/{line-Baf15v0x.js → line-7U1712L5.js} +1 -1
  83. package/ui-dist/assets/{lt-LT-XHIRWOB4-DKNkbcsj.js → lt-LT-XHIRWOB4-C-HJQqop.js} +1 -1
  84. package/ui-dist/assets/{lv-LV-5QDEKY6T-DwnZRxkH.js → lv-LV-5QDEKY6T-DLfr6jLA.js} +1 -1
  85. package/ui-dist/assets/{mermaid-parser.core-0V2gZHuN.js → mermaid-parser.core-DrLo74XG.js} +3 -3
  86. package/ui-dist/assets/{mindmap-definition-FBJOCRG2-7hOTFX4B.js → mindmap-definition-FBJOCRG2-Ba42gC8u.js} +1 -1
  87. package/ui-dist/assets/{mr-IN-CRQNXWMA-C-BFvdUk.js → mr-IN-CRQNXWMA-B9soDV3M.js} +1 -1
  88. package/ui-dist/assets/{my-MM-5M5IBNSE-BFs64Lrm.js → my-MM-5M5IBNSE-LZaFHx2a.js} +1 -1
  89. package/ui-dist/assets/{nb-NO-T6EIAALU-CHGzOQzI.js → nb-NO-T6EIAALU-BwhFAqXH.js} +1 -1
  90. package/ui-dist/assets/{nl-NL-IS3SIHDZ-CmrNJ43t.js → nl-NL-IS3SIHDZ-D2FhUB0E.js} +1 -1
  91. package/ui-dist/assets/{nn-NO-6E72VCQL-Cmx8XlD1.js → nn-NO-6E72VCQL-yn-NI0ZL.js} +1 -1
  92. package/ui-dist/assets/{oc-FR-POXYY2M6-D6ZK0W24.js → oc-FR-POXYY2M6-DOhix0u-.js} +1 -1
  93. package/ui-dist/assets/{pa-IN-N4M65BXN-CoFjVv1P.js → pa-IN-N4M65BXN-9aoDSwWx.js} +1 -1
  94. package/ui-dist/assets/{packet-AYTQ26CC-auec35xT.js → packet-AYTQ26CC-DuyZkxuT.js} +1 -1
  95. package/ui-dist/assets/{pegDiagram-XKGWAZYB-NMMkeAIs.js → pegDiagram-XKGWAZYB-PH6THd_o.js} +1 -1
  96. package/ui-dist/assets/percentages-BXMCSKIN-BFxN7npZ.js +1 -0
  97. package/ui-dist/assets/{pie-WAS4IAKB-Brhoju7F.js → pie-WAS4IAKB-BdQJyLvD.js} +1 -1
  98. package/ui-dist/assets/{pieDiagram-E7YTZNPT-CbaXV2ep.js → pieDiagram-E7YTZNPT-CPm011HM.js} +1 -1
  99. package/ui-dist/assets/{pl-PL-T2D74RX3-CtZh2-fJ.js → pl-PL-T2D74RX3-BO50j2s4.js} +1 -1
  100. package/ui-dist/assets/{pt-BR-5N22H2LF-Dwnm2Lle.js → pt-BR-5N22H2LF-Cp8T2vmD.js} +1 -1
  101. package/ui-dist/assets/{pt-PT-UZXXM6DQ-Cb08TgqC.js → pt-PT-UZXXM6DQ-CdTZJ0Y5.js} +1 -1
  102. package/ui-dist/assets/{quadrantDiagram-AXDQQJYC-CXEPKL_-.js → quadrantDiagram-AXDQQJYC-Cm1Rlzhk.js} +1 -1
  103. package/ui-dist/assets/{radar-RG4KPBEZ-CTDsgRBl.js → radar-RG4KPBEZ-48srnC1_.js} +1 -1
  104. package/ui-dist/assets/{railroad-74A4TZTK-Bad-j95k.js → railroad-74A4TZTK-C6601ICA.js} +1 -1
  105. package/ui-dist/assets/railroad-abnf-HS5TGJTU-Dmq5JjW8.js +1 -0
  106. package/ui-dist/assets/railroad-ebnf-LZEXJU2U-DzMo_BK8.js +1 -0
  107. package/ui-dist/assets/railroad-peg-WCYAUIDC-LanIHXaC.js +1 -0
  108. package/ui-dist/assets/{railroadDiagram-O6MQD6OU-CJiZ6mmg.js → railroadDiagram-O6MQD6OU-C8yR5TE7.js} +1 -1
  109. package/ui-dist/assets/{requirementDiagram-EFPCY7ZU-T8QMEZu6.js → requirementDiagram-EFPCY7ZU-DeleqP-5.js} +1 -1
  110. package/ui-dist/assets/{ro-RO-JPDTUUEW-D6H165NT.js → ro-RO-JPDTUUEW-C7SipvaK.js} +1 -1
  111. package/ui-dist/assets/{ru-RU-B4JR7IUQ-CBp0xVXG.js → ru-RU-B4JR7IUQ-dNLeoFpA.js} +1 -1
  112. package/ui-dist/assets/{sankeyDiagram-P5KCCOFB-Z9s0vmSt.js → sankeyDiagram-P5KCCOFB-CSJKN7--.js} +1 -1
  113. package/ui-dist/assets/{sequenceDiagram-WJ2MYXX4-BulR70nw.js → sequenceDiagram-WJ2MYXX4-B_C10dhq.js} +1 -1
  114. package/ui-dist/assets/{si-LK-N5RQ5JYF-10AxMH9e.js → si-LK-N5RQ5JYF-DogInl3-.js} +1 -1
  115. package/ui-dist/assets/{sk-SK-C5VTKIMK-BXvCxb46.js → sk-SK-C5VTKIMK-2YnR2SrM.js} +1 -1
  116. package/ui-dist/assets/{sl-SI-NN7IZMDC-BI5_PFXZ.js → sl-SI-NN7IZMDC-w1ecqU-U.js} +1 -1
  117. package/ui-dist/assets/{stateDiagram-HBIQ2CUA-Dam0DwKS.js → stateDiagram-HBIQ2CUA-BIYHmokV.js} +1 -1
  118. package/ui-dist/assets/stateDiagram-v2-4QOOHH4V-BEVYrEze.js +1 -0
  119. package/ui-dist/assets/subset-shared.chunk-zuCoK3Ax.js +1 -0
  120. package/ui-dist/assets/{subset-worker.chunk-BaDYCnkg.js → subset-worker.chunk-Fq9aq3Pk.js} +1 -1
  121. package/ui-dist/assets/{sv-SE-XGPEYMSR-dVM3morJ.js → sv-SE-XGPEYMSR-ZA1w16aZ.js} +1 -1
  122. package/ui-dist/assets/{swimlanes-XN3QIQJK-txWA6rWV.js → swimlanes-XN3QIQJK-Bsz-wFaq.js} +1 -1
  123. package/ui-dist/assets/swimlanesDiagram-VK2B7HYN-DVXdrFIL.js +8 -0
  124. package/ui-dist/assets/{ta-IN-2NMHFXQM-CWJY03pN.js → ta-IN-2NMHFXQM-CanbC1P6.js} +1 -1
  125. package/ui-dist/assets/{th-TH-HPSO5L25-CR6GhLgj.js → th-TH-HPSO5L25-DyHWEX0G.js} +1 -1
  126. package/ui-dist/assets/{timeline-definition-24CTP7MA-D8m_1UrT.js → timeline-definition-24CTP7MA-4TgC1OoH.js} +1 -1
  127. package/ui-dist/assets/{tr-TR-DEFEU3FU-BI8tDJSm.js → tr-TR-DEFEU3FU-D0W6rufc.js} +1 -1
  128. package/ui-dist/assets/{treeView-Q6P3EWNA-CWJmpg6A.js → treeView-Q6P3EWNA-C9fqdzP-.js} +1 -1
  129. package/ui-dist/assets/{treemap-WGGIJYW6-CvClsvN5.js → treemap-WGGIJYW6-BqNZy40L.js} +1 -1
  130. package/ui-dist/assets/{uk-UA-QMV73CPH-D3Uc38wP.js → uk-UA-QMV73CPH-C1iCWdAQ.js} +1 -1
  131. package/ui-dist/assets/{vennDiagram-4TSXK5OY-C5iS8F8o.js → vennDiagram-4TSXK5OY-BQFCZXqB.js} +1 -1
  132. package/ui-dist/assets/{vi-VN-M7AON7JQ-B6BZpyS4.js → vi-VN-M7AON7JQ-BWynaJhA.js} +1 -1
  133. package/ui-dist/assets/{wardley-WFR3VGLG-CdqB7_9-.js → wardley-WFR3VGLG-cNQ06Oix.js} +1 -1
  134. package/ui-dist/assets/{wardleyDiagram-VM6X3IG4-DAHyWwbW.js → wardleyDiagram-VM6X3IG4-BbLDW2ka.js} +1 -1
  135. package/ui-dist/assets/{xychartDiagram-S5SC5T6Z-ilyFTLQ_.js → xychartDiagram-S5SC5T6Z-r5VAgI1x.js} +1 -1
  136. package/ui-dist/assets/{zh-CN-LNUGB5OW-B0PN355q.js → zh-CN-LNUGB5OW-BNvy0Mnj.js} +1 -1
  137. package/ui-dist/assets/{zh-HK-E62DVLB3-DUEHDaPB.js → zh-HK-E62DVLB3-Csv83LC3.js} +1 -1
  138. package/ui-dist/assets/{zh-TW-RAJ6MFWO-Ci4YMClQ.js → zh-TW-RAJ6MFWO-CW-6XIyO.js} +1 -1
  139. package/ui-dist/index.html +1 -1
  140. package/ui-dist/assets/architecture-7GRP2DOG-fqG4giDT.js +0 -1
  141. package/ui-dist/assets/channel-BOrwYBHk.js +0 -1
  142. package/ui-dist/assets/classDiagram-DTDB5LWJ-Dm2kcSSm.js +0 -1
  143. package/ui-dist/assets/classDiagram-v2-JRS7N3AN-Dm2kcSSm.js +0 -1
  144. package/ui-dist/assets/eventmodeling-NTZA5JFV-BN91GLT5.js +0 -1
  145. package/ui-dist/assets/flowDiagram-A5DVABFB-DBrXJ-Jf.js +0 -1
  146. package/ui-dist/assets/image-GAAHSSAO-BgehxCDd.js +0 -1
  147. package/ui-dist/assets/percentages-BXMCSKIN-BBuUnwM-.js +0 -1
  148. package/ui-dist/assets/railroad-abnf-HS5TGJTU-CbvNSNpm.js +0 -1
  149. package/ui-dist/assets/railroad-ebnf-LZEXJU2U-DdltjnE0.js +0 -1
  150. package/ui-dist/assets/railroad-peg-WCYAUIDC-CgbxToYh.js +0 -1
  151. package/ui-dist/assets/stateDiagram-v2-4QOOHH4V-CSjCWsxW.js +0 -1
  152. package/ui-dist/assets/subset-shared.chunk-Du7WrYQy.js +0 -1
  153. package/ui-dist/assets/swimlanesDiagram-VK2B7HYN-CU4h0g7a.js +0 -8
@@ -299,7 +299,26 @@ var TextSkeleton = z.strictObject({
299
299
  fontSize: z.number().optional(),
300
300
  fontFamily: FontFamily.optional(),
301
301
  textAlign: TextAlign.optional(),
302
- verticalAlign: VerticalAlign.optional()
302
+ verticalAlign: VerticalAlign.optional(),
303
+ /**
304
+ * The column a note wraps into.
305
+ *
306
+ * Meaningless without `autoResize: false`, which is why the two travel together and why
307
+ * `domain/scene/skeleton.ts` sets both or neither.
308
+ */
309
+ width: z.number().optional(),
310
+ /**
311
+ * Upstream: "If `true` the width will fit the text. If `false`, the text will wrap to
312
+ * fit the width." It defaults to `true`, and that default is why a free-standing note
313
+ * came out as one line thousands of pixels long — the measurement was right (the
314
+ * expander measures through `adapters/excalidraw/text-metrics.ts`), there was simply
315
+ * nothing telling it to break.
316
+ *
317
+ * An Excalidraw-shaped flag in a skeleton, exactly as `elbowed` is on the linear one:
318
+ * there is no friendlier field that carries it, and inventing one would mean a second
319
+ * name for the same boolean.
320
+ */
321
+ autoResize: z.boolean().optional()
303
322
  });
304
323
  var FrameSkeleton = z.strictObject({
305
324
  type: z.literal("frame"),
@@ -387,6 +406,13 @@ var DescribedElement = z.object({
387
406
  to: ElementId.nullish(),
388
407
  style: DescribedStyle.nullish()
389
408
  });
409
+ var Overlap = z.object({
410
+ a: ElementId,
411
+ b: ElementId,
412
+ /** Size of the intersecting region, in px. */
413
+ width: z.number(),
414
+ height: z.number()
415
+ });
390
416
  var SceneDescription = z.object({
391
417
  sceneId: SceneId,
392
418
  name: z.string(),
@@ -395,6 +421,19 @@ var SceneDescription = z.object({
395
421
  updatedAgoMs: z.number().int(),
396
422
  frames: z.array(DescribedFrame),
397
423
  elements: z.array(DescribedElement),
424
+ /** Worst first, and capped — see `MAX_REPORTED_OVERLAPS`. */
425
+ overlaps: z.array(Overlap),
426
+ /** Every collision found, including the ones `overlaps` was truncated past. */
427
+ overlapCount: z.number().int().nonnegative(),
428
+ /**
429
+ * Which layout the shape of this graph wants, and what in it decided.
430
+ *
431
+ * Three layouts exist and each destroys the structure the others show. Claude cannot
432
+ * see the canvas, so without a sentence here it picks by habit — which is how a hub
433
+ * with eight neighbours ends up ranked into one box against an edge and a tall stack
434
+ * beside it. Null when the scene is too small to have a shape.
435
+ */
436
+ layoutAdvice: z.string().nullable(),
398
437
  detail: DetailLevel
399
438
  });
400
439
  var DescribedEdge = z.object({
@@ -732,8 +771,38 @@ var HOUSE = {
732
771
  external: { strokeColor: "#1e1e1e", backgroundColor: "transparent" },
733
772
  hotspot: { strokeColor: "#e03131", backgroundColor: "#ffc9c9" }
734
773
  },
735
- sizes: { service: [180, 80], icon: 64, framePad: 40 },
736
- spacing: { h: 60, v: 100 }
774
+ sizes: {
775
+ /** The floor a labelled shape starts from, and the size an unlabelled one keeps. */
776
+ service: [180, 80],
777
+ icon: 64,
778
+ framePad: 40,
779
+ /** Breathing room around a bound label. Wider than upstream's 5 px, which lets text
780
+ * touch the stroke. */
781
+ labelPadX: 16,
782
+ labelPadY: 12,
783
+ /** Past this a label wraps instead of widening. A 400 px box holding one line reads
784
+ * as a banner, not a node. */
785
+ maxBox: 280,
786
+ /**
787
+ * Past this a **free-standing note** wraps. Wider than `maxBox` because the two are
788
+ * not the same object: a caption names a thing and stays short, a note is prose and
789
+ * runs to several sentences. Left unwrapped a note is one enormous line — 261
790
+ * characters measured 2,651 px against a canvas whose whole diagram was 1,760 — and
791
+ * a paragraph set to `maxBox` is a column of two-word lines instead.
792
+ */
793
+ note: 420
794
+ },
795
+ spacing: { h: 60, v: 100 },
796
+ /**
797
+ * Every computed size rounds up to this.
798
+ *
799
+ * `guides/layout.md` already tells the reader to keep coordinates on a 20 px grid so a
800
+ * nudge stays aligned; sizes derived from measured text have to land on it too. It is
801
+ * also what answers `adr/0004`'s objection to measuring at all — that per-box widths
802
+ * differing by a few pixels make a rank of five look ragged. Quantised, they do not
803
+ * differ by a few pixels: they are equal or they are 20 apart on purpose.
804
+ */
805
+ grid: 20
737
806
  };
738
807
  var CreatableType = z.enum(["rectangle", "diamond", "ellipse", "text", "line"], {
739
808
  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`
@@ -817,7 +886,32 @@ var ARRANGE_OPS = [
817
886
  * crossings, spacing from `HOUSE.spacing`. It reads the arrows among the named
818
887
  * elements out of the scene, so the caller names boxes, not edges.
819
888
  */
820
- "layout-layered"
889
+ "layout-layered",
890
+ /**
891
+ * The radial layout — a hub at the centre and everything else on rings around it,
892
+ * ordered so a node sits near whatever it hangs off.
893
+ *
894
+ * `layout-layered` answers "what flows into what". This answers the other question a
895
+ * diagram gets drawn to ask: **what is this one thing connected to?** A hub-and-spoke
896
+ * graph laid out in ranks becomes a wide, shallow fan with the hub jammed against the
897
+ * left edge — the shape is in the data and the layout throws it away. Ranking is also
898
+ * the wrong instrument for a graph with no direction to speak of: a mesh of mutual
899
+ * dependencies has no sources, so every rank is a tie broken on the id.
900
+ *
901
+ * Like `layout-layered` it reads the arrows among the named elements out of the scene,
902
+ * so the caller names boxes, not edges. Unlike it, direction is ignored: what matters
903
+ * radially is who touches whom.
904
+ */
905
+ "layout-radial",
906
+ /**
907
+ * The tree layout — a root on the left and everything else fanning right by depth.
908
+ *
909
+ * The same graph `layout-radial` draws as a circle, drawn as a root and its
910
+ * descendants. A ring must be long enough to seat its members, so eight boxes carrying
911
+ * real labels force a wide radius and every edge then crosses the middle of the circle.
912
+ * Fanned out instead, no edge crosses another and the eye reads left to right.
913
+ */
914
+ "layout-tree"
821
915
  ];
822
916
  var ArrangeOp = z.enum(ARRANGE_OPS);
823
917
  var ArrangeInput = z.object({
@@ -904,7 +998,17 @@ var ReadMeOutput = z.object({
904
998
  var writeResult = {
905
999
  sceneId: SceneId,
906
1000
  sceneVersion: z.number().int(),
907
- broadcastTo: z.number().int().nonnegative()
1001
+ broadcastTo: z.number().int().nonnegative(),
1002
+ /**
1003
+ * Something is buried on the canvas after this write — or `null`, which is the normal
1004
+ * case and says so by being absent rather than by saying "none".
1005
+ *
1006
+ * On **every** write rather than on a read, because the alternative is that the agent
1007
+ * has to decide to go and look, and the only tool that used to answer "did that land
1008
+ * badly?" was `chalk_screenshot` — a rendered image, the most expensive call here. A
1009
+ * layout mistake now costs one sentence at the moment it is made.
1010
+ */
1011
+ overlapWarning: z.string().nullable()
908
1012
  };
909
1013
  var ToolRejection = z.object({
910
1014
  id: ElementId,
@@ -1056,10 +1160,27 @@ var SearchIconsOutput = z.object({
1056
1160
  */
1057
1161
  note: z.string().nullable()
1058
1162
  });
1163
+ var IconPlacement = z.enum(["above", "below", "left", "right", "badge", "inside"]);
1059
1164
  var PlaceIconInput = z.object({
1060
1165
  iconId: IconId,
1061
- x: z.number(),
1062
- y: z.number(),
1166
+ /**
1167
+ * Absolute position. Optional **only** when `attachTo` is given — one or the other has
1168
+ * to say where the icon goes, and the error names the missing half.
1169
+ */
1170
+ x: z.number().optional(),
1171
+ y: z.number().optional(),
1172
+ /**
1173
+ * Attach the icon to an existing element instead of positioning it by hand.
1174
+ *
1175
+ * This is the difference between an icon that is *part of* a node and one that merely
1176
+ * happens to be near it today. An attached icon is recorded in
1177
+ * `customData.chalk.anchorIds` and travels with its element through every arrange
1178
+ * operation, `layout-layered` included — which is what stops a set of vendor marks being
1179
+ * left stranded across the canvas the first time the boxes are laid out.
1180
+ */
1181
+ attachTo: ElementId.optional(),
1182
+ /** Where it sits relative to `attachTo`. Ignored without it. Defaults to `above`. */
1183
+ placement: IconPlacement.optional(),
1063
1184
  /** Longest side in px. Defaults to `HOUSE.sizes.icon`; the aspect comes from the icon. */
1064
1185
  size: z.number().positive().optional(),
1065
1186
  /** A caption centred beneath it. An unlabelled icon says "a thing was here". */
@@ -1317,6 +1438,11 @@ var unknownIcon = (id, packs) => err("UNKNOWN_ICON", `no icon "${id}" in the cat
1317
1438
  tool: "chalk_search_icons",
1318
1439
  detail: { id }
1319
1440
  });
1441
+ var iconNeedsAPlace = (id) => err("ICON_NEEDS_A_PLACE", `nowhere to put "${id}" \u2014 pass attachTo, or both x and y`, {
1442
+ hint: "attachTo: the element it belongs to (it then travels with that element through every layout). x/y only for an icon that belongs to the canvas rather than to a node",
1443
+ tool: "chalk_place_icon",
1444
+ detail: { id }
1445
+ });
1320
1446
  var packInstallFailed = (pack, reason) => err("PACK_INSTALL_FAILED", `could not install the icon pack "${pack}": ${reason}`, {
1321
1447
  hint: "check the machine can reach the npm registry, or install the package yourself and point chalk_install_pack at it with `from`",
1322
1448
  tool: "chalk_install_pack",
@@ -1436,6 +1562,174 @@ function installDomShim() {
1436
1562
  };
1437
1563
  }
1438
1564
 
1565
+ // src/domain/style/text-metrics.ts
1566
+ var EXCALIFONT_EM = {
1567
+ " ": 0.4,
1568
+ "!": 0.314,
1569
+ '"': 0.371,
1570
+ "#": 0.783,
1571
+ $: 0.721,
1572
+ "%": 0.928,
1573
+ "&": 0.718,
1574
+ "'": 0.218,
1575
+ "(": 0.441,
1576
+ ")": 0.402,
1577
+ "*": 0.525,
1578
+ "+": 0.55,
1579
+ ",": 0.257,
1580
+ "-": 0.411,
1581
+ ".": 0.274,
1582
+ "/": 0.561,
1583
+ "0": 0.664,
1584
+ "1": 0.427,
1585
+ "2": 0.7,
1586
+ "3": 0.608,
1587
+ "4": 0.585,
1588
+ "5": 0.618,
1589
+ "6": 0.64,
1590
+ "7": 0.558,
1591
+ "8": 0.636,
1592
+ "9": 0.629,
1593
+ ":": 0.264,
1594
+ ";": 0.298,
1595
+ "<": 0.55,
1596
+ "=": 0.55,
1597
+ ">": 0.55,
1598
+ "?": 0.466,
1599
+ "@": 0.829,
1600
+ A: 0.676,
1601
+ B: 0.761,
1602
+ C: 0.629,
1603
+ D: 0.78,
1604
+ E: 0.707,
1605
+ F: 0.661,
1606
+ G: 0.78,
1607
+ H: 0.573,
1608
+ I: 0.545,
1609
+ J: 0.569,
1610
+ K: 0.613,
1611
+ L: 0.543,
1612
+ M: 0.766,
1613
+ N: 0.632,
1614
+ O: 0.767,
1615
+ P: 0.698,
1616
+ Q: 0.768,
1617
+ R: 0.736,
1618
+ S: 0.622,
1619
+ T: 0.857,
1620
+ U: 0.73,
1621
+ V: 0.592,
1622
+ W: 0.786,
1623
+ X: 0.628,
1624
+ Y: 0.564,
1625
+ Z: 0.832,
1626
+ "[": 0.472,
1627
+ "\\": 0.589,
1628
+ "]": 0.497,
1629
+ "^": 0.51,
1630
+ _: 0.67,
1631
+ "`": 0.6,
1632
+ a: 0.576,
1633
+ b: 0.555,
1634
+ c: 0.504,
1635
+ d: 0.605,
1636
+ e: 0.537,
1637
+ f: 0.497,
1638
+ g: 0.555,
1639
+ h: 0.567,
1640
+ i: 0.244,
1641
+ j: 0.328,
1642
+ k: 0.533,
1643
+ l: 0.225,
1644
+ m: 0.663,
1645
+ n: 0.526,
1646
+ o: 0.6,
1647
+ p: 0.537,
1648
+ q: 0.539,
1649
+ r: 0.412,
1650
+ s: 0.543,
1651
+ t: 0.553,
1652
+ u: 0.548,
1653
+ v: 0.525,
1654
+ w: 0.693,
1655
+ x: 0.591,
1656
+ y: 0.53,
1657
+ z: 0.572,
1658
+ "{": 0.504,
1659
+ "|": 0.299,
1660
+ "}": 0.544,
1661
+ "~": 0.669,
1662
+ // Beyond ASCII, only what actually turns up in a diagram. `·` earns its place: it is
1663
+ // the separator this project's own labels use ("Dev machine · manage.sh dist"), and the
1664
+ // block fallback below would over-estimate it nearly threefold.
1665
+ "\xB7": 0.2,
1666
+ "\u2013": 0.702,
1667
+ "\u2014": 0.935,
1668
+ "\u2026": 0.709,
1669
+ "\u2022": 0.522,
1670
+ "\u2019": 0.304,
1671
+ "\u201C": 0.412,
1672
+ "\u201D": 0.428,
1673
+ "\xD7": 0.55,
1674
+ "\xB0": 0.412,
1675
+ "\xA3": 0.71,
1676
+ "\u20AC": 0.713,
1677
+ \u00E9: 0.551,
1678
+ \u00FC: 0.508,
1679
+ \u00F1: 0.526,
1680
+ "\u2713": 0.749
1681
+ };
1682
+ var fallbackEm = (codePoint) => {
1683
+ if (codePoint < 32) return 0;
1684
+ if (codePoint <= 591) return 0.56;
1685
+ if (codePoint >= 8192 && codePoint <= 8303) return 0.95;
1686
+ if (codePoint >= 126976) return 1.4;
1687
+ return 1;
1688
+ };
1689
+ var emWidth = (character) => {
1690
+ const known = EXCALIFONT_EM[character];
1691
+ if (known !== void 0) return known;
1692
+ return fallbackEm(character.codePointAt(0) ?? 0);
1693
+ };
1694
+ function measureLine(text, fontSize) {
1695
+ let em = 0;
1696
+ for (const character of text) em += emWidth(character);
1697
+ return em * fontSize;
1698
+ }
1699
+ function wrapLines(text, fontSize, maxWidth) {
1700
+ const paragraphs = text.split("\n");
1701
+ const lines = [];
1702
+ for (const paragraph of paragraphs) {
1703
+ const words = paragraph.split(" ").filter((word) => word !== "");
1704
+ if (words.length === 0) {
1705
+ lines.push("");
1706
+ continue;
1707
+ }
1708
+ let line = "";
1709
+ for (const word of words) {
1710
+ const candidate = line === "" ? word : `${line} ${word}`;
1711
+ if (line !== "" && measureLine(candidate, fontSize) > maxWidth) {
1712
+ lines.push(line);
1713
+ line = word;
1714
+ } else {
1715
+ line = candidate;
1716
+ }
1717
+ }
1718
+ lines.push(line);
1719
+ }
1720
+ return lines;
1721
+ }
1722
+
1723
+ // src/adapters/excalidraw/text-metrics.ts
1724
+ var fontSizeOf = (fontString) => {
1725
+ const match = /(\d+(?:\.\d+)?)px/.exec(fontString);
1726
+ const size = match?.[1];
1727
+ return size === void 0 ? 20 : Number.parseFloat(size);
1728
+ };
1729
+ var createTextMetricsProvider = () => ({
1730
+ getLineWidth: (text, fontString) => measureLine(text, fontSizeOf(fontString))
1731
+ });
1732
+
1439
1733
  // src/adapters/excalidraw/node-expander.ts
1440
1734
  var WARM_UP = [
1441
1735
  { type: "rectangle", id: "warmup-a", x: 0, y: 0, width: 10, height: 10, label: { text: "a" } },
@@ -1454,7 +1748,8 @@ var converter = null;
1454
1748
  async function loadConverter() {
1455
1749
  const uninstall = installDomShim();
1456
1750
  try {
1457
- const { convertToExcalidrawElements } = await import('./prod-KHI2WQT3.js');
1751
+ const { convertToExcalidrawElements, setCustomTextMetricsProvider } = await import('./prod-KHI2WQT3.js');
1752
+ setCustomTextMetricsProvider(createTextMetricsProvider());
1458
1753
  convertToExcalidrawElements([...WARM_UP], { regenerateIds: false });
1459
1754
  return ok(convertToExcalidrawElements);
1460
1755
  } catch (thrown) {
@@ -1511,6 +1806,6 @@ var stable = (element) => {
1511
1806
  return rest;
1512
1807
  };
1513
1808
 
1514
- export { AnnotateInput, AnnotateOutput, ApiError, ArrangeOutput, ArrangeToolInput, BINDING_FIELDS, ClientMessage, ConnectOutput, ConnectToolInput, CreateElementsInput, CreateElementsOutput, DataUrl, 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, bridgeVersionMismatch, catalogUnavailable, createNodeSkeletonExpander, deepEqual, describeThrown, diskConflict, emptySelection, expansionFailed, exportFailed, exportTimedOut, fail, frameIdOf, iconIdOf, idCollision, isFail, isOk, noBoundLabel, noBrowser, noScenes, notAPack, notARepo, ok, packInstallFailed, partition, pathOutsideRepo, point, portUnavailable, refusedFieldMessage, sceneFileMissing, staleVersion, storeUnavailable, unknownElement, unknownIcon, unknownScene, unknownSnapshot, unreadableSceneFile };
1515
- //# sourceMappingURL=chunk-U2ZMSGNS.js.map
1516
- //# sourceMappingURL=chunk-U2ZMSGNS.js.map
1809
+ export { AnnotateInput, AnnotateOutput, ApiError, ArrangeOutput, ArrangeToolInput, BINDING_FIELDS, ClientMessage, ConnectOutput, ConnectToolInput, CreateElementsInput, CreateElementsOutput, DataUrl, 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, bridgeVersionMismatch, catalogUnavailable, createNodeSkeletonExpander, deepEqual, describeThrown, diskConflict, emptySelection, expansionFailed, exportFailed, exportTimedOut, fail, frameIdOf, iconIdOf, iconNeedsAPlace, idCollision, isFail, isOk, measureLine, noBoundLabel, noBrowser, noScenes, notAPack, notARepo, ok, packInstallFailed, partition, pathOutsideRepo, point, portUnavailable, refusedFieldMessage, sceneFileMissing, staleVersion, storeUnavailable, unknownElement, unknownIcon, unknownScene, unknownSnapshot, unreadableSceneFile, wrapLines };
1810
+ //# sourceMappingURL=chunk-XFH76JS6.js.map
1811
+ //# sourceMappingURL=chunk-XFH76JS6.js.map