@diagrammo/dgmo 0.50.2 → 0.52.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 (257) hide show
  1. package/.cursorrules +15 -19
  2. package/.github/copilot-instructions.md +15 -19
  3. package/.windsurfrules +15 -19
  4. package/SKILL.md +15 -19
  5. package/dist/advanced.d.ts +155 -65
  6. package/dist/advanced.js +231 -189
  7. package/dist/{analyzer-UYKBXAKR.js → analyzer-BJ54GIFB.js} +3 -3
  8. package/dist/auto.css +31 -8
  9. package/dist/auto.d.ts +6 -0
  10. package/dist/auto.js +171 -133
  11. package/dist/auto.mjs +3062 -1478
  12. package/dist/block.css +28 -8
  13. package/dist/block.js +138 -72
  14. package/dist/charts-d3-MXEP6BNP.js +26 -0
  15. package/dist/{chunk-3YPY3OXD.js → chunk-3HF5YEFJ.js} +17 -7
  16. package/dist/{chunk-4MJ7M6YL.js → chunk-3HGU63UY.js} +14 -13
  17. package/dist/chunk-3LK5DNED.js +35 -0
  18. package/dist/{chunk-3Y2DRD7S.js → chunk-3QD7VP3U.js} +9 -4
  19. package/dist/{chunk-6BFZKBGD.js → chunk-3YRPZ7ZZ.js} +2 -2
  20. package/dist/{chunk-WW32K72E.js → chunk-44VCIPHF.js} +25 -21
  21. package/dist/{chunk-TN35C5KM.js → chunk-4AQRFDXL.js} +2 -2
  22. package/dist/{chunk-HHXOONLX.js → chunk-4B5YISOR.js} +38 -1
  23. package/dist/{chunk-PGEGPSCZ.js → chunk-4IHAV6O7.js} +2 -2
  24. package/dist/{chunk-7L3R6I3U.js → chunk-4UNQ6X24.js} +10 -7
  25. package/dist/{chunk-O7NUCTFU.js → chunk-4YFKQ5WT.js} +7 -4
  26. package/dist/{chunk-5WFIYXQ6.js → chunk-5223KXFD.js} +122 -242
  27. package/dist/{chunk-PFHVU7UA.js → chunk-5BHJZH62.js} +3 -3
  28. package/dist/{chunk-QYTPPDAO.js → chunk-5HILBT7X.js} +2 -2
  29. package/dist/{chunk-GKC3HILQ.js → chunk-5NGAO4QK.js} +27 -4
  30. package/dist/{chunk-IAEC4KLA.js → chunk-5QKQSSPO.js} +2 -2
  31. package/dist/{chunk-DSWVNQVS.js → chunk-5RP7JRVP.js} +4 -59
  32. package/dist/{chunk-MCZ5LBZD.js → chunk-5SEVICBT.js} +8 -8
  33. package/dist/{chunk-GBE54KY6.js → chunk-6EJITS44.js} +8 -5
  34. package/dist/{chunk-BBGDM4NQ.js → chunk-6HQH6JZE.js} +35 -16
  35. package/dist/{chunk-66NVRO4K.js → chunk-6LBQ7ELG.js} +17 -18
  36. package/dist/{chunk-4XK3FLFB.js → chunk-6NYWYNBI.js} +3 -3
  37. package/dist/{chunk-VBYSIOOY.js → chunk-75G3Q4DK.js} +3 -3
  38. package/dist/{chunk-3NODSS6A.js → chunk-77FGAVZC.js} +13 -10
  39. package/dist/{chunk-6IAA2QQ2.js → chunk-7BIZCTAX.js} +2 -2
  40. package/dist/{chunk-TWQUYVP3.js → chunk-7DF4J4RL.js} +4 -4
  41. package/dist/{chunk-66RUL3XF.js → chunk-7KINELPI.js} +111 -49
  42. package/dist/{chunk-L3UHP6TD.js → chunk-7L4UJOY6.js} +1 -2
  43. package/dist/{chunk-QJP6PG7F.js → chunk-7QE3XMRK.js} +19 -18
  44. package/dist/{chunk-P7CE7LXL.js → chunk-AAXZDUOV.js} +18 -17
  45. package/dist/{chunk-SXRTRMEE.js → chunk-AL672HNE.js} +3 -3
  46. package/dist/chunk-APKUAJ2L.js +220 -0
  47. package/dist/{chunk-SCHXJTZL.js → chunk-ARGMQ3H4.js} +2 -2
  48. package/dist/{chunk-HEVYAHLW.js → chunk-AUIM2NVH.js} +5 -5
  49. package/dist/{chunk-3LH5CLP4.js → chunk-BKVOYV6I.js} +143 -6
  50. package/dist/{chunk-RZ6YKEUJ.js → chunk-BPIZNB5O.js} +17 -15
  51. package/dist/{chunk-QROYX7TT.js → chunk-BPY242XU.js} +6 -4
  52. package/dist/{chunk-OTAL43EH.js → chunk-BRENJ2BQ.js} +39 -3
  53. package/dist/{chunk-FA6K3FWM.js → chunk-CCNDLW7Z.js} +44 -22
  54. package/dist/{chunk-2KGXHFYK.js → chunk-CIRFIL4M.js} +49 -29
  55. package/dist/chunk-DAOFNU6J.js +283 -0
  56. package/dist/{chunk-QJJZSROI.js → chunk-DYWQFQJP.js} +48 -38
  57. package/dist/{chunk-XEGTMVYY.js → chunk-EMLPOL77.js} +15 -8
  58. package/dist/{chunk-NWED7CYO.js → chunk-FHGVORFO.js} +29 -25
  59. package/dist/{chunk-U2HGPLZS.js → chunk-FQ7HTV52.js} +17 -2
  60. package/dist/{chunk-H73FP42Q.js → chunk-FQMUHRVC.js} +70 -31
  61. package/dist/{chunk-BTUTZMPT.js → chunk-FT3ZYWET.js} +108 -42
  62. package/dist/{chunk-T5SHNNGP.js → chunk-FUPF2UYQ.js} +92 -34
  63. package/dist/{chunk-3XPUDB7B.js → chunk-FY5MSZAP.js} +279 -39
  64. package/dist/{chunk-M5RXSRO2.js → chunk-GCYTI3DE.js} +42 -33
  65. package/dist/{chunk-DN66GPY5.js → chunk-GJFAMOGK.js} +24 -3
  66. package/dist/{chunk-F2L5GCQ4.js → chunk-GU46PPT3.js} +3 -3
  67. package/dist/{chunk-6IUAK7RZ.js → chunk-H6PI3KJT.js} +2 -2
  68. package/dist/{chunk-ONA5KPV3.js → chunk-H7KENAZO.js} +18 -14
  69. package/dist/{chunk-SQLNBA64.js → chunk-HBPDFCQY.js} +3 -3
  70. package/dist/{chunk-SCQ5VPUF.js → chunk-HFMYN6N2.js} +2 -2
  71. package/dist/{chunk-FJUNPCYI.js → chunk-HHKO6SKY.js} +2 -2
  72. package/dist/{chunk-DZXYF2F5.js → chunk-HQQNCY7W.js} +21 -8
  73. package/dist/{chunk-7TV5Y53Y.js → chunk-HWX6ZHF3.js} +3 -3
  74. package/dist/{chunk-3P2DKJCG.js → chunk-ICPJPQ5C.js} +2 -2
  75. package/dist/{chunk-VUJGMJE6.js → chunk-IM6PDDCE.js} +4 -4
  76. package/dist/{chunk-JJUOHGX2.js → chunk-INE5YJBZ.js} +13 -8
  77. package/dist/{chunk-HTMN2Z6U.js → chunk-J6QROYDA.js} +58 -11
  78. package/dist/{chunk-NX4EQS3U.js → chunk-J76PIKAT.js} +2 -2
  79. package/dist/{chunk-SVTI362O.js → chunk-J7KJR3R6.js} +129 -109
  80. package/dist/{chunk-JEUJOX5X.js → chunk-J7TLCB2Q.js} +2 -2
  81. package/dist/{chunk-O7WP4ZD4.js → chunk-JED6ZDEE.js} +2 -2
  82. package/dist/{chunk-J6K7RP6P.js → chunk-JRCOYRRH.js} +19 -7
  83. package/dist/{chunk-7QKLIMRZ.js → chunk-K2I2XOZD.js} +46 -51
  84. package/dist/{chunk-EAMEADTV.js → chunk-K4EOKJA6.js} +96 -24
  85. package/dist/{chunk-5OWVC2A6.js → chunk-KGVZ5VGH.js} +13 -10
  86. package/dist/{chunk-DFTFPYUD.js → chunk-LBMS4AW6.js} +22 -21
  87. package/dist/{chunk-VVW3F3MD.js → chunk-LGT3PZCJ.js} +27 -19
  88. package/dist/{chunk-OMNGQPEZ.js → chunk-LTXOLDUZ.js} +9 -6
  89. package/dist/{chunk-Q4V4XQWV.js → chunk-MUE65OTD.js} +5 -4
  90. package/dist/{chunk-5GJYGP5Z.js → chunk-MUVJ57EP.js} +14 -18
  91. package/dist/{chunk-CLD2OKV7.js → chunk-MX2EY5Y7.js} +2 -2
  92. package/dist/{chunk-OTQKUHRS.js → chunk-NNS4E7CW.js} +6 -4
  93. package/dist/{chunk-NNAAJVBU.js → chunk-NR5HCAUD.js} +1 -1
  94. package/dist/{chunk-KFZYNWWO.js → chunk-ONU3U4GL.js} +4 -4
  95. package/dist/{chunk-YNRDWYZP.js → chunk-OQKP2X3D.js} +170 -51
  96. package/dist/{chunk-AHGF2YYA.js → chunk-OTOHI4JO.js} +2 -2
  97. package/dist/{chunk-EOFPYPAU.js → chunk-P3NRSSUU.js} +51 -11
  98. package/dist/{chunk-QXKWYZNR.js → chunk-PRI2OD4E.js} +10 -3
  99. package/dist/{chunk-U6EQI3U6.js → chunk-QBZYACOG.js} +3 -3
  100. package/dist/{chunk-C2CVAM3U.js → chunk-QGATPIPX.js} +170 -91
  101. package/dist/{chunk-PZFVK3IH.js → chunk-QHXCAEMX.js} +8 -5
  102. package/dist/{chunk-BH3UYK36.js → chunk-QJMKPUYK.js} +15 -5
  103. package/dist/{chunk-HQCHYB5F.js → chunk-QOOUC2J5.js} +2 -2
  104. package/dist/{chunk-Z6XJQ6KO.js → chunk-QVENJMNX.js} +2 -2
  105. package/dist/{chunk-IUMPEA64.js → chunk-QZX5S6R3.js} +4 -4
  106. package/dist/{chunk-I7F2A35O.js → chunk-R3YSD62R.js} +25 -47
  107. package/dist/{chunk-NU3XLTGP.js → chunk-REJAIQ5S.js} +4 -4
  108. package/dist/{chunk-2C56LEML.js → chunk-ROOE4R4Y.js} +8 -5
  109. package/dist/{chunk-XHVV4NVW.js → chunk-RT7ACF77.js} +12 -2
  110. package/dist/{chunk-I2WKW7C7.js → chunk-SMRFPVLQ.js} +3 -3
  111. package/dist/{chunk-VDOOQZUD.js → chunk-SWSIKFEB.js} +4 -4
  112. package/dist/{chunk-HLJVEAOF.js → chunk-T4A4TSTJ.js} +19 -45
  113. package/dist/{chunk-KHEYDLMT.js → chunk-TJVLKNGR.js} +20 -10
  114. package/dist/{chunk-GL5UZ6NY.js → chunk-TPFKKXCB.js} +3 -3
  115. package/dist/{chunk-X6EZPSW6.js → chunk-TTIM6YTT.js} +31 -21
  116. package/dist/{chunk-BCYVE3N5.js → chunk-TYS6CSS5.js} +2 -2
  117. package/dist/{chunk-T4VOVZT5.js → chunk-UBLHQTLV.js} +15 -14
  118. package/dist/{chunk-3LKM6FMW.js → chunk-UNURMIQO.js} +2 -2
  119. package/dist/{chunk-TSA237IM.js → chunk-VILVLS7P.js} +5 -3
  120. package/dist/{chunk-HGN652MU.js → chunk-VL2O2F3W.js} +2 -2
  121. package/dist/{chunk-3XGZF2QJ.js → chunk-VQOCMUWI.js} +39 -28
  122. package/dist/{chunk-P6T66CCZ.js → chunk-WBM7ZNDI.js} +3 -2
  123. package/dist/{chunk-CMCR5WBW.js → chunk-WBRZJOEC.js} +3 -3
  124. package/dist/{chunk-5LWQH6QV.js → chunk-WCT3NYCV.js} +1 -1
  125. package/dist/{chunk-C4GQDB5L.js → chunk-WRNFDFPU.js} +2 -2
  126. package/dist/{chunk-6HJBFVLO.js → chunk-XD6ZYURY.js} +9 -4
  127. package/dist/{chunk-C63UWAKM.js → chunk-Y2ZE3MSG.js} +2 -2
  128. package/dist/{chunk-7UEMZREK.js → chunk-YAA6IID3.js} +2 -2
  129. package/dist/{chunk-F7BFXWNQ.js → chunk-YIBAWQGJ.js} +7 -4
  130. package/dist/{chunk-PH5X4GIP.js → chunk-YTMTPUH4.js} +8 -5
  131. package/dist/{chunk-3UIKSPFB.js → chunk-Z5QVYKR7.js} +11 -3
  132. package/dist/{chunk-KQ57MHRO.js → chunk-ZEF5M5MB.js} +155 -87
  133. package/dist/{chunk-LE4MYMLI.js → chunk-ZJV7GYR4.js} +6 -6
  134. package/dist/{chunk-XJLKLU4D.js → chunk-ZNWAYU6N.js} +11 -7
  135. package/dist/cli.cjs +165 -148
  136. package/dist/clock.js +105 -25
  137. package/dist/countdown.js +208 -82
  138. package/dist/dgmo-router-X7ZGAPIE.js +86 -0
  139. package/dist/dimensions-45H6JQEY.js +22 -0
  140. package/dist/editor.js +17 -2
  141. package/dist/element.d.ts +6 -0
  142. package/dist/element.js +172 -134
  143. package/dist/element.mjs +3026 -1463
  144. package/dist/{flowchart-parser-OE4WHLTF.js → flowchart-parser-UKELHBSB.js} +4 -4
  145. package/dist/{flowchart-renderer-GPCSMTOR.js → flowchart-renderer-MNCDS7MV.js} +10 -10
  146. package/dist/highlight.d.ts +21 -1
  147. package/dist/highlight.js +106 -3
  148. package/dist/index.d.ts +2 -2
  149. package/dist/index.js +59 -57
  150. package/dist/{layout-FWODLIMP.js → layout-2L3WMRYU.js} +6 -6
  151. package/dist/{layout-7SKMFYHL.js → layout-46N4JJYK.js} +5 -5
  152. package/dist/{layout-7H4H46CS.js → layout-7QXCNOVS.js} +3 -3
  153. package/dist/layout-A4XWNVID.js +14 -0
  154. package/dist/{layout-46366KBT.js → layout-A5UHRWVH.js} +3 -3
  155. package/dist/{layout-NXG63LWH.js → layout-AM2JWW3X.js} +4 -4
  156. package/dist/{layout-DC4TVXER.js → layout-EE6GE46Y.js} +5 -5
  157. package/dist/{layout-FGQWRYYW.js → layout-F4WO357A.js} +3 -3
  158. package/dist/layout-G23F7LDH.js +9 -0
  159. package/dist/{layout-QNUQLEHU.js → layout-GM4UGR7B.js} +5 -4
  160. package/dist/{layout-7MZ5NF2N.js → layout-GQQJXNYH.js} +5 -5
  161. package/dist/{layout-5BG6DFCU.js → layout-IIE2S5FK.js} +6 -6
  162. package/dist/{layout-34CLNICW.js → layout-OAC4PEAC.js} +5 -5
  163. package/dist/layout-VMCRX66I.js +14 -0
  164. package/dist/{layout-PUQCB6AN.js → layout-ZDOSXL5G.js} +7 -7
  165. package/dist/{layout-search-QS44PI5R.js → layout-search-55FU6HD3.js} +6 -157
  166. package/dist/map-data/gazetteer.json +1 -1
  167. package/dist/{palettes-PRJ2RI6D.js → palettes-UDLZ2SA4.js} +2 -2
  168. package/dist/{parser-D5VILGN2.js → parser-2ECN6JA2.js} +4 -4
  169. package/dist/{parser-LWKKBNSA.js → parser-4WTIHM5J.js} +3 -3
  170. package/dist/{parser-DFFEDKHH.js → parser-5H2BTSJQ.js} +3 -3
  171. package/dist/{parser-4NO6VZ6S.js → parser-75KVXUNS.js} +4 -4
  172. package/dist/{parser-VKOJM7KS.js → parser-774AC53T.js} +4 -4
  173. package/dist/{parser-IBWNAPY4.js → parser-BE4YCSRU.js} +3 -3
  174. package/dist/{parser-4AI5ZN5F.js → parser-CNGUQUQI.js} +3 -3
  175. package/dist/{parser-36HVKU5U.js → parser-DEUUSQIN.js} +7 -6
  176. package/dist/{parser-H3XEPFPV.js → parser-DQAFLUJB.js} +4 -4
  177. package/dist/{parser-5OXGPNBF.js → parser-EYCKNKQA.js} +5 -5
  178. package/dist/{parser-TGQZJ5OT.js → parser-FXISIU6A.js} +4 -4
  179. package/dist/{parser-JJR52VAT.js → parser-GTB4XC7P.js} +5 -5
  180. package/dist/{parser-AGVYTQXV.js → parser-GVEPAUSD.js} +4 -4
  181. package/dist/{parser-WAV5JRPT.js → parser-HSQGTY4G.js} +4 -4
  182. package/dist/{parser-YS7TOS2K.js → parser-HVKRINUS.js} +3 -3
  183. package/dist/{parser-W4PQUGX3.js → parser-J5MIEYO4.js} +5 -5
  184. package/dist/parser-KMZIXLDZ.js +13 -0
  185. package/dist/{parser-HYRTF3DO.js → parser-LJHXWSXU.js} +3 -3
  186. package/dist/{parser-KCR2WS3V.js → parser-PT3W72G5.js} +4 -4
  187. package/dist/{parser-CVMEDULU.js → parser-SBJQDPHL.js} +4 -4
  188. package/dist/{parser-RZPVAQVX.js → parser-SUWWWCMX.js} +4 -3
  189. package/dist/{parser-TXND652E.js → parser-SXDRNZOA.js} +4 -4
  190. package/dist/parser-UMILOW3M.js +14 -0
  191. package/dist/{parser-RV4M6AS2.js → parser-UP3AZ367.js} +4 -4
  192. package/dist/{parser-IJBMRXMC.js → parser-WHPRV3X5.js} +5 -5
  193. package/dist/{parser-MPCE5JBG.js → parser-WX3UODSJ.js} +4 -4
  194. package/dist/{parser-K3XXLMUW.js → parser-XCIEN3KN.js} +4 -4
  195. package/dist/{parser-AXKBDGNO.js → parser-XIRTUMVN.js} +5 -5
  196. package/dist/{parser-B5FVS7O6.js → parser-YKCGIG45.js} +3 -3
  197. package/dist/{parser-PSA4UBSP.js → parser-YKYMQG3B.js} +4 -4
  198. package/dist/{parser-MTOMTWTD.js → parser-ZGM2OJ6Y.js} +6 -5
  199. package/dist/{parser-CSFUN3CT.js → parser-ZL5QUFVH.js} +5 -4
  200. package/dist/pert.d.ts +2 -2
  201. package/dist/{renderer-PPIHO5FI.js → renderer-3F7OS2AX.js} +14 -13
  202. package/dist/{renderer-SBS3YWU5.js → renderer-4QB4K7Q3.js} +9 -9
  203. package/dist/{renderer-GHPZMFU2.js → renderer-5DAKMIU2.js} +3 -3
  204. package/dist/{renderer-R2WNIC2C.js → renderer-5H4SY7YY.js} +9 -9
  205. package/dist/{renderer-DAXMXIKD.js → renderer-5PIQPFOX.js} +5 -4
  206. package/dist/{renderer-45PSOL3E.js → renderer-6MU37QF5.js} +6 -6
  207. package/dist/renderer-AQVMWJ4M.js +27 -0
  208. package/dist/{renderer-A5VE5BCI.js → renderer-BDDW6K7N.js} +9 -9
  209. package/dist/{renderer-AUW2BE6G.js → renderer-BNB3VIDY.js} +10 -10
  210. package/dist/{renderer-4ITCHBT7.js → renderer-CQY6ATOS.js} +6 -6
  211. package/dist/{renderer-6OKF44KS.js → renderer-CVW75CXL.js} +15 -15
  212. package/dist/{renderer-7RH2SI3B.js → renderer-DT4XRFEP.js} +5 -4
  213. package/dist/{renderer-B5TBNZJE.js → renderer-ERHBSTQT.js} +9 -9
  214. package/dist/{renderer-HVCU2C3Z.js → renderer-HSHHVYWF.js} +5 -4
  215. package/dist/renderer-IDPVUFNB.js +28 -0
  216. package/dist/renderer-ILX6BGKR.js +21 -0
  217. package/dist/renderer-JP663HKG.js +22 -0
  218. package/dist/{renderer-KS7YZJE2.js → renderer-KNFTTOBL.js} +11 -11
  219. package/dist/{renderer-2AZ5HJFK.js → renderer-MVUZBESR.js} +5 -5
  220. package/dist/{renderer-QAOBLRXV.js → renderer-N4EBR2FV.js} +11 -11
  221. package/dist/{renderer-P5ROYQGU.js → renderer-NHO46CT2.js} +4 -4
  222. package/dist/{renderer-NGXZTRK6.js → renderer-NO2QJ5LZ.js} +10 -10
  223. package/dist/{renderer-FPE3J5VZ.js → renderer-OGFV5RXX.js} +12 -12
  224. package/dist/{renderer-ODUUOPVT.js → renderer-PDLESJMS.js} +15 -15
  225. package/dist/renderer-T4MTNINC.js +24 -0
  226. package/dist/renderer-TOUGFGTM.js +24 -0
  227. package/dist/{renderer-BSR2O2H6.js → renderer-U3KPD43Y.js} +14 -13
  228. package/dist/{renderer-JCCHNECZ.js → renderer-X334IJU2.js} +10 -10
  229. package/dist/{renderer-5DSEWF74.js → renderer-Y5OAMOCR.js} +9 -9
  230. package/dist/{renderer-5KVCNMOJ.js → renderer-YONAKAJU.js} +5 -3
  231. package/dist/{renderer-7SD6MSBS.js → renderer-YWMI6Y2U.js} +12 -12
  232. package/dist/{renderer-2QPMJ2DA.js → renderer-ZWIH4WDW.js} +10 -10
  233. package/dist/renderer-radial-7CGZMVMS.js +21 -0
  234. package/dist/{resolver-FHBCO3PL.js → resolver-EMTGNR3D.js} +4 -3
  235. package/dist/{state-parser-3REXRK3R.js → state-parser-BATWAID2.js} +4 -4
  236. package/dist/{state-renderer-XYLNRWXR.js → state-renderer-3FKZJ3LP.js} +10 -10
  237. package/dist/{themes-PdPR1-hC.d.ts → themes-32xj5ZTW.d.ts} +27 -0
  238. package/docs/ai-integration.md +15 -19
  239. package/docs/language-reference.md +106 -21
  240. package/gallery/fixtures/clock.dgmo +3 -3
  241. package/gallery/fixtures/countdown-tz.dgmo +5 -0
  242. package/package.json +1 -1
  243. package/dist/charts-d3-MUW3LTML.js +0 -26
  244. package/dist/dgmo-router-CE2G67FV.js +0 -84
  245. package/dist/dimensions-OTBKC5M6.js +0 -22
  246. package/dist/layout-6RDJHS6E.js +0 -9
  247. package/dist/layout-J36454XU.js +0 -14
  248. package/dist/layout-LD6XTLD6.js +0 -14
  249. package/dist/parser-4WQQQXCG.js +0 -13
  250. package/dist/parser-O4HIUN6G.js +0 -13
  251. package/dist/renderer-CYB4LK3G.js +0 -22
  252. package/dist/renderer-FF24KZCI.js +0 -24
  253. package/dist/renderer-FYSVXL7M.js +0 -28
  254. package/dist/renderer-HDCCZURL.js +0 -24
  255. package/dist/renderer-PSMMZCKH.js +0 -21
  256. package/dist/renderer-UYMQQCJK.js +0 -24
  257. package/dist/renderer-radial-F7X5F2VU.js +0 -21
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  layoutClassDiagram
3
- } from "./chunk-CMCR5WBW.js";
3
+ } from "./chunk-WBRZJOEC.js";
4
4
  import {
5
5
  NOTE_BADGE_RADIUS,
6
6
  noteConnectorPoints,
7
7
  renderNoteBadge,
8
8
  renderNoteBox,
9
9
  renderNoteConnector
10
- } from "./chunk-JEUJOX5X.js";
10
+ } from "./chunk-J7TLCB2Q.js";
11
11
  import {
12
12
  extractExportSvg,
13
13
  runInExportContainer
@@ -21,7 +21,7 @@ import {
21
21
  } from "./chunk-YYVTBZZC.js";
22
22
  import {
23
23
  renderIntegratedLegend
24
- } from "./chunk-HEVYAHLW.js";
24
+ } from "./chunk-AUIM2NVH.js";
25
25
  import {
26
26
  TITLE_FONT_SIZE,
27
27
  TITLE_FONT_WEIGHT,
@@ -32,17 +32,20 @@ import {
32
32
  } from "./chunk-6KFWC4CO.js";
33
33
  import {
34
34
  LEGEND_HEIGHT
35
- } from "./chunk-HQCHYB5F.js";
35
+ } from "./chunk-QOOUC2J5.js";
36
36
  import {
37
37
  measureText
38
- } from "./chunk-5LWQH6QV.js";
38
+ } from "./chunk-WCT3NYCV.js";
39
39
  import {
40
40
  contrastText,
41
41
  shapeFill
42
- } from "./chunk-P6T66CCZ.js";
42
+ } from "./chunk-WBM7ZNDI.js";
43
43
  import {
44
44
  parseClassDiagram
45
- } from "./chunk-GL5UZ6NY.js";
45
+ } from "./chunk-TPFKKXCB.js";
46
+ import {
47
+ fillModeFromOptions
48
+ } from "./chunk-BRENJ2BQ.js";
46
49
 
