@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
@@ -1,10 +1,12 @@
1
+ import {
2
+ formatOffsetLabel,
3
+ parseFixedOffset,
4
+ zoneParts
5
+ } from "./chunk-APKUAJ2L.js";
1
6
  import {
2
7
  extractColor,
3
8
  parseFirstLine
4
- } from "./chunk-OTAL43EH.js";
5
- import {
6
- resolveColor
7
- } from "./chunk-TLVIHFRO.js";
9
+ } from "./chunk-LV4BETUU.js";
8
10
  import {
9
11
  makeDgmoError,
10
12
  makeFail
@@ -145,6 +147,180 @@ function coordsFor(zone) {
145
147
  return ZONE_COORDS[zone] ?? null;
146
148
  }
147
149
 
150
+ // src/clock/gazetteer.ts
151
+ function normalizePlace(name) {
152
+ return name.normalize("NFD").replace(/[̀-ͯ]/g, "").toLowerCase().replace(/[.]/g, "").replace(/\s+/g, " ").trim();
153
+ }
154
+ function zoneCity(zone) {
155
+ const seg = zone.split("/").pop() ?? zone;
156
+ return seg.replace(/_/g, " ");
157
+ }
158
+ var ALIAS_SEED = [
159
+ // North America — abbreviations + metros not named by their zone segment
160
+ ["NYC", "America/New_York"],
161
+ ["New York City", "America/New_York"],
162
+ ["Boston", "America/New_York"],
163
+ ["Washington", "America/New_York"],
164
+ ["Washington DC", "America/New_York"],
165
+ ["DC", "America/New_York"],
166
+ ["Philadelphia", "America/New_York"],
167
+ ["Miami", "America/New_York"],
168
+ ["Atlanta", "America/New_York"],
169
+ ["LA", "America/Los_Angeles"],
170
+ ["Los Angeles", "America/Los_Angeles"],
171
+ ["San Francisco", "America/Los_Angeles"],
172
+ ["SF", "America/Los_Angeles"],
173
+ ["Seattle", "America/Los_Angeles"],
174
+ ["Portland", "America/Los_Angeles"],
175
+ ["San Diego", "America/Los_Angeles"],
176
+ ["Las Vegas", "America/Los_Angeles"],
177
+ ["Dallas", "America/Chicago"],
178
+ ["Houston", "America/Chicago"],
179
+ ["Austin", "America/Chicago"],
180
+ ["Chicago", "America/Chicago"],
181
+ ["Minneapolis", "America/Chicago"],
182
+ ["Denver", "America/Denver"],
183
+ ["Salt Lake City", "America/Denver"],
184
+ ["London, ON", "America/Toronto"],
185
+ ["Ottawa", "America/Toronto"],
186
+ ["Montreal", "America/Toronto"],
187
+ ["Honolulu", "Pacific/Honolulu"],
188
+ ["Hawaii", "Pacific/Honolulu"],
189
+ // Genuinely ambiguous: San Jose CA (Pacific) vs San José, Costa Rica.
190
+ ["San Jose", "America/Los_Angeles"],
191
+ ["San Jose", "America/Costa_Rica"],
192
+ // Europe
193
+ ["Kiev", "Europe/Kyiv"],
194
+ ["Kyiv", "Europe/Kyiv"],
195
+ ["Frankfurt", "Europe/Berlin"],
196
+ ["Munich", "Europe/Berlin"],
197
+ ["Hamburg", "Europe/Berlin"],
198
+ ["Milan", "Europe/Rome"],
199
+ ["Barcelona", "Europe/Madrid"],
200
+ ["Geneva", "Europe/Zurich"],
201
+ ["Saint Petersburg", "Europe/Moscow"],
202
+ ["St Petersburg", "Europe/Moscow"],
203
+ // Middle East / Asia — historic + colloquial names
204
+ ["Bombay", "Asia/Kolkata"],
205
+ ["Mumbai", "Asia/Kolkata"],
206
+ ["Delhi", "Asia/Kolkata"],
207
+ ["New Delhi", "Asia/Kolkata"],
208
+ ["Bangalore", "Asia/Kolkata"],
209
+ ["Bengaluru", "Asia/Kolkata"],
210
+ ["Chennai", "Asia/Kolkata"],
211
+ ["Madras", "Asia/Kolkata"],
212
+ ["Calcutta", "Asia/Kolkata"],
213
+ ["Hyderabad", "Asia/Kolkata"],
214
+ ["Saigon", "Asia/Ho_Chi_Minh"],
215
+ ["Ho Chi Minh City", "Asia/Ho_Chi_Minh"],
216
+ ["Beijing", "Asia/Shanghai"],
217
+ ["Peking", "Asia/Shanghai"],
218
+ ["Shenzhen", "Asia/Shanghai"],
219
+ ["Guangzhou", "Asia/Shanghai"],
220
+ ["Abu Dhabi", "Asia/Dubai"],
221
+ ["Tel Aviv", "Asia/Jerusalem"],
222
+ ["Osaka", "Asia/Tokyo"],
223
+ ["Kyoto", "Asia/Tokyo"],
224
+ // Oceania
225
+ ["Auckland", "Pacific/Auckland"],
226
+ ["Wellington", "Pacific/Auckland"]
227
+ ];
228
+ var NAME_INDEX = /* @__PURE__ */ new Map();
229
+ var CITY_LABEL = /* @__PURE__ */ new Map();
230
+ var ALL_ENTRIES = [];
231
+ function register(city, zone) {
232
+ const key = normalizePlace(city);
233
+ if (!key) return;
234
+ let set = NAME_INDEX.get(key);
235
+ if (!set) {
236
+ set = /* @__PURE__ */ new Set();
237
+ NAME_INDEX.set(key, set);
238
+ CITY_LABEL.set(key, city);
239
+ }
240
+ if (!set.has(zone)) {
241
+ set.add(zone);
242
+ ALL_ENTRIES.push({ city, zone });
243
+ }
244
+ }
245
+ for (const zone of Object.keys(ZONE_COORDS)) {
246
+ if (zone === "UTC") continue;
247
+ register(zoneCity(zone), zone);
248
+ }
249
+ for (const [name, zone] of ALIAS_SEED) register(name, zone);
250
+ function editDistance(a, b, max) {
251
+ if (Math.abs(a.length - b.length) > max) return max + 1;
252
+ let prev = Array.from({ length: b.length + 1 }, (_, i) => i);
253
+ for (let i = 1; i <= a.length; i++) {
254
+ const curr = [i];
255
+ let rowMin = i;
256
+ for (let j = 1; j <= b.length; j++) {
257
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
258
+ const v = Math.min(prev[j] + 1, curr[j - 1] + 1, prev[j - 1] + cost);
259
+ curr[j] = v;
260
+ if (v < rowMin) rowMin = v;
261
+ }
262
+ if (rowMin > max) return max + 1;
263
+ prev = curr;
264
+ }
265
+ return prev[b.length];
266
+ }
267
+ function didYouMean(key) {
268
+ let best = null;
269
+ let bestD = 3;
270
+ for (const [name, label] of CITY_LABEL) {
271
+ const d = editDistance(key, name, 2);
272
+ if (d < bestD) {
273
+ bestD = d;
274
+ best = label;
275
+ }
276
+ }
277
+ return best;
278
+ }
279
+ function resolvePlace(name) {
280
+ const key = normalizePlace(name);
281
+ const set = NAME_INDEX.get(key);
282
+ if (set?.size === 1) {
283
+ const zone = [...set][0];
284
+ return { kind: "ok", zone, city: zoneCity(zone) };
285
+ }
286
+ if (set && set.size > 1) {
287
+ const candidates = [...set].map((zone) => ({ city: zoneCity(zone), zone }));
288
+ return { kind: "ambiguous", candidates };
289
+ }
290
+ return { kind: "unknown", suggestion: didYouMean(key) };
291
+ }
292
+ function searchZones(query, nowMs, limit = 8) {
293
+ const q = normalizePlace(query);
294
+ if (!q) return [];
295
+ const seen = /* @__PURE__ */ new Set();
296
+ const scored = [];
297
+ const consider = (city, zone, haystack) => {
298
+ const dedup = `${normalizePlace(city)}|${zone}`;
299
+ if (seen.has(dedup)) return;
300
+ let score;
301
+ if (haystack === q) score = 0;
302
+ else if (haystack.startsWith(q)) score = 1;
303
+ else if (haystack.includes(q)) score = 2;
304
+ else return;
305
+ seen.add(dedup);
306
+ scored.push({ city, zone, score });
307
+ };
308
+ for (const e of ALL_ENTRIES) {
309
+ consider(e.city, e.zone, normalizePlace(e.city));
310
+ }
311
+ if (q.includes("/") || q.length >= 3) {
312
+ for (const e of ALL_ENTRIES) {
313
+ consider(e.city, e.zone, e.zone.toLowerCase());
314
+ }
315
+ }
316
+ scored.sort((a, b) => a.score - b.score || a.city.localeCompare(b.city));
317
+ return scored.slice(0, limit).map(({ city, zone }) => ({
318
+ city,
319
+ zone,
320
+ offsetLabel: zoneParts(zone, nowMs).offsetLabel || formatOffsetLabel(0)
321
+ }));
322
+ }
323
+
148
324
  // src/clock/parser.ts
149
325
  var DIRECTIVES = /* @__PURE__ */ new Set([
150
326
  "analog",
@@ -186,9 +362,6 @@ function isValidZone(zone) {
186
362
  return false;
187
363
  }
188
364
  }
189
- function looksLikeZone(token) {
190
- return token.includes("/") || token === "UTC" || coordsFor(token) !== null;
191
- }
192
365
  function defaultWorkDays() {
193
366
  return { Mon: true, Tue: true, Wed: true, Thu: true, Fri: true };
194
367
  }
@@ -218,7 +391,7 @@ function parseDays(rest) {
218
391
  }
219
392
  return any ? days : null;
220
393
  }
221
- function zoneCity(zone) {
394
+ function zoneCity2(zone) {
222
395
  const seg = zone.split("/").pop() ?? zone;
223
396
  return seg.replace(/_/g, " ");
224
397
  }
@@ -343,50 +516,102 @@ function parseClock(content, palette) {
343
516
  }
344
517
  continue;
345
518
  }
346
- const zoneIdx = tokens.findIndex((t) => looksLikeZone(t));
347
- if (zoneIdx < 0) {
348
- warn(
349
- lineNum,
350
- `No time zone found in "${trimmed}" \u2014 expected an IANA zone like America/New_York.`
351
- );
352
- continue;
353
- }
354
- const zone = tokens[zoneIdx];
355
- const placeTokens = tokens.slice(0, zoneIdx);
519
+ const asIdx = tokens.findIndex((t) => t.toLowerCase() === "as");
520
+ let anchor;
356
521
  let label = null;
357
522
  let color;
358
- const afterZone = tokens.slice(zoneIdx + 1);
359
- const asIdx = afterZone.findIndex((t) => t.toLowerCase() === "as");
360
523
  if (asIdx >= 0) {
524
+ anchor = tokens.slice(0, asIdx).join(" ").trim();
361
525
  const ex = extractColor(
362
- afterZone.slice(asIdx + 1).join(" ").trim(),
526
+ tokens.slice(asIdx + 1).join(" ").trim(),
363
527
  palette,
364
528
  void 0,
365
529
  lineNum
366
530
  );
367
531
  if (ex.label) label = ex.label;
368
532
  color = ex.color;
369
- } else if (palette && afterZone.length === 1) {
370
- color = resolveColor(afterZone[0], palette) ?? void 0;
533
+ } else {
534
+ const ex = extractColor(
535
+ tokens.join(" ").trim(),
536
+ palette,
537
+ void 0,
538
+ lineNum
539
+ );
540
+ anchor = ex.label.trim();
541
+ color = ex.color;
371
542
  }
372
- const place = placeTokens.join(" ").trim() || zoneCity(zone);
373
- if (!isValidZone(zone)) {
543
+ if (!anchor) {
374
544
  warn(
375
545
  lineNum,
376
- `Unknown time zone "${zone}" \u2014 row skipped (use an IANA zone like America/New_York).`
546
+ `Empty zone on "${trimmed}" \u2014 expected a city, IANA zone, or UTC offset.`
377
547
  );
378
548
  continue;
379
549
  }
380
- const coords = coordsFor(zone);
381
- entries.push({
382
- place,
383
- zone,
384
- label: label ?? place,
385
- lat: coords?.lat ?? null,
386
- lon: coords?.lon ?? null,
387
- color: color ?? null,
388
- lineNumber: lineNum
389
- });
550
+ let entry;
551
+ const fixedOffset = parseFixedOffset(anchor);
552
+ if (fixedOffset !== null) {
553
+ const offLabel = formatOffsetLabel(fixedOffset);
554
+ entry = {
555
+ kind: "fixed",
556
+ place: offLabel,
557
+ zone: offLabel,
558
+ fixedOffsetMin: fixedOffset,
559
+ label: label ?? offLabel,
560
+ lat: null,
561
+ lon: null,
562
+ color: color ?? null,
563
+ lineNumber: lineNum
564
+ };
565
+ } else if (anchor.includes("/")) {
566
+ if (!isValidZone(anchor)) {
567
+ warn(
568
+ lineNum,
569
+ `Unknown IANA zone "${anchor}" \u2014 row skipped (e.g. America/New_York). Or give a UTC offset like UTC-5.`
570
+ );
571
+ continue;
572
+ }
573
+ const coords = coordsFor(anchor);
574
+ const place = zoneCity2(anchor);
575
+ entry = {
576
+ kind: "iana",
577
+ place,
578
+ zone: anchor,
579
+ fixedOffsetMin: null,
580
+ label: label ?? place,
581
+ lat: coords?.lat ?? null,
582
+ lon: coords?.lon ?? null,
583
+ color: color ?? null,
584
+ lineNumber: lineNum
585
+ };
586
+ } else {
587
+ const res = resolvePlace(anchor);
588
+ if (res.kind === "ambiguous") {
589
+ const list = res.candidates.map((c) => c.zone).join(", ");
590
+ softError(
591
+ lineNum,
592
+ `"${anchor}" is ambiguous \u2014 did you mean ${list}? Use the IANA zone to disambiguate.`
593
+ );
594
+ continue;
595
+ }
596
+ if (res.kind === "unknown") {
597
+ const hint = res.suggestion ? ` Did you mean ${res.suggestion}?` : " Give a city, an IANA zone (America/New_York), or a UTC offset (UTC-5).";
598
+ warn(lineNum, `Unknown place "${anchor}" \u2014 row skipped.${hint}`);
599
+ continue;
600
+ }
601
+ const coords = coordsFor(res.zone);
602
+ entry = {
603
+ kind: "iana",
604
+ place: res.city,
605
+ zone: res.zone,
606
+ fixedOffsetMin: null,
607
+ label: label ?? res.city,
608
+ lat: coords?.lat ?? null,
609
+ lon: coords?.lon ?? null,
610
+ color: color ?? null,
611
+ lineNumber: lineNum
612
+ };
613
+ }
614
+ entries.push(entry);
390
615
  }
391
616
  if (!headerParsed) {
392
617
  return fail(0, 'Expected "clock [Title]" as the first line.');
@@ -408,13 +633,16 @@ function parseClock(content, palette) {
408
633
  if (entries.length === 0) {
409
634
  softError(
410
635
  result.titleLineNumber ?? 1,
411
- 'A clock needs at least one place row (e.g. "London Europe/London").'
636
+ 'A clock needs at least one zone row (e.g. "London as UK team").'
412
637
  );
413
638
  }
414
639
  return result;
415
640
  }
416
641
 
417
642
  export {
643
+ normalizePlace,
644
+ resolvePlace,
645
+ searchZones,
418
646
  parseClock
419
647
  };
420
- //# sourceMappingURL=chunk-3XPUDB7B.js.map
648
+ //# sourceMappingURL=chunk-6NFYEQDX.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  buildPlacedNotes
3
- } from "./chunk-O7WP4ZD4.js";
3
+ } from "./chunk-JED6ZDEE.js";
4
4
  import {
5
5
  noteCanvasShift
6
6
  } from "./chunk-6EK55ART.js";
