@diagrammo/dgmo 0.50.1 → 0.51.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 (235) hide show
  1. package/dist/advanced.d.ts +6640 -0
  2. package/dist/advanced.js +207 -161
  3. package/dist/{analyzer-UYKBXAKR.js → analyzer-BJ54GIFB.js} +3 -3
  4. package/dist/auto.css +31 -8
  5. package/dist/auto.d.ts +60 -0
  6. package/dist/auto.js +169 -133
  7. package/dist/auto.mjs +2245 -1030
  8. package/dist/block.css +28 -8
  9. package/dist/block.d.ts +130 -0
  10. package/dist/block.js +103 -68
  11. package/dist/{charts-d3-LR6D3D7A.js → charts-d3-7E4B4IMW.js} +9 -9
  12. package/dist/{chunk-6IAA2QQ2.js → chunk-2EQMXBBQ.js} +2 -2
  13. package/dist/{chunk-XJLKLU4D.js → chunk-2ILHQOL3.js} +3 -3
  14. package/dist/{chunk-SXRTRMEE.js → chunk-2UJSV2VT.js} +3 -3
  15. package/dist/{chunk-LE4MYMLI.js → chunk-32XPAAET.js} +5 -5
  16. package/dist/{chunk-NU3XLTGP.js → chunk-332ZR4QU.js} +4 -4
  17. package/dist/{chunk-F7BFXWNQ.js → chunk-3JLKYGBQ.js} +2 -2
  18. package/dist/{chunk-QROYX7TT.js → chunk-3LV2NCB6.js} +3 -3
  19. package/dist/{chunk-ZAD4HV2G.js → chunk-3ODS2VGL.js} +99 -99
  20. package/dist/{chunk-3XGZF2QJ.js → chunk-3YSQZ75W.js} +6 -6
  21. package/dist/{chunk-FJUNPCYI.js → chunk-467TVMQL.js} +2 -2
  22. package/dist/{chunk-HHXOONLX.js → chunk-4B5YISOR.js} +38 -1
  23. package/dist/{chunk-6HJBFVLO.js → chunk-4QZ43D7I.js} +3 -3
  24. package/dist/{chunk-4S52SK6G.js → chunk-4VWJ4LW2.js} +15 -8
  25. package/dist/chunk-4XFBQT5O.js +35 -0
  26. package/dist/{chunk-2C56LEML.js → chunk-5F5ELR3V.js} +3 -3
  27. package/dist/{chunk-EAMEADTV.js → chunk-5PDTIBLV.js} +83 -21
  28. package/dist/{chunk-C2CVAM3U.js → chunk-5PZT4DQG.js} +160 -87
  29. package/dist/{chunk-IAEC4KLA.js → chunk-5QKQSSPO.js} +2 -2
  30. package/dist/{chunk-5OWVC2A6.js → chunk-5SVOCD5W.js} +6 -6
  31. package/dist/{chunk-VBYSIOOY.js → chunk-5WPNFSXP.js} +3 -3
  32. package/dist/{chunk-4MJ7M6YL.js → chunk-5X6YQA2J.js} +7 -7
  33. package/dist/{chunk-JJUOHGX2.js → chunk-65WJYYKJ.js} +4 -4
  34. package/dist/{chunk-3UIKSPFB.js → chunk-6BQFET7X.js} +3 -3
  35. package/dist/{chunk-U2HGPLZS.js → chunk-6H7O2OPM.js} +14 -1
  36. package/dist/{chunk-DZXYF2F5.js → chunk-6K2M4VSR.js} +3 -3
  37. package/dist/{chunk-PGEGPSCZ.js → chunk-6MNGECP2.js} +2 -2
  38. package/dist/{chunk-3XPUDB7B.js → chunk-6NFYEQDX.js} +266 -38
  39. package/dist/{chunk-4XK3FLFB.js → chunk-6NYWYNBI.js} +3 -3
  40. package/dist/{chunk-TWQUYVP3.js → chunk-7DF4J4RL.js} +4 -4
  41. package/dist/{chunk-H73FP42Q.js → chunk-7DYOELRK.js} +3 -3
  42. package/dist/{chunk-L3UHP6TD.js → chunk-7L4UJOY6.js} +1 -2
  43. package/dist/{chunk-QJP6PG7F.js → chunk-AB7INMR5.js} +9 -9
  44. package/dist/{chunk-3LKM6FMW.js → chunk-AE7II3E3.js} +2 -2
  45. package/dist/{chunk-BTUTZMPT.js → chunk-AFIEPDLX.js} +97 -42
  46. package/dist/chunk-APKUAJ2L.js +220 -0
  47. package/dist/{chunk-X6EZPSW6.js → chunk-AXW3M6OQ.js} +7 -7
  48. package/dist/{chunk-66RUL3XF.js → chunk-B63YB7X3.js} +5 -5
  49. package/dist/{chunk-DSWVNQVS.js → chunk-BGP54HVR.js} +4 -59
  50. package/dist/{chunk-3NODSS6A.js → chunk-BYJBIALT.js} +7 -7
  51. package/dist/{chunk-3YPY3OXD.js → chunk-CC4YRBWV.js} +2 -2
  52. package/dist/{chunk-HLJVEAOF.js → chunk-DY7XLRHK.js} +8 -33
  53. package/dist/{chunk-OMNGQPEZ.js → chunk-E7Y3SYKW.js} +3 -3
  54. package/dist/{chunk-HTMN2Z6U.js → chunk-EDA6C7MV.js} +50 -7
  55. package/dist/{chunk-7L3R6I3U.js → chunk-ENRS56GC.js} +3 -3
  56. package/dist/{chunk-2KGXHFYK.js → chunk-EXOQP75F.js} +7 -7
  57. package/dist/{chunk-BBGDM4NQ.js → chunk-F3FYUFUH.js} +26 -8
  58. package/dist/{chunk-GL5UZ6NY.js → chunk-FC5I2KXV.js} +3 -3
  59. package/dist/{chunk-VVW3F3MD.js → chunk-FTBZV6NE.js} +9 -9
  60. package/dist/{chunk-7QKLIMRZ.js → chunk-G3PF3S7P.js} +41 -46
  61. package/dist/{chunk-J6K7RP6P.js → chunk-GD6L76WD.js} +3 -3
  62. package/dist/{chunk-I2WKW7C7.js → chunk-GGHRAITI.js} +3 -3
  63. package/dist/{chunk-YIA4LEX4.js → chunk-GNSFLJAA.js} +96 -4
  64. package/dist/{chunk-IUMPEA64.js → chunk-GROLTAWZ.js} +4 -4
  65. package/dist/{chunk-Q4V4XQWV.js → chunk-GTWKD3QT.js} +2 -2
  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-SCQ5VPUF.js → chunk-HFMYN6N2.js} +2 -2
  69. package/dist/{chunk-GKC3HILQ.js → chunk-I2QZFCS2.js} +27 -4
  70. package/dist/{chunk-MCZ5LBZD.js → chunk-IE477RQZ.js} +7 -7
  71. package/dist/{chunk-3Y2DRD7S.js → chunk-IEDMFNU7.js} +3 -3
  72. package/dist/{chunk-M5RXSRO2.js → chunk-IEWG6J7C.js} +4 -4
  73. package/dist/{chunk-P7CE7LXL.js → chunk-IUJODQKX.js} +6 -6
  74. package/dist/{chunk-NWED7CYO.js → chunk-IUO34HKW.js} +6 -6
  75. package/dist/{chunk-NX4EQS3U.js → chunk-J76PIKAT.js} +2 -2
  76. package/dist/{chunk-O7WP4ZD4.js → chunk-JED6ZDEE.js} +2 -2
  77. package/dist/{chunk-6BFZKBGD.js → chunk-JJXGQIRV.js} +2 -2
  78. package/dist/{chunk-O7NUCTFU.js → chunk-JM4LEPY3.js} +2 -2
  79. package/dist/{chunk-VDOOQZUD.js → chunk-JSSX2SX4.js} +4 -4
  80. package/dist/{chunk-SQLNBA64.js → chunk-KFNWFNAA.js} +3 -3
  81. package/dist/{chunk-VVZRV54S.js → chunk-KJGG2JKQ.js} +143 -82
  82. package/dist/{chunk-OTAL43EH.js → chunk-LV4BETUU.js} +8 -2
  83. package/dist/{chunk-VUJGMJE6.js → chunk-MVN25IF6.js} +4 -4
  84. package/dist/{chunk-CLD2OKV7.js → chunk-MX2EY5Y7.js} +2 -2
  85. package/dist/{chunk-Y4RNXEAO.js → chunk-ND76YJCN.js} +139 -25
  86. package/dist/{chunk-KFZYNWWO.js → chunk-NEQ6GJXB.js} +4 -4
  87. package/dist/{chunk-PFHVU7UA.js → chunk-NI3XQBPB.js} +2 -2
  88. package/dist/{chunk-WW32K72E.js → chunk-OJTXTQA2.js} +9 -9
  89. package/dist/{chunk-YNRDWYZP.js → chunk-OQKP2X3D.js} +170 -51
  90. package/dist/{chunk-AHGF2YYA.js → chunk-OTOHI4JO.js} +2 -2
  91. package/dist/{chunk-HEVYAHLW.js → chunk-OU7HLO7I.js} +4 -4
  92. package/dist/{chunk-GBE54KY6.js → chunk-OZPBJM5Q.js} +3 -3
  93. package/dist/{chunk-EOFPYPAU.js → chunk-P3NRSSUU.js} +51 -11
  94. package/dist/{chunk-TSA237IM.js → chunk-PZDBOK2Q.js} +2 -2
  95. package/dist/{chunk-3P2DKJCG.js → chunk-Q62FEYK3.js} +2 -2
  96. package/dist/{chunk-DFTFPYUD.js → chunk-QHI5XVUJ.js} +7 -7
  97. package/dist/{chunk-HQCHYB5F.js → chunk-QOOUC2J5.js} +2 -2
  98. package/dist/{chunk-XDXNDSKO.js → chunk-QZPEGJOM.js} +5 -2
  99. package/dist/{chunk-TN35C5KM.js → chunk-RAHVMKBG.js} +2 -2
  100. package/dist/chunk-RBDIYLA5.js +267 -0
  101. package/dist/{chunk-OTQKUHRS.js → chunk-RBHWPDBB.js} +3 -3
  102. package/dist/{chunk-BH3UYK36.js → chunk-RLFVAKEO.js} +3 -3
  103. package/dist/{chunk-3LH5CLP4.js → chunk-RXKTSFDL.js} +150 -5
  104. package/dist/{chunk-RZ6YKEUJ.js → chunk-TK2VQQX2.js} +6 -6
  105. package/dist/{chunk-I7F2A35O.js → chunk-TMACGPW5.js} +25 -47
  106. package/dist/{chunk-5GJYGP5Z.js → chunk-TRM2J7ZN.js} +8 -8
  107. package/dist/{chunk-BCYVE3N5.js → chunk-TYS6CSS5.js} +2 -2
  108. package/dist/{chunk-7PQYTZMA.js → chunk-U5SI5NIM.js} +95 -232
  109. package/dist/{chunk-KHEYDLMT.js → chunk-VB4UJ3H2.js} +2 -2
  110. package/dist/{chunk-HGN652MU.js → chunk-VL2O2F3W.js} +2 -2
  111. package/dist/{chunk-ONA5KPV3.js → chunk-VNSXLA6G.js} +4 -4
  112. package/dist/{chunk-CMCR5WBW.js → chunk-WBRZJOEC.js} +3 -3
  113. package/dist/{chunk-5LWQH6QV.js → chunk-WCT3NYCV.js} +1 -1
  114. package/dist/{chunk-T4VOVZT5.js → chunk-WJ7RW65H.js} +4 -4
  115. package/dist/{chunk-SCHXJTZL.js → chunk-WQLMU7VG.js} +2 -2
  116. package/dist/{chunk-C4GQDB5L.js → chunk-WRNFDFPU.js} +2 -2
  117. package/dist/{chunk-66NVRO4K.js → chunk-X7EC3L2H.js} +7 -7
  118. package/dist/{chunk-QXKWYZNR.js → chunk-XEQXCIBC.js} +3 -3
  119. package/dist/{chunk-C63UWAKM.js → chunk-Y2ZE3MSG.js} +2 -2
  120. package/dist/{chunk-FA6K3FWM.js → chunk-Y6GBQTBK.js} +6 -6
  121. package/dist/{chunk-7UEMZREK.js → chunk-YAA6IID3.js} +2 -2
  122. package/dist/{chunk-PZFVK3IH.js → chunk-YGJZWZTY.js} +2 -2
  123. package/dist/{chunk-7TV5Y53Y.js → chunk-ZJ3LS7DW.js} +3 -3
  124. package/dist/{chunk-PH5X4GIP.js → chunk-ZO27FGJS.js} +2 -2
  125. package/dist/cli.cjs +163 -147
  126. package/dist/clock.js +91 -5
  127. package/dist/countdown.js +208 -82
  128. package/dist/dgmo-router-Y2VEX46B.js +86 -0
  129. package/dist/dimensions-F7B5C4BJ.js +22 -0
  130. package/dist/editor.js +14 -1
  131. package/dist/element.d.ts +68 -0
  132. package/dist/element.js +170 -134
  133. package/dist/element.mjs +2209 -1015
  134. package/dist/{flowchart-parser-OE4WHLTF.js → flowchart-parser-MY53QWTZ.js} +4 -4
  135. package/dist/{flowchart-renderer-GPCSMTOR.js → flowchart-renderer-AQSMEMYF.js} +8 -8
  136. package/dist/highlight.js +14 -1
  137. package/dist/index.d.ts +185 -0
  138. package/dist/index.js +57 -53
  139. package/dist/{layout-7SKMFYHL.js → layout-46N4JJYK.js} +5 -5
  140. package/dist/layout-4DIUOX2T.js +14 -0
  141. package/dist/{layout-7H4H46CS.js → layout-7QXCNOVS.js} +3 -3
  142. package/dist/{layout-NXG63LWH.js → layout-AM2JWW3X.js} +4 -4
  143. package/dist/{layout-7MZ5NF2N.js → layout-CBCLPMSG.js} +5 -5
  144. package/dist/{layout-DC4TVXER.js → layout-EE6GE46Y.js} +5 -5
  145. package/dist/{layout-FGQWRYYW.js → layout-F4WO357A.js} +3 -3
  146. package/dist/layout-G23F7LDH.js +9 -0
  147. package/dist/{layout-QNUQLEHU.js → layout-HYZPWAK5.js} +3 -3
  148. package/dist/{layout-FWODLIMP.js → layout-JDJAEQ3P.js} +6 -6
  149. package/dist/layout-MUPRALE5.js +14 -0
  150. package/dist/{layout-34CLNICW.js → layout-OAC4PEAC.js} +5 -5
  151. package/dist/{layout-5BG6DFCU.js → layout-YVTNOTN4.js} +6 -6
  152. package/dist/{layout-PUQCB6AN.js → layout-ZDOSXL5G.js} +7 -7
  153. package/dist/{layout-search-QS44PI5R.js → layout-search-55FU6HD3.js} +6 -157
  154. package/dist/map-data/gazetteer.json +1 -1
  155. package/dist/{parser-36HVKU5U.js → parser-2Q2T4C3B.js} +6 -5
  156. package/dist/{parser-B5FVS7O6.js → parser-3A42DZ72.js} +3 -3
  157. package/dist/{parser-CSFUN3CT.js → parser-4RFTKAQX.js} +5 -4
  158. package/dist/{parser-IJBMRXMC.js → parser-57ILIFZ2.js} +5 -5
  159. package/dist/{parser-DFFEDKHH.js → parser-5A2UWU6B.js} +3 -3
  160. package/dist/{parser-H3XEPFPV.js → parser-5PDYJGWA.js} +4 -4
  161. package/dist/{parser-O4HIUN6G.js → parser-6BJEXUFX.js} +4 -4
  162. package/dist/{parser-MTOMTWTD.js → parser-6ZKABF5S.js} +6 -5
  163. package/dist/{parser-WAV5JRPT.js → parser-AIMHGJRR.js} +4 -4
  164. package/dist/{parser-TXND652E.js → parser-AZJ25OKK.js} +4 -4
  165. package/dist/{parser-4AI5ZN5F.js → parser-B77S5SZM.js} +3 -3
  166. package/dist/{parser-IBWNAPY4.js → parser-BEPSWJAD.js} +3 -3
  167. package/dist/{parser-D5VILGN2.js → parser-BKI42XBQ.js} +4 -4
  168. package/dist/{parser-LWKKBNSA.js → parser-C3D7MVXY.js} +3 -3
  169. package/dist/{parser-HYRTF3DO.js → parser-CDG7CHV5.js} +3 -3
  170. package/dist/{parser-CVMEDULU.js → parser-CZOJ7XQ6.js} +4 -4
  171. package/dist/{parser-AXKBDGNO.js → parser-E2RL6JYF.js} +5 -5
  172. package/dist/{parser-PSA4UBSP.js → parser-EH5VE7ZN.js} +4 -4
  173. package/dist/{parser-K3XXLMUW.js → parser-FQ6GZFMR.js} +4 -4
  174. package/dist/{parser-RV4M6AS2.js → parser-GKLZKEIK.js} +4 -4
  175. package/dist/{parser-MPCE5JBG.js → parser-H6ABKHZZ.js} +4 -4
  176. package/dist/{parser-RZPVAQVX.js → parser-I6GGFKOQ.js} +4 -3
  177. package/dist/{parser-W4PQUGX3.js → parser-JA7JQ7NF.js} +4 -4
  178. package/dist/{parser-5OXGPNBF.js → parser-KKTJ6M3Y.js} +5 -5
  179. package/dist/parser-OK22AC6Y.js +14 -0
  180. package/dist/{parser-4NO6VZ6S.js → parser-OK2ILHRT.js} +4 -4
  181. package/dist/{parser-YS7TOS2K.js → parser-OUTPNJWC.js} +3 -3
  182. package/dist/{parser-KCR2WS3V.js → parser-PORDUX5E.js} +4 -4
  183. package/dist/{parser-VKOJM7KS.js → parser-SRVFR7PM.js} +4 -4
  184. package/dist/{parser-TGQZJ5OT.js → parser-UKFFZCFJ.js} +4 -4
  185. package/dist/{parser-JJR52VAT.js → parser-UMWPLORP.js} +5 -5
  186. package/dist/{parser-AGVYTQXV.js → parser-Z4TZV2CB.js} +4 -4
  187. package/dist/{renderer-A5VE5BCI.js → renderer-2AUFT3E2.js} +8 -8
  188. package/dist/{renderer-FPE3J5VZ.js → renderer-2HTNBIF2.js} +11 -11
  189. package/dist/{renderer-R2WNIC2C.js → renderer-3K3IB7D5.js} +8 -8
  190. package/dist/{renderer-2AZ5HJFK.js → renderer-3YNIWF5I.js} +4 -4
  191. package/dist/{renderer-PJM35LJN.js → renderer-3YPZHMOU.js} +3 -3
  192. package/dist/{renderer-JCCHNECZ.js → renderer-4WR6WMVF.js} +9 -9
  193. package/dist/{renderer-HDCCZURL.js → renderer-66MERVQ2.js} +9 -9
  194. package/dist/{renderer-2QPMJ2DA.js → renderer-6RKQPNJI.js} +9 -9
  195. package/dist/{renderer-FYSVXL7M.js → renderer-ARMJBP6C.js} +11 -11
  196. package/dist/{renderer-6OKF44KS.js → renderer-CO2DW7S7.js} +13 -13
  197. package/dist/{renderer-BSR2O2H6.js → renderer-EDJ2O4S5.js} +13 -12
  198. package/dist/{renderer-CYB4LK3G.js → renderer-F7U3MFCV.js} +9 -9
  199. package/dist/{renderer-72LGR2YF.js → renderer-GD2COXVL.js} +4 -2
  200. package/dist/{renderer-B5TBNZJE.js → renderer-GQIESYEM.js} +8 -8
  201. package/dist/{renderer-ODUUOPVT.js → renderer-HCKJDFXD.js} +13 -13
  202. package/dist/{renderer-QAOBLRXV.js → renderer-HYGHO4SJ.js} +10 -10
  203. package/dist/{renderer-5DSEWF74.js → renderer-JC3RDUT7.js} +8 -8
  204. package/dist/{renderer-7RH2SI3B.js → renderer-KQB7UGDS.js} +3 -3
  205. package/dist/{renderer-45PSOL3E.js → renderer-NKJ24TEA.js} +5 -5
  206. package/dist/{renderer-AUW2BE6G.js → renderer-OYO67VZK.js} +9 -9
  207. package/dist/{renderer-DAXMXIKD.js → renderer-QIWVHWZO.js} +3 -3
  208. package/dist/{renderer-PSMMZCKH.js → renderer-QRWACQRI.js} +8 -8
  209. package/dist/{renderer-4ITCHBT7.js → renderer-QXGN5H3A.js} +5 -5
  210. package/dist/renderer-QXPP4TA2.js +27 -0
  211. package/dist/{renderer-KS7YZJE2.js → renderer-RGIYOTKJ.js} +10 -10
  212. package/dist/{renderer-FF24KZCI.js → renderer-RHT4MHFU.js} +8 -8
  213. package/dist/{renderer-PPIHO5FI.js → renderer-RYR3TJ46.js} +12 -11
  214. package/dist/{renderer-NGXZTRK6.js → renderer-SRKDNDFB.js} +8 -8
  215. package/dist/{renderer-SBS3YWU5.js → renderer-TGTUABCI.js} +8 -8
  216. package/dist/{renderer-7SD6MSBS.js → renderer-TXJFKPOG.js} +11 -11
  217. package/dist/{renderer-HVCU2C3Z.js → renderer-UV6MI64M.js} +3 -3
  218. package/dist/renderer-radial-FWABAZHB.js +21 -0
  219. package/dist/{resolver-FHBCO3PL.js → resolver-EMTGNR3D.js} +4 -3
  220. package/dist/{state-parser-3REXRK3R.js → state-parser-6T6CNMPX.js} +4 -4
  221. package/dist/{state-renderer-XYLNRWXR.js → state-renderer-AWZ3ECAX.js} +8 -8
  222. package/dist/themes-32xj5ZTW.d.ts +943 -0
  223. package/docs/language-reference.md +98 -10
  224. package/gallery/fixtures/clock.dgmo +3 -3
  225. package/gallery/fixtures/countdown-far.dgmo +2 -0
  226. package/gallery/fixtures/countdown-tz.dgmo +5 -0
  227. package/package.json +1 -1
  228. package/dist/dgmo-router-YTU3ENAX.js +0 -84
  229. package/dist/dimensions-OTBKC5M6.js +0 -22
  230. package/dist/layout-6RDJHS6E.js +0 -9
  231. package/dist/layout-J36454XU.js +0 -14
  232. package/dist/layout-LD6XTLD6.js +0 -14
  233. package/dist/parser-4WQQQXCG.js +0 -13
  234. package/dist/renderer-UYMQQCJK.js +0 -24
  235. package/dist/renderer-radial-F7X5F2VU.js +0 -21