47
50
  // src/class/renderer.ts
48
51
  import * as d3Selection from "d3-selection";
@@ -68,11 +71,9 @@ function modifierColor(modifier, palette, colorOff) {
68
71
  return palette.colors.teal;
69
72
  }
70
73
  }
71
- function nodeFill(palette, isDark, modifier, nodeColor, colorOff, solid) {
74
+ function nodeFill(palette, isDark, modifier, nodeColor, colorOff, fillMode) {
72
75
  const color = nodeColor ?? modifierColor(modifier, palette, colorOff);
73
- return shapeFill(palette, color, isDark, {
74
- ...solid !== void 0 && { solid }
75
- });
76
+ return shapeFill(palette, color, isDark, { mode: fillMode });
76
77
  }
77
78
  function nodeStroke(palette, modifier, nodeColor, colorOff) {
78
79
  return nodeColor ?? modifierColor(modifier, palette, colorOff);
@@ -259,14 +260,14 @@ function renderClassDiagram(container, parsed, layout, palette, isDark, onClickI
259
260
  const colorOff = !!parsed.options?.["no-auto-color"];
260
261
  const neutralize = hasLegend && !isLegendExpanded && !node.color;
261
262
  const effectiveColor = neutralize ? palette.primary : node.color;
262
- const solid = parsed.options?.["solid-fill"] === "on";
263
+ const fillMode = fillModeFromOptions(parsed.options ?? {});
263
264
  const fill = nodeFill(
264
265
  palette,
265
266
  isDark,
266
267
  node.modifier,
267
268
  effectiveColor,
268
269
  colorOff,
269
- solid
270
+ fillMode
270
271
  );
271
272
  const stroke = nodeStroke(palette, node.modifier, effectiveColor, colorOff);
272
273
  const onFillText = contrastText(
@@ -289,14 +290,14 @@ function renderClassDiagram(container, parsed, layout, palette, isDark, onClickI
289
290
  const fields = node.members.filter((m) => !m.isMethod);
290
291
  const methods = node.members.filter((m) => m.isMethod);
291
292
  if (isEnum) {
292
- nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", solid ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
293
+ nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
293
294
  let memberY = yPos + sCompartmentPaddingY;
294
295
  for (const member of node.members) {
295
296
  nodeG.append("text").attr("x", -w / 2 + sMemberPaddingX).attr("y", memberY + sMemberLineHeight / 2).attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", sMemberFontSize).text(member.name);
296
297
  memberY += sMemberLineHeight;
297
298
  }
298
299
  } else {
299
- nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", solid ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
300
+ nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
300
301
  if (fields.length > 0) {
301
302
  let memberY = yPos + sCompartmentPaddingY;
302
303
  for (const field of fields) {
@@ -312,7 +313,7 @@ function renderClassDiagram(container, parsed, layout, palette, isDark, onClickI
312
313
  }
313
314
  }
314
315
  yPos += node.fieldsHeight;
315
- nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", solid ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
316
+ nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
316
317
  if (methods.length > 0) {
317
318
  let memberY = yPos + sCompartmentPaddingY;
318
319
  for (const method of methods) {
@@ -407,4 +408,4 @@ export {
407
408
  renderClassDiagram,
408
409
  renderClassDiagramForExport
409
410
  };
410
- //# sourceMappingURL=chunk-P7CE7LXL.js.map
411
+ //# sourceMappingURL=chunk-AAXZDUOV.js.map
@@ -10,7 +10,7 @@ import {
10
10
  tagAttrKey,
11
11
  validateTagGroupNames,
12
12
  validateTagValues
13
- } from "./chunk-FJUNPCYI.js";
13
+ } from "./chunk-HHKO6SKY.js";
14
14
  import {
15
15
  MINDMAP_REGISTRY,
16
16
  OPTION_NOCOLON_RE,
@@ -21,7 +21,7 @@ import {
21
21
  tryParseSharedOption,
22
22
  warnUnknownMetaKeys,
23
23
  withTagAliases
24
- } from "./chunk-OTAL43EH.js";
24
+ } from "./chunk-BRENJ2BQ.js";
25
25
  import {
26
26
  formatDgmoError,
27
27
  makeDgmoError,
@@ -313,4 +313,4 @@ function findMetadataParent(indent, indentStack) {
313
313
  export {
314
314
  parseMindmap
315
315
  };
316
- //# sourceMappingURL=chunk-SXRTRMEE.js.map
316
+ //# sourceMappingURL=chunk-AL672HNE.js.map
@@ -0,0 +1,220 @@
1
+ // src/clock/resolve.ts
2
+ var CLOCK_RAMP = [
3
+ [0, "#3d478f"],
4
+ [4, "#4a4d8c"],
5
+ [6, "#c98a6b"],
6
+ [8, "#d9a441"],
7
+ [11, "#e0b23c"],
8
+ [13, "#4f96c4"],
9
+ [16, "#cc7a33"],
10
+ [19, "#8a5aa0"],
11
+ [24, "#3d478f"]
12
+ ];
13
+ function hexLerp(a, b, t) {
14
+ const pa = [1, 3, 5].map((i) => parseInt(a.slice(i, i + 2), 16));
15
+ const pb = [1, 3, 5].map((i) => parseInt(b.slice(i, i + 2), 16));
16
+ const c = pa.map(
17
+ (v, i) => Math.round(v + (pb[i] - v) * t).toString(16).padStart(2, "0")
18
+ );
19
+ return `#${c.join("")}`;
20
+ }
21
+ function rampColor(h) {
22
+ const hh = (h % 24 + 24) % 24;
23
+ for (let i = 0; i < CLOCK_RAMP.length - 1; i++) {
24
+ const [h0, c0] = CLOCK_RAMP[i];
25
+ const [h1, c1] = CLOCK_RAMP[i + 1];
26
+ if (hh >= h0 && hh <= h1) return hexLerp(c0, c1, (hh - h0) / (h1 - h0));
27
+ }
28
+ return CLOCK_RAMP[0][1];
29
+ }
30
+ var SOON_MIN = 60;
31
+ var RAD = Math.PI / 180;
32
+ var DAY_MS = 864e5;
33
+ var J1970 = 2440588;
34
+ var J2000 = 2451545;
35
+ function zoneParts(zone, nowMs) {
36
+ const d = new Date(nowMs);
37
+ try {
38
+ const o = {};
39
+ new Intl.DateTimeFormat("en-US", {
40
+ timeZone: zone,
41
+ hour12: false,
42
+ hour: "2-digit",
43
+ minute: "2-digit",
44
+ second: "2-digit",
45
+ weekday: "short"
46
+ }).formatToParts(d).forEach((x) => {
47
+ o[x.type] = x.value;
48
+ });
49
+ const off = new Intl.DateTimeFormat("en-US", {
50
+ timeZone: zone,
51
+ timeZoneName: "shortOffset"
52
+ }).formatToParts(d).find((x) => x.type === "timeZoneName");
53
+ return {
54
+ h: parseInt(o["hour"], 10) % 24,
55
+ m: parseInt(o["minute"], 10),
56
+ s: parseInt(o["second"], 10),
57
+ weekday: o["weekday"],
58
+ offsetLabel: off ? off.value.replace("GMT", "UTC") : ""
59
+ };
60
+ } catch {
61
+ return {
62
+ h: d.getUTCHours(),
63
+ m: d.getUTCMinutes(),
64
+ s: d.getUTCSeconds(),
65
+ weekday: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][d.getUTCDay()],
66
+ offsetLabel: "UTC"
67
+ };
68
+ }
69
+ }
70
+ function pad2(n) {
71
+ return n < 10 ? "0" + n : String(n);
72
+ }
73
+ function isValidZone(zone) {
74
+ try {
75
+ new Intl.DateTimeFormat("en-US", { timeZone: zone });
76
+ return true;
77
+ } catch {
78
+ return false;
79
+ }
80
+ }
81
+ var WEEKDAY_SHORT = [
82
+ "Sun",
83
+ "Mon",
84
+ "Tue",
85
+ "Wed",
86
+ "Thu",
87
+ "Fri",
88
+ "Sat"
89
+ ];
90
+ function parseFixedOffset(token) {
91
+ const m = token.trim().match(/^(?:UTC|GMT)\s*([+-])?\s*(\d{1,2})?(?::?(\d{2}))?$/i);
92
+ if (!m) return null;
93
+ if (!m[1] && !m[2] && !m[3]) return 0;
94
+ if (!m[1] || !m[2]) return null;
95
+ const sign = m[1] === "-" ? -1 : 1;
96
+ const h = Number(m[2]);
97
+ const mm = m[3] ? Number(m[3]) : 0;
98
+ if (h > 14 || mm > 59) return null;
99
+ const total = sign * (h * 60 + mm);
100
+ if (total < -12 * 60 || total > 14 * 60) return null;
101
+ return total;
102
+ }
103
+ function formatOffsetLabel(offsetMin) {
104
+ if (offsetMin === 0) return "UTC";
105
+ const sign = offsetMin < 0 ? "-" : "+";
106
+ const abs = Math.abs(offsetMin);
107
+ const h = Math.floor(abs / 60);
108
+ const mm = abs % 60;
109
+ return `UTC${sign}${h}${mm ? ":" + pad2(mm) : ""}`;
110
+ }
111
+ function fixedParts(offsetMin, nowMs) {
112
+ const d = new Date(nowMs + offsetMin * 6e4);
113
+ return {
114
+ h: d.getUTCHours(),
115
+ m: d.getUTCMinutes(),
116
+ s: d.getUTCSeconds(),
117
+ weekday: WEEKDAY_SHORT[d.getUTCDay()],
118
+ offsetLabel: formatOffsetLabel(offsetMin)
119
+ };
120
+ }
121
+ function formatTime(h, m, s, hours12) {
122
+ const sec = pad2(s);
123
+ if (hours12) {
124
+ const ap = h < 12 ? "am" : "pm";
125
+ let hr = h % 12;
126
+ if (hr === 0) hr = 12;
127
+ return { main: `${hr}:${pad2(m)}`, sec, ap };
128
+ }
129
+ return { main: `${pad2(h)}:${pad2(m)}`, sec, ap: "" };
130
+ }
131
+ function fmtDelta(ms) {
132
+ const m = Math.max(0, Math.round(ms / 6e4));
133
+ if (m < 90) return `${m}m`;
134
+ return `${Math.floor(m / 60)}h ${m % 60}m`;
135
+ }
136
+ function workStatus(parts, work) {
137
+ if (!work) return null;
138
+ const min = parts.h * 60 + parts.m;
139
+ if (!work.days[parts.weekday]) return { cls: "off", text: "Weekend" };
140
+ if (min < work.startMin) {
141
+ const d = work.startMin - min;
142
+ return {
143
+ cls: d <= SOON_MIN ? "soon" : "off",
144
+ text: `starts in ${fmtDelta(d * 6e4)}`
145
+ };
146
+ }
147
+ if (min < work.endMin) {
148
+ return { cls: "ok", text: `${fmtDelta((work.endMin - min) * 6e4)} left` };
149
+ }
150
+ return {
151
+ cls: "off",
152
+ text: `ended ${fmtDelta((min - work.endMin) * 6e4)} ago`
153
+ };
154
+ }
155
+ function toJulian(ms) {
156
+ return ms / DAY_MS - 0.5 + J1970;
157
+ }
158
+ function fromJulian(j) {
159
+ return (j + 0.5 - J1970) * DAY_MS;
160
+ }
161
+ function sunTimes(nowMs, lat, lon) {
162
+ const lw = -lon * RAD;
163
+ const phi = lat * RAD;
164
+ const J = toJulian(nowMs);
165
+ const n = Math.round(J - J2000 - 9e-4 - lw / (2 * Math.PI));
166
+ const Jn = J2000 + 9e-4 + lw / (2 * Math.PI) + n;
167
+ const M = (357.5291 + 0.98560028 * (Jn - J2000)) * RAD;
168
+ const C = (1.9148 * Math.sin(M) + 0.02 * Math.sin(2 * M) + 3e-4 * Math.sin(3 * M)) * RAD;
169
+ const L = M + C + Math.PI + 102.9372 * RAD;
170
+ const Jt = Jn + 53e-4 * Math.sin(M) - 69e-4 * Math.sin(2 * L);
171
+ const dec = Math.asin(Math.sin(L) * Math.sin(23.44 * RAD));
172
+ const cw = (Math.sin(-0.833 * RAD) - Math.sin(phi) * Math.sin(dec)) / (Math.cos(phi) * Math.cos(dec));
173
+ if (cw > 1) return { polar: "night" };
174
+ if (cw < -1) return { polar: "day" };
175
+ const w = Math.acos(cw);
176
+ const Jset = J2000 + 9e-4 + (w + lw) / (2 * Math.PI) + n + 53e-4 * Math.sin(M) - 69e-4 * Math.sin(2 * L);
177
+ return {
178
+ sunriseMs: fromJulian(Jt - (Jset - Jt)),
179
+ sunsetMs: fromJulian(Jset)
180
+ };
181
+ }
182
+ function sunLine(nowMs, lat, lon) {
183
+ const t = sunTimes(nowMs, lat, lon);
184
+ if (t.polar) {
185
+ return {
186
+ up: t.polar === "day",
187
+ text: t.polar === "day" ? "midnight sun" : "polar night"
188
+ };
189
+ }
190
+ if (nowMs < t.sunriseMs) {
191
+ return { up: false, text: `sunrise in ${fmtDelta(t.sunriseMs - nowMs)}` };
192
+ }
193
+ if (nowMs < t.sunsetMs) {
194
+ return { up: true, text: `sunset in ${fmtDelta(t.sunsetMs - nowMs)}` };
195
+ }
196
+ const tm = sunTimes(nowMs + DAY_MS, lat, lon);
197
+ if (tm.polar) return { up: false, text: "sunrise in \u2014" };
198
+ return { up: false, text: `sunrise in ${fmtDelta(tm.sunriseMs - nowMs)}` };
199
+ }
200
+ function handAngles(h, m, s) {
201
+ return {
202
+ hour: (h % 12 + m / 60) * 30,
203
+ minute: (m + s / 60) * 6,
204
+ second: s * 6
205
+ };
206
+ }
207
+
208
+ export {
209
+ rampColor,
210
+ zoneParts,
211
+ isValidZone,
212
+ parseFixedOffset,
213
+ formatOffsetLabel,
214
+ fixedParts,
215
+ formatTime,
216
+ workStatus,
217
+ sunLine,
218
+ handAngles
219
+ };
220
+ //# sourceMappingURL=chunk-APKUAJ2L.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  extractColor,
3
3
  measureIndent
4
- } from "./chunk-OTAL43EH.js";
4
+ } from "./chunk-BRENJ2BQ.js";
5
5
  import {
6
6
  makeDgmoError
7
7
  } from "./chunk-CXK4DZH3.js";
@@ -73,4 +73,4 @@ function tryCollectNote(lines, index, indent, palette, diagnostics) {
73
73
  export {
74
74
  tryCollectNote
75
75
  };
76
- //# sourceMappingURL=chunk-SCHXJTZL.js.map
76
+ //# sourceMappingURL=chunk-ARGMQ3H4.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  computeLegendLayout
3
- } from "./chunk-7UEMZREK.js";
3
+ } from "./chunk-YAA6IID3.js";
4
4
  import {
5
5
  FONT_FAMILY
6
6
  } from "./chunk-6KFWC4CO.js";
@@ -14,14 +14,14 @@ import {
14
14
  LEGEND_TOGGLE_DOT_R,
15
15
  LEGEND_TOGGLE_OFF_OPACITY,
16
16
  measureLegendText
17
- } from "./chunk-HQCHYB5F.js";
17
+ } from "./chunk-QOOUC2J5.js";
18
18
  import {
19
19
  mix,
20
20
  valueRampStops
21
- } from "./chunk-P6T66CCZ.js";
21
+ } from "./chunk-WBM7ZNDI.js";
22
22
  import {
23
23
  tagAttrKey
24
- } from "./chunk-FJUNPCYI.js";
24
+ } from "./chunk-HHKO6SKY.js";
25
25
 
26
26
  // src/utils/legend-d3.ts
27
27
  var LEGEND_TEXT_DY = "0.32em";
@@ -293,4 +293,4 @@ export {
293
293
  renderLegendD3,
294
294
  renderIntegratedLegend
295
295
  };
296
- //# sourceMappingURL=chunk-HEVYAHLW.js.map
296
+ //# sourceMappingURL=chunk-AUIM2NVH.js.map
@@ -1,12 +1,25 @@
1
+ import {
2
+ buildSwatches
3
+ } from "./chunk-3LK5DNED.js";
1
4
  import {
2
5
  layoutMap,
3
6
  mapLegendConfig,
4
7
  mapLegendGroups,
5
8
  parsePathRings
6
- } from "./chunk-LE4MYMLI.js";
9
+ } from "./chunk-ZJV7GYR4.js";
7
10
  import {
8
11
  renderIntegratedLegend
9
- } from "./chunk-HEVYAHLW.js";
12
+ } from "./chunk-AUIM2NVH.js";
13
+ import {
14
+ parseClock
15
+ } from "./chunk-FY5MSZAP.js";
16
+ import {
17
+ fixedParts,
18
+ formatTime,
19
+ sunLine,
20
+ workStatus,
21
+ zoneParts
22
+ } from "./chunk-APKUAJ2L.js";
10
23
  import {
11
24
  TITLE_FONT_SIZE,
12
25
  TITLE_FONT_WEIGHT,
@@ -17,13 +30,124 @@ import {
17
30
  } from "./chunk-6KFWC4CO.js";
18
31
  import {
19
32
  measureText
20
- } from "./chunk-5LWQH6QV.js";
33
+ } from "./chunk-WCT3NYCV.js";
21
34
  import {
22
- mix
23
- } from "./chunk-P6T66CCZ.js";
35
+ mix,
36
+ themeBaseBg
37
+ } from "./chunk-WBM7ZNDI.js";
24
38
 