7
7
  import {
8
8
  measureText
9
- } from "./chunk-5LWQH6QV.js";
9
+ } from "./chunk-WCT3NYCV.js";
10
10
  import {
11
11
  resolveNotes
12
12
  } from "./chunk-FMDSF3OV.js";
@@ -326,4 +326,4 @@ function layoutERDiagram(parsed, options) {
326
326
  export {
327
327
  layoutERDiagram
328
328
  };
329
- //# sourceMappingURL=chunk-4XK3FLFB.js.map
329
+ //# sourceMappingURL=chunk-6NYWYNBI.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildPlacedNotes
3
- } from "./chunk-O7WP4ZD4.js";
3
+ } from "./chunk-JED6ZDEE.js";
4
4
  import {
5
5
  noteCanvasShift
6
6
  } from "./chunk-6EK55ART.js";
@@ -8,7 +8,7 @@ import {
8
8
  measureText,
9
9
  truncateText,
10
10
  wrapTextToWidth
11
- } from "./chunk-5LWQH6QV.js";
11
+ } from "./chunk-WCT3NYCV.js";
12
12
  import {
13
13
  resolveNotes
14
14
  } from "./chunk-FMDSF3OV.js";
@@ -311,7 +311,7 @@ function computeNodeSize(node, reserveValueRow) {
311
311
  return { width: w, height: Math.max(NODE_HEIGHT, totalHeight) };
312
312
  }