@@ -8,14 +8,17 @@ import {
8
8
  import {
9
9
  DAY_MS,
10
10
  applyOrdinalTemplate,
11
+ dayStart,
11
12
  formatCompound,
12
13
  formatCount,
13
14
  formatDateShort,
14
15
  formatFooter,
15
16
  formatHuman,
16
17
  formatWordsDetail,
17
- ordinalFor
18
- } from "./chunk-YNRDWYZP.js";
18
+ ordinalFor,
19
+ sameDay,
20
+ splitClockSeconds
21
+ } from "./chunk-OQKP2X3D.js";
19
22
  import {
20
23
  FONT_FAMILY
21
24
  } from "./chunk-6KFWC4CO.js";
@@ -33,23 +36,24 @@ import * as d3Selection from "d3-selection";
33
36
  function bakedHero(parsed, now) {
34
37
  const resolved = parsed.resolvedMs;
35
38
  if (resolved === null) return "\u2014";
39
+ const tz = parsed.tz;
36
40
  const remaining = resolved - now;
37
41
  if (!parsed.rule && remaining <= 0) {
38
42
  if (parsed.expired !== null) return parsed.expired;
39
43
  const elapsed = -remaining;
40
44
  if (elapsed <= 0) return "Now!";
41
45
  if (parsed.units === "compound" || parsed.units === "human")
42
- return `${formatCompound(resolved, now)} ago`;
46
+ return `${formatCompound(resolved, now, 2, tz)} ago`;
43
47
  const bu = parsed.units === "full" || parsed.units === "clock" ? "days" : parsed.units;
44
48
  return `${formatCount(elapsed, { units: bu, round: parsed.round, fields: parsed.fields })} ago`;
45
49
  }
46
- if (parsed.rule && sameLocalDay(resolved, now))
50
+ if (parsed.rule && sameDay(resolved, now, tz))
47
51
  return parsed.onDay ?? "Today!";
48
52
  if (parsed.units === "human") {
49
- const [hn, ht] = parsed.hasTime ? [now, resolved] : [DAY_START(now), DAY_START(resolved)];
50
- return formatHuman(hn, ht).big;
53
+ const [hn, ht] = parsed.hasTime ? [now, resolved] : [dayStart(now, tz), dayStart(resolved, tz)];
54
+ return formatHuman(hn, ht, tz).big;
51
55
  }
52
- if (parsed.units === "compound") return formatCompound(now, resolved);
56
+ if (parsed.units === "compound") return formatCompound(now, resolved, 2, tz);
53
57
  const bakeUnits = parsed.units === "full" || parsed.units === "clock" ? "days" : parsed.units;
54
58
  return formatCount(Math.max(0, remaining), {
55
59
  units: bakeUnits,
@@ -57,11 +61,6 @@ function bakedHero(parsed, now) {
57
61
  fields: parsed.fields
58
62
  });
59
63
  }
60
- function sameLocalDay(a, b) {
61
- const x = new Date(a);
62
- const y = new Date(b);
63
- return x.getFullYear() === y.getFullYear() && x.getMonth() === y.getMonth() && x.getDate() === y.getDate();
64
- }
65
64
  function stampRecur(sel, parsed) {
66
65
  const r = parsed.rule;
67
66
  if (!r) return;
@@ -78,6 +77,7 @@ function stampRecur(sel, parsed) {
78
77
  if (r.intervalUnit !== void 0)
79
78
  sel.attr("data-dgmo-recur-interval-unit", r.intervalUnit);
80
79
  if (r.anchorMs !== void 0) sel.attr("data-dgmo-recur-anchor", r.anchorMs);
80
+ if (r.tz !== void 0) sel.attr("data-dgmo-recur-tz", r.tz);
81
81
  }
82
82
  var MON_ABBR = [
83
83
  "Jan",
@@ -150,7 +150,7 @@ function aLine(svg, x1, y1, x2, y2, stroke, sw, opacity) {
150
150
  const l = svg.append("line").attr("x1", x1).attr("y1", y1).attr("x2", x2).attr("y2", y2).attr("stroke", stroke).attr("stroke-width", sw);
151
151
  if (opacity != null) l.attr("opacity", opacity);
152
152
  }
153
- var REPEAT_ICON_PATH = "m17 2 4 4-4 4 M3 11v-1a4 4 0 0 1 4-4h14 m7 22-4-4 4-4 M21 13v1a4 4 0 0 1-4 4H3";
153
+ var REPEAT_ICON_PATH = "m17 2 4 4-4 4 M3 11v-1a4 4 0 0 1 4-4h14 M7 22l-4-4 4-4 M21 13v1a4 4 0 0 1-4 4H3";
154
154
  function recurGlyph(svg, cx, cy, r, color) {
155
155
  const side = r * 2.4;
156
156
  const scale = side / 24;
@@ -162,11 +162,12 @@ function recurGlyph(svg, cx, cy, r, color) {
162
162
  }
163
163
  function haloRect(svg, x, y, w, h, rx, C) {
164
164
  aRect(svg, x - 1, y - 1, w + 2, h + 2, rx + 1, "none", C.bg, 2);
165
- aRect(svg, x - 3, y - 3, w + 6, h + 6, rx + 3, "none", C.event, 2);
165
+ svg.append("rect").attr("class", "dgmo-countdown-target-ring").attr("x", x - 3).attr("y", y - 3).attr("width", w + 6).attr("height", h + 6).attr("rx", rx + 3).attr("fill", "none").attr("stroke", C.event).attr("stroke-width", 2);
166
166
  }
167
167
  function pickBand(nowMs, resolvedMs, hasTime) {
168
168
  const days = dayDelta(nowMs, resolvedMs);
169
169
  if (hasTime && days <= 0) return "clock";
170
+ if (days > 3 * 365) return "years";
170
171
  if (days > 365) return "year";
171
172
  if (days > 92) return "months";
172
173
  if (days > 18) return "monthgrid";
@@ -198,9 +199,31 @@ function monthGridLayout(nowMs, resolvedMs, contentW) {
198
199
  }
199
200
  return { months, dim };
200
201
  }
202
+ function yearsLayout(nowMs, resolvedMs) {
203
+ const y0 = new Date(nowMs).getFullYear();
204
+ const y1 = new Date(resolvedMs).getFullYear();
205
+ const d0 = Math.floor(y0 / 10) * 10;
206
+ const d1 = Math.floor(y1 / 10) * 10;
207
+ return { d0, d1, rows: (d1 - d0) / 10 + 1 };
208
+ }
201
209
  function bandHeightFor(kind, nowMs, resolvedMs, contentW) {
202
210
  const clamp = (v, lo, hi) => Math.max(lo, Math.min(hi, v));
203
211
  switch (kind) {
212
+ case "years": {
213
+ const { rows } = yearsLayout(nowMs, resolvedMs);
214
+ const rowGap = 11;
215
+ const labW = 54;
216
+ const gap = 7;
217
+ const cellW = (contentW - labW - 10 * gap) / 10;
218
+ let cellH = clamp(cellW * 0.5, 26, 40);
219
+ const MAX = 380;
220
+ let total = rows * cellH + (rows - 1) * rowGap;
221
+ if (total > MAX) {
222
+ cellH = Math.max(9, (MAX - (rows - 1) * rowGap) / rows);
223
+ total = rows * cellH + (rows - 1) * rowGap;
224
+ }
225
+ return total;
226
+ }
204
227
  case "year": {
205
228
  const R = new Date(resolvedMs).getFullYear() - new Date(nowMs).getFullYear() + 1;
206
229
  const yearW = 66;
@@ -239,6 +262,61 @@ function bandHeightFor(kind, nowMs, resolvedMs, contentW) {
239
262
  return clamp(contentW * 0.22, 125, 170);
240
263
  }
241
264
  }
265
+ function vizYears(svg, g, nowMs, resolvedMs, C) {
266
+ const now = new Date(nowMs);
267
+ const ev = new Date(resolvedMs);
268
+ const nowY = now.getFullYear();
269
+ const evY = ev.getFullYear();
270
+ const { d0, rows } = yearsLayout(nowMs, resolvedMs);
271
+ const labW = 54;
272
+ const gap = 7;
273
+ const rowGap = 11;
274
+ const rowH = (g.height - rowGap * (rows - 1)) / rows;
275
+ const cellH = rowH;
276
+ const cellW = (g.contentW - labW - 10 * gap) / 10;
277
+ const rx = Math.min(6, Math.min(cellW, cellH) * 0.22);
278
+ const showLabel = cellH >= 18 && cellW >= 22;
279
+ const yrFont = Math.min(12, cellW * 0.34, cellH * 0.5);
280
+ for (let r = 0; r < rows; r++) {
281
+ const dec = d0 + r * 10;
282
+ const ry = g.top + r * (rowH + rowGap);
283
+ aText(
284
+ svg,
285
+ g.left + labW - 12,
286
+ ry + rowH / 2,
287
+ Math.min(14, rowH * 0.5),
288
+ C.muted,
289
+ 800,
290
+ "end",
291
+ `${dec}s`,
292
+ { "dominant-baseline": "central" }
293
+ );
294
+ for (let i = 0; i < 10; i++) {
295
+ const yr = dec + i;
296
+ const before = yr < nowY;
297
+ const isNow = yr === nowY;
298
+ const isEv = yr === evY;
299
+ const between = yr > nowY && yr < evY;
300
+ const st = isEv ? roleStyle(C, "event") : isNow ? roleStyle(C, "today") : between ? gradStyle(C, (yr - nowY) / (evY - nowY)) : roleStyle(C, before ? "past" : "future");
301
+ const x = g.left + labW + i * (cellW + gap);
302
+ aRect(svg, x, ry, cellW, cellH, rx, st.fill, st.stroke, 1);
303
+ if (isEv) haloRect(svg, x, ry, cellW, cellH, rx, C);
304
+ if (showLabel) {
305
+ aText(
306
+ svg,
307
+ x + cellW / 2,
308
+ ry + cellH / 2,
309
+ yrFont,
310
+ st.text,
311
+ isNow || isEv ? 800 : 650,
312
+ "middle",
313
+ String(yr),
314
+ { "dominant-baseline": "central" }
315
+ );
316
+ }
317
+ }
318
+ }
319
+ }
242
320
  function vizYear(svg, g, nowMs, resolvedMs, C) {
243
321
  const now = new Date(nowMs);
244
322
  const ev = new Date(resolvedMs);
@@ -748,8 +826,17 @@ function vizClock(svg, g, nowMs, targetMs, C) {
748
826
  function pad2(n) {
749
827
  return n < 10 ? "0" + n : String(n);
750
828
  }
829
+ function paintClock(sel, str, secSize, secFill) {
830
+ const { lead, sec } = splitClockSeconds(str);
831
+ sel.attr("font-variant-numeric", "tabular-nums").attr("data-dgmo-cd-clock", "").attr("data-dgmo-cd-sec-size", secSize).attr("data-dgmo-cd-sec-fill", secFill).text(null);
832
+ sel.append("tspan").attr("data-cd-lead", "").text(lead);
833
+ if (sec !== null)
834
+ sel.append("tspan").attr("data-cd-sec", "").attr("font-size", secSize).attr("fill", secFill).attr("font-weight", 700).text(sec);
835
+ }
751
836
  function drawBand(svg, kind, g, nowMs, resolvedMs, C) {
752
837
  switch (kind) {
838
+ case "years":
839
+ return vizYears(svg, g, nowMs, resolvedMs, C);
753
840
  case "year":
754
841
  return vizYear(svg, g, nowMs, resolvedMs, C);
755
842
  case "months":
@@ -794,6 +881,18 @@ function renderCountdown(container, parsed, palette, isDark, exportDims) {
794
881
  const banked = resolveColor("green", palette) ?? muted;
795
882
  const faint = mix(palette.text, themeBaseBg(palette, isDark), 72);
796
883
  const svg = d3Selection.select(container).append("svg").attr("width", width).attr("preserveAspectRatio", "xMidYMid meet").attr("xmlns", "http://www.w3.org/2000/svg").attr("role", "img").attr("aria-label", `${parsed.title ?? "Countdown"}: ${hero}`).style("font-family", FONT_FAMILY);
884
+ svg.append("style").text(`
885
+ @keyframes dgmo-countdown-flash {
886
+ 0%, 100% { opacity: 1; stroke-width: 2; }
887
+ 50% { opacity: 0.45; stroke-width: 3; }
888
+ }
889
+ .dgmo-countdown-target-ring {
890
+ animation: dgmo-countdown-flash 1.8s ease-in-out infinite;
891
+ }
892
+ @media (prefers-reduced-motion: reduce) {
893
+ .dgmo-countdown-target-ring { animation: none; }
894
+ }
895
+ `);
797
896
  const bgRect = svg.append("rect").attr("width", width).attr("fill", palette.bg);
798
897
  const estWidth = (t, fs) => t.length * fs * 0.58;
799
898
  const fitFont = (t, base, maxW, min) => {
@@ -813,10 +912,12 @@ function renderCountdown(container, parsed, palette, isDark, exportDims) {
813
912
  fields: parsed.fields
814
913
  }) : hero;
815
914
  const heroMaxW = contentW * 0.44;
816
- const heroFont = fitFont(heroSizeStr, 96, heroMaxW, 26);
817
- const heroW = Math.min(heroMaxW, estWidth(heroSizeStr, heroFont));
915
+ const sizeStr = estWidth(hero, 1) > estWidth(heroSizeStr, 1) ? hero : heroSizeStr;
818
916
  const gapMid = Math.max(28, Math.round(width * 0.03));
819
- const leftW = Math.max(contentW * 0.42, contentW - heroW - gapMid);
917
+ const stacked = estWidth(sizeStr, 26) > heroMaxW;
918
+ const heroFont = fitFont(sizeStr, 96, stacked ? contentW : heroMaxW, 26);
919
+ const heroW = stacked ? contentW : Math.min(heroMaxW, estWidth(sizeStr, heroFont));
920
+ const leftW = stacked ? contentW : Math.max(contentW * 0.42, contentW - heroW - gapMid);
820
921
  const titleBase = 40;
821
922
  let titleFont = 0;
822
923
  let titleLines = [];
@@ -828,7 +929,7 @@ function renderCountdown(container, parsed, palette, isDark, exportDims) {
828
929
  }
829
930
  const eyebrowText = ordinal !== null ? applyOrdinalTemplate(parsed.sinceLabel ?? `Nth ${label}`, ordinal) : null;
830
931
  const eyebrowFont = 16;
831
- const footerText = resolved !== null ? formatFooter(resolved, parsed.hasTime) : null;
932
+ const footerText = resolved !== null ? formatFooter(resolved, parsed.hasTime, parsed.tz) : null;
832
933
  const footerFont = 17;
833
934
  const noteFont = 19;
834
935
  const asofFont = 13;
@@ -846,7 +947,7 @@ function renderCountdown(container, parsed, palette, isDark, exportDims) {
846
947
  });
847
948
  y += Math.round(titleFont * 0.45);
848
949
  const heroLeft = width - padX - heroW;
849
- const ruleRight = Math.max(leftX + 40, heroLeft - 20);
950
+ const ruleRight = stacked ? width - padX : Math.max(leftX + 40, heroLeft - 20);
850
951
  svg.append("line").attr("x1", leftX).attr("x2", ruleRight).attr("y1", y).attr("y2", y).attr("stroke", mix(palette.text, palette.bg, 14)).attr("stroke-width", 1.25);
851
952
  y += Math.round(titleFont * 0.5);
852
953
  }
@@ -894,8 +995,12 @@ function renderCountdown(container, parsed, palette, isDark, exportDims) {
894
995
  units: "clock",
895
996
  round: parsed.round,
896
997
  fields: parsed.fields
897
- }) : formatHuman(DAY_START(now), DAY_START(resolved)).sub || null : null;
898
- const heroCapTop = padY + 0.28 * titleFont;
998
+ }) : formatHuman(
999
+ dayStart(now, parsed.tz),
1000
+ dayStart(resolved, parsed.tz),
1001
+ parsed.tz
1002
+ ).sub || null : null;
1003
+ const heroCapTop = stacked ? leftBottom + Math.round(heroFont * 0.2) : padY + 0.28 * titleFont;
899
1004
  const heroBaseline = heroCapTop + 0.72 * heroFont;
900
1005
  const heroBlockBottom = heroBaseline + (subText ? heroFont * 0.28 + detailFont : 0);
901
1006
  const contentBottom = Math.max(leftBottom, heroBlockBottom);
@@ -910,6 +1015,7 @@ function renderCountdown(container, parsed, palette, isDark, exportDims) {
910
1015
  );
911
1016
  svg.attr("height", bannerH).attr("viewBox", `0 0 ${width} ${bannerH}`);
912
1017
  bgRect.attr("height", bannerH);
1018
+ const bandC = bandColors(palette, accent, muted, faint);
913
1019
  if (hasBand && resolved !== null) {
914
1020
  drawBand(
915
1021
  svg,
@@ -917,10 +1023,11 @@ function renderCountdown(container, parsed, palette, isDark, exportDims) {
917
1023
  { left: leftX, top: bandTop, contentW: width - 2 * padX, height: BAND_H },
918
1024
  now,
919
1025
  resolved,
920
- bandColors(palette, accent, muted, faint)
1026
+ bandC
921
1027
  );
922
1028
  }
923
- const value = svg.append("text").attr("class", "countdown-value").attr("x", width - padX).attr("y", heroBaseline).attr("text-anchor", "end").attr("dominant-baseline", "alphabetic").attr("fill", accent).attr("font-family", FONT_FAMILY).attr("font-size", heroFont).attr("font-weight", 800).attr("data-dgmo-countdown-units", parsed.units).attr("data-dgmo-countdown-round", parsed.round).attr("data-dgmo-countdown-fields", parsed.fields.join(",")).attr("data-dgmo-countdown-expired", parsed.expired).attr("aria-label", `${parsed.title ?? "Countdown"}: ${hero}`).text(hero);
1029
+ const value = svg.append("text").attr("class", "countdown-value").attr("x", stacked ? leftX : width - padX).attr("y", heroBaseline).attr("text-anchor", stacked ? "start" : "end").attr("dominant-baseline", "alphabetic").attr("fill", accent).attr("font-family", FONT_FAMILY).attr("font-size", heroFont).attr("font-weight", 800).attr("data-dgmo-countdown-units", parsed.units).attr("data-dgmo-countdown-round", parsed.round).attr("data-dgmo-countdown-fields", parsed.fields.join(",")).attr("data-dgmo-countdown-expired", parsed.expired).attr("aria-label", `${parsed.title ?? "Countdown"}: ${hero}`);
1030
+ paintClock(value, hero, Math.round(heroFont * 0.55), bandC.now);
924
1031
  if (parsed.rule && resolved !== null) {
925
1032
  value.attr("data-dgmo-countdown", new Date(resolved).toISOString());
926
1033
  } else if (parsed.target) {
@@ -929,6 +1036,7 @@ function renderCountdown(container, parsed, palette, isDark, exportDims) {
929
1036
  if (parsed.title) value.attr("data-dgmo-countdown-title", parsed.title);
930
1037
  if (parsed.onDay) value.attr("data-dgmo-countdown-onday", parsed.onDay);
931
1038
  if (parsed.hasTime) value.attr("data-dgmo-countdown-hastime", "1");
1039
+ if (parsed.tz) value.attr("data-dgmo-countdown-tz", parsed.tz);
932
1040
  if (parsed.since !== null) {
933
1041
  value.attr("data-dgmo-countdown-since", parsed.since);
934
1042
  value.attr(
@@ -938,7 +1046,13 @@ function renderCountdown(container, parsed, palette, isDark, exportDims) {
938
1046
  }
939
1047
  stampRecur(value, parsed);
940
1048
  if (subText) {
941
- svg.append("text").attr("x", width - padX).attr("y", heroBaseline + heroFont * 0.28 + detailFont).attr("text-anchor", "end").attr("dominant-baseline", "alphabetic").attr("fill", muted).attr("font-family", FONT_FAMILY).attr("font-size", detailFont).attr("font-weight", 500).attr("data-dgmo-countdown-detail", "").text(subText);
1049
+ const detailSel = svg.append("text").attr("x", stacked ? leftX : width - padX).attr("y", heroBaseline + heroFont * 0.28 + detailFont).attr("text-anchor", stacked ? "start" : "end").attr("dominant-baseline", "alphabetic").attr("fill", muted).attr("font-family", FONT_FAMILY).attr("font-size", detailFont).attr("font-weight", 500).attr("data-dgmo-countdown-detail", "");
1050
+ paintClock(
1051
+ detailSel,
1052
+ subText,
1053
+ Math.round(detailFont * 0.66),
1054
+ bandC.now
1055
+ );
942
1056
  }
943
1057
  }
944
1058
  function renderCountdownForExport(container, parsed, palette, isDark, exportDims) {
@@ -949,4 +1063,4 @@ export {
949
1063
  renderCountdown,
950
1064
  renderCountdownForExport
951
1065
  };
952
- //# sourceMappingURL=chunk-Y4RNXEAO.js.map
1066
+ //# sourceMappingURL=chunk-ND76YJCN.js.map
@@ -8,14 +8,14 @@ import {
8
8
  LEGEND_PILL_FONT_SIZE,
9
9
  LEGEND_PILL_PAD,
10
10
  measureLegendText
11
- } from "./chunk-HQCHYB5F.js";
11
+ } from "./chunk-QOOUC2J5.js";
12
12
  import {
13
13
  measureText,
14
14
  wrapTextToWidth
15
- } from "./chunk-5LWQH6QV.js";
15
+ } from "./chunk-WCT3NYCV.js";
16
16
  import {
17
17
  tagAttrKey
18
- } from "./chunk-FJUNPCYI.js";
18
+ } from "./chunk-467TVMQL.js";
19
19
 
20
20
  // src/c4/layout.ts
21
21
  import dagre from "@dagrejs/dagre";
@@ -1682,4 +1682,4 @@ export {
1682
1682
  layoutC4Components,
1683
1683
  layoutC4Deployment
1684
1684
  };
1685
- //# sourceMappingURL=chunk-KFZYNWWO.js.map
1685
+ //# sourceMappingURL=chunk-NEQ6GJXB.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  resolveTagColor,
6
6
  tagAttrKey
7
- } from "./chunk-FJUNPCYI.js";
7
+ } from "./chunk-467TVMQL.js";
8
8
  import {
9
9
  resolveColor
10
10
  } from "./chunk-TLVIHFRO.js";
@@ -164,4 +164,4 @@ export {
164
164
  formatPct,
165
165
  buildLegend
166
166
  };
167
- //# sourceMappingURL=chunk-PFHVU7UA.js.map
167
+ //# sourceMappingURL=chunk-NI3XQBPB.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-3HDBAXF5.js";
4
4
  import {
5
5
  renderNodeCard
6
- } from "./chunk-AHGF2YYA.js";
6
+ } from "./chunk-OTOHI4JO.js";
7
7
  import {
8
8
  CARD_RADIUS,
9
9
  COLLAPSE_BAR_HEIGHT,
@@ -25,10 +25,10 @@ import {
25
25
  } from "./chunk-YYVTBZZC.js";
26
26
  import {
27
27
  renderIntegratedLegend
28
- } from "./chunk-HEVYAHLW.js";
28
+ } from "./chunk-OU7HLO7I.js";
29
29
  import {
30
30
  getMaxLegendReservedHeight
31
- } from "./chunk-7UEMZREK.js";
31
+ } from "./chunk-YAA6IID3.js";
32
32
  import {
33
33
  TITLE_FONT_SIZE,
34
34
  TITLE_FONT_WEIGHT
@@ -43,10 +43,10 @@ import {
43
43
  LEGEND_EYE_SIZE,
44
44
  LEGEND_GROUP_GAP,
45
45
  LEGEND_HEIGHT
46
- } from "./chunk-HQCHYB5F.js";
46
+ } from "./chunk-QOOUC2J5.js";
47
47
  import {
48
48
  measureText
49
- } from "./chunk-5LWQH6QV.js";
49
+ } from "./chunk-WCT3NYCV.js";
50
50
  import {
51
51
  preprocessDescriptionLine
52
52
  } from "./chunk-IYULMRBE.js";
@@ -58,7 +58,7 @@ import {
58
58
  } from "./chunk-P6T66CCZ.js";
59
59
  import {
60
60
  tagAttrKey
61
- } from "./chunk-FJUNPCYI.js";
61
+ } from "./chunk-467TVMQL.js";
62
62
 
63
63
  // src/sitemap/renderer.ts
64
64
  import * as d3Selection from "d3-selection";
@@ -400,8 +400,8 @@ function renderLegend(parent, legendGroups, palette, isDark, activeTagGroup, fix
400
400
  }
401
401
  }
402
402
  async function renderSitemapForExport(content, theme, palette) {
403
- const { parseSitemap } = await import("./parser-D5VILGN2.js");
404
- const { layoutSitemap } = await import("./layout-LD6XTLD6.js");
403
+ const { parseSitemap } = await import("./parser-BKI42XBQ.js");
404
+ const { layoutSitemap } = await import("./layout-MUPRALE5.js");
405
405
  const { getPalette } = await import("./palettes-PRJ2RI6D.js");
406
406
  const isDark = theme === "dark";
407
407
  const effectivePalette = palette ?? (isDark ? getPalette("nord").dark : getPalette("nord").light);
@@ -451,4 +451,4 @@ export {
451
451
  renderSitemap,
452
452
  renderSitemapForExport
453
453
  };
454
- //# sourceMappingURL=chunk-WW32K72E.js.map
454
+ //# sourceMappingURL=chunk-OJTXTQA2.js.map