25
39
  // src/map/renderer.ts
26
40
  import * as d3Selection from "d3-selection";
41
+
42
+ // src/map/clock-card.ts
43
+ var WEEKDAY_ABBR = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
44
+ var clamp = (v, lo, hi) => Math.max(lo, Math.min(hi, v));
45
+ function workFromDirectives(d) {
46
+ if (d.clockHours === void 0) return null;
47
+ const src = `clock
48
+ hours ${d.clockHours}` + (d.clockDays !== void 0 ? `
49
+ days ${d.clockDays}` : "");
50
+ const w = parseClock(src).work;
51
+ if (!w) return null;
52
+ return { startMin: w.startMin, endMin: w.endMin, days: w.days };
53
+ }
54
+ function partsFor(poi, now) {
55
+ return poi.tzFixedOffsetMin !== void 0 ? fixedParts(poi.tzFixedOffsetMin, now) : zoneParts(poi.tz, now);
56
+ }
57
+ function renderClockCards(gCards, layout, resolved, palette, isDark, now, frameW, frameH) {
58
+ const withTz = resolved.pois.filter((p) => p.tz !== void 0);
59
+ if (withTz.length === 0) return;
60
+ const byId = new Map(withTz.map((p) => [p.id, p]));
61
+ const baseBg = themeBaseBg(palette, isDark);
62
+ const muted = mix(palette.text, baseBg, 55);
63
+ const sw = buildSwatches(palette, muted);
64
+ const cardFill = mix(palette.text, palette.bg, 6);
65
+ const border = mix(palette.text, palette.bg, 32);
66
+ const work = workFromDirectives(resolved.directives);
67
+ const hours12 = true;
68
+ for (const lp of layout) {
69
+ const poi = byId.get(lp.id);
70
+ if (!poi) continue;
71
+ const parts = partsFor(poi, now);
72
+ const hasCoords = Number.isFinite(poi.lat) && Number.isFinite(poi.lon);
73
+ const isFixed = poi.tzFixedOffsetMin !== void 0;
74
+ const sun = !isFixed && hasCoords ? sunLine(now, poi.lat, poi.lon) : null;
75
+ const ts = formatTime(parts.h, parts.m, parts.s, hours12);
76
+ const status = workStatus(parts, work);
77
+ const viewerWeekday = WEEKDAY_ABBR[new Date(now).getDay()];
78
+ const showWeekday = parts.weekday !== viewerWeekday;
79
+ const line2 = [showWeekday ? parts.weekday : null, status?.text].filter(Boolean).join(" \xB7 ");
80
+ const mainFont = 18;
81
+ const sf = 8;
82
+ const advance = (s, f) => [...s].reduce((w, c) => w + f * (c === ":" ? 0.334 : 0.6), 0);
83
+ const mainW = advance(ts.main, mainFont);
84
+ const secW = advance(`:${ts.sec}`, sf);
85
+ const stackW = Math.max(secW, ts.ap ? measureText(ts.ap, sf) : 0);
86
+ const stackGap = 6;
87
+ const padX = 9;
88
+ const iconR = 3.5;
89
+ const iconGap = 5;
90
+ const line2Icon = status ? iconR * 2 + iconGap : 0;
91
+ const line1W = mainW + stackGap + stackW;
92
+ const line2W = line2Icon + measureText(line2, 10.5);
93
+ const cardW = Math.max(line1W, line2W) + padX * 2;
94
+ const cardH = 44;
95
+ const leaderGap = 7;
96
+ const M = 6;
97
+ const cx = lp.cx;
98
+ const below = lp.cy - lp.r - leaderGap - cardH < M;
99
+ const cardTop = clamp(
100
+ below ? lp.cy + lp.r + leaderGap : lp.cy - lp.r - leaderGap - cardH,
101
+ M,
102
+ frameH - cardH - M
103
+ );
104
+ const cardLeft = clamp(cx - cardW / 2, M, frameW - cardW - M);
105
+ const g = gCards.append("g").attr("data-dgmo-clock", "").attr("data-dgmo-clock-zone", poi.tz).attr("data-dgmo-clock-hours12", hours12 ? "1" : "0").attr("data-dgmo-clock-sun", sun ? "1" : "0").attr("data-line-number", poi.lineNumber).attr("data-poi-clock", poi.id).attr("data-dgmo-clock-c-day", sw.day).attr("data-dgmo-clock-c-night", sw.night).attr("data-dgmo-clock-c-day-soft", sw.dayTint).attr("data-dgmo-clock-c-night-soft", sw.nightTint).attr("data-dgmo-clock-c-ok", sw.ok).attr("data-dgmo-clock-c-soon", sw.soon).attr("data-dgmo-clock-c-off", sw.off).attr("data-dgmo-clock-c-ok-soft", sw.okSoft).attr("data-dgmo-clock-c-soon-soft", sw.soonSoft).attr("data-dgmo-clock-c-off-soft", sw.offSoft);
106
+ if (hasCoords) {
107
+ g.attr("data-dgmo-clock-lat", poi.lat).attr(
108
+ "data-dgmo-clock-lon",
109
+ poi.lon
110
+ );
111
+ }
112
+ if (isFixed) g.attr("data-dgmo-clock-fixed-offset", poi.tzFixedOffsetMin);
113
+ if (work) {
114
+ g.attr("data-dgmo-clock-work-start", work.startMin).attr("data-dgmo-clock-work-end", work.endMin).attr(
115
+ "data-dgmo-clock-work-days",
116
+ WEEKDAY_ABBR.filter((d) => work.days[d]).join(",")
117
+ );
118
+ }
119
+ const leaderX = clamp(cx, cardLeft + 10, cardLeft + cardW - 10);
120
+ g.append("line").attr("x1", cx).attr("y1", below ? lp.cy + lp.r : lp.cy - lp.r).attr("x2", leaderX).attr("y2", below ? cardTop : cardTop + cardH).attr("stroke", border).attr("stroke-width", 1);
121
+ g.append("rect").attr("x", cardLeft).attr("y", cardTop).attr("width", cardW).attr("height", cardH).attr("rx", 6).attr("fill", cardFill).attr("stroke", border).attr("stroke-width", 1);
122
+ const statusColor = (cls) => cls === "ok" ? sw.ok : cls === "soon" ? sw.soon : sw.off;
123
+ const line1Y = cardTop + 20;
124
+ const timeX = cardLeft + padX;
125
+ g.append("text").attr("data-dgmo-clock-digital-part", "main").attr("x", timeX).attr("y", line1Y).attr("font-family", FONT_FAMILY).attr("fill", palette.text).attr("font-size", mainFont).attr("font-weight", 600).attr("textLength", mainW).attr("lengthAdjust", "spacing").style("font-variant-numeric", "tabular-nums").text(ts.main);
126
+ const stackX = timeX + mainW + stackGap;
127
+ const capTop = line1Y - mainFont * 0.7;
128
+ g.append("text").attr("data-dgmo-clock-digital-part", "sec").attr("x", stackX).attr("y", capTop + sf * 0.72).attr("font-family", FONT_FAMILY).attr("fill", muted).attr("font-size", sf).attr("textLength", secW).attr("lengthAdjust", "spacing").style("font-variant-numeric", "tabular-nums").text(`:${ts.sec}`);
129
+ g.append("text").attr("data-dgmo-clock-digital-part", "ap").attr("x", stackX).attr("y", line1Y).attr("font-family", FONT_FAMILY).attr("fill", muted).attr("font-size", sf).text(ts.ap);
130
+ const line2Y = cardTop + 36;
131
+ if (status) {
132
+ g.append("circle").attr("data-dgmo-clock-status-icon", "").attr("cx", cardLeft + padX + iconR).attr("cy", line2Y - 3.5).attr("r", iconR).attr("fill", statusColor(status.cls));
133
+ }
134
+ const l2 = g.append("text").attr("x", cardLeft + padX + line2Icon).attr("y", line2Y).attr("font-family", FONT_FAMILY).attr("font-size", 10.5).attr("fill", muted);
135
+ let needSep = false;
136
+ if (showWeekday) {
137
+ l2.append("tspan").text(parts.weekday);
138
+ needSep = true;
139
+ }
140
+ if (status) {
141
+ if (needSep) l2.append("tspan").text(" \xB7 ");
142
+ l2.append("tspan").attr("data-dgmo-clock-status", "").attr(
143
+ "fill",
144
+ status.cls === "ok" ? sw.ok : status.cls === "soon" ? sw.soon : sw.off
145
+ ).text(status.text);
146
+ }
147
+ }
148
+ }
149
+
150
+ // src/map/renderer.ts
27
151
  var LABEL_FONT = 11;
