chalkbridge 1.0.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/{chunk-U2ZMSGNS.js → chunk-XDK5UUTO.js} +243 -9
  2. package/dist/cli.js +538 -86
  3. package/dist/index.js +1 -1
  4. package/guides/icons.md +22 -3
  5. package/guides/layout.md +42 -3
  6. package/package.json +1 -1
  7. package/ui-dist/assets/{abnfDiagram-VCTEODGH-C_cqCKun.js → abnfDiagram-VCTEODGH-BCawxiKB.js} +1 -1
  8. package/ui-dist/assets/{ar-SA-G6X2FPQ2-CEKRHtmX.js → ar-SA-G6X2FPQ2-UCm9FftA.js} +1 -1
  9. package/ui-dist/assets/architecture-7GRP2DOG-CiyYoVgW.js +1 -0
  10. package/ui-dist/assets/{architectureDiagram-5GKGNRK7-BuWVonvB.js → architectureDiagram-5GKGNRK7-DIw1pNEk.js} +1 -1
  11. package/ui-dist/assets/{az-AZ-76LH7QW2-mn2Y6BCY.js → az-AZ-76LH7QW2-B5LEIxkk.js} +1 -1
  12. package/ui-dist/assets/{bg-BG-XCXSNQG7-CraLx0fE.js → bg-BG-XCXSNQG7-2bpThpZL.js} +1 -1
  13. package/ui-dist/assets/{blockDiagram-NRAW4CY4-83XozRPe.js → blockDiagram-NRAW4CY4-BGr2WGp_.js} +1 -1
  14. package/ui-dist/assets/{bn-BD-2XOGV67Q-CsTrJsPu.js → bn-BD-2XOGV67Q-Drz-y_cX.js} +1 -1
  15. package/ui-dist/assets/{c4Diagram-UCG6FXSJ-DTdS8B8G.js → c4Diagram-UCG6FXSJ-vbm87bpC.js} +1 -1
  16. package/ui-dist/assets/{ca-ES-6MX7JW3Y-DD8cv_ze.js → ca-ES-6MX7JW3Y-D89p_FZ-.js} +1 -1
  17. package/ui-dist/assets/channel-DtgwkzBZ.js +1 -0
  18. package/ui-dist/assets/{chunk-75Z2AOVW-DQDqkKP0.js → chunk-75Z2AOVW-B7kf5jVz.js} +1 -1
  19. package/ui-dist/assets/{chunk-DU6HZSFF-_YwywVCK.js → chunk-DU6HZSFF-BlGPS6B6.js} +1 -1
  20. package/ui-dist/assets/{chunk-EIO257PC-CLwbKeso.js → chunk-EIO257PC-nzXnwORk.js} +1 -1
  21. package/ui-dist/assets/{chunk-F27PBJKO-BwhryBf6.js → chunk-F27PBJKO-B7qepoj_.js} +1 -1
  22. package/ui-dist/assets/{chunk-G27WJ6UU-BixSJdhz.js → chunk-G27WJ6UU-CSjcvmOf.js} +1 -1
  23. package/ui-dist/assets/{chunk-GMAD6QVW-Bp7aUQup.js → chunk-GMAD6QVW-CtaZAO5u.js} +1 -1
  24. package/ui-dist/assets/{chunk-JQ64N6SF-Dt5bAScf.js → chunk-JQ64N6SF-CuhtdTse.js} +1 -1
  25. package/ui-dist/assets/{chunk-LCL6LL3I-B5MsvPPp.js → chunk-LCL6LL3I-DMfA3a_s.js} +1 -1
  26. package/ui-dist/assets/{chunk-OBVCFTLP-DBqcHzNF.js → chunk-OBVCFTLP-BoBuso2l.js} +1 -1
  27. package/ui-dist/assets/{chunk-P2QGCYS3-TMRACTMO.js → chunk-P2QGCYS3-BZHK87sP.js} +1 -1
  28. package/ui-dist/assets/{chunk-POPQ4Y6H-BsmX_MmQ.js → chunk-POPQ4Y6H-Dk_v51-0.js} +1 -1
  29. package/ui-dist/assets/{chunk-PWAF6VOD-g4MniF8u.js → chunk-PWAF6VOD-DQTvHbxy.js} +1 -1
  30. package/ui-dist/assets/{chunk-R7TYR2AO-S7THFl9x.js → chunk-R7TYR2AO-CQ_StUs1.js} +1 -1
  31. package/ui-dist/assets/{chunk-RHFEMEQ7-CZYull6D.js → chunk-RHFEMEQ7-BTgGEQit.js} +1 -1
  32. package/ui-dist/assets/{chunk-SVP7TREG-DCss0vmb.js → chunk-SVP7TREG-lkVXeHxJ.js} +1 -1
  33. package/ui-dist/assets/{chunk-TEH6E4GO-B-6h5v_5.js → chunk-TEH6E4GO-DIEC-0PO.js} +1 -1
  34. package/ui-dist/assets/classDiagram-DTDB5LWJ-B83TJF6p.js +1 -0
  35. package/ui-dist/assets/classDiagram-v2-JRS7N3AN-B83TJF6p.js +1 -0
  36. package/ui-dist/assets/{cs-CZ-2BRQDIVT-C9fIM1z5.js → cs-CZ-2BRQDIVT-CmSaQCAW.js} +1 -1
  37. package/ui-dist/assets/{cynefin-OW5HDTMX-CtdCt-Da.js → cynefin-OW5HDTMX-B6f8qooM.js} +1 -1
  38. package/ui-dist/assets/{cynefinDiagram-5FMLGOSQ-CF9L7X85.js → cynefinDiagram-5FMLGOSQ-DFu8uB2c.js} +1 -1
  39. package/ui-dist/assets/{da-DK-5WZEPLOC-DXGP9-TU.js → da-DK-5WZEPLOC-DZ68cfJh.js} +1 -1
  40. package/ui-dist/assets/{dagre-3AP2YEHR-Bt0GOj3f.js → dagre-3AP2YEHR-CuUE3cEY.js} +1 -1
  41. package/ui-dist/assets/{de-DE-XR44H4JA-ChR8kF4h.js → de-DE-XR44H4JA-ClBUqbwZ.js} +1 -1
  42. package/ui-dist/assets/{diagram-S7CK7UJ4-D2NIL20U.js → diagram-S7CK7UJ4-DjLndaJK.js} +1 -1
  43. package/ui-dist/assets/{diagram-UQ7AKVKN-Dty3qvRq.js → diagram-UQ7AKVKN-wLhxEBwN.js} +1 -1
  44. package/ui-dist/assets/{diagram-VSXAHHWV-znpNlomZ.js → diagram-VSXAHHWV-CVek4gvW.js} +1 -1
  45. package/ui-dist/assets/{diagram-VX7I27RA-DMKYB58y.js → diagram-VX7I27RA-CXyuaDuW.js} +1 -1
  46. package/ui-dist/assets/{diagram-Z3DM3KII-BLsAgfm1.js → diagram-Z3DM3KII-BGk8dw5c.js} +1 -1
  47. package/ui-dist/assets/{dist-Biz3NhE4.js → dist-DyDCC61R.js} +4 -4
  48. package/ui-dist/assets/{ebnfDiagram-PWID7BFC-sN1WpIzH.js → ebnfDiagram-PWID7BFC-Bq5wdWGX.js} +1 -1
  49. package/ui-dist/assets/{el-GR-BZB4AONW-BMi-5oTn.js → el-GR-BZB4AONW-oCuJWxYE.js} +1 -1
  50. package/ui-dist/assets/{en-B4ZKOASM-DTTcVPyw.js → en-B4ZKOASM-DevQWFhD.js} +1 -1
  51. package/ui-dist/assets/{erDiagram-SSCWMZ5O-qLib13wp.js → erDiagram-SSCWMZ5O-CXZW4I_b.js} +1 -1
  52. package/ui-dist/assets/{es-ES-U4NZUMDT-DSk-whe2.js → es-ES-U4NZUMDT-DgzMLG1J.js} +1 -1
  53. package/ui-dist/assets/{eu-ES-A7QVB2H4-Dlhf1HMz.js → eu-ES-A7QVB2H4-1tA3vosZ.js} +1 -1
  54. package/ui-dist/assets/eventmodeling-NTZA5JFV-Bh0QsTUi.js +1 -0
  55. package/ui-dist/assets/{fa-IR-HGAKTJCU-C4NL1SUQ.js → fa-IR-HGAKTJCU-BVbN6Ifb.js} +1 -1
  56. package/ui-dist/assets/{fi-FI-Z5N7JZ37-BPDGFbjy.js → fi-FI-Z5N7JZ37-DsGMdP7T.js} +1 -1
  57. package/ui-dist/assets/flowDiagram-A5DVABFB-Chb6hSSG.js +1 -0
  58. package/ui-dist/assets/{fr-FR-RHASNOE6-BKM44_qc.js → fr-FR-RHASNOE6-BEZa94DA.js} +1 -1
  59. package/ui-dist/assets/{ganttDiagram-EL5Y4UJY-Cm_9m3AA.js → ganttDiagram-EL5Y4UJY-BZxyNgRP.js} +1 -1
  60. package/ui-dist/assets/{gitGraph-4MIJSDKK-B53Ccobw.js → gitGraph-4MIJSDKK-Cz7F-_6d.js} +1 -1
  61. package/ui-dist/assets/{gitGraphDiagram-WWUBYQGX-CshbIfrd.js → gitGraphDiagram-WWUBYQGX-77gOaAOD.js} +1 -1
  62. package/ui-dist/assets/{gl-ES-HMX3MZ6V-CYq-Wgeo.js → gl-ES-HMX3MZ6V-DfSDz_sy.js} +1 -1
  63. package/ui-dist/assets/{he-IL-6SHJWFNN-CejOCh7c.js → he-IL-6SHJWFNN-DT8nqxK2.js} +1 -1
  64. package/ui-dist/assets/{hi-IN-IWLTKZ5I-DdZM6com.js → hi-IN-IWLTKZ5I-BtL1eizk.js} +1 -1
  65. package/ui-dist/assets/{hu-HU-A5ZG7DT2-DcLFRMuO.js → hu-HU-A5ZG7DT2-5FwjCLbT.js} +1 -1
  66. package/ui-dist/assets/{id-ID-SAP4L64H-1x9JAf0A.js → id-ID-SAP4L64H-DXfUbYET.js} +1 -1
  67. package/ui-dist/assets/image-GAAHSSAO-AgKiDvHK.js +1 -0
  68. package/ui-dist/assets/{index-CzWe1zeF.js → index-Boxo043A.js} +8 -8
  69. package/ui-dist/assets/{info-A6RAGUB7-Cge9ecX_.js → info-A6RAGUB7-DIe8iET8.js} +1 -1
  70. package/ui-dist/assets/{infoDiagram-RXCK75RN-VS1BTI_H.js → infoDiagram-RXCK75RN-Dik-rzpk.js} +1 -1
  71. package/ui-dist/assets/{ishikawaDiagram-5VMMS53U-Cbf1xbxj.js → ishikawaDiagram-5VMMS53U-Ccb-hHW6.js} +1 -1
  72. package/ui-dist/assets/{it-IT-JPQ66NNP-DgmQi0B_.js → it-IT-JPQ66NNP-6_sPHBVO.js} +1 -1
  73. package/ui-dist/assets/{ja-JP-DBVTYXUO-BpmMfXE3.js → ja-JP-DBVTYXUO-DgY_5_c8.js} +1 -1
  74. package/ui-dist/assets/{journeyDiagram-EYS64GPL-C8RWIfHV.js → journeyDiagram-EYS64GPL-CgzxmpyV.js} +1 -1
  75. package/ui-dist/assets/{kaa-6HZHGXH3-CczLR43o.js → kaa-6HZHGXH3-glmGx672.js} +1 -1
  76. package/ui-dist/assets/{kab-KAB-ZGHBKWFO-Cx74DVre.js → kab-KAB-ZGHBKWFO--G7baVL0.js} +1 -1
  77. package/ui-dist/assets/{kanban-definition-3QL26DDD-R8ng9q7k.js → kanban-definition-3QL26DDD-D6TnbrdQ.js} +1 -1
  78. package/ui-dist/assets/{kk-KZ-P5N5QNE5-BPvg9KTT.js → kk-KZ-P5N5QNE5-D3Vn0qgF.js} +1 -1
  79. package/ui-dist/assets/{km-KH-HSX4SM5Z-Blgo7Zit.js → km-KH-HSX4SM5Z-CAHt3o8M.js} +1 -1
  80. package/ui-dist/assets/{ko-KR-MTYHY66A-DZdo-KOi.js → ko-KR-MTYHY66A-N3tCiPap.js} +1 -1
  81. package/ui-dist/assets/{ku-TR-6OUDTVRD-CTpgWpW_.js → ku-TR-6OUDTVRD-CSZFwS--.js} +1 -1
  82. package/ui-dist/assets/{line-Baf15v0x.js → line-BhVZwKwh.js} +1 -1
  83. package/ui-dist/assets/{lt-LT-XHIRWOB4-DKNkbcsj.js → lt-LT-XHIRWOB4-DuSlkfc-.js} +1 -1
  84. package/ui-dist/assets/{lv-LV-5QDEKY6T-DwnZRxkH.js → lv-LV-5QDEKY6T-COuWGNLd.js} +1 -1
  85. package/ui-dist/assets/{mermaid-parser.core-0V2gZHuN.js → mermaid-parser.core-DlqbfUOM.js} +3 -3
  86. package/ui-dist/assets/{mindmap-definition-FBJOCRG2-7hOTFX4B.js → mindmap-definition-FBJOCRG2-D9wLjZXa.js} +1 -1
  87. package/ui-dist/assets/{mr-IN-CRQNXWMA-C-BFvdUk.js → mr-IN-CRQNXWMA-Bv4WHAzM.js} +1 -1
  88. package/ui-dist/assets/{my-MM-5M5IBNSE-BFs64Lrm.js → my-MM-5M5IBNSE-BNltBCCh.js} +1 -1
  89. package/ui-dist/assets/{nb-NO-T6EIAALU-CHGzOQzI.js → nb-NO-T6EIAALU-DgsGabVE.js} +1 -1
  90. package/ui-dist/assets/{nl-NL-IS3SIHDZ-CmrNJ43t.js → nl-NL-IS3SIHDZ-MPMxu0cH.js} +1 -1
  91. package/ui-dist/assets/{nn-NO-6E72VCQL-Cmx8XlD1.js → nn-NO-6E72VCQL-CY-NT6bD.js} +1 -1
  92. package/ui-dist/assets/{oc-FR-POXYY2M6-D6ZK0W24.js → oc-FR-POXYY2M6-BCWtA2dJ.js} +1 -1
  93. package/ui-dist/assets/{pa-IN-N4M65BXN-CoFjVv1P.js → pa-IN-N4M65BXN-CU1D5Lce.js} +1 -1
  94. package/ui-dist/assets/{packet-AYTQ26CC-auec35xT.js → packet-AYTQ26CC-DCMIIosG.js} +1 -1
  95. package/ui-dist/assets/{pegDiagram-XKGWAZYB-NMMkeAIs.js → pegDiagram-XKGWAZYB-CpU2aj-A.js} +1 -1
  96. package/ui-dist/assets/percentages-BXMCSKIN-CMz17NMy.js +1 -0
  97. package/ui-dist/assets/{pie-WAS4IAKB-Brhoju7F.js → pie-WAS4IAKB-BEVkH0em.js} +1 -1
  98. package/ui-dist/assets/{pieDiagram-E7YTZNPT-CbaXV2ep.js → pieDiagram-E7YTZNPT-D-jyX8nJ.js} +1 -1
  99. package/ui-dist/assets/{pl-PL-T2D74RX3-CtZh2-fJ.js → pl-PL-T2D74RX3-CwNWACCb.js} +1 -1
  100. package/ui-dist/assets/{pt-BR-5N22H2LF-Dwnm2Lle.js → pt-BR-5N22H2LF-DCs1W5P0.js} +1 -1
  101. package/ui-dist/assets/{pt-PT-UZXXM6DQ-Cb08TgqC.js → pt-PT-UZXXM6DQ-Bm9Hlh9S.js} +1 -1
  102. package/ui-dist/assets/{quadrantDiagram-AXDQQJYC-CXEPKL_-.js → quadrantDiagram-AXDQQJYC-BqzJD4zL.js} +1 -1
  103. package/ui-dist/assets/{radar-RG4KPBEZ-CTDsgRBl.js → radar-RG4KPBEZ-B6T3SZ4z.js} +1 -1
  104. package/ui-dist/assets/{railroad-74A4TZTK-Bad-j95k.js → railroad-74A4TZTK-BPKCaP4g.js} +1 -1
  105. package/ui-dist/assets/railroad-abnf-HS5TGJTU-RL2kk25t.js +1 -0
  106. package/ui-dist/assets/railroad-ebnf-LZEXJU2U-NY4mALmg.js +1 -0
  107. package/ui-dist/assets/railroad-peg-WCYAUIDC-BNAC9MGy.js +1 -0
  108. package/ui-dist/assets/{railroadDiagram-O6MQD6OU-CJiZ6mmg.js → railroadDiagram-O6MQD6OU-CzTuUKE-.js} +1 -1
  109. package/ui-dist/assets/{requirementDiagram-EFPCY7ZU-T8QMEZu6.js → requirementDiagram-EFPCY7ZU-Bly8_reu.js} +1 -1
  110. package/ui-dist/assets/{ro-RO-JPDTUUEW-D6H165NT.js → ro-RO-JPDTUUEW-DbKkWzmT.js} +1 -1
  111. package/ui-dist/assets/{ru-RU-B4JR7IUQ-CBp0xVXG.js → ru-RU-B4JR7IUQ-C7y8hptt.js} +1 -1
  112. package/ui-dist/assets/{sankeyDiagram-P5KCCOFB-Z9s0vmSt.js → sankeyDiagram-P5KCCOFB-BNe1jsYh.js} +1 -1
  113. package/ui-dist/assets/{sequenceDiagram-WJ2MYXX4-BulR70nw.js → sequenceDiagram-WJ2MYXX4-jpU3VDzA.js} +1 -1
  114. package/ui-dist/assets/{si-LK-N5RQ5JYF-10AxMH9e.js → si-LK-N5RQ5JYF-DsyN9eZC.js} +1 -1
  115. package/ui-dist/assets/{sk-SK-C5VTKIMK-BXvCxb46.js → sk-SK-C5VTKIMK-C3GmutL2.js} +1 -1
  116. package/ui-dist/assets/{sl-SI-NN7IZMDC-BI5_PFXZ.js → sl-SI-NN7IZMDC-C6dxM6aa.js} +1 -1
  117. package/ui-dist/assets/{stateDiagram-HBIQ2CUA-Dam0DwKS.js → stateDiagram-HBIQ2CUA-B2ZRnydN.js} +1 -1
  118. package/ui-dist/assets/stateDiagram-v2-4QOOHH4V-BUscqu-N.js +1 -0
  119. package/ui-dist/assets/subset-shared.chunk-CRXudW0i.js +1 -0
  120. package/ui-dist/assets/{subset-worker.chunk-BaDYCnkg.js → subset-worker.chunk-WItGSQq_.js} +1 -1
  121. package/ui-dist/assets/{sv-SE-XGPEYMSR-dVM3morJ.js → sv-SE-XGPEYMSR-BPU1z_vz.js} +1 -1
  122. package/ui-dist/assets/{swimlanes-XN3QIQJK-txWA6rWV.js → swimlanes-XN3QIQJK-BuYIN15M.js} +1 -1
  123. package/ui-dist/assets/swimlanesDiagram-VK2B7HYN-Cn_HC7uw.js +8 -0
  124. package/ui-dist/assets/{ta-IN-2NMHFXQM-CWJY03pN.js → ta-IN-2NMHFXQM-AJVbdGTO.js} +1 -1
  125. package/ui-dist/assets/{th-TH-HPSO5L25-CR6GhLgj.js → th-TH-HPSO5L25-B1vvYNmv.js} +1 -1
  126. package/ui-dist/assets/{timeline-definition-24CTP7MA-D8m_1UrT.js → timeline-definition-24CTP7MA-Bld3Oj9i.js} +1 -1
  127. package/ui-dist/assets/{tr-TR-DEFEU3FU-BI8tDJSm.js → tr-TR-DEFEU3FU-C_emJDca.js} +1 -1
  128. package/ui-dist/assets/{treeView-Q6P3EWNA-CWJmpg6A.js → treeView-Q6P3EWNA-CQEi50Re.js} +1 -1
  129. package/ui-dist/assets/{treemap-WGGIJYW6-CvClsvN5.js → treemap-WGGIJYW6-D3gRwGbr.js} +1 -1
  130. package/ui-dist/assets/{uk-UA-QMV73CPH-D3Uc38wP.js → uk-UA-QMV73CPH-B69Ddo0p.js} +1 -1
  131. package/ui-dist/assets/{vennDiagram-4TSXK5OY-C5iS8F8o.js → vennDiagram-4TSXK5OY-BWtR81LD.js} +1 -1
  132. package/ui-dist/assets/{vi-VN-M7AON7JQ-B6BZpyS4.js → vi-VN-M7AON7JQ-ByM0OkIF.js} +1 -1
  133. package/ui-dist/assets/{wardley-WFR3VGLG-CdqB7_9-.js → wardley-WFR3VGLG-DpBUmo8s.js} +1 -1
  134. package/ui-dist/assets/{wardleyDiagram-VM6X3IG4-DAHyWwbW.js → wardleyDiagram-VM6X3IG4-n39Dh9vZ.js} +1 -1
  135. package/ui-dist/assets/{xychartDiagram-S5SC5T6Z-ilyFTLQ_.js → xychartDiagram-S5SC5T6Z-D8-lcdGr.js} +1 -1
  136. package/ui-dist/assets/{zh-CN-LNUGB5OW-B0PN355q.js → zh-CN-LNUGB5OW-g_S93sCp.js} +1 -1
  137. package/ui-dist/assets/{zh-HK-E62DVLB3-DUEHDaPB.js → zh-HK-E62DVLB3-B3J_lyrF.js} +1 -1
  138. package/ui-dist/assets/{zh-TW-RAJ6MFWO-Ci4YMClQ.js → zh-TW-RAJ6MFWO-mYLP5aqQ.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
@@ -387,6 +387,13 @@ var DescribedElement = z.object({
387
387
  to: ElementId.nullish(),
388
388
  style: DescribedStyle.nullish()
389
389
  });
390
+ var Overlap = z.object({
391
+ a: ElementId,
392
+ b: ElementId,
393
+ /** Size of the intersecting region, in px. */
394
+ width: z.number(),
395
+ height: z.number()
396
+ });
390
397
  var SceneDescription = z.object({
391
398
  sceneId: SceneId,
392
399
  name: z.string(),
@@ -395,6 +402,10 @@ var SceneDescription = z.object({
395
402
  updatedAgoMs: z.number().int(),
396
403
  frames: z.array(DescribedFrame),
397
404
  elements: z.array(DescribedElement),
405
+ /** Worst first, and capped — see `MAX_REPORTED_OVERLAPS`. */
406
+ overlaps: z.array(Overlap),
407
+ /** Every collision found, including the ones `overlaps` was truncated past. */
408
+ overlapCount: z.number().int().nonnegative(),
398
409
  detail: DetailLevel
399
410
  });
400
411
  var DescribedEdge = z.object({
@@ -732,8 +743,30 @@ var HOUSE = {
732
743
  external: { strokeColor: "#1e1e1e", backgroundColor: "transparent" },
733
744
  hotspot: { strokeColor: "#e03131", backgroundColor: "#ffc9c9" }
734
745
  },
735
- sizes: { service: [180, 80], icon: 64, framePad: 40 },
736
- spacing: { h: 60, v: 100 }
746
+ sizes: {
747
+ /** The floor a labelled shape starts from, and the size an unlabelled one keeps. */
748
+ service: [180, 80],
749
+ icon: 64,
750
+ framePad: 40,
751
+ /** Breathing room around a bound label. Wider than upstream's 5 px, which lets text
752
+ * touch the stroke. */
753
+ labelPadX: 16,
754
+ labelPadY: 12,
755
+ /** Past this a label wraps instead of widening. A 400 px box holding one line reads
756
+ * as a banner, not a node. */
757
+ maxBox: 280
758
+ },
759
+ spacing: { h: 60, v: 100 },
760
+ /**
761
+ * Every computed size rounds up to this.
762
+ *
763
+ * `guides/layout.md` already tells the reader to keep coordinates on a 20 px grid so a
764
+ * nudge stays aligned; sizes derived from measured text have to land on it too. It is
765
+ * also what answers `adr/0004`'s objection to measuring at all — that per-box widths
766
+ * differing by a few pixels make a rank of five look ragged. Quantised, they do not
767
+ * differ by a few pixels: they are equal or they are 20 apart on purpose.
768
+ */
769
+ grid: 20
737
770
  };
738
771
  var CreatableType = z.enum(["rectangle", "diamond", "ellipse", "text", "line"], {
739
772
  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`
@@ -904,7 +937,17 @@ var ReadMeOutput = z.object({
904
937
  var writeResult = {
905
938
  sceneId: SceneId,
906
939
  sceneVersion: z.number().int(),
907
- broadcastTo: z.number().int().nonnegative()
940
+ broadcastTo: z.number().int().nonnegative(),
941
+ /**
942
+ * Something is buried on the canvas after this write — or `null`, which is the normal
943
+ * case and says so by being absent rather than by saying "none".
944
+ *
945
+ * On **every** write rather than on a read, because the alternative is that the agent
946
+ * has to decide to go and look, and the only tool that used to answer "did that land
947
+ * badly?" was `chalk_screenshot` — a rendered image, the most expensive call here. A
948
+ * layout mistake now costs one sentence at the moment it is made.
949
+ */
950
+ overlapWarning: z.string().nullable()
908
951
  };
909
952
  var ToolRejection = z.object({
910
953
  id: ElementId,
@@ -1056,10 +1099,27 @@ var SearchIconsOutput = z.object({
1056
1099
  */
1057
1100
  note: z.string().nullable()
1058
1101
  });
1102
+ var IconPlacement = z.enum(["above", "below", "left", "right", "badge", "inside"]);
1059
1103
  var PlaceIconInput = z.object({
1060
1104
  iconId: IconId,
1061
- x: z.number(),
1062
- y: z.number(),
1105
+ /**
1106
+ * Absolute position. Optional **only** when `attachTo` is given — one or the other has
1107
+ * to say where the icon goes, and the error names the missing half.
1108
+ */
1109
+ x: z.number().optional(),
1110
+ y: z.number().optional(),
1111
+ /**
1112
+ * Attach the icon to an existing element instead of positioning it by hand.
1113
+ *
1114
+ * This is the difference between an icon that is *part of* a node and one that merely
1115
+ * happens to be near it today. An attached icon is recorded in
1116
+ * `customData.chalk.anchorIds` and travels with its element through every arrange
1117
+ * operation, `layout-layered` included — which is what stops a set of vendor marks being
1118
+ * left stranded across the canvas the first time the boxes are laid out.
1119
+ */
1120
+ attachTo: ElementId.optional(),
1121
+ /** Where it sits relative to `attachTo`. Ignored without it. Defaults to `above`. */
1122
+ placement: IconPlacement.optional(),
1063
1123
  /** Longest side in px. Defaults to `HOUSE.sizes.icon`; the aspect comes from the icon. */
1064
1124
  size: z.number().positive().optional(),
1065
1125
  /** A caption centred beneath it. An unlabelled icon says "a thing was here". */
@@ -1317,6 +1377,11 @@ var unknownIcon = (id, packs) => err("UNKNOWN_ICON", `no icon "${id}" in the cat
1317
1377
  tool: "chalk_search_icons",
1318
1378
  detail: { id }
1319
1379
  });
1380
+ var iconNeedsAPlace = (id) => err("ICON_NEEDS_A_PLACE", `nowhere to put "${id}" \u2014 pass attachTo, or both x and y`, {
1381
+ 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",
1382
+ tool: "chalk_place_icon",
1383
+ detail: { id }
1384
+ });
1320
1385
  var packInstallFailed = (pack, reason) => err("PACK_INSTALL_FAILED", `could not install the icon pack "${pack}": ${reason}`, {
1321
1386
  hint: "check the machine can reach the npm registry, or install the package yourself and point chalk_install_pack at it with `from`",
1322
1387
  tool: "chalk_install_pack",
@@ -1436,6 +1501,174 @@ function installDomShim() {
1436
1501
  };
1437
1502
  }
1438
1503
 
1504
+ // src/domain/style/text-metrics.ts
1505
+ var EXCALIFONT_EM = {
1506
+ " ": 0.4,
1507
+ "!": 0.314,
1508
+ '"': 0.371,
1509
+ "#": 0.783,
1510
+ $: 0.721,
1511
+ "%": 0.928,
1512
+ "&": 0.718,
1513
+ "'": 0.218,
1514
+ "(": 0.441,
1515
+ ")": 0.402,
1516
+ "*": 0.525,
1517
+ "+": 0.55,
1518
+ ",": 0.257,
1519
+ "-": 0.411,
1520
+ ".": 0.274,
1521
+ "/": 0.561,
1522
+ "0": 0.664,
1523
+ "1": 0.427,
1524
+ "2": 0.7,
1525
+ "3": 0.608,
1526
+ "4": 0.585,
1527
+ "5": 0.618,
1528
+ "6": 0.64,
1529
+ "7": 0.558,
1530
+ "8": 0.636,
1531
+ "9": 0.629,
1532
+ ":": 0.264,
1533
+ ";": 0.298,
1534
+ "<": 0.55,
1535
+ "=": 0.55,
1536
+ ">": 0.55,
1537
+ "?": 0.466,
1538
+ "@": 0.829,
1539
+ A: 0.676,
1540
+ B: 0.761,
1541
+ C: 0.629,
1542
+ D: 0.78,
1543
+ E: 0.707,
1544
+ F: 0.661,
1545
+ G: 0.78,
1546
+ H: 0.573,
1547
+ I: 0.545,
1548
+ J: 0.569,
1549
+ K: 0.613,
1550
+ L: 0.543,
1551
+ M: 0.766,
1552
+ N: 0.632,
1553
+ O: 0.767,
1554
+ P: 0.698,
1555
+ Q: 0.768,
1556
+ R: 0.736,
1557
+ S: 0.622,
1558
+ T: 0.857,
1559
+ U: 0.73,
1560
+ V: 0.592,
1561
+ W: 0.786,
1562
+ X: 0.628,
1563
+ Y: 0.564,
1564
+ Z: 0.832,
1565
+ "[": 0.472,
1566
+ "\\": 0.589,
1567
+ "]": 0.497,
1568
+ "^": 0.51,
1569
+ _: 0.67,
1570
+ "`": 0.6,
1571
+ a: 0.576,
1572
+ b: 0.555,
1573
+ c: 0.504,
1574
+ d: 0.605,
1575
+ e: 0.537,
1576
+ f: 0.497,
1577
+ g: 0.555,
1578
+ h: 0.567,
1579
+ i: 0.244,
1580
+ j: 0.328,
1581
+ k: 0.533,
1582
+ l: 0.225,
1583
+ m: 0.663,
1584
+ n: 0.526,
1585
+ o: 0.6,
1586
+ p: 0.537,
1587
+ q: 0.539,
1588
+ r: 0.412,
1589
+ s: 0.543,
1590
+ t: 0.553,
1591
+ u: 0.548,
1592
+ v: 0.525,
1593
+ w: 0.693,
1594
+ x: 0.591,
1595
+ y: 0.53,
1596
+ z: 0.572,
1597
+ "{": 0.504,
1598
+ "|": 0.299,
1599
+ "}": 0.544,
1600
+ "~": 0.669,
1601
+ // Beyond ASCII, only what actually turns up in a diagram. `·` earns its place: it is
1602
+ // the separator this project's own labels use ("Dev machine · manage.sh dist"), and the
1603
+ // block fallback below would over-estimate it nearly threefold.
1604
+ "\xB7": 0.2,
1605
+ "\u2013": 0.702,
1606
+ "\u2014": 0.935,
1607
+ "\u2026": 0.709,
1608
+ "\u2022": 0.522,
1609
+ "\u2019": 0.304,
1610
+ "\u201C": 0.412,
1611
+ "\u201D": 0.428,
1612
+ "\xD7": 0.55,
1613
+ "\xB0": 0.412,
1614
+ "\xA3": 0.71,
1615
+ "\u20AC": 0.713,
1616
+ \u00E9: 0.551,
1617
+ \u00FC: 0.508,
1618
+ \u00F1: 0.526,
1619
+ "\u2713": 0.749
1620
+ };
1621
+ var fallbackEm = (codePoint) => {
1622
+ if (codePoint < 32) return 0;
1623
+ if (codePoint <= 591) return 0.56;
1624
+ if (codePoint >= 8192 && codePoint <= 8303) return 0.95;
1625
+ if (codePoint >= 126976) return 1.4;
1626
+ return 1;
1627
+ };
1628
+ var emWidth = (character) => {
1629
+ const known = EXCALIFONT_EM[character];
1630
+ if (known !== void 0) return known;
1631
+ return fallbackEm(character.codePointAt(0) ?? 0);
1632
+ };
1633
+ function measureLine(text, fontSize) {
1634
+ let em = 0;
1635
+ for (const character of text) em += emWidth(character);
1636
+ return em * fontSize;
1637
+ }
1638
+ function wrapLines(text, fontSize, maxWidth) {
1639
+ const paragraphs = text.split("\n");
1640
+ const lines = [];
1641
+ for (const paragraph of paragraphs) {
1642
+ const words = paragraph.split(" ").filter((word) => word !== "");
1643
+ if (words.length === 0) {
1644
+ lines.push("");
1645
+ continue;
1646
+ }
1647
+ let line = "";
1648
+ for (const word of words) {
1649
+ const candidate = line === "" ? word : `${line} ${word}`;
1650
+ if (line !== "" && measureLine(candidate, fontSize) > maxWidth) {
1651
+ lines.push(line);
1652
+ line = word;
1653
+ } else {
1654
+ line = candidate;
1655
+ }
1656
+ }
1657
+ lines.push(line);
1658
+ }
1659
+ return lines;
1660
+ }
1661
+
1662
+ // src/adapters/excalidraw/text-metrics.ts
1663
+ var fontSizeOf = (fontString) => {
1664
+ const match = /(\d+(?:\.\d+)?)px/.exec(fontString);
1665
+ const size = match?.[1];
1666
+ return size === void 0 ? 20 : Number.parseFloat(size);
1667
+ };
1668
+ var createTextMetricsProvider = () => ({
1669
+ getLineWidth: (text, fontString) => measureLine(text, fontSizeOf(fontString))
1670
+ });
1671
+
1439
1672
  // src/adapters/excalidraw/node-expander.ts
1440
1673
  var WARM_UP = [
1441
1674
  { type: "rectangle", id: "warmup-a", x: 0, y: 0, width: 10, height: 10, label: { text: "a" } },
@@ -1454,7 +1687,8 @@ var converter = null;
1454
1687
  async function loadConverter() {
1455
1688
  const uninstall = installDomShim();
1456
1689
  try {
1457
- const { convertToExcalidrawElements } = await import('./prod-KHI2WQT3.js');
1690
+ const { convertToExcalidrawElements, setCustomTextMetricsProvider } = await import('./prod-KHI2WQT3.js');
1691
+ setCustomTextMetricsProvider(createTextMetricsProvider());
1458
1692
  convertToExcalidrawElements([...WARM_UP], { regenerateIds: false });
1459
1693
  return ok(convertToExcalidrawElements);
1460
1694
  } catch (thrown) {
@@ -1511,6 +1745,6 @@ var stable = (element) => {
1511
1745
  return rest;
1512
1746
  };
1513
1747
 
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
1748
+ 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 };
1749
+ //# sourceMappingURL=chunk-XDK5UUTO.js.map
1750
+ //# sourceMappingURL=chunk-XDK5UUTO.js.map