313
313
  async function layoutBoxesAndLines(parsed, collapseInfo, layoutOptions) {
314
- const { layoutBoxesAndLinesSearch } = await import("./layout-search-QS44PI5R.js");
314
+ const { layoutBoxesAndLinesSearch } = await import("./layout-search-55FU6HD3.js");
315
315
  const searchOpts = {
316
316
  ...layoutOptions?.hideDescriptions !== void 0 && {
317
317
  hideDescriptions: layoutOptions.hideDescriptions
@@ -460,4 +460,4 @@ export {
460
460
  computeNodeSize,
461
461
  layoutBoxesAndLines
462
462
  };
463
- //# sourceMappingURL=chunk-TWQUYVP3.js.map
463
+ //# sourceMappingURL=chunk-7DF4J4RL.js.map
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  VARIANTS,
9
9
  allTasks
10
- } from "./chunk-PGEGPSCZ.js";
10
+ } from "./chunk-6MNGECP2.js";
11
11
  import {
12
12
  TITLE_FONT_SIZE,
13
13
  TITLE_FONT_WEIGHT,
@@ -20,7 +20,7 @@ import {
20
20
  measureText,
21
21
  truncateText,
22
22
  wrapTextToWidth
23
- } from "./chunk-5LWQH6QV.js";
23
+ } from "./chunk-WCT3NYCV.js";
24
24
  import {
25
25
  contrastText,
26
26
  mix,
@@ -747,4 +747,4 @@ export {
747
747
  renderRaci,
748
748
  renderRaciForExport
749
749
  };
750
- //# sourceMappingURL=chunk-H73FP42Q.js.map
750
+ //# sourceMappingURL=chunk-7DYOELRK.js.map
@@ -90,7 +90,6 @@ export {
90
90
  CONFIDENCE_TABLE,
91
91
  resolveConfidence,
92
92
  unitToDays,
93
- parseLocalISODate,
94
93
  formatLocalISODate,
95
94
  addCalendarDays,
96
95
  formatDuration,
@@ -98,4 +97,4 @@ export {
98
97
  formatSprintCell,
99
98
  formatSlackValue
100
99
  };
101
- //# sourceMappingURL=chunk-L3UHP6TD.js.map
100
+ //# sourceMappingURL=chunk-7L4UJOY6.js.map
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  renderCollapseBar,
7
7
  renderNodeCard
8
- } from "./chunk-AHGF2YYA.js";
8
+ } from "./chunk-OTOHI4JO.js";
9
9
  import {
10
10
  CARD_RADIUS,
11
11
  COLLAPSE_BAR_HEIGHT,
@@ -25,16 +25,16 @@ import {
25
25
  } from "./chunk-3CIOJ5YJ.js";
26
26
  import {
27
27
  layoutOrg
28
- } from "./chunk-IUMPEA64.js";
28
+ } from "./chunk-GROLTAWZ.js";
29
29
  import {
30
30
  ScaleContext
31
31
  } from "./chunk-YYVTBZZC.js";
32
32
  import {
33
33
  renderIntegratedLegend
34
- } from "./chunk-HEVYAHLW.js";
34
+ } from "./chunk-OU7HLO7I.js";
35
35
  import {
36
36
  getMaxLegendReservedHeight
37
- } from "./chunk-7UEMZREK.js";
37
+ } from "./chunk-YAA6IID3.js";
38
38
  import {
39
39
  TITLE_FONT_SIZE,
40
40
  TITLE_FONT_WEIGHT
@@ -49,13 +49,13 @@ import {
49
49
  LEGEND_EYE_SIZE,
50
50
  LEGEND_GROUP_GAP,
51
51
  LEGEND_HEIGHT
52
- } from "./chunk-HQCHYB5F.js";
52
+ } from "./chunk-QOOUC2J5.js";
53
53
  import {
54
54
  measureText
55
- } from "./chunk-5LWQH6QV.js";
55
+ } from "./chunk-WCT3NYCV.js";
56
56
  import {
57
57
  parseOrg
58
- } from "./chunk-OTQKUHRS.js";
58
+ } from "./chunk-RBHWPDBB.js";
59
59
  import {
60
60
  contrastText,
61
61
  mix,
@@ -65,7 +65,7 @@ import {
65
65
  import {
66
66
  resolveTagColor,
67
67
  tagAttrKey
68
- } from "./chunk-FJUNPCYI.js";
68
+ } from "./chunk-467TVMQL.js";
69
69
 
70
70
  // src/org/renderer.ts
71
71
  import * as d3Selection from "d3-selection";
@@ -484,4 +484,4 @@ export {
484
484
  renderOrg,
485
485
  renderOrgForExport
486
486
  };
487
- //# sourceMappingURL=chunk-QJP6PG7F.js.map
487
+ //# sourceMappingURL=chunk-AB7INMR5.js.map
@@ -5,7 +5,7 @@ import {
5
5
  splitNameAndMeta,
6
6
  tryParseSharedOption,
7
7
  warnUnknownMetaKeys
8
- } from "./chunk-OTAL43EH.js";
8
+ } from "./chunk-LV4BETUU.js";
9
9
  import {
10
10
  RECOGNIZED_COLOR_NAMES,
11
11
  resolveColor
@@ -165,4 +165,4 @@ function parseRing(content) {
165
165
  export {
166
166
  parseRing
167
167
  };
168
- //# sourceMappingURL=chunk-3LKM6FMW.js.map
168
+ //# sourceMappingURL=chunk-AE7II3E3.js.map