28
152
  function pointInRing(px, py, ring) {
29
153
  let inside = false;
@@ -586,6 +710,19 @@ function renderMap(container, resolved, data, palette, isDark, onClickItem, expo
586
710
  );
587
711
  }
588
712
  }
713
+ if (resolved.pois.some((p) => p.tz !== void 0)) {
714
+ const gCards = svg.append("g").attr("class", "dgmo-map-clock-cards");
715
+ renderClockCards(
716
+ gCards,
717
+ layout.pois,
718
+ resolved,
719
+ palette,
720
+ isDark,
721
+ Date.now(),
722
+ width,
723
+ height
724
+ );
725
+ }
589
726
  if (layout.legend) {
590
727
  const legendY = (layout.title ? TITLE_Y + TITLE_FONT_SIZE : 0) + (layout.subtitle ? TITLE_FONT_SIZE : 0) + 8;
591
728
  const legendG = svg.append("g").attr("class", "dgmo-map-legend").attr("transform", `translate(0, ${legendY})`);
@@ -644,4 +781,4 @@ export {
644
781
  renderMap,
645
782
  renderMapForExport
646
783
  };
647
- //# sourceMappingURL=chunk-3LH5CLP4.js.map
784
+ //# sourceMappingURL=chunk-BKVOYV6I.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  renderIntegratedLegend
3
- } from "./chunk-HEVYAHLW.js";
3
+ } from "./chunk-AUIM2NVH.js";
4
4
  import {
5
5
  getMaxLegendReservedHeight
6
- } from "./chunk-7UEMZREK.js";
6
+ } from "./chunk-YAA6IID3.js";
7
7
  import {
8
8
  TITLE_FONT_SIZE,
9
9
  TITLE_FONT_WEIGHT,
@@ -14,20 +14,21 @@ import {
14
14
  } from "./chunk-6KFWC4CO.js";
15
15
  import {
16
16
  LEGEND_GROUP_GAP
17
- } from "./chunk-HQCHYB5F.js";
17
+ } from "./chunk-QOOUC2J5.js";
18
18
  import {
19
19
  measureText
20
- } from "./chunk-5LWQH6QV.js";
20
+ } from "./chunk-WCT3NYCV.js";
21
21
  import {
22
22
  isBlockNode
23
- } from "./chunk-NNAAJVBU.js";
23
+ } from "./chunk-NR5HCAUD.js";
24
24
  import {
25
- mix
26
- } from "./chunk-P6T66CCZ.js";
25
+ mix,
26
+ themeBaseBg
27
+ } from "./chunk-WBM7ZNDI.js";
27
28
  import {
28
29
  resolveTagColor,
29
30
  tagAttrKey
30
- } from "./chunk-FJUNPCYI.js";
31
+ } from "./chunk-HHKO6SKY.js";
31
32
 
