@diagrammo/dgmo 0.48.2 → 0.50.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 (244) hide show
  1. package/.cursorrules +12 -3
  2. package/.github/copilot-instructions.md +12 -3
  3. package/.windsurfrules +12 -3
  4. package/SKILL.md +12 -3
  5. package/dist/advanced.d.ts +851 -1
  6. package/dist/advanced.js +601 -177
  7. package/dist/auto.css +63 -0
  8. package/dist/auto.js +220 -110
  9. package/dist/auto.mjs +45920 -33167
  10. package/dist/block.css +63 -0
  11. package/dist/block.d.ts +13 -5
  12. package/dist/block.js +239 -62
  13. package/dist/{charts-d3-QOZHKTCT.js → charts-d3-DKUD7MQE.js} +9 -8
  14. package/dist/{chunk-3MQQNXPD.js → chunk-2C56LEML.js} +3 -3
  15. package/dist/{chunk-L66GEFB6.js → chunk-2JJ2KNPI.js} +4 -4
  16. package/dist/{chunk-6SM5NJQH.js → chunk-2QYTMIRR.js} +4 -4
  17. package/dist/{chunk-RJE5JTVK.js → chunk-3G6TMNVF.js} +7 -7
  18. package/dist/{chunk-MO5YHHMQ.js → chunk-3LKM6FMW.js} +2 -2
  19. package/dist/{chunk-76OWZ3BA.js → chunk-3P2DKJCG.js} +2 -2
  20. package/dist/chunk-3TDRHT4J.js +1043 -0
  21. package/dist/chunk-3XPUDB7B.js +420 -0
  22. package/dist/{chunk-2LACINWN.js → chunk-3ZPC476N.js} +7 -7
  23. package/dist/{chunk-G2H74XJZ.js → chunk-4BMJQFNK.js} +8 -8
  24. package/dist/{chunk-THXCFRTU.js → chunk-4S723I74.js} +9 -9
  25. package/dist/{chunk-6NYWYNBI.js → chunk-4XK3FLFB.js} +3 -3
  26. package/dist/chunk-5JSWBPZZ.js +607 -0
  27. package/dist/{chunk-WCT3NYCV.js → chunk-5LWQH6QV.js} +1 -1
  28. package/dist/{chunk-7DTWEFUE.js → chunk-5Z736BSU.js} +8 -8
  29. package/dist/{chunk-ERLBPDGU.js → chunk-6BFZKBGD.js} +2 -2
  30. package/dist/{chunk-6HO5ZTXK.js → chunk-6IAA2QQ2.js} +2 -2
  31. package/dist/{chunk-H6PI3KJT.js → chunk-6IUAK7RZ.js} +2 -2
  32. package/dist/{chunk-RTLBSQ3G.js → chunk-6M5PJFQG.js} +3 -3
  33. package/dist/{chunk-Z5CGSFJB.js → chunk-6X4AKWLF.js} +4 -4
  34. package/dist/{chunk-OJR3MQYV.js → chunk-6ZT4U37Q.js} +291 -52
  35. package/dist/{chunk-5QXL4NYS.js → chunk-7G2ER4CY.js} +10 -5
  36. package/dist/chunk-7PQYTZMA.js +681 -0
  37. package/dist/{chunk-OURHMODR.js → chunk-7RB5Q6MB.js} +11 -11
  38. package/dist/{chunk-YAA6IID3.js → chunk-7UEMZREK.js} +2 -2
  39. package/dist/{chunk-AN2MOO5T.js → chunk-A3WQVFBS.js} +3 -3
  40. package/dist/{chunk-VOKGH627.js → chunk-AHGF2YYA.js} +13 -3
  41. package/dist/{chunk-CI2G3OEB.js → chunk-ASS5YYIZ.js} +12 -12
  42. package/dist/{chunk-TYS6CSS5.js → chunk-BCYVE3N5.js} +2 -2
  43. package/dist/chunk-BDXC7MDK.js +2395 -0
  44. package/dist/chunk-BTUTZMPT.js +482 -0
  45. package/dist/{chunk-YGJTDXVR.js → chunk-C4GQDB5L.js} +2 -2
  46. package/dist/{chunk-Y2ZE3MSG.js → chunk-C63UWAKM.js} +2 -2
  47. package/dist/{chunk-725LDASD.js → chunk-CLD2OKV7.js} +2 -2
  48. package/dist/{chunk-WBRZJOEC.js → chunk-CMCR5WBW.js} +3 -3
  49. package/dist/{chunk-IZMRON6C.js → chunk-CVV36CWI.js} +2 -2
  50. package/dist/chunk-DMJJ3CEQ.js +254 -0
  51. package/dist/{chunk-MZSBFAPJ.js → chunk-EJTKV7CY.js} +9 -9
  52. package/dist/{chunk-FITOLXSX.js → chunk-EOFPYPAU.js} +26 -2
  53. package/dist/{chunk-X5LCYCL5.js → chunk-ER5SCQWQ.js} +5 -5
  54. package/dist/{chunk-4OHACBGX.js → chunk-F2L5GCQ4.js} +2 -2
  55. package/dist/{chunk-FCIIHT24.js → chunk-F5UDBSJY.js} +7 -7
  56. package/dist/{chunk-3JLKYGBQ.js → chunk-F7BFXWNQ.js} +2 -2
  57. package/dist/{chunk-FANX6UJR.js → chunk-FAL7NOK3.js} +11 -11
  58. package/dist/{chunk-BUPDIHML.js → chunk-FB2WHOEQ.js} +4 -4
  59. package/dist/chunk-FL4IOQ37.js +379 -0
  60. package/dist/{chunk-LIOHW36Z.js → chunk-GBE54KY6.js} +6 -5
  61. package/dist/{chunk-RUNNI6VE.js → chunk-GL5UZ6NY.js} +3 -3
  62. package/dist/{chunk-4GRI7MEB.js → chunk-GPWHQ5FJ.js} +6 -6
  63. package/dist/chunk-GROQGHCT.js +960 -0
  64. package/dist/{chunk-SGZYXELT.js → chunk-H73FP42Q.js} +9 -6
  65. package/dist/{chunk-PBAHEPLQ.js → chunk-HGN652MU.js} +7 -6
  66. package/dist/{chunk-3SMGIJDD.js → chunk-HHXOONLX.js} +13 -1
  67. package/dist/{chunk-QOOUC2J5.js → chunk-HQCHYB5F.js} +2 -2
  68. package/dist/{chunk-AELOBFW5.js → chunk-I4IFRCUB.js} +3 -3
  69. package/dist/{chunk-GMR5MFHJ.js → chunk-I7F2A35O.js} +2 -2
  70. package/dist/{chunk-T2OE3YQB.js → chunk-IA3FJYWR.js} +3 -3
  71. package/dist/chunk-IAEC4KLA.js +492 -0
  72. package/dist/chunk-IVKC4GID.js +32 -0
  73. package/dist/{chunk-HSH73DP6.js → chunk-JFYIP7XU.js} +139 -39
  74. package/dist/{chunk-CKNVO24D.js → chunk-JZNMXEIV.js} +2 -2
  75. package/dist/chunk-KJXIHOVL.js +940 -0
  76. package/dist/chunk-L2ZTFHAY.js +331 -0
  77. package/dist/{chunk-B7JUCQUA.js → chunk-M5RXSRO2.js} +4 -4
  78. package/dist/{chunk-ULOEATBZ.js → chunk-NFFIKVNO.js} +106 -29
  79. package/dist/{chunk-PZMETGLY.js → chunk-NISQC5KW.js} +358 -122
  80. package/dist/chunk-O4VUFXIH.js +574 -0
  81. package/dist/{chunk-RVMRZAPB.js → chunk-O76UD6VJ.js} +3 -3
  82. package/dist/{chunk-JM4LEPY3.js → chunk-O7NUCTFU.js} +2 -2
  83. package/dist/{chunk-JED6ZDEE.js → chunk-O7WP4ZD4.js} +2 -2
  84. package/dist/{chunk-EVCVDTXE.js → chunk-OHQEMBLI.js} +3 -3
  85. package/dist/{chunk-ZBWMSD5N.js → chunk-ONA5KPV3.js} +4 -4
  86. package/dist/{chunk-Y3J7VR52.js → chunk-OTAL43EH.js} +34 -2
  87. package/dist/{chunk-WCSOJFU3.js → chunk-OTP5KVLO.js} +3 -3
  88. package/dist/{chunk-RYEGFMUO.js → chunk-PGEGPSCZ.js} +2 -2
  89. package/dist/{chunk-ZO27FGJS.js → chunk-PH5X4GIP.js} +2 -2
  90. package/dist/{chunk-ZJEL4H2R.js → chunk-PJUGRJHJ.js} +9 -9
  91. package/dist/{chunk-ZGR7ULFJ.js → chunk-PLZI6KPM.js} +26 -14
  92. package/dist/{chunk-3R5POCTZ.js → chunk-PMN3Q7RJ.js} +6 -6
  93. package/dist/{chunk-YGJZWZTY.js → chunk-PZFVK3IH.js} +2 -2
  94. package/dist/chunk-Q4V4XQWV.js +158 -0
  95. package/dist/chunk-QDFNCATJ.js +325 -0
  96. package/dist/{chunk-QEBUY5NY.js → chunk-QFQ35BTO.js} +4 -4
  97. package/dist/chunk-QQJUTGQH.js +135 -0
  98. package/dist/{chunk-PWIHZ6NJ.js → chunk-QUJGFNFN.js} +4 -4
  99. package/dist/{chunk-J5FIXQRT.js → chunk-R56LASIN.js} +4 -4
  100. package/dist/{chunk-SRTU6HMQ.js → chunk-RV26LTUU.js} +8 -8
  101. package/dist/chunk-RV6A2B5S.js +354 -0
  102. package/dist/{chunk-EB6FPQUP.js → chunk-S5GRONXL.js} +3 -3
  103. package/dist/{chunk-5MLYVTYM.js → chunk-SCHXJTZL.js} +2 -2
  104. package/dist/{chunk-T3UBLACL.js → chunk-SCQ5VPUF.js} +19 -5
  105. package/dist/{chunk-PBHE5UG6.js → chunk-SGFZZAUO.js} +46 -12
  106. package/dist/{chunk-BUVJFRPY.js → chunk-SU2VBK4L.js} +4 -4
  107. package/dist/{chunk-SML67VPV.js → chunk-T4BRO3Z6.js} +3 -3
  108. package/dist/{chunk-NURGB5Z4.js → chunk-TSA237IM.js} +2 -2
  109. package/dist/chunk-TWCLK2GA.js +273 -0
  110. package/dist/{chunk-IJZFN3HM.js → chunk-TWQUYVP3.js} +4 -4
  111. package/dist/{chunk-DKEPS5LH.js → chunk-U2HGPLZS.js} +36 -2
  112. package/dist/{chunk-B65G5DNL.js → chunk-URSQLCTR.js} +3 -3
  113. package/dist/{chunk-ILKORZ3H.js → chunk-UUS2GIJZ.js} +7 -7
  114. package/dist/{chunk-XAKEUMEJ.js → chunk-UXOSVCLJ.js} +4 -4
  115. package/dist/{chunk-QLCCJEJI.js → chunk-WCUHAQKB.js} +2 -2
  116. package/dist/{chunk-WVAJFAIA.js → chunk-WWN566I7.js} +257 -101
  117. package/dist/{chunk-IPWPWM6R.js → chunk-X2NMFTG3.js} +111 -10
  118. package/dist/{chunk-UWN33VNX.js → chunk-XCLHOZAM.js} +10 -10
  119. package/dist/{chunk-P235SVAH.js → chunk-XDXNDSKO.js} +2 -2
  120. package/dist/chunk-XHVV4NVW.js +51 -0
  121. package/dist/{chunk-33LCUH4H.js → chunk-XMVQ5F4M.js} +4 -4
  122. package/dist/{chunk-MITI6NOL.js → chunk-YA7D2N2O.js} +11 -11
  123. package/dist/{chunk-7JEGTRLD.js → chunk-YB3FW24O.js} +3 -3
  124. package/dist/chunk-YNRDWYZP.js +295 -0
  125. package/dist/{chunk-44CM72SQ.js → chunk-YZLMKW4T.js} +3 -3
  126. package/dist/chunk-Z6XJQ6KO.js +452 -0
  127. package/dist/cli.cjs +179 -133
  128. package/dist/clock.d.ts +10 -0
  129. package/dist/clock.js +235 -0
  130. package/dist/countdown.d.ts +12 -0
  131. package/dist/countdown.js +450 -0
  132. package/dist/dgmo-router-QOMFCOOV.js +84 -0
  133. package/dist/dimensions-P5FSX2QN.js +22 -0
  134. package/dist/editor.js +43 -2
  135. package/dist/element.js +220 -110
  136. package/dist/element.mjs +45920 -33167
  137. package/dist/{flowchart-parser-ZNSKIBVR.js → flowchart-parser-OE4WHLTF.js} +4 -4
  138. package/dist/{flowchart-renderer-SNDSII4D.js → flowchart-renderer-GPCSMTOR.js} +8 -8
  139. package/dist/highlight.d.ts +17 -1
  140. package/dist/highlight.js +163 -6
  141. package/dist/index.d.ts +5 -1
  142. package/dist/index.js +199 -233
  143. package/dist/{layout-HRBZPFCN.js → layout-34CLNICW.js} +5 -5
  144. package/dist/layout-46366KBT.js +10 -0
  145. package/dist/{layout-HWDSRX5E.js → layout-5BG6DFCU.js} +6 -6
  146. package/dist/layout-6RDJHS6E.js +9 -0
  147. package/dist/{layout-7QXCNOVS.js → layout-7H4H46CS.js} +3 -3
  148. package/dist/{layout-46N4JJYK.js → layout-7SKMFYHL.js} +5 -5
  149. package/dist/{layout-EE6GE46Y.js → layout-DC4TVXER.js} +5 -5
  150. package/dist/layout-FGQWRYYW.js +14 -0
  151. package/dist/{layout-S2QBYSK2.js → layout-NXG63LWH.js} +3 -3
  152. package/dist/{layout-N76NR4ZO.js → layout-PUQCB6AN.js} +7 -7
  153. package/dist/{layout-HYZPWAK5.js → layout-QNUQLEHU.js} +3 -3
  154. package/dist/{layout-UM5F4DJB.js → layout-T3OZU5QW.js} +5 -5
  155. package/dist/layout-TJIWF7EM.js +14 -0
  156. package/dist/layout-VYELEAW7.js +14 -0
  157. package/dist/{layout-5RA6QWR6.js → layout-WZHNDT2O.js} +6 -6
  158. package/dist/{layout-search-OYV77HHS.js → layout-search-QS44PI5R.js} +6 -6
  159. package/dist/{parser-6BTRLKRZ.js → parser-45DENHFZ.js} +4 -4
  160. package/dist/{parser-TFZFBVWN.js → parser-4AI5ZN5F.js} +3 -3
  161. package/dist/{parser-XDVELHRK.js → parser-4P36TUVD.js} +4 -4
  162. package/dist/{parser-ZSDPZYQP.js → parser-5AURY4A6.js} +4 -4
  163. package/dist/{parser-N5O4IHUN.js → parser-A2BEFMGK.js} +4 -4
  164. package/dist/parser-B5FVS7O6.js +11 -0
  165. package/dist/{parser-NGU3ETO6.js → parser-C2HF2C2E.js} +4 -4
  166. package/dist/parser-CSFUN3CT.js +14 -0
  167. package/dist/{parser-TRTHDFPP.js → parser-D3QT6GWN.js} +5 -5
  168. package/dist/parser-D5637H5H.js +15 -0
  169. package/dist/{parser-VQP2UJ6W.js → parser-DFFEDKHH.js} +3 -3
  170. package/dist/parser-DOKMZXVZ.js +13 -0
  171. package/dist/parser-FMPCVFRK.js +15 -0
  172. package/dist/{parser-Y6WTBU76.js → parser-HYRTF3DO.js} +3 -3
  173. package/dist/{parser-I6KXEYFK.js → parser-I2UIJKVQ.js} +4 -4
  174. package/dist/{parser-O5J4VBII.js → parser-IBWNAPY4.js} +3 -3
  175. package/dist/{parser-PQ3POX45.js → parser-KUQWRPIT.js} +4 -4
  176. package/dist/{parser-2MFP2H2E.js → parser-LWKKBNSA.js} +3 -3
  177. package/dist/{parser-OV7NOBW6.js → parser-O4QFCUW7.js} +5 -5
  178. package/dist/{parser-IXSZZQHY.js → parser-PGMQDD4G.js} +4 -4
  179. package/dist/{parser-3STE62GB.js → parser-Q4QKCIWQ.js} +4 -4
  180. package/dist/parser-QTOB4KFL.js +14 -0
  181. package/dist/{parser-2EWECDSA.js → parser-QYYM4QVW.js} +4 -4
  182. package/dist/{parser-4OGOBJJ4.js → parser-RZMQP7MM.js} +4 -4
  183. package/dist/parser-RZPVAQVX.js +11 -0
  184. package/dist/parser-SOUJOEYI.js +13 -0
  185. package/dist/{parser-4FL2CMDG.js → parser-UQE5OWZI.js} +5 -5
  186. package/dist/{parser-NRAI6O25.js → parser-WAV5JRPT.js} +4 -4
  187. package/dist/{parser-KNSQSKQO.js → parser-YLKYBRIT.js} +5 -5
  188. package/dist/{parser-XKRP7QKP.js → parser-YS7TOS2K.js} +3 -3
  189. package/dist/{parser-AQETEVRW.js → parser-ZSOWUBML.js} +5 -5
  190. package/dist/{parser-CFZD5IBL.js → parser-ZTBATMLX.js} +4 -4
  191. package/dist/{renderer-VACVQYML.js → renderer-35HSIDMZ.js} +8 -8
  192. package/dist/{renderer-5MYBMBYO.js → renderer-4ITCHBT7.js} +5 -5
  193. package/dist/{renderer-CLJHQPBJ.js → renderer-67NPCBIS.js} +11 -11
  194. package/dist/{renderer-5NDVNDAZ.js → renderer-6GHYK7DX.js} +9 -9
  195. package/dist/{renderer-Z7I3W2PP.js → renderer-6RNGHC5Z.js} +8 -8
  196. package/dist/renderer-72LGR2YF.js +14 -0
  197. package/dist/{renderer-KQB7UGDS.js → renderer-7RH2SI3B.js} +3 -3
  198. package/dist/renderer-7SWMIFMM.js +21 -0
  199. package/dist/renderer-BBCEFILK.js +24 -0
  200. package/dist/{renderer-JGBKUCZD.js → renderer-BSW7SRIZ.js} +4 -4
  201. package/dist/{renderer-BYCNMBF7.js → renderer-BY533UWU.js} +11 -11
  202. package/dist/{renderer-6W5462RB.js → renderer-BZSBPTZJ.js} +9 -9
  203. package/dist/{renderer-7MVLWWQD.js → renderer-CXUC4KAD.js} +9 -9
  204. package/dist/{renderer-QIWVHWZO.js → renderer-DAXMXIKD.js} +3 -3
  205. package/dist/renderer-FZUKFUNZ.js +23 -0
  206. package/dist/renderer-G2NLGNKF.js +17 -0
  207. package/dist/renderer-GO3FE3RA.js +24 -0
  208. package/dist/{renderer-ZGNTUWC4.js → renderer-HPGR6USK.js} +8 -8
  209. package/dist/{renderer-UV6MI64M.js → renderer-HVCU2C3Z.js} +3 -3
  210. package/dist/renderer-ICJN2SA2.js +24 -0
  211. package/dist/{renderer-AWWAF6XD.js → renderer-INEXO7B6.js} +10 -10
  212. package/dist/{renderer-YY2OSF6E.js → renderer-KDYCFRBX.js} +8 -8
  213. package/dist/renderer-KY4KQBTF.js +19 -0
  214. package/dist/{renderer-B2OMQIQG.js → renderer-LBN65V45.js} +13 -13
  215. package/dist/{renderer-N43WR5GV.js → renderer-MGBWOCXG.js} +10 -10
  216. package/dist/{renderer-PGX2TKVS.js → renderer-O4JKUGKO.js} +8 -8
  217. package/dist/{renderer-4JHRUBE6.js → renderer-OOGFODWP.js} +10 -10
  218. package/dist/{renderer-6EEZHMH4.js → renderer-Q6ZKPLS6.js} +9 -9
  219. package/dist/{renderer-RPOA5YPZ.js → renderer-SZQ326M5.js} +12 -12
  220. package/dist/{renderer-ZRNG54CW.js → renderer-TKG6LS4U.js} +11 -11
  221. package/dist/{renderer-W4M6QLIJ.js → renderer-TQMZGDAX.js} +13 -13
  222. package/dist/renderer-radial-JELMHQ24.js +21 -0
  223. package/dist/{resolver-NOAA7ID7.js → resolver-FHBCO3PL.js} +3 -3
  224. package/dist/{state-parser-Z2V23ATR.js → state-parser-3REXRK3R.js} +4 -4
  225. package/dist/{state-renderer-B4DQBM6M.js → state-renderer-XYLNRWXR.js} +8 -8
  226. package/docs/ai-integration.md +12 -3
  227. package/docs/language-reference.md +429 -24
  228. package/gallery/fixtures/body.dgmo +17 -0
  229. package/gallery/fixtures/bracket.dgmo +30 -0
  230. package/gallery/fixtures/clock.dgmo +8 -0
  231. package/gallery/fixtures/countdown.dgmo +3 -0
  232. package/gallery/fixtures/family.dgmo +23 -0
  233. package/gallery/fixtures/goal.dgmo +4 -0
  234. package/gallery/fixtures/sketch.dgmo +22 -0
  235. package/package.json +12 -4
  236. package/dist/chunk-ODZVHU3R.js +0 -153
  237. package/dist/dgmo-router-X35VLZLM.js +0 -73
  238. package/dist/dimensions-J3FHIMJ6.js +0 -22
  239. package/dist/layout-5T6RH5M6.js +0 -14
  240. package/dist/layout-G23F7LDH.js +0 -9
  241. package/dist/layout-OB3RI63S.js +0 -14
  242. package/dist/parser-JAL2HD4I.js +0 -13
  243. package/dist/renderer-SMIBCRVB.js +0 -24
  244. package/dist/renderer-radial-C32GPJQ7.js +0 -21