32
33
  // src/block/renderer.ts
33
34
  import * as d3Selection from "d3-selection";
@@ -223,7 +224,8 @@ function renderBlock(container, parsed, palette, isDark, exportDims, options = {
223
224
  activeGroup,
224
225
  activeKey: activeGroup ? tagAttrKey(activeGroup) : null,
225
226
  neutral,
226
- solidFill: opts.solidFill,
227
+ fillMode: opts.fillMode,
228
+ isDark,
227
229
  onToggle: options.onToggle
228
230
  });
229
231
  if (legend) {
@@ -262,7 +264,7 @@ function clipLabel(s, maxWidth, fs) {
262
264
  }
263
265
  var clipCounter = 0;
264
266
  function drawItems(g, items, ctx, path = []) {
265
- const { palette, solidFill: solid } = ctx;
267
+ const { palette, fillMode } = ctx;
266
268
  for (const it of items) {
267
269
  if (it.type === "empty") {
268
270
  g.append("rect").attr("x", it.x).attr("y", it.y).attr("width", it.w).attr("height", it.h).attr("rx", 7).attr("fill", "none").attr("stroke", ctx.neutral).attr("stroke-width", 1).attr("stroke-dasharray", "3 4").attr("opacity", 0.7);
@@ -280,17 +282,17 @@ function drawItems(g, items, ctx, path = []) {
280
282
  if (v) cell.attr(`data-tag-${ctx.activeKey}`, v);
281
283
  }
282
284
  if (it.type === "collapsed") {
283
- const fill2 = color ? solid ? color : mix(color, palette.bg, 12) : palette.surface;
285
+ const fill2 = color ? fillMode === "solid" ? color : fillMode === "outline" ? themeBaseBg(palette, ctx.isDark) : mix(color, palette.bg, 12) : palette.surface;
284
286
  const cid = `dgmo-block-clip-${clipCounter++}`;
285
287
  cell.append("clipPath").attr("id", cid).append("rect").attr("x", it.x).attr("y", it.y).attr("width", it.w).attr("height", it.h).attr("rx", 10);
286
288
  cell.append("rect").attr("x", it.x).attr("y", it.y).attr("width", it.w).attr("height", it.h).attr("rx", 10).attr("fill", fill2).attr("stroke", stroke).attr("stroke-width", 1.5);
287
289
  cell.append("text").attr("x", it.x + it.w / 2).attr("y", it.y + it.h / 2 + 4).attr("text-anchor", "middle").attr("font-size", 12.5).attr("font-weight", 700).attr("fill", palette.text).text(clipLabel(it.label ?? "", it.w - 24, 12.5));
288
- cell.append("rect").attr("x", it.x).attr("y", it.y + it.h - BLOCK_BAR_H).attr("width", it.w).attr("height", BLOCK_BAR_H).attr("fill", solid && color ? palette.text : stroke).attr("clip-path", `url(#${cid})`);
290
+ cell.append("rect").attr("x", it.x).attr("y", it.y + it.h - BLOCK_BAR_H).attr("width", it.w).attr("height", BLOCK_BAR_H).attr("fill", fillMode === "solid" && color ? palette.text : stroke).attr("clip-path", `url(#${cid})`);
289
291
  bindToggle(cell, it, ctx, it.h);
290
292
  continue;
291
293
  }
292
294
  if (it.type === "container") {
293
- const fill2 = color ? solid ? color : mix(color, palette.bg, 7) : palette.surface;
295
+ const fill2 = color ? fillMode === "solid" ? color : fillMode === "outline" ? themeBaseBg(palette, ctx.isDark) : mix(color, palette.bg, 7) : palette.surface;
294
296
  cell.append("rect").attr("x", it.x).attr("y", it.y).attr("width", it.w).attr("height", it.h).attr("rx", 10).attr("fill", fill2).attr("stroke", stroke).attr("stroke-width", 1.5);
295
297
  const sizeMetric = Math.min(it.w, it.h * 2.5);
296
298
  const headerFs = Math.max(
@@ -305,7 +307,7 @@ function drawItems(g, items, ctx, path = []) {
305
307
  if (it.inner) drawItems(g, it.inner, ctx, itemPath);
306
308
  continue;
307
309
  }
308
- const fill = color ? solid ? mix(color, palette.bg, 80) : mix(color, palette.bg, 14) : palette.bg;
310
+ const fill = color ? fillMode === "solid" ? mix(color, palette.bg, 80) : fillMode === "outline" ? themeBaseBg(palette, ctx.isDark) : mix(color, palette.bg, 14) : palette.bg;
309
311
  cell.attr("data-leaf", "true");
310
312
  cell.append("rect").attr("x", it.x).attr("y", it.y).attr("width", it.w).attr("height", it.h).attr("rx", 8).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", 1.25);
311
313
  cell.append("text").attr("x", it.x + it.w / 2).attr("y", it.y + it.h / 2 + 5).attr("text-anchor", "middle").attr("font-size", 13).attr("font-weight", 600).attr("fill", palette.text).text(clipLabel(it.label ?? "", it.w - 16, 13));
@@ -359,4 +361,4 @@ export {
359
361
  renderBlock,
360
362
  authoredCollapsedIds
361
363
  };
362
- //# sourceMappingURL=chunk-RZ6YKEUJ.js.map
364
+ //# sourceMappingURL=chunk-BPIZNB5O.js.map