package/dist/block.css CHANGED
@@ -109,6 +109,69 @@
109
109
  opacity: 1;
110
110
  }
111
111
 
112
+ /* === Full-screen lightbox ===
113
+ * The expand button clones the visible diagram into a native <dialog> that
114
+ * the client shows with showModal(): top-layer, so it escapes any transformed
115
+ * or overflow-clipped ancestor (docs sidebars) and fills the whole viewport.
116
+ * Escape / backdrop-click / the close button dismiss it. The <dialog> itself
117
+ * fills the viewport with a transparent background (so a click landing on it
118
+ * — outside the centered card — reads as a backdrop dismiss); the dim comes
119
+ * from ::backdrop. */
120
+ .dgmo-lightbox {
121
+ width: 100vw;
122
+ height: 100vh;
123
+ max-width: 100vw;
124
+ max-height: 100vh;
125
+ margin: 0;
126
+ padding: 0;
127
+ border: 0;
128
+ background: transparent;
129
+ overflow: hidden;
130
+ }
131
+ .dgmo-lightbox[open] {
132
+ display: flex;
133
+ align-items: center;
134
+ justify-content: center;
135
+ }
136
+ .dgmo-lightbox::backdrop {
137
+ background: rgba(0, 0, 0, 0.72);
138
+ }
139
+ .dgmo-lightbox-svg {
140
+ width: 95vw;
141
+ max-width: 95vw;
142
+ max-height: 95vh;
143
+ overflow: auto;
144
+ border-radius: 0.5em;
145
+ box-shadow: 0 12px 48px rgba(0, 0, 0, 0.45);
146
+ }
147
+ .dgmo-lightbox-svg > svg {
148
+ display: block;
149
+ width: 100%;
150
+ height: auto;
151
+ max-width: 100%;
152
+ }
153
+ .dgmo-lightbox-close {
154
+ position: fixed;
155
+ top: max(1rem, env(safe-area-inset-top));
156
+ right: max(1rem, env(safe-area-inset-right));
157
+ display: inline-flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ width: 2.4em;
161
+ height: 2.4em;
162
+ border: 0;
163
+ border-radius: 50%;
164
+ background: rgba(0, 0, 0, 0.5);
165
+ color: #fff;
166
+ font-size: 1.25rem;
167
+ line-height: 1;
168
+ cursor: pointer;
169
+ transition: background-color 0.15s ease;
170
+ }
171
+ .dgmo-lightbox-close:hover {
172
+ background: rgba(0, 0, 0, 0.75);
173
+ }
174
+
112
175
  /* === Frame the whole block ===
113
176
  * When the source panel is open, diagram + toolbar + code get one shared
114
177
  * border so the code visibly belongs to the chart above it. The frame box
package/dist/block.d.ts CHANGED
@@ -29,11 +29,13 @@ declare const BLOCK_CSS: string;
29
29
  *
30
30
  * Chrome contract (user-approved 2026-07-05): the diagram is the star. A slim
31
31
  * icon toolbar sits in a reserved row below the SVG, invisible until the
32
- * block is hovered/focused or the source is open. Three wordless icon
33
- * buttons — `</>` toggles the hidden source panel, copy, open-in-editor. No
34
- * disclosure triangle, no text labels. The toolbar IS the <summary> of a
35
- * native <details>, so show/hide works with zero JavaScript; copy needs a
36
- * small delegated click handler (remark-dgmo's `bindDgmo` is the reference).
32
+ * block is hovered/focused or the source is open. Four wordless icon
33
+ * buttons — `</>` toggles the hidden source panel, expand (full-screen),
34
+ * copy, open-in-editor. No disclosure triangle, no text labels. The toolbar
35
+ * IS the <summary> of a native <details>, so show/hide works with zero
36
+ * JavaScript; copy and expand need a small delegated click handler
37
+ * (remark-dgmo's `bindDgmo` is the reference — expand's lightbox helper is
38
+ * mirrored across every client surface, same as copy).
37
39
  *
38
40
  * Markup vocabulary: `figure.dgmo` (`--diagram`/`--showcase`/`--error`),
39
41
  * `.dgmo-light`/`.dgmo-dark` (dual color-mode) or `.dgmo-svg` (single),
@@ -64,6 +66,12 @@ interface DgmoBlockOptions {
64
66
  showSource?: boolean;
65
67
  /** Default: true in showcase mode, false in diagram mode. */
66
68
  showCopy?: boolean;
69
+ /**
70
+ * Show the expand (full-screen) toolbar button. Default: true in showcase
71
+ * mode, false in diagram mode. Needs the client lightbox handler to do
72
+ * anything (mirrored across surfaces); markup-only surfaces can omit it.
73
+ */
74
+ showExpand?: boolean;
67
75
  /** Default: true in showcase mode, false in diagram mode. */
68
76
  showOpenInEditor?: boolean;
69
77
  /** Base URL for the open-in-editor link. Default: online.diagrammo.app. */
package/dist/block.js CHANGED
@@ -1,76 +1,91 @@
1
1
  import {
2
- normalizeSvgForEmbed
3
- } from "./chunk-ODZVHU3R.js";
2
+ normalizeSvgForEmbed,
3
+ renderErrorCard
4
+ } from "./chunk-L2ZTFHAY.js";
4
5
  import {
5
6
  encodeDiagramUrl,
6
7
  render
7
- } from "./chunk-PZMETGLY.js";
8
- import "./chunk-PBAHEPLQ.js";
9
- import "./chunk-OJR3MQYV.js";
10
- import "./chunk-UWN33VNX.js";
8
+ } from "./chunk-NISQC5KW.js";
9
+ import "./chunk-XCLHOZAM.js";
11
10
  import "./chunk-YRYKTYMQ.js";
12
- import "./chunk-U6EQI3U6.js";
13
- import "./chunk-PWIHZ6NJ.js";
14
11
  import "./chunk-YYVTBZZC.js";
15
- import "./chunk-YAA6IID3.js";
12
+ import "./chunk-QUJGFNFN.js";
13
+ import "./chunk-JFYIP7XU.js";
14
+ import "./chunk-Q4V4XQWV.js";
15
+ import "./chunk-BTUTZMPT.js";
16
+ import {
17
+ monthIndex,
18
+ weekdayIndex
19
+ } from "./chunk-YNRDWYZP.js";
20
+ import "./chunk-3XPUDB7B.js";
21
+ import "./chunk-FL4IOQ37.js";
22
+ import "./chunk-PGEGPSCZ.js";
23
+ import "./chunk-DMJJ3CEQ.js";
24
+ import "./chunk-BDXC7MDK.js";
25
+ import "./chunk-6ZT4U37Q.js";
26
+ import "./chunk-HGN652MU.js";
27
+ import "./chunk-U6EQI3U6.js";
28
+ import "./chunk-7UEMZREK.js";
16
29
  import "./chunk-A4GOY3PE.js";
17
30
  import "./chunk-6KFWC4CO.js";
18
- import "./chunk-QOOUC2J5.js";
19
- import "./chunk-WCT3NYCV.js";
20
- import "./chunk-HSH73DP6.js";
21
- import "./chunk-P235SVAH.js";
22
- import "./chunk-6HO5ZTXK.js";
23
- import "./chunk-44CM72SQ.js";
24
- import "./chunk-76OWZ3BA.js";
25
- import "./chunk-MO5YHHMQ.js";
26
- import "./chunk-WCSOJFU3.js";
27
- import "./chunk-7JEGTRLD.js";
31
+ import "./chunk-HQCHYB5F.js";
32
+ import "./chunk-5LWQH6QV.js";
33
+ import "./chunk-XDXNDSKO.js";
34
+ import "./chunk-OHQEMBLI.js";
35
+ import "./chunk-TSA237IM.js";
36
+ import "./chunk-6IAA2QQ2.js";
37
+ import "./chunk-YZLMKW4T.js";
38
+ import "./chunk-3P2DKJCG.js";
39
+ import "./chunk-3LKM6FMW.js";
40
+ import "./chunk-OTP5KVLO.js";
41
+ import "./chunk-YB3FW24O.js";
28
42
  import "./chunk-NNAAJVBU.js";
29
- import "./chunk-RYEGFMUO.js";
30
- import "./chunk-33LCUH4H.js";
31
- import "./chunk-XAKEUMEJ.js";
32
- import "./chunk-BUPDIHML.js";
43
+ import "./chunk-XMVQ5F4M.js";
44
+ import "./chunk-UXOSVCLJ.js";
45
+ import "./chunk-FB2WHOEQ.js";
33
46
  import {
34
47
  REGISTRY_COLON_KEY_TOKENS,
35
48
  REGISTRY_CONTROL_TOKENS,
36
49
  REGISTRY_DIRECTIVE_TOKENS,
37
50
  REGISTRY_MODIFIER_TOKENS,
38
51
  REGISTRY_STATUS_TOKENS
39
- } from "./chunk-DKEPS5LH.js";
40
- import "./chunk-BUVJFRPY.js";
41
- import "./chunk-WVAJFAIA.js";
42
- import "./chunk-EB6FPQUP.js";
43
- import "./chunk-EVCVDTXE.js";
44
- import "./chunk-NURGB5Z4.js";
45
- import "./chunk-L66GEFB6.js";
46
- import "./chunk-RVMRZAPB.js";
47
- import "./chunk-AN2MOO5T.js";
48
- import "./chunk-RTLBSQ3G.js";
52
+ } from "./chunk-U2HGPLZS.js";
53
+ import "./chunk-SU2VBK4L.js";
54
+ import "./chunk-5JSWBPZZ.js";
55
+ import "./chunk-XHVV4NVW.js";
56
+ import "./chunk-WWN566I7.js";
57
+ import "./chunk-O4VUFXIH.js";
58
+ import "./chunk-QQJUTGQH.js";
59
+ import "./chunk-S5GRONXL.js";
60
+ import "./chunk-2JJ2KNPI.js";
61
+ import "./chunk-O76UD6VJ.js";
62
+ import "./chunk-A3WQVFBS.js";
63
+ import "./chunk-6M5PJFQG.js";
49
64
  import "./chunk-L3UHP6TD.js";
50
65
  import "./chunk-USZW2HHU.js";
51
- import "./chunk-5QXL4NYS.js";
52
- import "./chunk-GMR5MFHJ.js";
53
- import "./chunk-ERLBPDGU.js";
54
- import "./chunk-AELOBFW5.js";
55
- import "./chunk-B65G5DNL.js";
66
+ import "./chunk-7G2ER4CY.js";
67
+ import "./chunk-I7F2A35O.js";
68
+ import "./chunk-6BFZKBGD.js";
69
+ import "./chunk-I4IFRCUB.js";
70
+ import "./chunk-URSQLCTR.js";
56
71
  import "./chunk-IYULMRBE.js";
57
72
  import {
58
73
  resolvePaletteOrFallback
59
74
  } from "./chunk-R3XI2VC7.js";
60
75
  import "./chunk-P6T66CCZ.js";
61
- import "./chunk-SML67VPV.js";
76
+ import "./chunk-T4BRO3Z6.js";
62
77
  import "./chunk-C3Z4DX3V.js";
63
- import "./chunk-QLCCJEJI.js";
64
- import "./chunk-LIOHW36Z.js";
78
+ import "./chunk-WCUHAQKB.js";
79
+ import "./chunk-GBE54KY6.js";
65
80
  import "./chunk-I46X5VUA.js";
66
- import "./chunk-3MQQNXPD.js";
81
+ import "./chunk-2C56LEML.js";
67
82
  import "./chunk-NXMESY4J.js";
68
- import "./chunk-RUNNI6VE.js";
69
- import "./chunk-5MLYVTYM.js";
83
+ import "./chunk-GL5UZ6NY.js";
84
+ import "./chunk-SCHXJTZL.js";
70
85
  import "./chunk-FMDSF3OV.js";
71
86
  import "./chunk-FFUN5D66.js";
72
87
  import "./chunk-NOTA6TEI.js";
73
- import "./chunk-Y3J7VR52.js";
88
+ import "./chunk-OTAL43EH.js";
74
89
  import "./chunk-TLVIHFRO.js";
75
90
  import "./chunk-CXK4DZH3.js";
76
91
  import "./chunk-5WRI5ZAA.js";
@@ -93,10 +108,12 @@ var CHART_TYPES = /* @__PURE__ */ new Set([
93
108
  "class",
94
109
  "er",
95
110
  "org",
111
+ "family",
96
112
  "kanban",
97
113
  "c4",
98
114
  "state",
99
115
  "sitemap",
116
+ "bracket",
100
117
  "infra",
101
118
  "gantt",
102
119
  "pert",
@@ -111,6 +128,10 @@ var CHART_TYPES = /* @__PURE__ */ new Set([
111
128
  "ring",
112
129
  "treemap",
113
130
  "block",
131
+ "goal",
132
+ "countdown",
133
+ "clock",
134
+ "sketch",
114
135
  "raci",
115
136
  "cycle",
116
137
  // Data chart types
@@ -132,7 +153,8 @@ var CHART_TYPES = /* @__PURE__ */ new Set([
132
153
  "event-line",
133
154
  "venn",
134
155
  "quadrant",
135
- "map"
156
+ "map",
157
+ "body"
136
158
  ]);
137
159
  var TAG_KEYWORD = "tag";
138
160
  var DIRECTIVE_KEYWORDS = /* @__PURE__ */ new Set([...REGISTRY_DIRECTIVE_TOKENS]);
@@ -220,6 +242,14 @@ var OVERRIDE_IN_LABEL = /* @__PURE__ */ new Set([
220
242
  "Duration",
221
243
  "DateLiteral"
222
244
  ]);
245
+ var LABEL_WORD_NODES = /* @__PURE__ */ new Set([
246
+ "Identifier",
247
+ "ChartType",
248
+ "TagKeyword",
249
+ "DirectiveKeyword",
250
+ "ControlKeyword",
251
+ "ModifierKeyword"
252
+ ]);
223
253
  var KEYWORD_STARTS = /* @__PURE__ */ new Set([
224
254
  "TagKeyword",
225
255
  "DirectiveKeyword",
@@ -263,6 +293,7 @@ function highlightDgmo(source) {
263
293
  applyAttributeKeys(tokens);
264
294
  applyLabelOverrides(tokens);
265
295
  applyNoteContent(tokens);
296
+ applyRecurringLine(tokens);
266
297
  return tokens;
267
298
  }
268
299
  var ATTRIBUTE_KEYS = /* @__PURE__ */ new Set([
@@ -300,6 +331,9 @@ var ATTRIBUTE_KEYS = /* @__PURE__ */ new Set([
300
331
  "value",
301
332
  "label",
302
333
  "style",
334
+ // Sketch (§31): shape morph + half-slot coordinate keys
335
+ "shape",
336
+ "at",
303
337
  // Treemap + boxes-and-lines + map colour-by-value channel key
304
338
  "heat",
305
339
  // Infra node behavior + edge colon-keys (§4) come from the single-source
@@ -399,14 +433,14 @@ function applyLabelOverrides(tokens) {
399
433
  }
400
434
  const hasArrow = firstDashTildeIdx >= 0 && lastArrowIdx > firstDashTildeIdx;
401
435
  if (!hasArrow) continue;
402
- let labelHasIdentifier = false;
436
+ let labelHasWord = false;
403
437
  for (let li = firstDashTildeIdx + 1; li < lastArrowIdx; li++) {
404
- if (nonWs[li].nodeName === "Identifier") {
405
- labelHasIdentifier = true;
438
+ if (LABEL_WORD_NODES.has(nonWs[li].nodeName)) {
439
+ labelHasWord = true;
406
440
  break;
407
441
  }
408
442
  }
409
- if (!labelHasIdentifier) continue;
443
+ if (!labelHasWord) continue;
410
444
  for (let li = firstDashTildeIdx + 1; li < lastArrowIdx; li++) {
411
445
  const ref = nonWs[li];
412
446
  if (OVERRIDE_IN_LABEL.has(ref.nodeName)) {
@@ -418,6 +452,82 @@ function applyLabelOverrides(tokens) {
418
452
  }
419
453
  }
420
454
  }
455
+ var RECUR_LEADERS = /* @__PURE__ */ new Set([
456
+ "every",
457
+ "on",
458
+ "at",
459
+ "from",
460
+ "on-day",
461
+ "since-label"
462
+ ]);
463
+ var RECUR_CONNECTORS = /* @__PURE__ */ new Set(["on", "at", "from"]);
464
+ var RECUR_CADENCE_WORDS = /* @__PURE__ */ new Set([
465
+ "year",
466
+ "month",
467
+ "week",
468
+ "day",
469
+ "days",
470
+ "weeks",
471
+ "months"
472
+ ]);
473
+ function isRecurOrdinal(token) {
474
+ return /^(?:\d+(?:st|nd|rd|th)|last)$/i.test(token);
475
+ }
476
+ function classifyRecurrenceLine(line) {
477
+ const spans = [];
478
+ const toks = [];
479
+ const re = /\S+/g;
480
+ let m;
481
+ while ((m = re.exec(line)) !== null) {
482
+ toks.push({ t: m[0], s: m.index, e: m.index + m[0].length });
483
+ }
484
+ if (toks.length === 0) return spans;
485
+ const lead = toks[0].t.toLowerCase();
486
+ if (!RECUR_LEADERS.has(lead)) return spans;
487
+ const everyLine = lead === "every";
488
+ let seenConnector = false;
489
+ for (let i = 0; i < toks.length; i++) {
490
+ const { t, s, e } = toks[i];
491
+ const low = t.toLowerCase();
492
+ if (i === 0) {
493
+ spans.push({ start: s, end: e, role: "keyword" });
494
+ continue;
495
+ }
496
+ if (RECUR_CONNECTORS.has(low)) {
497
+ spans.push({ start: s, end: e, role: "keyword" });
498
+ seenConnector = true;
499
+ continue;
500
+ }
501
+ if (everyLine && !seenConnector && RECUR_CADENCE_WORDS.has(low)) {
502
+ spans.push({ start: s, end: e, role: "keyword" });
503
+ continue;
504
+ }
505
+ if (isRecurOrdinal(low) || monthIndex(t) !== null || weekdayIndex(t) !== null) {
506
+ spans.push({ start: s, end: e, role: "modifier" });
507
+ }
508
+ }
509
+ return spans;
510
+ }
511
+ function applyRecurringLine(tokens) {
512
+ const fullText = tokens.map((t) => t.text).join("");
513
+ const lines = fullText.split("\n");
514
+ const firstContent = lines.find((l) => {
515
+ const t = l.trim();
516
+ return t.length > 0 && !t.startsWith("//");
517
+ });
518
+ if (firstContent?.trim().split(/\s+/)[0].toLowerCase() !== "countdown") {
519
+ return;
520
+ }
521
+ let offset = 0;
522
+ for (const lineText of lines) {
523
+ if (!/^\s/.test(lineText)) {
524
+ for (const sp of classifyRecurrenceLine(lineText)) {
525
+ markTokensInRange(tokens, offset + sp.start, offset + sp.end, sp.role);
526
+ }
527
+ }
528
+ offset += lineText.length + 1;
529
+ }
530
+ }
421
531
  var NOTE_HEAD_RE = /^note(\s|$)/i;
422
532
  function applyNoteContent(tokens) {
423
533
  const fullText = tokens.map((t) => t.text).join("");
@@ -583,6 +693,69 @@ var BLOCK_CSS = `
583
693
  opacity: 1;
584
694
  }
585
695
 
696
+ /* === Full-screen lightbox ===
697
+ * The expand button clones the visible diagram into a native <dialog> that
698
+ * the client shows with showModal(): top-layer, so it escapes any transformed
699
+ * or overflow-clipped ancestor (docs sidebars) and fills the whole viewport.
700
+ * Escape / backdrop-click / the close button dismiss it. The <dialog> itself
701
+ * fills the viewport with a transparent background (so a click landing on it
702
+ * \u2014 outside the centered card \u2014 reads as a backdrop dismiss); the dim comes
703
+ * from ::backdrop. */
704
+ .dgmo-lightbox {
705
+ width: 100vw;
706
+ height: 100vh;
707
+ max-width: 100vw;
708
+ max-height: 100vh;
709
+ margin: 0;
710
+ padding: 0;
711
+ border: 0;
712
+ background: transparent;
713
+ overflow: hidden;
714
+ }
715
+ .dgmo-lightbox[open] {
716
+ display: flex;
717
+ align-items: center;
718
+ justify-content: center;
719
+ }
720
+ .dgmo-lightbox::backdrop {
721
+ background: rgba(0, 0, 0, 0.72);
722
+ }
723
+ .dgmo-lightbox-svg {
724
+ width: 95vw;
725
+ max-width: 95vw;
726
+ max-height: 95vh;
727
+ overflow: auto;
728
+ border-radius: 0.5em;
729
+ box-shadow: 0 12px 48px rgba(0, 0, 0, 0.45);
730
+ }
731
+ .dgmo-lightbox-svg > svg {
732
+ display: block;
733
+ width: 100%;
734
+ height: auto;
735
+ max-width: 100%;
736
+ }
737
+ .dgmo-lightbox-close {
738
+ position: fixed;
739
+ top: max(1rem, env(safe-area-inset-top));
740
+ right: max(1rem, env(safe-area-inset-right));
741
+ display: inline-flex;
742
+ align-items: center;
743
+ justify-content: center;
744
+ width: 2.4em;
745
+ height: 2.4em;
746
+ border: 0;
747
+ border-radius: 50%;
748
+ background: rgba(0, 0, 0, 0.5);
749
+ color: #fff;
750
+ font-size: 1.25rem;
751
+ line-height: 1;
752
+ cursor: pointer;
753
+ transition: background-color 0.15s ease;
754
+ }
755
+ .dgmo-lightbox-close:hover {
756
+ background: rgba(0, 0, 0, 0.75);
757
+ }
758
+
586
759
  /* === Frame the whole block ===
587
760
  * When the source panel is open, diagram + toolbar + code get one shared
588
761
  * border so the code visibly belongs to the chart above it. The frame box
@@ -781,6 +954,7 @@ function resolveBlockOptions(opts) {
781
954
  colorMode: opts.colorMode ?? "auto",
782
955
  showSource: opts.showSource ?? showcase,
783
956
  showCopy: opts.showCopy ?? showcase,
957
+ showExpand: opts.showExpand ?? showcase,
784
958
  showOpenInEditor: opts.showOpenInEditor ?? showcase,
785
959
  editorBaseUrl: opts.editorBaseUrl ?? EDITOR_BASE_URL,
786
960
  wrapper: opts.wrapper ?? "figure",
@@ -793,23 +967,24 @@ function resolveBlockOptions(opts) {
793
967
  async function renderDgmoBlock(source, options = {}) {
794
968
  const opts = resolveBlockOptions(options);
795
969
  const trimmed = source.trim();
796
- const paletteId = resolvePaletteOrFallback(opts.palette, opts.onWarn).id;
970
+ const palette = resolvePaletteOrFallback(opts.palette, opts.onWarn);
797
971
  const diagnostics = [];
972
+ const renderTheme = async (theme) => {
973
+ const r = await render(trimmed, { palette: palette.id, theme });
974
+ diagnostics.push(...r.diagnostics);
975
+ const errors = r.diagnostics.filter((d) => d.severity === "error");
976
+ return errors.length ? renderErrorCard(errors, trimmed, palette, theme) : r.svg;
977
+ };
798
978
  let svgsHtml;
799
979
  if (opts.colorMode === "auto") {
800
980
  const [light, dark] = await Promise.all([
801
- render(trimmed, { palette: paletteId, theme: "light" }),
802
- render(trimmed, { palette: paletteId, theme: "dark" })
981
+ renderTheme("light"),
982
+ renderTheme("dark")
803
983
  ]);
804
- diagnostics.push(...light.diagnostics, ...dark.diagnostics);
805
- svgsHtml = `<div class="${escapeAttr(innerClasses(opts, "dgmo-light"))}">${normalizeSvgForEmbed(light.svg)}</div><div class="${escapeAttr(innerClasses(opts, "dgmo-dark"))}">${normalizeSvgForEmbed(dark.svg)}</div>`;
984
+ svgsHtml = `<div class="${escapeAttr(innerClasses(opts, "dgmo-light"))}">${normalizeSvgForEmbed(light)}</div><div class="${escapeAttr(innerClasses(opts, "dgmo-dark"))}">${normalizeSvgForEmbed(dark)}</div>`;
806
985
  } else {
807
- const result = await render(trimmed, {
808
- palette: paletteId,
809
- theme: opts.colorMode
810
- });
811
- diagnostics.push(...result.diagnostics);
812
- svgsHtml = `<div class="${escapeAttr(innerClasses(opts, "dgmo-svg"))}">${normalizeSvgForEmbed(result.svg)}</div>`;
986
+ const svg = await renderTheme(opts.colorMode);
987
+ svgsHtml = `<div class="${escapeAttr(innerClasses(opts, "dgmo-svg"))}">${normalizeSvgForEmbed(svg)}</div>`;
813
988
  }
814
989
  return { html: assembleBlock(trimmed, svgsHtml, opts), diagnostics };
815
990
  }
@@ -843,9 +1018,11 @@ function assembleBlock(source, svgsHtml, opts) {
843
1018
  var CODE_ICON = `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m10 4.5 4 3.5-4 3.5"/><path d="m6 4.5-4 3.5 4 3.5"/></svg>`;
844
1019
  var COPY_ICON = `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5.5" y="5.5" width="8" height="8" rx="1.5"/><path d="M10.5 5.5V3a1.5 1.5 0 0 0-1.5-1.5H3A1.5 1.5 0 0 0 1.5 3v6A1.5 1.5 0 0 0 3 10.5h2.5"/></svg>`;
845
1020
  var EXTERNAL_ICON = `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.5 2.5h4v4"/><path d="M13.5 2.5 7 9"/><path d="M12.5 9.5v3a1 1 0 0 1-1 1h-8a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1h3"/></svg>`;
1021
+ var EXPAND_ICON = `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.5 2.5h4v4"/><path d="M6.5 13.5h-4v-4"/><path d="M13.5 2.5 9 7"/><path d="M2.5 13.5 7 9"/></svg>`;
846
1022
  function sourceDisclosure(source, opts) {
847
1023
  if (!opts.showSource) return "";
848
1024
  const toggle = `<span class="dgmo-toggle" title="View DGMO source">${CODE_ICON}</span>`;
1025
+ const expandButton = opts.showExpand ? `<button type="button" class="dgmo-toolbar-btn dgmo-expand" aria-label="View full screen" title="Expand">${EXPAND_ICON}</button>` : "";
849
1026
  const copyButton = opts.showCopy ? `<button type="button" class="dgmo-toolbar-btn dgmo-copy" aria-label="Copy DGMO source" title="Copy source" data-dgmo-source="${escapeAttr(source)}">${COPY_ICON}</button>` : "";
850
1027
  let openButton = "";
851
1028
  if (opts.showOpenInEditor) {
@@ -855,7 +1032,7 @@ function sourceDisclosure(source, opts) {
855
1032
  }
856
1033
  }
857
1034
  const sourceHtml = highlightedSource(source);
858
- return `<details class="dgmo-source-wrap"><summary class="dgmo-toolbar" aria-label="View DGMO source">${toggle}${copyButton}${openButton}</summary><div class="dgmo-source-inner">${sourceHtml}</div></details>`;
1035
+ return `<details class="dgmo-source-wrap"><summary class="dgmo-toolbar" aria-label="View DGMO source">${toggle}${expandButton}${copyButton}${openButton}</summary><div class="dgmo-source-inner">${sourceHtml}</div></details>`;
859
1036
  }
860
1037
  function highlightedSource(source) {
861
1038
  const tokens = highlightDgmo(source);
@@ -2,18 +2,19 @@ import {
2
2
  D3_DATA_CHART_TYPES,
3
3
  renderDataChartD3,
4
4
  supportsD3DataChart
5
- } from "./chunk-OJR3MQYV.js";
5
+ } from "./chunk-6ZT4U37Q.js";
6
+ import "./chunk-HGN652MU.js";
6
7
  import "./chunk-U6EQI3U6.js";
7
- import "./chunk-YAA6IID3.js";
8
+ import "./chunk-7UEMZREK.js";
8
9
  import "./chunk-A4GOY3PE.js";
9
10
  import "./chunk-6KFWC4CO.js";
10
- import "./chunk-QOOUC2J5.js";
11
- import "./chunk-WCT3NYCV.js";
12
- import "./chunk-P235SVAH.js";
11
+ import "./chunk-HQCHYB5F.js";
12
+ import "./chunk-5LWQH6QV.js";
13
+ import "./chunk-XDXNDSKO.js";
13
14
  import "./chunk-R3XI2VC7.js";
14
15
  import "./chunk-P6T66CCZ.js";
15
- import "./chunk-QLCCJEJI.js";
16
- import "./chunk-Y3J7VR52.js";
16
+ import "./chunk-WCUHAQKB.js";
17
+ import "./chunk-OTAL43EH.js";
17
18
  import "./chunk-TLVIHFRO.js";
18
19
  import "./chunk-CXK4DZH3.js";
19
20
  import "./chunk-5WRI5ZAA.js";
@@ -22,4 +23,4 @@ export {
22
23
  renderDataChartD3,
23
24
  supportsD3DataChart
24
25
  };
25
- //# sourceMappingURL=charts-d3-QOZHKTCT.js.map
26
+ //# sourceMappingURL=charts-d3-DKUD7MQE.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  tryCollectNote
3
- } from "./chunk-5MLYVTYM.js";
3
+ } from "./chunk-SCHXJTZL.js";
4
4
  import {
5
5
  resolveNotes
6
6
  } from "./chunk-FMDSF3OV.js";
@@ -17,7 +17,7 @@ import {
17
17
  measureIndent,
18
18
  parseFirstLine,
19
19
  tryParseSharedOption
20
- } from "./chunk-Y3J7VR52.js";
20
+ } from "./chunk-OTAL43EH.js";
21
21
  import {
22
22
  resolveColorWithDiagnostic
23
23
  } from "./chunk-TLVIHFRO.js";
@@ -412,4 +412,4 @@ export {
412
412
  parseState,
413
413
  looksLikeState
414
414
  };
415
- //# sourceMappingURL=chunk-3MQQNXPD.js.map
415
+ //# sourceMappingURL=chunk-2C56LEML.js.map
@@ -6,10 +6,10 @@ import {
6
6
  tagAttrKey,
7
7
  validateTagGroupNames,
8
8
  validateTagValues
9
- } from "./chunk-QLCCJEJI.js";
9
+ } from "./chunk-WCUHAQKB.js";
10
10
  import {
11
11
  tryCollectNote
12
- } from "./chunk-5MLYVTYM.js";
12
+ } from "./chunk-SCHXJTZL.js";
13
13
  import {
14
14
  resolveNotes
15
15
  } from "./chunk-FMDSF3OV.js";
@@ -32,7 +32,7 @@ import {
32
32
  tryParseSharedOption,
33
33
  warnUnknownMetaKeys,
34
34
  withTagAliases
35
- } from "./chunk-Y3J7VR52.js";
35
+ } from "./chunk-OTAL43EH.js";
36
36
  import {
37
37
  resolveColorWithDiagnostic
38
38
  } from "./chunk-TLVIHFRO.js";
@@ -521,4 +521,4 @@ export {
521
521
  looksLikeERDiagram,
522
522
  extractSymbols
523
523
  };
524
- //# sourceMappingURL=chunk-L66GEFB6.js.map
524
+ //# sourceMappingURL=chunk-2JJ2KNPI.js.map
@@ -11,15 +11,15 @@ import {
11
11
  LEGEND_PILL_FONT_SIZE,
12
12
  LEGEND_PILL_PAD,
13
13
  measureLegendText
14
- } from "./chunk-QOOUC2J5.js";
14
+ } from "./chunk-HQCHYB5F.js";
15
15
  import {
16
16
  measureText
17
- } from "./chunk-WCT3NYCV.js";
17
+ } from "./chunk-5LWQH6QV.js";
18
18
  import {
19
19
  injectDefaultTagMetadata,
20
20
  resolveTagColor,
21
21
  tagAttrKey
22
- } from "./chunk-QLCCJEJI.js";
22
+ } from "./chunk-WCUHAQKB.js";
23
23
 
24
24
  // src/sitemap/layout.ts
25
25
  import dagre from "@dagrejs/dagre";
@@ -617,4 +617,4 @@ function layoutSitemap(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, e
617
617
  export {
618
618
  layoutSitemap
619
619
  };
620
- //# sourceMappingURL=chunk-6SM5NJQH.js.map
620
+ //# sourceMappingURL=chunk-2QYTMIRR.js.map