@panphora/clayjs 1.17.0 → 1.18.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 (467) hide show
  1. package/dist/all.js +1 -1
  2. package/dist/clay-dom.js +1 -1
  3. package/dist/clay-events.js +1 -1
  4. package/dist/clay-internals.js +1 -1
  5. package/dist/clay-options.js +1 -1
  6. package/dist/clay-router.js +1 -1
  7. package/dist/clay-ui.js +1 -1
  8. package/dist/clay-utils.js +1 -1
  9. package/dist/clay.js +1 -1
  10. package/dist/clay.standalone.js +72474 -62090
  11. package/dist/m/attrs/{save-freeze-MYNVXREN.js → save-freeze-LWGF6XUN.js} +1 -1
  12. package/dist/m/c-2GRUM77Q.js +30 -0
  13. package/dist/m/c-2KIEGNC4.js +1 -0
  14. package/dist/m/{c-AMSNPOCX.js → c-2KL3BD52.js} +1 -1
  15. package/dist/m/c-2ZZBC45O.js +1 -0
  16. package/dist/m/c-372N6H3B.js +1 -0
  17. package/dist/m/{c-4WKFKEKF.js → c-3G2DGZUP.js} +1 -1
  18. package/dist/m/c-3LDGIBMN.js +1 -0
  19. package/dist/m/c-3O7OBDCM.js +1 -0
  20. package/dist/m/c-4ASQPRQL.js +1 -0
  21. package/dist/m/c-4TXNLX4K.js +6 -0
  22. package/dist/m/c-4YU3BR4D.js +6 -0
  23. package/dist/m/c-5734MF2P.js +1 -0
  24. package/dist/m/c-57XDY6HC.js +1 -0
  25. package/dist/m/{c-KAU6E43D.js → c-5B4YBZXC.js} +1 -1
  26. package/dist/m/c-5ONTYIUI.js +1 -0
  27. package/dist/m/c-5OOVFCJM.js +1 -0
  28. package/dist/m/{c-3XIRD4NU.js → c-5T6NZHNM.js} +1 -1
  29. package/dist/m/{c-74MGYWZF.js → c-5ZQV7KC4.js} +1 -1
  30. package/dist/m/{c-7OLLJPWP.js → c-6DB2OLRJ.js} +1 -1
  31. package/dist/m/c-6DNRCPNM.js +1 -0
  32. package/dist/m/c-6UGWFMQC.js +2 -0
  33. package/dist/m/c-7K4SCQB7.js +1 -0
  34. package/dist/m/c-7MG5RU63.js +1 -0
  35. package/dist/m/c-7PRJCA3E.js +1 -0
  36. package/dist/m/c-A6L3FMUS.js +1 -0
  37. package/dist/m/c-AMU3BPPR.js +4 -0
  38. package/dist/m/{c-Y5HBBIQ4.js → c-AMYEFA2E.js} +1 -1
  39. package/dist/m/c-AQYCG7QW.js +1 -0
  40. package/dist/m/c-ATKAOH23.js +1 -0
  41. package/dist/m/c-B5CS55WR.js +1 -0
  42. package/dist/m/c-B5UJQT7W.js +1 -0
  43. package/dist/m/c-B7J4K2AE.js +3 -0
  44. package/dist/m/c-BHZYSHW4.js +1 -0
  45. package/dist/m/{c-VHM5XQHK.js → c-BIJALSRD.js} +1 -1
  46. package/dist/m/c-BJ7YQ5QZ.js +1 -0
  47. package/dist/m/{c-KIPQJX4B.js → c-BRLCTNMC.js} +1 -1
  48. package/dist/m/{c-VE6ZMYMC.js → c-BUAYFEV5.js} +1 -1
  49. package/dist/m/c-C6IPRG34.js +1 -0
  50. package/dist/m/{c-KU3ZFADW.js → c-CAS3NND4.js} +1 -1
  51. package/dist/m/{c-PS5ARVWR.js → c-CCQ25GFY.js} +1 -1
  52. package/dist/m/c-CJFDLD43.js +1 -0
  53. package/dist/m/c-COPTL5WB.js +1 -0
  54. package/dist/m/c-D3E4WJ4M.js +166 -0
  55. package/dist/m/c-D5IKEKXW.js +7 -0
  56. package/dist/m/c-DHBRA6DL.js +1 -0
  57. package/dist/m/c-DKLS74XB.js +72 -0
  58. package/dist/m/c-DVYGFTSK.js +3 -0
  59. package/dist/m/c-E3ZXARWA.js +1 -0
  60. package/dist/m/c-EK63G3CG.js +1 -0
  61. package/dist/m/c-ERQSNR6K.js +13 -0
  62. package/dist/m/c-EVYAISP3.js +1 -0
  63. package/dist/m/c-EXKHPOVC.js +3 -0
  64. package/dist/m/{c-QJ4OM3G6.js → c-FWKHM4E7.js} +1 -1
  65. package/dist/m/{c-4Q2XTQ2N.js → c-GBKB5WDL.js} +1 -1
  66. package/dist/m/c-GNDL3TKB.js +1 -0
  67. package/dist/m/c-GRWMD6O5.js +1 -0
  68. package/dist/m/c-GRXHHFPO.js +1 -0
  69. package/dist/m/c-HG2C77BM.js +4 -0
  70. package/dist/m/c-HHGJBU4D.js +1 -0
  71. package/dist/m/c-HMV6P4RX.js +1 -0
  72. package/dist/m/c-HMYWIHFG.js +1 -0
  73. package/dist/m/c-HT2DKBV2.js +1 -0
  74. package/dist/m/c-I2SCCUEW.js +1 -0
  75. package/dist/m/{c-TJ6WOJL3.js → c-ICJYHABF.js} +2 -2
  76. package/dist/m/c-IMZCWYHR.js +7 -0
  77. package/dist/m/c-IVMD3FEM.js +1 -0
  78. package/dist/m/{c-WDC5GVKU.js → c-IVTRVENZ.js} +1 -1
  79. package/dist/m/c-JKZJIUIP.js +1 -0
  80. package/dist/m/{c-UDUUJPFZ.js → c-JNLX3RJB.js} +1 -1
  81. package/dist/m/c-K3ADYNLU.js +1 -0
  82. package/dist/m/c-KGHVFRR3.js +1 -0
  83. package/dist/m/{c-5QWQ7A5L.js → c-KJJPV77R.js} +1 -1
  84. package/dist/m/{c-CZUSOB7V.js → c-KNPDOMDY.js} +1 -1
  85. package/dist/m/{c-EZU56NQV.js → c-KP64LT2A.js} +2 -2
  86. package/dist/m/c-KQ7E3PYY.js +1 -0
  87. package/dist/m/c-L3F5ZLIV.js +1 -0
  88. package/dist/m/{c-3RUU4TPX.js → c-L42OLXWM.js} +3 -2
  89. package/dist/m/c-L5VFATT6.js +1 -0
  90. package/dist/m/c-L7JL5TL3.js +3 -0
  91. package/dist/m/c-LKSL4AUJ.js +1 -0
  92. package/dist/m/c-M6FNQCTQ.js +1 -0
  93. package/dist/m/c-MCOOHCSG.js +1 -0
  94. package/dist/m/c-MHI3GYKF.js +1 -0
  95. package/dist/m/c-MWXFLW4J.js +1 -0
  96. package/dist/m/{c-5RJFTLSF.js → c-NEL7HQW3.js} +1 -1
  97. package/dist/m/{c-DCXOXBF3.js → c-NQJRVJ56.js} +1 -1
  98. package/dist/m/c-NWX3MFT4.js +1 -0
  99. package/dist/m/{c-HPURYVZS.js → c-OJYM642Q.js} +1 -1
  100. package/dist/m/c-OKXI52N7.js +1 -0
  101. package/dist/m/{c-R3L7ZJGB.js → c-OPLUZR3A.js} +1 -1
  102. package/dist/m/{c-GSFIGKOP.js → c-OTMKN2OO.js} +1 -1
  103. package/dist/m/{c-6NC5I2TV.js → c-OYRZ7XG2.js} +1 -1
  104. package/dist/m/{c-EVCQ3BKA.js → c-P3OFYUMA.js} +1 -1
  105. package/dist/m/c-PLN76GF3.js +6 -0
  106. package/dist/m/c-PLP4JKFC.js +1 -0
  107. package/dist/m/c-Q26MME6N.js +1 -0
  108. package/dist/m/{c-S7H2DRCB.js → c-Q3XOWZEV.js} +1 -1
  109. package/dist/m/{c-FRLHSY7E.js → c-QIKT6SKM.js} +1 -1
  110. package/dist/m/c-QIXT3Q7C.js +28 -0
  111. package/dist/m/c-QO4HNGCQ.js +1 -0
  112. package/dist/m/{c-JU3NK25H.js → c-R27DWQKX.js} +1 -1
  113. package/dist/m/{c-RSMOODDU.js → c-R2XUODVY.js} +1 -1
  114. package/dist/m/{c-QNKREOL6.js → c-R7LBFMF5.js} +1 -1
  115. package/dist/m/c-RND3G2S2.js +1 -0
  116. package/dist/m/{c-Q622NS2Y.js → c-S2U6NJU4.js} +1 -1
  117. package/dist/m/c-SPZPGD3R.js +1 -0
  118. package/dist/m/c-SW4YEG2D.js +8 -0
  119. package/dist/m/c-T637T7SN.js +1 -0
  120. package/dist/m/c-TJAXGIRV.js +1 -0
  121. package/dist/m/{c-RYUXUUBX.js → c-TNEM3RNM.js} +1 -1
  122. package/dist/m/c-TTB5EK4S.js +32 -0
  123. package/dist/m/c-U7SHNWDH.js +1 -0
  124. package/dist/m/c-UDHIVLYH.js +20 -0
  125. package/dist/m/{c-BBVGTQG7.js → c-UGNV5MFB.js} +1 -1
  126. package/dist/m/{c-QICP2YR5.js → c-UORXLSD3.js} +1 -1
  127. package/dist/m/c-UPD33ZPE.js +1 -0
  128. package/dist/m/c-URSMSFCB.js +1 -0
  129. package/dist/m/c-UY4QX42B.js +1 -0
  130. package/dist/m/c-V44KWI2L.js +4 -0
  131. package/dist/m/c-VILENZTD.js +1 -0
  132. package/dist/m/{c-HDDEEL77.js → c-VJYEVRYK.js} +1 -1
  133. package/dist/m/{c-SMBZG5X4.js → c-VR2BJ4AN.js} +1 -1
  134. package/dist/m/c-W4JCVLAB.js +1 -0
  135. package/dist/m/c-W6DQSHXI.js +135 -0
  136. package/dist/m/c-WBGWGOM7.js +1 -0
  137. package/dist/m/{c-4L3BTFRK.js → c-WCXLG3MV.js} +1 -1
  138. package/dist/m/c-WGW764WX.js +1 -0
  139. package/dist/m/c-WMRJKQ2V.js +5 -0
  140. package/dist/m/c-WNTYKCDG.js +1 -0
  141. package/dist/m/c-WQWIRWO3.js +72 -0
  142. package/dist/m/c-X5LNHET5.js +1 -0
  143. package/dist/m/{c-I2ZATQCD.js → c-X5TSXZYJ.js} +2 -2
  144. package/dist/m/c-XGH4GS2T.js +1 -0
  145. package/dist/m/c-Y6F2FORL.js +1 -0
  146. package/dist/m/c-YBKHUAK7.js +10 -0
  147. package/dist/m/c-YBSS55KU.js +20 -0
  148. package/dist/m/c-YCLU4UNT.js +2 -0
  149. package/dist/m/c-YVZ2L7CE.js +1 -0
  150. package/dist/m/c-ZK4GIZH2.js +1 -0
  151. package/dist/m/c-ZRXJD4G6.js +1 -0
  152. package/dist/m/c-ZWBI4HYK.js +1 -0
  153. package/dist/m/core/{admin-attrs-QHOKPJ7W.js → admin-attrs-YY7T5FGU.js} +1 -1
  154. package/dist/m/core/autosave-S6OMNDCK.js +1 -0
  155. package/dist/m/core/conflict-notice-IWHMHH43.js +1 -0
  156. package/dist/m/core/{host-permission-FNXVEFNE.js → host-permission-6EVJGNPL.js} +1 -1
  157. package/dist/m/core/is-edit-mode-GCX6767E.js +1 -0
  158. package/dist/m/core/{persist-JFYRHMRJ.js → persist-UKXV5KLA.js} +1 -1
  159. package/dist/m/core/recovery-DRFZRJED.js +1 -0
  160. package/dist/m/core/save-LYY7K6U7.js +1 -0
  161. package/dist/m/core/save-core-MKRPSEEO.js +1 -0
  162. package/dist/m/core/snapshot-NU3YM6GR.js +1 -0
  163. package/dist/m/core/unsaved-warning-7QTKEN7Z.js +1 -0
  164. package/dist/m/internals/{index-PVXGPUDA.js → index-TGLQINN3.js} +1 -1
  165. package/dist/m/loader-3BBNZZGM.js +1 -0
  166. package/dist/m/manifest-F449FF98.js +1 -0
  167. package/dist/m/manifest-edit-4396A009.js +1 -0
  168. package/dist/m/manifest.json +2111 -1573
  169. package/dist/m/page/{editor-NNJA4OKD.js → editor-6LRB3GE4.js} +123 -21
  170. package/dist/m/plugins/ai-edit-UTV7YO2I.js +6 -0
  171. package/dist/m/plugins/{cms-HP3LSTPN.js → cms-LRAOZHT7.js} +9 -9
  172. package/dist/m/plugins/{demo-RM5IR6AO.js → demo-OYO5GCAO.js} +1 -1
  173. package/dist/m/plugins/{derive-UAAA4V4S.js → derive-FRE5JJQE.js} +1 -1
  174. package/dist/m/plugins/indicator-4VDXWYTD.js +1 -0
  175. package/dist/m/plugins/live-AD4H6XSL.js +1 -0
  176. package/dist/m/plugins/menu-M5WW7DBF.js +1 -0
  177. package/dist/m/plugins/page-MD3T2ZX3.js +2 -0
  178. package/dist/m/plugins/page-view-PAWVZNFY.js +1 -0
  179. package/dist/m/plugins/{people-SGPJKANK.js → people-JCHVPF7P.js} +1 -1
  180. package/dist/m/plugins/quickcrop-BQ5YYFCH.js +26 -0
  181. package/dist/m/plugins/{richclay-NRQDSWX6.js → richclay-KLGETK77.js} +2 -2
  182. package/dist/m/plugins/sortable-4S6SQC3D.js +1 -0
  183. package/dist/m/plugins/source-TJXOIOYY.js +1 -0
  184. package/dist/m/plugins/undo-NLPGCJQY.js +1 -0
  185. package/dist/m/plugins/{unsent-HJFLQJ2O.js → unsent-OA4RGBUT.js} +1 -1
  186. package/dist/m/plugins/upgrade-HSUNDNJD.js +1 -0
  187. package/dist/m/plugins/{upload-WLYKK6TL.js → upload-NHGJXZK2.js} +1 -1
  188. package/dist/m/plugins/visitor-drafts-BW43DGY3.js +20 -0
  189. package/dist/m/plugins/visitor-drafts-owner-7ODQG7JX.js +1 -0
  190. package/dist/m/plugins/{wire-4N6GYAF6.js → wire-VBWXEXU2.js} +1 -1
  191. package/dist/m/reader-core-4W2KYEWQ.js +77 -0
  192. package/dist/m/route/route-62CHXL5B.js +1 -0
  193. package/dist/m/sync/live-sync-MO5DH33W.js +1 -0
  194. package/dist/m/ui/index-IVWN2QC4.js +1 -0
  195. package/dist/m/vendor/sap-core.vendor-RN4ZVY4X.js +6 -0
  196. package/dist/offline-manifest.json +1367 -930
  197. package/dist/page/themes/light-1.css +8 -7
  198. package/dist/server/core.cjs +1440 -288
  199. package/dist/server/offline-runtime.cjs +63 -63
  200. package/dist/server/offline-runtime.mjs +63 -63
  201. package/dist/server/page-compaction-worker.cjs +3710 -0
  202. package/dist/server/rooms.mjs +5 -0
  203. package/docs/guide.md +653 -101
  204. package/entries/sap.js +5 -5
  205. package/package.json +1 -1
  206. package/src/core/admin-contenteditable.js +5 -2
  207. package/src/core/admin-inputs.js +1 -0
  208. package/src/core/admin-onclick.js +2 -1
  209. package/src/core/conflict-notice-ui.js +4 -7
  210. package/src/core/download.js +2 -2
  211. package/src/core/host-meta.js +38 -0
  212. package/src/core/is-edit-mode.js +17 -1
  213. package/src/core/mode-key.js +125 -19
  214. package/src/core/mode-support.js +5 -0
  215. package/src/core/mode-transition.js +20 -6
  216. package/src/core/preserve-authored.js +4 -4
  217. package/src/core/recovery.js +121 -33
  218. package/src/core/save-accepted.js +33 -0
  219. package/src/core/save-core.js +106 -31
  220. package/src/core/save-job.js +108 -0
  221. package/src/core/save-prepare.js +53 -0
  222. package/src/core/save-size-notice.js +3 -1
  223. package/src/core/save-slices.js +15 -0
  224. package/src/core/save.js +557 -127
  225. package/src/core/serialize-steps.js +109 -0
  226. package/src/core/snapshot.js +170 -39
  227. package/src/core/source-map.js +83 -38
  228. package/src/core/stale-host-notice.js +1 -0
  229. package/src/core/upgrade-run.js +59 -8
  230. package/src/dom/active-element.js +5 -0
  231. package/src/lib/assets.js +1 -0
  232. package/src/lib/slice.js +65 -0
  233. package/src/lib/uimotion.js +774 -0
  234. package/src/lib/unsaved-state.js +2 -2
  235. package/src/live/fast-lane.js +10 -3
  236. package/src/live/local-lane.js +202 -11
  237. package/src/live/ops.js +16 -0
  238. package/src/live/page-compaction.js +162 -0
  239. package/src/live/server-lane.js +1 -0
  240. package/src/live/store.js +11 -3
  241. package/src/loader-logic.js +3 -1
  242. package/src/loader.js +14 -4
  243. package/src/page/adopt-boot.js +2 -1
  244. package/src/page/awareness.js +33 -2
  245. package/src/page/blocks.js +89 -27
  246. package/src/page/boot-pack.js +1 -1
  247. package/src/page/chart-tables.js +21 -3
  248. package/src/page/chart.js +406 -63
  249. package/src/page/checklist.js +10 -135
  250. package/src/page/checkpoint-proof.js +7 -1
  251. package/src/page/chrome.js +250 -51
  252. package/src/page/clipboard-shape.js +126 -0
  253. package/src/page/drag.js +33 -3
  254. package/src/page/editor.js +136 -25
  255. package/src/page/export-assets.js +357 -0
  256. package/src/page/export-html.js +209 -0
  257. package/src/page/export-markdown.js +361 -0
  258. package/src/page/features/checklist.js +428 -0
  259. package/src/page/features/export-html.js +189 -0
  260. package/src/page/features/export-markdown.js +169 -0
  261. package/src/page/features/import-markdown.js +349 -0
  262. package/src/page/features/media.js +61 -5
  263. package/src/page/features/registry.js +18 -0
  264. package/src/page/features/table.js +373 -83
  265. package/src/page/features/title-cover.js +331 -0
  266. package/src/page/features/title-icon.js +213 -0
  267. package/src/page/features/toc.js +87 -0
  268. package/src/page/format-command.js +25 -1
  269. package/src/page/format-gate.js +68 -18
  270. package/src/page/format-host.js +17 -0
  271. package/src/page/format-native-commands.js +21 -5
  272. package/src/page/image-actions.js +64 -0
  273. package/src/page/import-markdown.js +262 -0
  274. package/src/page/items.js +135 -17
  275. package/src/page/markdown.js +6 -2
  276. package/src/page/media.js +35 -119
  277. package/src/page/placeholder.js +14 -1
  278. package/src/page/projection.js +98 -10
  279. package/src/page/recover.js +10 -12
  280. package/src/page/recovery-ui.js +464 -0
  281. package/src/page/rich/chart.js +63 -7
  282. package/src/page/save-projection.js +28 -0
  283. package/src/page/save-states.js +13 -3
  284. package/src/page/schema.js +19 -3
  285. package/src/page/table-paste.js +3 -1
  286. package/src/page/table-style.js +4 -4
  287. package/src/page/table.js +44 -2
  288. package/src/page/themes/light-1.css +8 -7
  289. package/src/page/themes/light-1.source.css +8 -7
  290. package/src/page/toc-link.js +31 -0
  291. package/src/page/toc.js +5 -0
  292. package/src/page/view-hooks.js +38 -12
  293. package/src/page/view.js +13 -0
  294. package/src/page/ybind/binding.js +88 -5
  295. package/src/page/ybind/bridge.js +187 -20
  296. package/src/page/ybind/containment.js +162 -0
  297. package/src/page/ybind/doc.js +17 -9
  298. package/src/page/ybind/file-debt.js +63 -0
  299. package/src/page/ybind/layout.js +7 -2
  300. package/src/page/ybind/marks.js +1 -1
  301. package/src/page/ybind/moves.js +5 -4
  302. package/src/page/ybind/origins.js +106 -4
  303. package/src/page/ybind/parts.js +8 -1
  304. package/src/page/ybind/provider.js +113 -17
  305. package/src/page/ybind/recovery-proof.js +32 -9
  306. package/src/page/ybind/recovery-replay.js +558 -15
  307. package/src/page/ybind/recovery.js +174 -45
  308. package/src/page/ybind/table.js +67 -11
  309. package/src/page/ybind/walk-delta.js +258 -0
  310. package/src/page/ybind/walk.js +54 -29
  311. package/src/page/ybind/writer.js +1 -1
  312. package/src/plugins/ai-edit.js +13 -9
  313. package/src/plugins/indicator-chip.js +91 -0
  314. package/src/plugins/indicator.js +13 -80
  315. package/src/plugins/live.js +89 -14
  316. package/src/plugins/menu/actions.js +196 -0
  317. package/src/plugins/menu/people.js +279 -0
  318. package/src/plugins/menu/placement.js +121 -0
  319. package/src/plugins/menu/preferences.js +9 -0
  320. package/src/plugins/menu/seo.js +316 -397
  321. package/src/plugins/menu/style.js +171 -0
  322. package/src/plugins/menu/variants.js +296 -0
  323. package/src/plugins/menu.js +186 -183
  324. package/src/plugins/page-view.js +3 -2
  325. package/src/plugins/page.js +249 -44
  326. package/src/plugins/sortable.js +8 -1
  327. package/src/plugins/source.js +6 -0
  328. package/src/plugins/upgrade.js +51 -17
  329. package/src/plugins/upload-ui.js +12 -17
  330. package/src/plugins/visitor-drafts/bottom-ui.js +12 -4
  331. package/src/plugins/visitor-drafts/intro-style.js +7 -2
  332. package/src/plugins/visitor-drafts/intro.js +5 -3
  333. package/src/plugins/visitor-drafts/owner-chip.js +8 -12
  334. package/src/plugins/visitor-drafts/prompt.js +11 -9
  335. package/src/plugins/visitor-drafts/source.js +4 -3
  336. package/src/plugins/visitor-drafts/store.js +138 -9
  337. package/src/plugins/visitor-drafts/ui-memory.js +2 -2
  338. package/src/plugins/visitor-drafts-owner.js +4 -6
  339. package/src/plugins/visitor-drafts.js +5 -3
  340. package/src/recovery/store.js +1 -1
  341. package/src/route/route.js +4 -0
  342. package/src/server/rooms/index.js +5 -1
  343. package/src/server/rooms/live-data-rooms.js +302 -50
  344. package/src/server/rooms/page-compaction-worker.js +12 -0
  345. package/src/server/rooms/page-compactor.js +92 -0
  346. package/src/server/rooms/page-room-conformance.js +461 -0
  347. package/src/source/parse-steps.js +94 -0
  348. package/src/source/session.js +233 -57
  349. package/src/sync/editing-sender.js +12 -0
  350. package/src/sync/live-sync-edit.js +22 -2
  351. package/src/sync/live-sync.js +150 -23
  352. package/src/sync/page-relay.js +52 -0
  353. package/src/sync/presence-store.js +44 -4
  354. package/src/sync/presence.js +6 -3
  355. package/src/sync/saved-stream.js +11 -6
  356. package/src/ui/bevel-controls.js +1 -0
  357. package/src/ui/bevel-dialog.js +5 -2
  358. package/src/ui/editor-ui.js +77 -0
  359. package/src/ui/page-colour.js +281 -0
  360. package/src/ui/toast.js +16 -7
  361. package/src/vendor/hyper-html-api-upgrade.vendor.js +2 -2
  362. package/src/vendor/hyper-undo.vendor.js +1 -1
  363. package/src/vendor/hypercms.vendor.js +9 -9
  364. package/src/vendor/parse5.vendor.js +2 -2
  365. package/src/vendor/sap-core.vendor.js +5 -5
  366. package/dist/m/c-2SPVQSHC.js +0 -1
  367. package/dist/m/c-336SGU5W.js +0 -1
  368. package/dist/m/c-3H6BZDNJ.js +0 -6
  369. package/dist/m/c-4DFEJ2PO.js +0 -3
  370. package/dist/m/c-56QRZTZH.js +0 -1
  371. package/dist/m/c-5J4E7O4Y.js +0 -4
  372. package/dist/m/c-5LKDWQTL.js +0 -19
  373. package/dist/m/c-5V3MOVJT.js +0 -1
  374. package/dist/m/c-6AZOGAPE.js +0 -1
  375. package/dist/m/c-6CRUUXOX.js +0 -5
  376. package/dist/m/c-6HMB24EV.js +0 -1
  377. package/dist/m/c-6KEVEQ7L.js +0 -1
  378. package/dist/m/c-A3E3NIMC.js +0 -1
  379. package/dist/m/c-BQ6LOBEE.js +0 -1
  380. package/dist/m/c-BTDI4Y23.js +0 -1
  381. package/dist/m/c-CJ3A7ZKE.js +0 -1
  382. package/dist/m/c-CQHPGKX2.js +0 -1
  383. package/dist/m/c-DFS4XZJV.js +0 -2
  384. package/dist/m/c-DNENWY4O.js +0 -1
  385. package/dist/m/c-E4LIR5X5.js +0 -1
  386. package/dist/m/c-FDNHHZY5.js +0 -1
  387. package/dist/m/c-FROJUZMV.js +0 -1
  388. package/dist/m/c-G2JPKCTP.js +0 -1
  389. package/dist/m/c-GB6TU7WV.js +0 -1
  390. package/dist/m/c-GFJJEBTU.js +0 -1
  391. package/dist/m/c-GJAEGGXY.js +0 -1
  392. package/dist/m/c-GOWBDM6J.js +0 -1
  393. package/dist/m/c-HFKUVACH.js +0 -1
  394. package/dist/m/c-HHDFCNHV.js +0 -1
  395. package/dist/m/c-IEM4NTCS.js +0 -1
  396. package/dist/m/c-JDCX26UP.js +0 -25
  397. package/dist/m/c-KGVGROZT.js +0 -1
  398. package/dist/m/c-KQ6TYJAP.js +0 -135
  399. package/dist/m/c-LFPHCXY3.js +0 -1
  400. package/dist/m/c-LRPUO2MX.js +0 -1
  401. package/dist/m/c-LWLBHLVC.js +0 -3
  402. package/dist/m/c-M2L47S2X.js +0 -7
  403. package/dist/m/c-MFP2ZWD4.js +0 -1
  404. package/dist/m/c-MKSQ4Y57.js +0 -1
  405. package/dist/m/c-NUFFJVVJ.js +0 -1
  406. package/dist/m/c-NUHSPT5P.js +0 -1
  407. package/dist/m/c-O72HVYSA.js +0 -1
  408. package/dist/m/c-OIBUTDXI.js +0 -1
  409. package/dist/m/c-OW5QIGG3.js +0 -1
  410. package/dist/m/c-PGRCK73F.js +0 -1
  411. package/dist/m/c-Q7NQD65V.js +0 -1
  412. package/dist/m/c-QH63LQOS.js +0 -1
  413. package/dist/m/c-R7IWVINQ.js +0 -1
  414. package/dist/m/c-RM7J7BV2.js +0 -1
  415. package/dist/m/c-S4ZEH46B.js +0 -9
  416. package/dist/m/c-SDAXDM2D.js +0 -1
  417. package/dist/m/c-SMGU7RT3.js +0 -235
  418. package/dist/m/c-SPIORRYS.js +0 -1
  419. package/dist/m/c-SWLRT66R.js +0 -1
  420. package/dist/m/c-TCJTVAFN.js +0 -1
  421. package/dist/m/c-TQEMVJCS.js +0 -1
  422. package/dist/m/c-TYLXX4NF.js +0 -21
  423. package/dist/m/c-U62OB4BT.js +0 -1
  424. package/dist/m/c-U6YWUAR3.js +0 -8
  425. package/dist/m/c-UDCSU5G5.js +0 -2
  426. package/dist/m/c-VI5RMSVY.js +0 -1
  427. package/dist/m/c-VRZN56XY.js +0 -1
  428. package/dist/m/c-W5MCHEGA.js +0 -1
  429. package/dist/m/c-WNYBLIOZ.js +0 -1
  430. package/dist/m/c-WWXIDH4O.js +0 -28
  431. package/dist/m/c-XCNTK76U.js +0 -1
  432. package/dist/m/c-XMS6DPBR.js +0 -1
  433. package/dist/m/c-ZUCOKOHT.js +0 -1
  434. package/dist/m/c-ZVPVXTJF.js +0 -4
  435. package/dist/m/c-ZVRKXKM7.js +0 -1
  436. package/dist/m/core/autosave-HRYGUWV6.js +0 -1
  437. package/dist/m/core/conflict-notice-6MROJN2L.js +0 -1
  438. package/dist/m/core/is-edit-mode-KTWA3O5N.js +0 -1
  439. package/dist/m/core/recovery-FLTCC2OC.js +0 -1
  440. package/dist/m/core/save-HQZ4S667.js +0 -1
  441. package/dist/m/core/save-core-KGQWFUNH.js +0 -1
  442. package/dist/m/core/snapshot-EGQZNT45.js +0 -1
  443. package/dist/m/core/unsaved-warning-IDJLD66H.js +0 -1
  444. package/dist/m/loader-S4I7GKXR.js +0 -1
  445. package/dist/m/manifest-4C419D67.js +0 -1
  446. package/dist/m/manifest-edit-B077F288.js +0 -1
  447. package/dist/m/plugins/ai-edit-QN4PMMNL.js +0 -6
  448. package/dist/m/plugins/indicator-URDBBOQO.js +0 -1
  449. package/dist/m/plugins/live-HFWD4OIH.js +0 -1
  450. package/dist/m/plugins/menu-3HIEQSI6.js +0 -138
  451. package/dist/m/plugins/page-JOKB6XPR.js +0 -2
  452. package/dist/m/plugins/page-view-NXOJHNW6.js +0 -1
  453. package/dist/m/plugins/quickcrop-QNY3PKLD.js +0 -26
  454. package/dist/m/plugins/sortable-GWT4PWDV.js +0 -1
  455. package/dist/m/plugins/source-4ZRSAIYM.js +0 -1
  456. package/dist/m/plugins/undo-VDA5P7FH.js +0 -1
  457. package/dist/m/plugins/upgrade-W7FG5VFG.js +0 -1
  458. package/dist/m/plugins/visitor-drafts-LIDY7NH6.js +0 -21
  459. package/dist/m/plugins/visitor-drafts-owner-ZXCKBZE7.js +0 -1
  460. package/dist/m/reader-core-DXYCURFF.js +0 -68
  461. package/dist/m/route/route-KOCZSEGN.js +0 -1
  462. package/dist/m/sync/live-sync-J7VMYTKS.js +0 -1
  463. package/dist/m/ui/index-3JLVI27O.js +0 -1
  464. package/dist/m/vendor/sap-core.vendor-A7BMUYZT.js +0 -6
  465. /package/dist/m/{c-FILLTJA7.js → c-QTTJYJMA.js} +0 -0
  466. /package/dist/m/plugins/{quickcrop-QNY3PKLD.js.LEGAL.txt → quickcrop-BQ5YYFCH.js.LEGAL.txt} +0 -0
  467. /package/dist/m/plugins/{richclay-NRQDSWX6.js.LEGAL.txt → richclay-KLGETK77.js.LEGAL.txt} +0 -0
@@ -1,2 +0,0 @@
1
- import{s as M}from"./c-3H6BZDNJ.js";import"./c-4DFEJ2PO.js";import"./c-6CRUUXOX.js";import"./c-336SGU5W.js";import"./c-6KEVEQ7L.js";import{d}from"./c-5J4E7O4Y.js";import{e as x,m as f,t as k,v as g}from"./c-WWXIDH4O.js";import"./c-4L3BTFRK.js";import"./c-5V3MOVJT.js";import"./c-VHNSBD2M.js";var b="page-step",p=t=>x.closeHistory(t).setMeta(b,!0),y=(t,e)=>!!t&&Object.keys(t.type.attrs).every(r=>t.attrs[r]===e[r]);function S(t,e,r){let o=t.state,{from:n,to:s,empty:a,$from:c}=o.selection,u=o.tr;if(a)y(e.isInSet(o.storedMarks||c.marks()),r)?u.removeStoredMark(e):u.addStoredMark(e.create(r));else{let i=!0;o.doc.nodesBetween(n,s,h=>{i&&h.isText&&!y(e.isInSet(h.marks),r)&&(i=!1)}),i?u.removeMark(n,s,e):u.addMark(n,s,e.create(r))}return t.dispatch(p(u)),!0}function P(t,e){let r=t.state,o=r.tr;return r.selection.empty?o.removeStoredMark(e):o.removeMark(r.selection.from,r.selection.to,e),t.dispatch(p(o)),!0}function m(t,e){let r=t.runFormatCommand;return typeof r!="function"?Promise.resolve({status:"unsupported-host",code:"page-format-unsupported",retry:!1}):r(e)}function $(t,e,r={},{reset:o=!1}={}){let n=f.marks[e];return n?t.editable?g(t.state,n)?m(t,()=>o?P(t,n):S(t,n,r)):Promise.resolve({status:"refused",code:"mark-not-allowed"}):Promise.resolve({status:"refused",code:"not-editable"}):Promise.resolve({status:"refused",code:"unsupported-format"})}function E(t,e,r,o){let n=()=>{if(t.isDestroyed)return!1;let a=t.state;return a.selection.from!==r||a.selection.to!==o?!1:(t.dispatch(a.tr.replaceSelection(e).scrollIntoView()),!0)},s=()=>{let a=e.content.textBetween(0,e.content.size,`
2
- `," ");return!t.isDestroyed&&a&&t.dispatch(t.state.tr.insertText(a,r,o)),!1};m(t,n).then(a=>{a?.status!=="applied"&&(t.isDestroyed||d(t,a?.message??"That format isn\u2019t available here."),s())},s)}function I(t,e,{at:r,from:o,to:n},s){let a=()=>{if(e.isDestroyed)return!1;let c=e.state,u=c.doc.nodeAt(r);if(!u||u.type!==f.nodes.paragraph||u.textContent!=='"')return s();let i=c.tr.delete(r+1,r+2).setNodeMarkup(r,f.nodes.quote,u.attrs);return e.dispatch(p(i.setMeta(t,{transform:i,from:o,to:n,text:" "}))),!0};e.runFormatCommand(a).then(c=>{c?.status!=="applied"&&s()},s)}var C="This text can\u2019t take that format.",F=t=>t.status==="upgrade-required"?t.message:t.code==="mark-not-allowed"?C:"That format isn\u2019t available here.",T=(t,e)=>{e?.status!=="applied"&&!t.isDestroyed&&d(t,F(e??{}))},l=(t,e,r={},o=void 0)=>{$(t,e,r,o).then(n=>T(t,n))},L=(t,e)=>{m(t,e).then(r=>T(t,r))};function B(t,e,r){if(e==="underline")return l(t,e);let o=e==="text_color"?"Text":"Highlight",n=e==="text_color"?"Automatic":"No highlight";return M(t,r,[...k.map(s=>({key:`${e}_${s}`,label:`${o}: ${s[0].toUpperCase()}${s.slice(1)}`,icon:"\u25CF",run:a=>l(a,e,{color:s})})),{key:`${e}_none`,label:n,icon:"\xD7",run:s=>l(s,e,{},{reset:!0})}])}export{$ as formatMark,L as gateTurn,B as nativeMenu,E as pasteFormats,I as quoteFromSpace,m as runFormat,l as runNative};
@@ -1 +0,0 @@
1
- import{a,b,c,d,e}from"./c-AMSNPOCX.js";import"./c-KIPQJX4B.js";import"./c-QHWJ5ZIJ.js";import"./c-ZUCOKOHT.js";import"./c-UL2YUY52.js";import"./c-LFPHCXY3.js";import"./c-OIBUTDXI.js";import"./c-4JZDZFF6.js";import"./c-VAK7SG37.js";import"./c-46XYM55L.js";import"./c-NUHP2XDB.js";import"./c-VKEDWYDF.js";import"./c-VHNSBD2M.js";export{a as ask,b as consent,e as init,d as snippet,c as tell};
@@ -1 +0,0 @@
1
- import{a as b,b as c,c as d,d as e,e as f}from"./c-W5MCHEGA.js";import{g as a}from"./c-3H6BZDNJ.js";import"./c-4DFEJ2PO.js";import"./c-6CRUUXOX.js";import"./c-336SGU5W.js";import"./c-6KEVEQ7L.js";import"./c-5J4E7O4Y.js";import"./c-WWXIDH4O.js";import"./c-4L3BTFRK.js";import"./c-5V3MOVJT.js";import"./c-VHNSBD2M.js";export{e as ChartView,d as chartFromSlash,a as chartTables,b as insertChartAfterTable,f as refreshCharts,c as tableLabel};
@@ -1 +0,0 @@
1
- async function a(t,e){if(typeof t.runFormatCommand!="function")return{ok:!1,code:"page-format-unsupported"};let r=await t.runFormatCommand(e);return r?.status==="applied"?r.result:{ok:!1,code:r?.code??r?.status??"page-format-refused",retry:r?.retry===!0}}export{a};
@@ -1 +0,0 @@
1
- import{a as ue,b as me}from"./c-R7IWVINQ.js";import{i as pe,k as U,t as A}from"./c-4DFEJ2PO.js";import{D as ae,E as K,M as fe,Q as le,f as se,h as ce,s as ie,z as de}from"./c-6CRUUXOX.js";import{$ as H,B as Q,M as G,N as q,P as X,_ as Z,a as L,ca as z,da as ee,e as N,ha as S,ia as D,ja as te,ka as v,la as k,m as E,ma as oe,na as V,oa as ne,pa as re,ra as I,w as W,x as P,y as J}from"./c-WWXIDH4O.js";var ge="page-adopt",R=(o,e)=>k(o)===k(e),C=({id:o,parent:e,...t})=>({...t,parent:e??null});function qe(o,e,t=v(o)){let s=t,r=new Map(s.map(n=>[n.id,n])),i=new Map(e.map(n=>[n.id,n])),a=new Map,d=new Map;for(let n of e){let h=r.get(n.id);h?R(C(h),C(n))||a.set(n.id,n):d.set(n.id,n)}let f=s.filter(n=>!i.has(n.id)).map(n=>n.id),m=e.filter(n=>r.has(n.id)).map(n=>n.id),u=s.filter(n=>i.has(n.id)).map(n=>n.id),y=m.some((n,h)=>n!==u[h]);return!a.size&&!d.size&&!f.length&&!y?null:{edited:a,created:d,deleted:f,order:e.map(n=>n.id),reordered:y,base:r}}function B(o,e,t,s=r=>r){let r=o.map(d=>({id:d.id,pos:e?.[d.id]?.pos??null})),i=X(r,t),a={};return o.forEach((d,f)=>{a[d.id]=s({...d,pos:i[f]?i[f].pos:r[f].pos})}),a}function Y(o,e){let{id:t,t:s,...r}=o,i={t:s,pos:e?.pos??null};if(Object.assign(i,r),s==="table"&&!r.rows.length&&r.cols.length&&(r.rows=[{id:`r-${t}`,cells:{}}]),s==="table"&&(i.cols=B(r.cols,e?.cols,"c",({id:a,...d})=>d),i.rows=B(r.rows,e?.rows,"r",({id:a,cells:d,pos:f})=>({pos:f,cells:d}))),s==="board"){i.columns=B(r.columns,e?.columns,"c",({id:f,...m})=>m);let a={},d=new Map;for(let f of r.cards)(d.get(f.col)??d.set(f.col,[]).get(f.col)).push(f);for(let f of d.values())Object.assign(a,B(f,e?.cards,"k",({id:m,...u})=>u));i.cards=a}return i}var we=(o,e,t)=>{let{t:s,pos:r,c:i,m:a,...d}=t,f=typeof i=="string"&&i?Q(o,i,S(a,i.length),o.nodes.opaque_block):null;return o.nodes.opaque_block.create({id:e,pos:r,raw:{t:s,...d}},f)},be=o=>Object.fromEntries(Object.entries(o).map(([e,t])=>{if(t.t!=="opaque_block")return[e,t];let{t:s,raw:r,...i}=t,{t:a,...d}=r??{};return[e,{t:a??"paragraph",pos:t.pos,...d,...i}]}));function M(o,e){let t=null;return o.forEach((s,r)=>{!t&&s.attrs.id===e&&(t={node:s,pos:r})}),t}function ke(o,e){let t=o.filter(d=>e.has(d)),s=[],r=[],i=new Array(t.length).fill(-1);t.forEach((d,f)=>{let m=e.get(d),u=0,y=s.length;for(;u<y;){let n=u+y>>1;s[n]<m?u=n+1:y=n}u>0&&(i[f]=r[u-1]),s[u]=m,r[u]=f});let a=new Set;for(let d=r[s.length-1]??-1;d>=0;d=i[d])a.add(t[d]);return a}function Oe(o,e,t){let{node:s,pos:r}=M(o.doc,e),i={...t.attrs,id:s.attrs.id,pos:s.attrs.pos};if(s.isTextblock&&t.isTextblock&&t.type.validContent(s.content)){(s.type!==t.type||!R(s.attrs,i))&&o.setNodeMarkup(r,t.type,i);let a=M(o.doc,e).node,d=a.content.findDiffStart(t.content);if(d==null)return;let{a:f,b:m}=a.content.findDiffEnd(t.content),u=d-Math.min(f,m);u>0&&(f+=u,m+=u),o.replace(r+1+d,r+1+f,new L.Slice(t.content.cut(d,m),0,0));return}o.replaceWith(r,r+s.nodeSize,t.type.create(i,t.content,t.marks))}function ze(o,e){if(!e)return null;let t=o.schema,s=o.doc,r=be(G(s)),i=o.tr,a=new Map(v(r).map(c=>[c.id,c])),d={};for(let c of[...e.edited.keys(),...e.deleted]){let l=e.base.get(c),p=a.get(c);l&&p&&!R(C(l),C(p))&&(d[c]=r[c])}let f=(c,l)=>{let p=Y(l,r[c]);return Object.hasOwn(z,l.t)?q(t,c,p):we(t,c,p)},m=e.base.size?[]:Object.keys(r).filter(c=>r[c].t==="paragraph"&&!r[c].c&&!e.order.includes(c));for(let c of e.deleted){let l=M(i.doc,c);l&&i.delete(l.pos,l.pos+l.node.nodeSize)}let u=[];i.doc.forEach(c=>u.push(c.attrs.id));let y=new Set(e.order),n=e.order.filter(c=>!e.deleted.includes(c));e.reordered?u.forEach((c,l)=>{if(y.has(c))return;let p=u.slice(0,l).reverse().find(w=>n.includes(w));n.splice(p?n.indexOf(p)+1:0,0,c)}):(n=u.slice(),e.order.forEach((c,l)=>{if(!e.created.has(c)||n.includes(c))return;let p=l-1;for(;p>=0&&!n.includes(e.order[p]);)p--;n.splice(p>=0?n.indexOf(e.order[p])+1:0,0,c)}));let h=new Map(u.map((c,l)=>[c,l]));n=n.filter(c=>h.has(c)||e.edited.has(c)||e.created.has(c));let _=ke(n,h),O=new Map;for(let c of u.slice().reverse()){if(_.has(c)||!n.includes(c))continue;let l=M(i.doc,c);O.set(c,l.node),i.delete(l.pos,l.pos+l.node.nodeSize)}let j=0;for(let c of n){if(_.has(c)){let w=M(i.doc,c);j=w.pos+w.node.nodeSize;continue}let l=e.edited.get(c)||e.created.get(c),p=l?f(c,l):O.get(c);i.insert(j,p),j+=p.nodeSize}for(let[c,l]of[...e.edited,...e.created])_.has(c)&&Oe(i,c,f(c,l));for(let c of m){let l=M(i.doc,c);l&&i.doc.childCount>1&&i.delete(l.pos,l.pos+l.node.nodeSize)}return i.docChanged?N.closeHistory(i).setMeta(ge,{displaced:d}):null}function Ae(o,e,t=""){let s=v(o),r=new Map(s.map(d=>[d.id,d])),i=d=>typeof o[d]?.artifact?.fallbackHtml=="string"?o[d].artifact.fallbackHtml:"",a=e.createElement("article");return a.innerHTML=re(s,{fallbackOf:i,clean:ne(e)}),I(a,{seed:t,known:r})}function De(o,e){let t=o.getAttribute("data-rev"),s=me(e),r=v(s),i=new Map(r.map(y=>[y.id,y])),a=t??"",d=I(o,{seed:a,known:i}),f=V(d);if(t&&f===t)return{kind:"untouched"};let m=V(r);if(t&&m!==t)return{kind:"unbased",A:f,R:t,T:m};if(!t){let y=new Set(d.map(n=>n.id));if(!r.every(n=>y.has(n.id)))return{kind:"unbased",A:f,R:t,T:m}}let u=Ae(s,o.ownerDocument,a);return{kind:"adopt",base:s,parsed:d,baseItems:u,A:f}}var F=class extends Error{constructor(e){super(e),this.name="YMigrationError",this.code="invalid-source"}},g=o=>{throw new F(o)},x=o=>o!==null&&typeof o=="object"&&!Array.isArray(o),$=o=>JSON.parse(k(o));function Me(o){(!Array.isArray(o)||!o.length)&&g("Expected at least one hybrid page value");for(let e of o){(!x(e)||!x(e.blocks)||Object.keys(e).some(t=>t!=="blocks"&&t!=="deleted"))&&g("Expected a hybrid page value with blocks and optional deleted ids"),e.deleted!=null&&!x(e.deleted)&&g("Invalid hybrid page tombstones");for(let[t,s]of Object.entries(e.blocks))!e.deleted?.[t]&&(!t||t==="__proto__"||!x(s))&&g(`Invalid hybrid page block: ${t}`),!e.deleted?.[t]&&/^~|~\d+$/.test(t)&&g(`Reserved hybrid page block id: ${t}`)}return te(o)}var $e=(o,e)=>{let t;try{t=P(E,o)}catch{return g(`Invalid mark key on block: ${e}`)}return W([...t].sort((s,r)=>s.type.rank-r.type.rank))},he=(o,e)=>{let t=S(o.m,o.c.length);t||g(`Invalid mark runs on block: ${e}`);for(let s=0;s<t.length;s++){let r=t[s];typeof r!="string"&&g(`Invalid mark key on block: ${e}`),r.startsWith("@")&&(r!==H||o.c[s]!==Z)&&g(`Unsupported inline atom on block: ${e}`),o.t==="code_block"&&r&&g(`Unsupported formatting in code block: ${e}`),r.startsWith("@")||(t[s]=$e(r,e))}return t};function je(o,e,t){let s={t:e.t,pos:t};for(let r of Object.keys(e))r==="t"||r==="pos"||r==="c"||r==="m"||(s[r]=$(e[r]));if(e.c!=null&&typeof e.c!="string"&&g(`Invalid text on block: ${o}`),s.c=e.c??"",typeof e.c=="string"&&e.m!=null){let r=he(e,o);r.some(Boolean)&&(s.m=D(r))}else e.m!=null&&g(`Mark runs require flat text on block: ${o}`);return s}function Ee(o,e,t){let s=Object.hasOwn(z,e.t);!s&&(typeof e.t!="string"||!e.t||e.t==="opaque_block")&&g(`Unsupported hybrid block type: ${e.t}`);let r=String(t+1).padStart(8,"0");if(!s)return je(o,e,r);let i=E.nodes[e.t],a=ae(i),d=new Set(["t","pos","c","m",...a,...e.t==="table"?["rows"]:[]]),f={t:e.t,pos:r};for(let n of Object.keys(e))d.has(n)||(f[n]=$(e[n]));for(let n of a){let h=e[n]===void 0?K(i,n):e[n];k(h)!==k(K(i,n))&&(f[n]=$(h))}if(e.t==="table"&&(e.rows!==void 0&&!x(e.rows)&&g(`Invalid table rows: ${o}`),f.rows=$(e.rows??{})),!i.isTextblock)return e.c!=null&&e.c!==""&&!(Array.isArray(e.c)&&!e.c.length)&&g(`Unexpected text on block: ${o}`),e.m!=null&&!(Array.isArray(e.m)&&!e.m.length)&&g(`Unexpected marks on block: ${o}`),f;e.c!=null&&typeof e.c!="string"&&!Array.isArray(e.c)&&g(`Invalid text on block: ${o}`),typeof e.c=="string"&&e.m!=null?he(e,o):e.m!=null&&g(`Mark runs require flat text on block: ${o}`);let m=q(E,o,e);m.check();let{c:u,m:y}=J(m.content);return f.c=u,y.some(Boolean)&&(f.m=D(y)),f}function Se(o,e){let t;try{let s=Me(o),r=ee(s),i=Object.fromEntries(r.map((n,h)=>[n,Ee(n,s[n],h)]));t=new se,t.clientID=e;let a=fe(t),d=0;t.transact(()=>{for(let n of r){let h=i[n],{pos:_,c:O,m:j,...c}=h;if(h.t==="board"&&(delete c.columns,delete c.cards),a.attrs.set(n,new ie(Object.entries($(c)))),h.t==="board"){for(let[p,w]of Object.entries(h.columns??{})){a.boardFields.set(A(n,"column",p,"alive"),!0);for(let b of["name","pos"])a.boardFields.set(A(n,"column",p,b),w[b]??"")}for(let[p,w]of Object.entries(h.cards??{})){a.boardFields.set(A(n,"card",p,"alive"),!0);for(let b of["title","owner","due"])w[b]!==void 0&&a.boardFields.set(A(n,"card",p,b),w[b]);a.boardFields.set(A(n,"card",p,"placement"),{columnId:w.col??"",pos:w.pos??""})}}if(a.flow.insertEmbed(a.flow.length,{b:n},{}),!O)continue;let l=0;for(let[p,w]of D(S(j,O.length)??Array(O.length).fill(""))){if(w===H)for(let b=0;b<p;b++)a.flow.insertEmbed(a.flow.length,{br:1},{});else{let b=Object.fromEntries(Object.entries(le(P(E,w))).map(([ye,T])=>[`${ye}~${e}-m${(d++).toString(36)}`,T&&typeof T=="object"?$(T):T]));a.flow.insert(a.flow.length,O.slice(l,l+p),b)}l+=p}}},de);let f=pe(ce(t)),m=Math.ceil(f.length/U),y={v:1,g:0,y:m<=1?{seed:f}:Object.fromEntries(Array.from({length:m},(n,h)=>[`seed.${h}.${m}`,f.slice(h*U,(h+1)*U)]))};return k(ue(y))!==k(i)&&g("Hybrid page data cannot be represented without loss"),y}catch(s){throw s instanceof F?s:new F(`Cannot migrate hybrid page: ${s.message}`)}finally{t?.destroy()}}function ve(o){let e=parseInt(oe(`page-seed:v1:${k(o)}`).slice(0,8),16)>>>0;return e<2?e+2:e}function Je(o){let e=I(o,{seed:o.getAttribute("data-rev")??""}),t={};return e.forEach((s,r)=>{let i=Y(s,null);i.pos=String(r+1).padStart(8,"0"),t[s.id]=i}),Se([{blocks:t}],ve(t))}export{ge as a,qe as b,ze as c,Ae as d,De as e,Je as f};
@@ -1 +0,0 @@
1
- import{a as Ge,b as oe,d as he,e as ce,f as We}from"./c-7OLLJPWP.js";import{a as $e,b as je,c as ae,d as ze}from"./c-LZJPNR2W.js";import{a as C,b as W}from"./c-FILLTJA7.js";import{b as Ue}from"./c-5VYOWDTI.js";import{b as se,c as re,d as E,f as le,h as Oe}from"./c-QJ4OM3G6.js";import{a as A}from"./c-ZWIOJGMT.js";import{a as Ne}from"./c-TQEMVJCS.js";import{a as te,b as Me,c as P,d as ne,e as ie,h as Be}from"./c-DCXOXBF3.js";import{e as Pe}from"./c-VRZN56XY.js";import{d as Ae}from"./c-IJUK2GPW.js";import{e as G,i as Q}from"./c-OW5QIGG3.js";import{a as De}from"./c-BPF2NSPV.js";import{b as k,j as ee,n as F,r as Fe,s as z,t as qe,v as q}from"./c-SPIORRYS.js";import{a as He,b as Ce,c as Re,e as $,g as j,h as Z}from"./c-VG5XIN4T.js";import{m as ke,n as xe}from"./c-HA6INT6J.js";import{a as Ie,b as be,l as Te,m as Le}from"./c-DCFSEJZG.js";function Ye(s){let e=new WeakMap,t=0,n=r=>e.get(r)||null,i=r=>{let a=e.get(r);return a||(a=`${s}:${++t}`,e.set(r,a)),a};return{idOf:n,ensure:i,adopt:(r,a)=>{r&&typeof a=="string"&&a&&e.set(r,a)},exportMap:(r,a)=>{let l={},h=[],c=[],d=(f,y)=>{let m=a(f);m&&(l[y]=i(m));let w=f.children;h.push(w.length),c.push(f.tagName.toLowerCase());for(let p=0;p<w.length;p++)d(w[p],y===""?String(p):`${y}.${p}`)};return d(r,""),l["~"]=h.join(","),l["^"]=c.join(","),l}}}function at(s){return e=>{for(let t of s){let n=t(e);if(typeof n=="string"&&n!=="")return n}return null}}var Et=at([s=>s.getAttribute("data-id"),s=>s.getAttribute("id")]);var ot={"merge-tokens":"tokens","merge-max":"max"};function Je(s,e){if(!e.startsWith("data-")||e==="data-id"||!s?.closest)return null;for(let[t,n]of Object.entries(ot)){let i=s.closest(`[${t}]`);if(i&&i.getAttribute(t).split(/\s+/).includes(e))return n}return null}var _=null,Ve=null,M=new Map;function Y(){return Ve??=Promise.all([import("./c-3XIRD4NU.js"),import("./c-EJTGYSLN.js")]).then(([s,e])=>{_={...s,beginLineageCapture:e.beginLineageCapture};for(let t of[...M.keys()])M.set(t,s.registerContext(t));return _}),Ve}var Xe=()=>_,x={get size(){return _?_.conflicts.size:0},list(){return _?_.conflicts.list():[]},get(s){return _?_.conflicts.get(s):null},acknowledge(s,e={}){if(_)return _.conflicts.acknowledge(s,e);if(!Array.isArray(s))throw new TypeError("clay.conflicts.acknowledge needs an array of ids");return{removedIds:[],remainingIds:[]}},claim(s,e={}){if(_)return _.conflicts.claim(s,e);if(!e.owner)throw new TypeError("clay.conflicts.claim needs an owner");return{release(){}}},registerContext(s){if(_)return _.conflicts.registerContext(s);if(typeof s!="function")throw new TypeError("clay.conflicts.registerContext needs a resolver function");return M.set(s,null),()=>{let e=M.get(s);M.delete(s),e&&e()}},contextFor(s,e){return _?_.conflicts.contextFor(s,e):null},recoveryOf(s){return _?_.conflicts.recoveryOf(s):null},hasPendingApply(){return _?_.conflicts.hasPendingApply():!1}};var u=null,de=null;function R(){return de??=new Promise(s=>setTimeout(s,0)).then(()=>import("./c-CJ3A7ZKE.js")).then(s=>u=s).catch(s=>{throw de=null,s}),de}var _e=null,ue=null;function ct(){return ue??=import("./c-SMBZG5X4.js").then(s=>_e=s.presence).catch(s=>{throw ue=null,s}),ue}var Ze=Q().phase==="entering";G&&!Ze&&R().catch(()=>{});G&&Y().catch(()=>{});var D=null,fe=null,V=[];function et(s){D.presence.update(s),D.editingMarker.update(s)}function dt(){return fe??=Promise.all([import("./c-HFKUVACH.js"),import("./c-EVCQ3BKA.js")]).then(([s,e])=>{D={presence:s.presence,editingMarker:e.editingMarker};let t=V;V=[];for(let n of t)et(n);return D}).catch(s=>{throw fe=null,s}),fe}function ut(s){if(D){et(s);return}V.push(s),dt().catch(()=>{})}var Ke=Object.freeze({bytes:null,etag:null,seq:null}),ft=()=>({msg:"Not in edit mode",msgType:"skipped",code:null,etag:null}),tt=["[editor-ui]",'[clay~="editor-ui"]',"[save-ignore]","[snapshot-remove]","[no-snapshot]","[no-save]","[save-remove]","[freeze] *","[save-freeze] *",'[clay~="no-save"]','[clay~="no-snapshot"]','[clay~="freeze"] *',Te,Ie].join(","),nt='[clay~="freeze"], [freeze], [save-freeze]';function J(s){for(let e of s.querySelectorAll(nt))e.replaceChildren();return j()&&Re(s),s}function Qe(s){if(s==null)return s;let e=typeof s=="string"?new DOMParser().parseFromString(s,"text/html"):s;return ee(e),J(e),e}var pt=[Le,'[clay~="no-watch"]',"[no-watch]","[mutations-ignore]"].join(","),_t=(s,e,t)=>ke(s,e,t)||be.test(e.toLowerCase()),it=s=>s.getAttribute("data-id")||s.getAttribute("id")||null;function gt(s){let e=new Map,t=i=>{if(i.matches(tt))return;let r=it(i);r&&e.set(r,(e.get(r)||0)+1);let a=i.localName==="template"&&i.content?i.content.children:i.children;for(let l of a)t(l)},n=s.nodeType===9?[s.documentElement]:s.nodeType===11?s.children:[s];for(let i of n)i&&i.nodeType===1&&t(i);return e}var yt=s=>e=>{let t=it(e);if(!t)return null;let n=e.getRootNode(),i=s.get(n);return i||s.set(n,i=gt(n)),i.get(t)===1?t:null},pe=s=>!!s&&typeof s=="object"&&!Array.isArray(s);function mt(s){return typeof s!="string"||s===""?null:new DOMParser().parseFromString(s,"text/html").documentElement?.getAttribute("documentetag")||null}function vt(s,e){e!=="live"||!s||!u||(u.enableContentEditable(s),u.enableOnClick(s),u.enableAdminInputs(s),u.enableAdminResources(s))}function St(){let{forComparison:s,forDirty:e}=Fe({flushUndo:!1});return[s,e]}var ge=class{constructor(){this.sse=null,this.currentFile=null,this.lastHtml=null,this._diskBase=null,this._diskBaseTicket=0,this._agreeSeq=0,this._saveTicket=0,this._peerBaseTicket=0,this._acceptedSaveTicket=0,this._morphTicket=0,this.clientId=this.generateClientId(),this.resumeId=null,this._savedSnapshot=null,this._sendInFlight=!1,this._queuedSend=null,this._profile=null,this._profilePromise=null,this._sharedData=!1,this._sharedSync=!1,this._liveData=!1,this._editing=null,this._presenceLease=null,this._ready=null,this._startGen=0,this.isPaused=!1,this.isDestroyed=!1,this.debug=!1,this._lane=G?"live":"saved",this._laneChosen=!1,this._snapshotHandler=null,this.lastSeenSeq=0,this._pendingHtml=null,this._pendingSeq=null,this._pendingIdentityMap=null,this._pendingEtag=null,this._pendingBy=null,this._morphInFlight=!1,this._rafHandle=null,this._represented=Ke,this._handoff=null,this._handoffHeld=!1,this._pendingExternal=null,this._lastExternalSeq=0,this._saveEpoch=0,this._saveSavedHandler=null,this._saveConflictHandler=null,this._settledHandler=null,this._lastIdentityMap=null,this._applyGen=0,this._holdRetryPeer=null,this._holdRetryExt=null,this._servedFetchId=0,this._startupRetry=null,this._engineRetry=null,this._heldLive=!1,this._heldExt=!1,this.identity=Ye(this.clientId),this.onConnect=null,this.onDisconnect=null,this.onUpdate=null,this.onError=null,this.onNotification=null}get unresolvedConflicts(){return x.list().filter(e=>e.kind!=="apply-incomplete")}_log(e,t=null){if(!this.debug)return;let n=`[LiveSync ${new Date().toISOString()}]`;t!==null?console.log(n,e,t):console.log(n,e)}generateClientId(){return Math.random().toString(36).slice(2,11)+Date.now().toString(36)}generateResumeId(){try{let e=new Uint8Array(16);return(globalThis.crypto||window.crypto).getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}catch{return Math.random().toString(36).slice(2)+Date.now().toString(36)}}_seedBases(){if(E())return;let e=F({flushUndo:!1});this._setPeerBase(q(e),this.identity.exportMap(e,k),this._ticket()),this._setDiskBase(z({emitForSync:!1}).forSave,this._ticket())}get lane(){return this._lane}set lane(e){this._lane=e,this._laneChosen=!0}start(e=null,{lane:t,represented:n}={}){if(this.isDestroyed=!1,(this.sse||this._snapshotHandler)&&this.cleanup(),this.currentFile=e||this.detectCurrentFile(),!this.currentFile){console.warn("[LiveSync] No file detected");return}let i=Q().mode==="edit"?"live":"saved",r=this.lane==="live";this._lane=t||(this._laneChosen?this._lane:i),this.lastHtml=null,this._lastIdentityMap=null,this._peerBaseTicket=this._ticket(),this._diskBase=null,this._diskBaseTicket=this._ticket(),this._saveTicket=0,this._savedSnapshot=null,this._applyGen++,this.lastSeenSeq=0,this._lastExternalSeq=0,this._represented=n?Object.freeze({bytes:n.bytes??null,etag:n.etag??null,seq:n.seq??null}):Ke,this._acquireEmptySaved=r&&this.lane==="saved"&&this._represented.bytes===null,this._pendingExternal=null,this.resumeId=this.generateResumeId(),this.lane==="live"&&this._seedBases(),this.lane==="live"&&Y().catch(()=>{}),console.log(`[LiveSync] Starting for: ${this.currentFile} (lane=${this.lane})`);let a=++this._startGen;if(this.lane==="live"&&!(u&&u.baselineSettled())){let l=this._applyGen,h=this._morphTicket,c=this._saveEpoch,d=this.lastHtml,f=this._diskBaseTicket,y=this._diskBase!==null;this._settledHandler=()=>{if(this._settledHandler=null,!(this.isDestroyed||this._startGen!==a)&&!Ae()&&!E()&&this._saveTicket===0&&this._morphTicket===h){if(d!==null&&this._applyGen===l&&this._saveEpoch===c&&this.lastHtml===d){let m=F({flushUndo:!1});this._setPeerBase(q(m),this.identity.exportMap(m,k),this._ticket())}y&&this._diskBaseTicket===f&&this._setDiskBase(z({emitForSync:!1}).forSave,this._ticket())}},document.addEventListener("clay:baseline-settled",this._settledHandler,{once:!0})}this._ready=Promise.all([this.lane==="live"?R():null,this._resolveProfile()]).then(()=>{this.isDestroyed||this._startGen!==a||this.connect()}),this.lane==="live"&&(this.listenForSnapshots(),ct().then(l=>this._startPresence(l,a),()=>{}),this._saveSavedHandler=()=>{this._saveEpoch++;let l=this._saveTicket||this._ticket();this._saveTicket=0,l>this._acceptedSaveTicket&&(this._acceptedSaveTicket=l);let h=u?u.getLastSavedBytes():null;h!=null&&this._setDiskBase(h,l),this._relayCommit()},document.addEventListener("clay:save-saved",this._saveSavedHandler),this._saveConflictHandler=l=>{let h=l.detail&&l.detail.etag;h&&queueMicrotask(()=>{this.isDestroyed||h===te()&&(u?.conflictResolvedBySync(h),this._saveAfterMerge(E(),!1))})},document.addEventListener("clay:save-conflict",this._saveConflictHandler))}cleanup(){this.sse&&(this.sse.close(),this.sse=null),ae(),V=[],D&&(D.presence.clear(),D.editingMarker.clear()),this._editing&&(this._editing.stop(),this._editing=null),this._presenceLease&&(this._presenceLease.detach(),this._presenceLease=null),this._lastRoster=null,this._snapshotHandler&&(document.removeEventListener("clay:snapshot-ready",this._snapshotHandler),this._snapshotHandler=null),this._saveSavedHandler&&(document.removeEventListener("clay:save-saved",this._saveSavedHandler),this._saveSavedHandler=null),this._saveConflictHandler&&(document.removeEventListener("clay:save-conflict",this._saveConflictHandler),this._saveConflictHandler=null),this._settledHandler&&(document.removeEventListener("clay:baseline-settled",this._settledHandler),this._settledHandler=null),this._queuedSend=null,this._rafHandle!=null&&(this._cancelFrame(this._rafHandle),this._rafHandle=null),this._pendingHtml=null,this._pendingSeq=null,this._pendingIdentityMap=null,this._pendingBy=null,this._pendingExternal=null,this._handoff=null,this._handoffHeld=!1,clearTimeout(this._holdRetryPeer),clearTimeout(this._holdRetryExt),this._holdRetryPeer=null,this._holdRetryExt=null,clearTimeout(this._startupRetry),this._startupRetry=null,clearTimeout(this._engineRetry),this._engineRetry=null,this._servedFetchId++}detectCurrentFile(){let e=window.location.pathname;if(e==="/")return"index.html";e=e.replace(/^\//,"");let t=e.match(/^(.*?\.html(?:clay)?)/);return t?t[1]:e}_resolveProfile(){return this._profilePromise||(this._profilePromise=We().then(e=>(this._sharedData=e.sharedData,this._sharedSync=e.sharedSync,this._liveData=e.liveData,this._profile=e.profile,this._log(`Wire profile: ${e.profile.name}`),e.profile))),this._profilePromise}_setHeld(e,t,n){let i=e==="live"?"_heldLive":"_heldExt";this[i]!==t&&(this[i]=t,!t&&!this._heldLive&&!this._heldExt&&Be({fresh:!0,clearIfMissing:!1}),document.dispatchEvent(new CustomEvent(t?"clay:sync-held":"clay:sync-resumed",{detail:{lane:e,el:n||null}})))}_applyEtagFrame(e){return typeof e.etag!="string"||typeof e.html=="string"?!1:(this._log("Dropping a stamp that arrived with no document: nothing proves this tab holds those bytes"),!0)}connect(){if(this.isDestroyed)return;let t=(this._profile||ce.legacy).streamPath(window.location.href,this.lane,this.resumeId,this.clientId);this.sse=new Ge(new URL(t,window.location.origin).href,{shared:this._sharedSync,sharedData:this._sharedData,documentURL:window.location.href,lane:this.lane,clientId:this.clientId,keepAliveWhenHidden:this._liveData&&this.lane==="live",startupCheck:!!De}),this._acquireEmptySaved&&(this._acquireEmptySaved=!1,this._fetchServedDocument(void 0,{repair:!0})),this.sse.onopen=()=>{console.log("[LiveSync] Connected"),this._editing&&this._editing.reconnected(),_e&&_e.reconnect(),this.onConnect&&this.onConnect()},this.sse.addEventListener("open",()=>je({clientId:this.clientId,lane:this.lane})),this.sse.addEventListener("error",()=>ae());for(let n of $e)this.sse.addEventListener(n,i=>{let r;try{r=JSON.parse(i.data)}catch{return}ze(n,r)});this.sse.addEventListener("cursor",n=>{let i;try{i=JSON.parse(n.data)}catch{return}if(!i||i.resync!==!0&&i.startup!==!0)return;let r=i.resync===!0,a=i.startup===!0&&!r;console.log(r?"[LiveSync] Server could not replay everything; refetching the document":"[LiveSync] Checking the served document against the version this tab was served"),this._fetchServedDocument(typeof i.seq=="number"?i.seq:void 0,{repair:r,startup:a})}),this.sse.addEventListener("presence",n=>{let i;try{i=JSON.parse(n.data)}catch{return}ut(i),this._lastRoster=i,this._editing&&this._editing.roster(i)}),this.sse.onmessage=n=>{let i=JSON.parse(n.data),{seq:r}=i;if(typeof r=="number"&&r<=this.lastSeenSeq){this._log(`Dropping stale message: seq=${r}, lastSeen=${this.lastSeenSeq}`);return}if(typeof r=="number"&&(this.lastSeenSeq=r),i.type==="notification"){if(this._maybeAcceptExternalChange(i))return;this.handleNotification(i);return}if(i.error){console.error("[LiveSync] Server error:",i.error),this.onError&&this.onError(new Error(i.error));return}if(this._applyEtagFrame(i))return;let{html:a,sender:l,identityMap:h}=i;if(l===this.clientId){this._log("Ignoring own message (sender matches clientId)");return}if(typeof a!="string"){console.error("[LiveSync] Received invalid html, ignoring");return}let c=typeof i.etag=="string"&&i.etag?i.etag:null;if(this.lane==="live"&&!c&&Me()){this._log(`Dropping an unstamped live frame on a stamping host (seq=${r})`);return}if(this.lane==="saved"&&a===this._represented.bytes){this._represented=Object.freeze({bytes:a,etag:c||null,seq:r??null}),P(c);return}if(c&&a===this.lastHtml){this._log(`Taking the stamp from a peer save of content already applied (seq=${r})`),P(c),u&&u.isSaveConflicted()&&(u.conflictResolvedBySync(c),this._saveAfterMerge(E(),!1));return}this._log(`Received update from: ${l} (my clientId: ${this.clientId}, seq=${r})`),this.applyUpdate(a,r,h,c,i.by),this.onUpdate&&this.onUpdate({html:a,sender:l,seq:r,identityMap:h,etag:c})},this.sse.onerror=()=>{this.sse.readyState===EventSource.CONNECTING?console.log("[LiveSync] Reconnecting..."):this.sse.readyState===EventSource.CLOSED&&(console.log("[LiveSync] Connection closed"),this.onError&&this.onError(new Error("Connection closed"))),this.onDisconnect&&this.onDisconnect()}}listenForSnapshots(){this._snapshotHandler=e=>{if(!e.detail||e.detail.forSave!==!0)return;this._saveTicket=this._ticket();let{documentElement:t}=e.detail;if(!t)return;this._log("snapshot-ready received, preparing to send");let n=q(t),i=this.identity.exportMap(t,k);this._savedSnapshot={html:n,identityMap:i,ticket:this._saveTicket}},document.addEventListener("clay:snapshot-ready",this._snapshotHandler)}_enqueueSend(e,t,n=null){if(!this._profile){this._queuedSend={html:e,identityMap:t,etag:n},this._resolveProfile().then(()=>this._flushQueuedSend());return}if(this._sendInFlight){this._queuedSend={html:e,identityMap:t,etag:n};return}this._postUpdate(e,t,n)}_flushQueuedSend(){if(this.isDestroyed||this._sendInFlight)return;let e=this._queuedSend;e&&(this._queuedSend=null,this._postUpdate(e.html,e.identityMap,e.etag))}_relayCommit(){if(this.isDestroyed)return;let e=te(),t=this._savedSnapshot;if(this._savedSnapshot=null,!t||typeof t.html!="string")return;let n=!e&&t.html===this.lastHtml;if(this._setPeerBase(t.html,t.identityMap,t.ticket),n){this._log("Skipping send - HTML unchanged");return}this._enqueueSend(t.html,t.identityMap,e||null)}_postUpdate(e,t,n=null,i=0){this._log(`Sending update (HTML length: ${e.length})`),this._sendInFlight=!0;let r=!1,a=this._profile||ce.legacy;fetch(new URL(a.relayPath,window.location.origin).href,{method:"POST",headers:{"Content-Type":"application/json",[a.documentHeader]:window.location.href,[Ne]:String(1)},body:JSON.stringify({[a.snapshotKey]:e,sender:this.clientId,identityMap:t,...n?{etag:n}:{}})}).then(l=>{l.ok||(console.warn("[LiveSync] Save returned status:",l.status),r=l.status>=500||l.status===408||l.status===429)}).catch(l=>{console.error("[LiveSync] Save failed:",l),this.onError&&this.onError(l),r=!0}).finally(()=>{this._sendInFlight=!1;let l=this._queuedSend;if(this._queuedSend=null,l){this._postUpdate(l.html,l.identityMap,l.etag);return}!r||!n||i>=3||this.isDestroyed||(this._sendInFlight=!0,setTimeout(()=>{if(this._sendInFlight=!1,this.isDestroyed)return;let h=this._queuedSend;this._queuedSend=null,h?this._postUpdate(h.html,h.identityMap,h.etag):this._postUpdate(e,t,n,i+1)},500*2**i))})}_startPresence(e,t){return this.isDestroyed||this._startGen!==t||this._presenceLease?null:e.connect({send:n=>this._postPresence(n)}).then(n=>this.isDestroyed||this._startGen!==t?(n?.detach(),null):(this._presenceLease=n||null,Pe("presence-editing")),()=>!1).then(n=>{if(!(!n||this.isDestroyed||this._startGen!==t||this._editing))return R().then(i=>{this.isDestroyed||this._startGen!==t||this._editing||(this._editing=new i.EditingSender({}),this._editing.start(),this._editing.roster(this._lastRoster))})})}_postPresence(e){let t=new URL("/_/presence",window.location.origin);return t.searchParams.set("client-id",this.clientId),fetch(t.href,{method:"POST",headers:{"Content-Type":"application/json","Document-URL":window.location.href},body:JSON.stringify(e)}).then(n=>n.ok,()=>!1)}_maybeAcceptExternalChange(e){if(this.lane!=="live")return!1;let t=e.data;return t&&t.kind==="external-change"?(typeof t.html=="string"?this._enqueueExternal(t.html,e.seq,t.etag,t.by):this._fetchExternalChange(e.seq),!0):typeof e.msg=="string"&&e.msg.endsWith("changed on disk outside this tab")?(this._fetchExternalChange(e.seq),!0):!1}_enqueueExternal(e,t,n,i){if(typeof t=="number"){if(t<=this._lastExternalSeq){this._log(`Dropping replayed external change: seq=${t}`);return}this._lastExternalSeq=t}this._pendingExternal={html:e,seq:t,saveEpoch:this._saveEpoch,etag:typeof n=="string"&&n?n:null,by:i??null},this._scheduleNextFrame()}_fetchExternalChange(e){if(typeof e=="number"){if(e<=this._lastExternalSeq)return;this._lastExternalSeq=e}this._fetchServedDocument(e)}_fetchServedDocument(e,{attempt:t=0,repair:n=!1,startup:i=!1}={}){if(i&&(this._morphInFlight||this._pendingHtml!=null||this._pendingExternal!=null)){this._retryStartup(t);return}let r=this._saveEpoch,a=this._startGen,l=this.lastSeenSeq,h=this._applyGen,c=++this._servedFetchId;n&&typeof e!="number"&&(e=this._lastExternalSeq),fetch(new URL(window.location.href),{cache:"no-store"}).then(d=>d.ok?d.text():null).then(d=>{if(this.isDestroyed||d==null||this._startGen!==a)return;let f=mt(d),y=i||n&&!!f;if(y){if(c!==this._servedFetchId){n&&this._retryStartup(t+1,{repair:n,startup:i},typeof e=="number"?Math.max(e,this._lastExternalSeq):e);return}if(r!==this._saveEpoch||l!==this.lastSeenSeq||h!==this._applyGen||this._morphInFlight||this._pendingHtml!=null||this._pendingExternal!=null){this._retryStartup(t+1,{repair:n,startup:i},e);return}if(f){if(f===ne()){(n||i)&&this.lane==="saved"&&(this._represented=Object.freeze({bytes:d,etag:f,seq:e??null}));return}}else if(!n)return}else if(typeof e=="number"&&e<this._lastExternalSeq){n&&t<3&&this._fetchServedDocument(this._lastExternalSeq,{attempt:t+1,repair:n,startup:i});return}else if(this._saveEpoch>r){t<3&&(console.log("[LiveSync] Refetching external change: own save landed mid-fetch"),this._fetchServedDocument(e,{attempt:t+1,repair:n,startup:i}));return}this._pendingExternal={html:d,seq:e,saveEpoch:r,etag:f,by:null,fetchOptions:{repair:n,startup:i,attempt:t,versionCheck:y},startGen:a,seenSeq:l,applyGen:h,fetchId:c},this._scheduleNextFrame()}).catch(d=>{this._log("External-change fetch failed",d),typeof e=="number"&&this._lastExternalSeq===e&&(this._lastExternalSeq=e-1)})}_retryStartup(e=0,t={startup:!0},n){this.isDestroyed||e>3||(clearTimeout(this._startupRetry),this._startupRetry=setTimeout(()=>{if(this._startupRetry=null,!this.isDestroyed){if(this._morphInFlight||this._pendingHtml!=null||this._pendingExternal!=null){this._retryStartup(e,t,n);return}this._fetchServedDocument(n,{...t,attempt:e})}},16))}applyUpdate(e,t,n,i,r){this.isDestroyed||(this._pendingHtml=e,this._pendingSeq=t,this._pendingIdentityMap=n,this._pendingEtag=i??null,this._pendingBy=r??null,this._scheduleNextFrame())}prepareHandoff(e={}){return this._handoff?Promise.resolve(this._handoff):this.isDestroyed?Promise.reject(new Error("LiveSync: stopped")):(this._handoffHeld=!0,this._rafHandle!=null&&(this._cancelFrame(this._rafHandle),this._rafHandle=null),import("./c-GSFIGKOP.js").then(({engineHandoff:t})=>t(this,e)).then(t=>this._handoff=t))}_scheduleNextFrame(){this.isDestroyed||this._handoffHeld||this._rafHandle==null&&(this._morphInFlight||(this._rafHandle=this._requestFrame(()=>this._runPending())))}async _runPending(){if(this._rafHandle=null,this.isDestroyed)return;if(!C()){this._morphInFlight=!0;try{await W()}catch(r){this._log("Merge engine failed to load",r),this._engineRetry=setTimeout(()=>this._scheduleNextFrame(),2e3);return}finally{this._morphInFlight=!1}if(this.isDestroyed)return}let e=this._pendingExternal,t=e?.fetchOptions||null,n=!!(t?.startup||t?.versionCheck),i=!1;if(e!=null&&(n&&this._pendingHtml!=null?i=!1:this._pendingHtml==null?i=!0:i=!(typeof e.seq=="number"&&typeof this._pendingSeq=="number"&&this._pendingSeq<e.seq)),i)if(this._pendingExternal=null,typeof e.seq=="number"&&e.seq<this._lastExternalSeq)n&&t?.repair?this._retryStartup((t.attempt||0)+1,t,this._lastExternalSeq):this._log("Dropping superseded external change at drain");else if(n&&e.startGen!==this._startGen)this._log("Dropping superseded startup check at drain");else if(n&&e.fetchId!==this._servedFetchId)t?.repair?this._retryStartup((t.attempt||0)+1,t,this._lastExternalSeq):this._log("Dropping superseded startup check at drain");else if(n&&(e.saveEpoch!==this._saveEpoch||e.seenSeq!==this.lastSeenSeq||e.applyGen!==this._applyGen))this._retryStartup((t.attempt||0)+1,t,e.seq);else if(n&&e.etag!=null&&e.etag===ne())this._log("Startup check found the same version: nothing to apply");else if(!n&&e.saveEpoch!==this._saveEpoch)console.log("[LiveSync] Refetching external change: own save landed after queue"),this._fetchServedDocument(e.seq,t||{});else{this._morphInFlight=!0;try{await this._doApplyExternal(e.html,e.seq,e.etag,e.by,t)}catch(r){console.error("[LiveSync] applyExternal failed:",r)}finally{this._morphInFlight=!1}}else{let r=this._pendingHtml,a=this._pendingSeq,l=this._pendingIdentityMap,h=this._pendingEtag,c=this._pendingBy;if(this._pendingHtml=null,this._pendingSeq=null,this._pendingIdentityMap=null,this._pendingEtag=null,this._pendingBy=null,r==null)return;this._morphInFlight=!0;try{await this._doApplyUpdate(r,a,l,h,c)}catch(d){console.error("[LiveSync] applyUpdate failed:",d)}finally{this._morphInFlight=!1}}!this.isDestroyed&&(this._pendingHtml!=null||this._pendingExternal!=null)&&this._scheduleNextFrame()}_ticket(){return++this._agreeSeq}_setDiskBase(e,t){t<=this._diskBaseTicket||(this._diskBase=e,this._diskBaseTicket=t)}_setPeerBase(e,t,n){return n<this._peerBaseTicket?!1:(this._peerBaseTicket=n,this.lastHtml=e,this._lastIdentityMap=t&&typeof t=="object"&&!Array.isArray(t)?t:null,!0)}_requestFrame(e){return typeof window<"u"&&typeof window.requestAnimationFrame=="function"?window.requestAnimationFrame(e):setTimeout(e,16)}_cancelFrame(e){if(typeof window<"u"&&typeof window.cancelAnimationFrame=="function"){window.cancelAnimationFrame(e);return}clearTimeout(e)}async _mergeIncoming(e,t,{base:n,baseIdentityMap:i=null,captureLocal:r,synthetic:a,source:l="peer",seq:h=null,etag:c=null,extra:d={}}){C()||await W();let{beginApply:f,completeApply:y,failApply:m,beginLineageCapture:w}=Xe()||await Y(),p,v=o=>{p=w(x.list());try{let g=C().HyperMorph.mergeDocument({...o,lineage:p.lineage});return p.returned(),g}catch(g){throw p.invalidate(x.list()),p.finish(x.list()),g}},b=this.identity,st=xe,T=yt(new WeakMap),B=o=>pe(o)?{first:T,map:o,then:T}:T,N=a?o=>T(o)||b.idOf(k(o)||o)||null:T,I=e,me=new Map;if(pe(t)){I=new DOMParser().parseFromString(e,"text/html"),ee(I);let o=C().HyperMorph.importMap(I.documentElement,t);for(let g of I.querySelectorAll("[data-id], [id]")){let S=T(g),we=S&&o.get(g);we&&me.set(S,we)}}I=Qe(I);let X={live:document,remote:I,ignore:o=>o.matches(tt),opaque:o=>o.matches(nt)||j()&&Ce(o),remoteWins:o=>o.matches(pt),ignoreAttribute:(o,g,S)=>_t(o,g,S)||j()&&He(S||o,g),attributeMerge:Je,protectFocusedValue:!0,keepLiveOnly:l==="peer",scripts:{mergeTags:C().mergeTagRecognizers},hooks:{beforeAttributeUpdated:st},...d},ve=this.lane==="live"&&E(),Se=le(),O,K=null,L=null;if(n==null)O=v({...X,base:null,local:{root:J(r()),toLive:k},identity:{local:N,remote:B(t)}});else if(ve){let o=r(),g=o.cloneNode(!0);K=J(o),L=f({source:l,seq:h,etag:c,root:K,recoveryRoot:g,domain:l==="disk"?"save":"sync"});try{O=v({...X,base:Qe(n),local:{root:K,toLive:k},identity:{base:B(i),local:N,remote:B(t)}})}catch(S){throw m(L,S),S}}else{let o=J(r()),g=o.ownerDocument;g.documentElement!==o&&g.replaceChild(o,g.documentElement),O=v({...X,base:g,local:{root:o,toLive:k},fastPath:!0,identity:{base:N,local:N,remote:B(t)}})}let U=this._ticket();this._morphTicket=U;let H;try{H=await O}catch(o){p.invalidate(x.list());try{L&&m(L,o,{ticket:U})}finally{p.finish(x.list())}throw o}let rt=le().gen!==Se.gen,Ee;try{p.prepareComplete(H,x.list()),Ee=L?y(L,H.conflicts,{ticket:U}):[]}finally{p.finish(x.list())}ve&&!H.localDiverged&&Oe(Se);let lt=new Set(pe(t)?Object.values(t):[]);for(let[o,g]of H.identities){let S=lt.has(g)?g:me.get(g);S&&b.adopt(o,S)}return{report:H,ticket:U,typedDuringWait:rt,conflictIds:Ee}}_saveAfterMerge(e,t){(e||t)&&Ue()&&(u?u.savePageThrottled():ft())}async _doApplyUpdate(e,t,n,i,r=null){if(oe(e)){await he();return}this.lane==="live"&&!u&&await R(),this._log("applyUpdate - pausing mutations and morphing"),this.isPaused=!0;let a=window.scrollX,l=window.scrollY;A.pause(),se();let h=!1,c=!1,d=!1;try{if(this.lane==="live"&&E()&&this.lastHtml===null){console.log("[LiveSync] Holding incoming update: unsaved local edits and no baseline to merge against"),this._setHeld("live",!0,null);let p=this._saveEpoch,v=this.lastSeenSeq;clearTimeout(this._holdRetryPeer),this._holdRetryPeer=setTimeout(()=>{this._holdRetryPeer=null,!(this.isDestroyed||this._pendingHtml!=null)&&this._saveEpoch===p&&this.lastSeenSeq===v&&(this._pendingHtml=e,this._pendingSeq=t,this._pendingIdentityMap=n,this._pendingBy=r,this._scheduleNextFrame())},3e3);return}this._setHeld("live",!1);let{report:f,ticket:y,typedDuringWait:m,conflictIds:w}=await this._mergeIncoming(e,n,{base:this.lastHtml,baseIdentityMap:this._lastIdentityMap,captureLocal:()=>F({flushUndo:!1}),synthetic:!0,source:"peer",seq:t,etag:i});if(h=f.localDiverged,c=m,Z(),window.scrollTo(a,l),this._setPeerBase(e,n,y),this._applyGen++,this._acceptedSaveTicket>y||(typeof i=="string"&&i?(P(i),d=!0):ie()),this.lane==="live"&&!h&&!E()){let{forSave:p,forComparison:v,forDirty:b}=z({emitForSync:!1,flushUndo:!1});u.setLastSavedBaselines(v,b),this._setDiskBase(p,this._ticket())}this.lane==="saved"&&(this._represented=Object.freeze({bytes:e,etag:i||null,seq:t??null})),document.dispatchEvent(new CustomEvent("clay:sync-applied",{detail:{seq:t,source:this.lane==="saved"?"disk":"peer",lane:this.lane,by:r||null,html:e,report:f,unresolved:this.unresolvedConflicts,conflictIds:w}}))}finally{this._log("applyUpdate - morph complete, resuming mutations"),A.resume(),re(),await new Promise(f=>setTimeout(f,0)),this.isPaused=!1}d&&u?.conflictResolvedBySync(i),this._saveAfterMerge(h,c)}async _doApplyExternal(e,t,n=null,i=null,r=null){if(oe(e)){await he();return}this.lane==="live"&&!u&&await R();let a=this._diskBase;this._log(`applyExternal - external disk change (seq=${t})`),this.isPaused=!0;let l=window.scrollX,h=window.scrollY;A.pause(),se();let c=!1,d=!1,f=!1;try{if(this.lane==="live"&&E()&&this._diskBase===null){if(console.log("[LiveSync] Holding external change: unsaved local edits and no baseline to merge against"),this._setHeld("external",!0,null),r?.startup||r?.versionCheck){clearTimeout(this._holdRetryExt),this._holdRetryExt=setTimeout(()=>{if(this._holdRetryExt=null,this.isDestroyed)return;let b=typeof t=="number"?Math.max(t,this._lastExternalSeq):t;this._retryStartup(0,r,b)},3e3);return}let v=this._saveEpoch;clearTimeout(this._holdRetryExt),this._holdRetryExt=setTimeout(()=>{this._holdRetryExt=null,!(this.isDestroyed||this._pendingExternal!=null)&&(this._pendingExternal={html:e,seq:t,saveEpoch:v,etag:n,by:i},this._scheduleNextFrame())},3e3);return}this._setHeld("external",!1);let{report:y,ticket:m,typedDuringWait:w,conflictIds:p}=await this._mergeIncoming(e,null,{base:this._diskBase,captureLocal:()=>qe().saveClone,synthetic:!1,source:"disk",seq:t,etag:n,extra:{beforeApply:v=>vt(v.documentElement,this.lane)}});if(c=y.localDiverged,d=w,Z(),this._setDiskBase(e,m),window.scrollTo(l,h),this._acceptedSaveTicket>m||(typeof n=="string"&&n?(P(n),f=!0):ie()),this.lane==="live"&&!c&&!E()){u.setLastSavedBaselines(...St()),u.setUnsavedChanges(!1);let v=F({flushUndo:!1});this._setPeerBase(q(v),this.identity.exportMap(v,k),m),this._applyGen++}this.lane==="saved"&&(this._represented=Object.freeze({bytes:e,etag:n||null,seq:t??null})),document.dispatchEvent(new CustomEvent("clay:sync-applied",{detail:{seq:t,source:"disk",etag:typeof n=="string"&&n?n:null,by:i||null,html:e,report:y,conflictIds:p,unresolved:this.unresolvedConflicts}}))}finally{this._log("applyExternal - morph complete, resuming mutations"),A.resume(),re(),await new Promise(y=>setTimeout(y,0)),this.isPaused=!1}f&&u?.conflictResolvedBySync(n),this._saveAfterMerge(c,d),a!=null&&$(a)===$(e)&&u&&u.schedulePaintHeal(()=>this._diskBase==null?null:$(this._diskBase))}handleNotification({msgType:e,msg:t,action:n,persistent:i,data:r}){this._log(`Notification received: ${e} - ${t}`),e==="data-loss"||(i&&window.toastPersistent?window.toastPersistent(t,e):window.toast?window.toast(t,e):console.log(`[LiveSync] Notification: ${t}`)),document.dispatchEvent(new CustomEvent("clay:notification",{detail:{msgType:e,msg:t,action:n,persistent:i,data:r}})),this.onNotification&&this.onNotification({msgType:e,msg:t,action:n,persistent:i,data:r})}stop(){this.cleanup(),this.isDestroyed=!0,console.log("[LiveSync] Stopped")}editParticipant(){return R().then(e=>e.syncParticipant(this))}},ye=new ge;typeof window<"u"&&!Ze&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>ye.start()):ye.start());var Yt=(s,e,t)=>W().then(({morph:n})=>n(s,e,t));var Jt=ye;export{x as a,tt as b,pt as c,ge as d,ye as e,Yt as f,Jt as g};
@@ -1 +0,0 @@
1
- import{d as b,e as m}from"./c-PGRCK73F.js";import"./c-R7IWVINQ.js";import"./c-IW6GGOU2.js";import"./c-HAWFNBYG.js";import{e as d,f as h,g as l,h as w}from"./c-4DFEJ2PO.js";import"./c-6CRUUXOX.js";import"./c-WWXIDH4O.js";import"./c-TCCA5BZN.js";import"./c-5V3MOVJT.js";import"./c-6NC5I2TV.js";import"./c-XCNTK76U.js";import"./c-ZWIOJGMT.js";import"./c-IJUK2GPW.js";import{c as T}from"./c-BPF2NSPV.js";import{e as v}from"./c-SPIORRYS.js";import"./c-XQXZAO7N.js";import"./c-S7LK4KUE.js";import"./c-VG5XIN4T.js";import"./c-2YYDMLNZ.js";import"./c-HA6INT6J.js";import"./c-DCFSEJZG.js";import"./c-WRBKEJD4.js";import"./c-VHNSBD2M.js";v(b);var A=1,y=class extends Error{constructor(a,o){super(o),this.name="PageCheckpointError",this.code=a}},k=(e,a)=>{throw new y(e,a)},t=(e,a)=>({ok:!1,code:e,message:a}),P=/^[0-9a-f]{64}$/,j=/^[0-9a-f]{32}$/,E=e=>!!e&&typeof e=="object"&&!Array.isArray(e);function H(e){return{v:e.v,g:e.g,y:{...e.y??{}}}}function I(e){let a;try{a=JSON.parse(e)}catch{k("invalid-state","The page state is not JSON")}return(!E(a)||a.v!==1)&&k("invalid-state","Expected a version 1 Yjs page value"),{state:H(a),bytes:h(a)}}var S=e=>e==null?"":String(e);async function N({href:e,etag:a,fetch:o=globalThis.fetch,signal:s=null}={}){if(typeof a!="string"||!a)return t("missing-etag","A conditional read needs the accepted ETag");if(typeof e!="string"||!e)return t("no-page-state","This host names no page-state resource");if(typeof o!="function")return t("unavailable","This tab cannot read the page state");let i=globalThis.location?.href??"http://localhost/",u;try{u=new URL(e,i).href}catch{return t("no-page-state","The page-state resource is not a URL")}let c=T(),n;try{n=await o(u,{method:"GET",credentials:c?"omit":"same-origin",headers:{"If-Match":a,"Document-URL":globalThis.location?.href??i},cache:"no-store",redirect:"manual",signal:s})}catch{return t("unavailable","The page-state request did not complete")}if(!n||typeof n.status!="number")return t("unavailable","The page-state request did not answer");if(n.status===412)return t("etag-mismatch","Another version of this document is stored");if(n.status===428)return t("etag-required","The host needs a condition this read cannot send");if(n.status===404)return t("no-page-state","This host keeps no page state");if(!n.ok)return t("unavailable",`The host answered ${n.status}`);let r;try{r=JSON.parse(await n.text())}catch{return t("invalid-state","The page-state answer is not JSON")}return!E(r)||r.version!==A?t("unsupported-version","Unknown page-state version"):typeof r.tag!="string"||!r.tag?t("invalid-state","The page-state answer carries no page tag"):typeof r.stateHash!="string"||!P.test(r.stateHash)?t("invalid-state","The page-state answer carries no state digest"):typeof r.generation!="string"||!j.test(r.generation)?t("invalid-state","The page-state answer carries no generation"):typeof r.etag!="string"||!r.etag?t("invalid-state","The page-state answer carries no ETag"):Object.hasOwn(r,"documentId")?{ok:!0,version:r.version,documentId:r.documentId,generation:r.generation,etag:r.etag,stateHash:r.stateHash,tag:r.tag}:t("invalid-state","The page-state answer carries no document identity")}async function _(e,{accepted:a,article:o,etag:s}={}){if(!e||e.ok!==!0)return t(e?.code??"unavailable",e?.message??"The page state was not read");if(S(e.documentId)!==S(a?.authority?.documentId))return t("foreign-document","The page state belongs to another document");if(typeof a?.lineage?.generation!="string"||e.generation!==a.lineage.generation)return t("foreign-generation","The page state belongs to another generation");if(e.etag!==s)return t("etag-mismatch","The page state belongs to another version of this document");let i,u;try{({state:u,bytes:i}=I(e.tag))}catch(n){return t(n?.code??"invalid-state",n?.message??"The page state does not decode")}if(await d(i)!==e.stateHash)return t("state-digest-mismatch","The page state is not the one the host hashed");if(typeof o!="string")return t("missing-article","A proof names the final outgoing article");let c;try{c=m(u)}catch(n){return t("invalid-state",n?.message??"The page state does not project")}return c!==o?t("article-mismatch","The page state does not project to the accepted article"):{ok:!0,state:u,receipt:{file:e.etag,pageState:e.stateHash}}}async function O(e,a){let o=(a||[]).map(({id:s,revision:i})=>({id:s,revision:i}));try{return{ok:!0,proof:e,covered:await w(e,o)}}catch(s){return t(s?.code??"invalid-proof",s?.message??"The proof does not validate")}}async function R({capture:e,records:a=[],accepted:o,article:s,state:i=null,etag:u=null}={}){if(!i)return t("no-capture-state","No page state was pinned to this capture");if(typeof u!="string"||!u)return t("missing-etag","An accepted save with no ETag proves no stored pair");if(typeof s!="string")return t("missing-article","The accepted bytes hold no article");let c,n;try{c=m(i),n=h(i)}catch(p){return t(p?.code??"invalid-state",p?.message??"The pinned page state does not decode")}if(c!==s)return t("article-mismatch","The pinned page state does not project to the accepted article");let r;try{r=await l({capture:e,records:a,accepted:o,article:s,state:i,receipt:{file:u,pageState:await d(n)}})}catch(p){return t(p?.code??"invalid-proof",p?.message??"The proof could not be built")}return O(r,a)}async function B({read:e,capture:a,records:o=[],accepted:s,article:i,etag:u=null}={}){let c=await _(e,{accepted:s,article:i,etag:u});if(!c.ok)return c;let n;try{n=await l({capture:a,records:o,accepted:s,article:i,state:c.state,receipt:c.receipt})}catch(r){return t(r?.code??"invalid-proof",r?.message??"The proof could not be built")}return O(n,o)}async function G({channel:e,records:a=[],capture:o,accepted:s,article:i,state:u=null,etag:c=null,href:n=null,read:r=N,fetch:p}={}){if(!e||typeof e.checkpoint!="function")return{ok:!1,code:"no-channel",retired:[],proof:null};let f=await R({capture:o,records:a,accepted:s,article:i,state:u,etag:c});if(!f.ok){let x=await r({href:n,etag:c,fetch:p});f=await B({read:x,capture:o,records:a,accepted:s,article:i,etag:c})}if(!f.ok)return{ok:!1,code:f.code,retired:[],proof:null};let g=await e.checkpoint({records:f.covered,proof:f.proof});return!g||g.ok!==!0?{ok:!1,code:g?.code??"checkpoint-failed",retired:[],proof:f.proof}:{ok:!0,retired:g.retired??[],proof:f.proof}}export{A as PAGE_STATE_VERSION,y as PageCheckpointError,R as captureProof,G as checkpointAccepted,N as readPageState,B as refetchedProof,_ as verifyPageState};
@@ -1 +0,0 @@
1
- import{a as K}from"./c-BWFVSBDF.js";import{d as A}from"./c-VRZN56XY.js";var p=1,P=8*1024,B=256,L=1024,Y=128,X=128,G=Object.freeze(["title","description","labels","members","dates","checklist","comment","attachments"]),m=250,E=5e3,ie=15e3;var W=new Set(["kind","id","field"]),$=new Set(["kind","v","epoch","generation","selection"]),q=new Set(["kind","anchor","head"]),F=new Set(["kind","ids"]),J=new Set(["kind","block","row","col"]),V=new Set(["block","rel"]),H=/^[\x20-\x7e]+$/,U=/^[A-Za-z0-9+/]+={0,2}$/,Z=/[\u0000-\u001f\u007f]/,o=e=>({ok:!1,reason:e}),a=e=>({ok:!0,target:e}),g=e=>!!e&&typeof e=="object"&&!Array.isArray(e),d=(e,t)=>{for(let n of Object.keys(e))if(!t.has(n))return!1;return!0};function T(e){let t=0;for(let n of e){let s=n.codePointAt(0);t+=s<128?1:s<2048?2:s<65536?3:4}return t}function f(e){return typeof e=="string"&&e.length>0&&!Z.test(e)&&T(e)<=B}function Q(e){if(typeof e!="string"||!e.length||e.length%4!==0||!U.test(e))return!1;let t=e.endsWith("==")?2:e.endsWith("=")?1:0;return e.length/4*3-t<=L}function _(e){return!g(e)||!d(e,V)||!f(e.block)||!Q(e.rel)?null:{block:e.block,rel:e.rel}}function v(e){if(!g(e))return null;if(e.kind==="text"){if(!d(e,q))return null;let t=_(e.anchor),n=_(e.head);return t&&n?{kind:"text",anchor:t,head:n}:null}if(e.kind==="blocks"){if(!d(e,F)||!Array.isArray(e.ids)||!e.ids.length||e.ids.length>X)return null;for(let t of e.ids)if(!f(t))return null;return{kind:"blocks",ids:[...e.ids]}}return e.kind==="cell"?!d(e,J)||!f(e.block)||!f(e.row)||!f(e.col)?null:{kind:"cell",block:e.block,row:e.row,col:e.col}:null}function w(e){return T(JSON.stringify(e))<=P}function ee(e){if(!d(e,W))return o("key");let t=e.id;if(typeof t!="string"||!t.length||t.length>Y||!H.test(t))return o("id");if(e.field===void 0){let s={kind:"record",id:t};return w(s)?a(s):o("size")}if(typeof e.field!="string"||!G.includes(e.field))return o("field");let n={kind:"record",id:t,field:e.field};return w(n)?a(n):o("size")}function te(e){if(!d(e,$))return o("key");if(e.v!==p)return o("version");if(!f(e.epoch))return o("epoch");if(!Number.isSafeInteger(e.generation)||e.generation<0)return o("generation");let t=v(e.selection);if(!t)return o("selection");let n={kind:"page",v:p,epoch:e.epoch,generation:e.generation,selection:t};return w(n)?a(n):o("size")}function y(e){return e===null?a(null):typeof e=="string"?K.test(e)?a(e):o("path"):g(e)?e.kind==="record"?ee(e):e.kind==="page"?te(e):o("kind"):o("shape")}function O(e){let t=y(e===void 0?null:e);return!t.ok||t.target!==null&&typeof t.target=="object"&&t.target.kind!=="record"?null:t.target}function R(e){return e==null?"":typeof e=="string"?`path:${e}`:`target:${JSON.stringify(e)}`}function z(e,t=null){let n=Array.isArray(e)?e:[],s=[];for(let i of n){if(!g(i))continue;let r=f(i.id)?i.id:null;if(!r)continue;let l=Number.isSafeInteger(i.n)&&i.n>=0?i.n:0,h=t&&t.get(r);if(h&&l<h.n){s.push(h);continue}let u=y(i.editing===void 0?null:i.editing);s.push({id:r,you:i.you===!0,n:l,editing:u.ok?u.target:null})}return s}function I(e){if(!g(e))return null;let t=f(e.id)?e.id:null,n=typeof e.token=="string"&&e.token.length?e.token:null;return t&&n?{id:t,token:n}:null}function N({target:e=null,session:t=null,n=0}){if(e==null||typeof e=="string")return{editing:e??null};let s=t&&typeof t.token=="string"&&t.token.length?t.token:null;return s?!Number.isSafeInteger(n)||n<0?null:{v:p,session:s,n,editing:e}:e.kind==="record"?{editing:e}:null}var ne=()=>Object.freeze({supported:!1,recordAwareness:!1,pageAwareness:!1,people:Object.freeze([]),anonymous:0}),S=class{constructor(){this.supported=!1,this.recordAwareness=!1,this.pageAwareness=!1,this.people=[],this.anonymous=0,this.snapshot=ne(),this.listeners=new Set,this.sessions=new Map,this.session=null,this.target=null,this.heldKey="",this.owner=null,this.explicit=!1,this.connecting=null,this.n=0,this.sentKey=null,this.timer=null,this.timerKind=null,this.inflight=!1}getSnapshot(){return this.snapshot}subscribe(t){if(typeof t!="function")throw new TypeError("clay.presence.subscribe needs a listener function");return this.listeners.add(t),t(this.snapshot),()=>{this.listeners.delete(t)}}setCapabilities({supported:t=!1,recordAwareness:n=!1,pageAwareness:s=!1}={}){let i=t===!0,r=n===!0,l=s===!0;return i===this.supported&&r===this.recordAwareness&&l===this.pageAwareness?this.snapshot:(this.supported=i,this.recordAwareness=r,this.pageAwareness=l,this.emit())}receive(t){let n=t&&typeof t=="object"?t:{},s=Array.isArray(n.people)?n.people:[],i=this.sessions,r=new Map,l=[];for(let c of s){if(!c||typeof c.id!="string"||!c.id)continue;let D=typeof c.name=="string"&&c.name.trim()?c.name.trim():"Someone",k=z(c.sessions,i);for(let b of k)r.set(b.id,b);let x={id:c.id,name:D,you:c.you===!0,editing:O(c.editing),sessions:k};typeof c.canEdit=="boolean"&&(x.canEdit=c.canEdit),l.push(x)}this.people=l,this.sessions=r;let h=n.anonymous;this.anonymous=typeof h=="number"&&Number.isFinite(h)&&h>0?Math.floor(h):0;let u=I(n.selfSession),M=!this.session||!this.session.token;u&&(this.session=u);let j=this.emit();return u&&M&&this.owner&&this.target!==null&&(this.sentKey=null,this.flush()),j}clear(){return this.people=[],this.anonymous=0,this.sessions=new Map,this.session=null,this.cancel(),this.sentKey=null,this.emit()}setTarget(t){let n=y(t===void 0?null:t);return n.ok?(this.explicit=!0,this.hold(n.target)):!1}setGeneric(t){if(this.explicit)return!1;let n=y(t===void 0?null:t);return n.ok?this.hold(n.target):!1}releaseTarget(){return this.explicit?(this.explicit=!1,this.hold(null)):!1}hold(t){let n=R(t);return n===this.heldKey?(this.owner&&this.sentKey!==n&&this.schedule(m),!0):(this.target=t,this.heldKey=n,t===null?(this.cancel(),this.flush(),!0):(this.schedule(m),!0))}attachTransport(t){if(!t||typeof t.send!="function")throw new TypeError("clay.presence.attachTransport needs a transport with a send function");let n=this,s={send:t.send,get active(){return n.owner===s},detach(){n.owner===s&&(n.owner=null,n.session=null,n.n=0,n.sentKey=null,n.cancel(),n.target=null,n.heldKey="",n.explicit=!1,n.clear())}};return this.owner=s,this.session=null,this.n=0,this.sentKey=null,this.cancel(),this.target!==null&&this.flush(),s}connect({send:t=null}={}){return this.connecting?this.connecting:(this.connecting=A().then(n=>{let s=Array.isArray(n?.extensions)?n.extensions:[],i=n?.document&&typeof n.document=="object"?n.document.awareness:null;if(i&&i.transport==="broadcast"&&(s.includes("page-awareness-v1")||s.includes("record-awareness-v1"))){let r=typeof i.scope=="string"&&i.scope?i.scope:null;return import("./c-Q622NS2Y.js").then(({localPresence:l})=>l({scope:r,store:this}).start()??null)}return typeof t=="function"&&s.includes("presence-editing")?this.attachTransport({send:t}):null}).finally(()=>{this.connecting=null}),this.connecting)}reconnect(){this.session=null,this.n=0,this.sentKey=null,this.cancel(),!(!this.owner||this.target===null)&&this.flush()}emit(){let t=this.people.map(n=>Object.freeze({...n,sessions:Object.freeze(n.sessions)}));this.snapshot=Object.freeze({supported:this.supported,recordAwareness:this.recordAwareness,pageAwareness:this.pageAwareness,people:Object.freeze(t),anonymous:this.anonymous});for(let n of[...this.listeners])n(this.snapshot);return this.snapshot}schedule(t,n="coalesce"){if(this.timer!==null){if(this.timerKind==="coalesce")return;clearTimeout(this.timer)}this.timerKind=n,this.timer=setTimeout(()=>{this.timer=null,this.timerKind=null,this.flush()},t)}cancel(){this.timer!==null&&(clearTimeout(this.timer),this.timer=null,this.timerKind=null)}renew(){this.timer!==null||!this.owner||this.target===null||this.schedule(E,"renew")}flush(){if(this.inflight)return;let t=this.owner;if(!t)return;let n=this.n+1,s=N({target:this.target,session:this.session,n});if(!s)return;this.cancel(),this.sentKey=this.heldKey,this.inflight=!0,s.v===p&&(this.n=n);let i=r=>{if(this.inflight=!1,this.owner===t){if(this.heldKey!==this.sentKey){this.flush();return}r?this.renew():this.schedule(E,"renew")}};Promise.resolve(t.send(s)).then(r=>i(!!r),()=>i(!1))}},C=new S,le=C;typeof window<"u"&&(window.clay=window.clay||{},window.clay.presence||(window.clay.presence=C));export{p as a,E as b,ie as c,y as d,S as e,C as f,le as g};
@@ -1 +0,0 @@
1
- import{a,b,c}from"./c-ZUCOKOHT.js";import"./c-OIBUTDXI.js";import"./c-4JZDZFF6.js";import"./c-VAK7SG37.js";import"./c-NUHP2XDB.js";import"./c-VHNSBD2M.js";export{c as default,b as dismissPersistent,a as toastPersistent};
@@ -1 +0,0 @@
1
- import{c as a}from"./c-4Q2XTQ2N.js";import"./c-LRPUO2MX.js";import"./c-VHNSBD2M.js";export{a as createToolHost};
@@ -1 +0,0 @@
1
- import{f as h}from"./c-GFJJEBTU.js";import"./c-BWFVSBDF.js";import{b as m,c as f}from"./c-RVMWGXEJ.js";import{b as n,c as r}from"./c-NUHP2XDB.js";import{e as c}from"./c-VRZN56XY.js";import"./c-OW5QIGG3.js";import"./c-BPF2NSPV.js";import"./c-P7KNDG34.js";import"./c-CYWLPPUS.js";import"./c-N7JPUPGC.js";import"./c-HA6INT6J.js";import"./c-DCFSEJZG.js";import"./c-WRBKEJD4.js";import"./c-VHNSBD2M.js";var x=30,b=6,e=null,u=null;function y(){return u??=Promise.all([import("./c-6HMB24EV.js"),import("./c-ZE46QDIH.js")]).then(([o,t])=>e={pageScheme:o.pageScheme,RUNTIME_ONLY:o.RUNTIME_ONLY,TOKENS:t.TOKENS,SHADOW:t.SHADOW,FONT:`600 11px/1 ${t.FONT_MONO}`,LABEL_FONT:`500 11px/1.4 ${t.FONT_MONO}`}).catch(o=>{throw u=null,o}),u}var O=()=>y().then(()=>!0,()=>!1),a=["all:initial","color-scheme:inherit","direction:ltr","unicode-bidi:isolate"],N="#FFFCF6";function l(o){return o.setAttribute("clay",e.RUNTIME_ONLY),o}function T(o){return{people:o.people.map(i=>({id:i.id,name:i.name,you:i.you})),anonymous:o.anonymous}}var d=class{constructor(){this.roster={people:[],anonymous:0},this.root=null,this.stack=null,this.count=null,this.tip=null,this._gate=null}supported(){return this._gate||(this._gate=Promise.all([c("presence"),c("record-awareness-v1"),c("page-awareness-v1")]).then(([t,i,s])=>(h.setCapabilities({supported:t,recordAwareness:i,pageAwareness:s}),t===!0),()=>!1)),this._gate}async update(t){let i=T(h.receive(t)),s=this.root&&JSON.stringify(i)===JSON.stringify(this.roster);if(this.roster=i,!!await this.supported()){if(s){n(this.root,"color-scheme",e.pageScheme());return}await this.render()}}clear(){h.clear(),this.roster={people:[],anonymous:0},this.root&&(this.root.remove(),this.root=null,this.stack=null,this.count=null,this.tip=null)}async render(){let{people:t,anonymous:i}=this.roster;if(t.length+i<=1){this.hide();return}if(await O()&&this.build()){this.hideTip(),n(this.root,"color-scheme",e.pageScheme()),this.stack.textContent="";for(let s of t)this.stack.appendChild(this.avatar(s));this.stack.firstElementChild&&n(this.stack.firstElementChild,"margin-left","0"),i>0?(this.count.textContent=`+${i} viewing`,n(this.count,"display","inline-block")):(this.count.textContent="",n(this.count,"display","none")),n(this.root,"display","flex")}}hide(){this.root&&(this.hideTip(),this.stack.textContent="",this.count.textContent="",n(this.root,"display","none"))}build(){return this.root?!0:typeof document>"u"||!document.body?!1:(this.root=l(r("div",[...a,`color-scheme:${e.pageScheme()}`,"position:fixed","top:calc(12px + env(safe-area-inset-top,0px))","right:calc(12px + env(safe-area-inset-right,0px))","z-index:2147483000","display:flex","align-items:center","gap:8px","max-width:calc(100vw - 24px)",`font:${e.LABEL_FONT}`,`color:${e.TOKENS.ink}`,"pointer-events:none"])),this.root.setAttribute("data-clay-presence",""),this.count=l(r("span",[...a,"box-sizing:border-box","flex:none","white-space:nowrap","padding:3px 8px","border-radius:0",`background:${e.TOKENS.surface}`,`color:${e.TOKENS.muted}`,`border:1px solid ${e.TOKENS["line-2"]}`,`font:${e.LABEL_FONT}`,"letter-spacing:.02em",`box-shadow:${e.SHADOW}`,"display:none","pointer-events:none"])),this.count.setAttribute("data-clay-presence-count",""),this.stack=l(r("div",[...a,"display:flex","align-items:center","flex:none","pointer-events:none"])),this.tip=l(r("span",[...a,"position:absolute","top:100%","right:0","margin-top:6px","box-sizing:border-box","white-space:nowrap","pointer-events:none","padding:5px 9px","border-radius:0",`background:${e.TOKENS.ink}`,`color:${e.TOKENS.ground}`,`font:${e.LABEL_FONT}`,"letter-spacing:.02em",`box-shadow:${e.SHADOW}`,"display:none"])),this.tip.setAttribute("data-clay-presence-tip",""),this.root.append(this.stack,this.count,this.tip),document.body.appendChild(this.root),!0)}avatar(t){let i=m(t.id),s=[`background-color:${N}`,`color:${i}`,`border-color:${i}`],p=l(r("div",[...a,"box-sizing:border-box","flex:none",`width:${x}px`,`height:${x}px`,"border-radius:0","display:flex","align-items:center","justify-content:center",`font:${e.FONT}`,"letter-spacing:.02em",`margin-left:-${b}px`,"border-width:2px","border-style:solid","background-image:none",`box-shadow:${e.SHADOW}`,"user-select:none","cursor:default","pointer-events:auto",...s],f(t.name)));p.setAttribute("data-clay-presence-avatar","");let g=t.you?`${t.name} (you)`:t.name;return p.addEventListener("mouseenter",()=>this.showTip(g)),p.addEventListener("mouseleave",()=>this.hideTip()),p}showTip(t){this.tip&&(this.tip.textContent=t,n(this.tip,"display","block"))}hideTip(){this.tip&&(this.tip.textContent="",n(this.tip,"display","none"))}},E=new d;var v=E;export{d as Presence,v as default,E as presence};
@@ -1 +0,0 @@
1
- import{a,b as d,c,d as o}from"./c-XCNTK76U.js";import{a as l}from"./c-VKEDWYDF.js";import{e as i}from"./c-OW5QIGG3.js";import{m as u}from"./c-SPIORRYS.js";var n="[editmode\\:contenteditable]";function f(){u(t=>{t.querySelectorAll(n).forEach(o)})}function m(){i&&l(()=>{s()})}function s(t=document){t.querySelectorAll(n).forEach(e=>{a(e);let r=e.getAttribute("inert-contenteditable")??e.getAttribute("contenteditable")??d(e,"inert-contenteditable")??"true",b=r.toLowerCase();e.setAttribute("contenteditable",["","true","false","plaintext-only"].includes(b)?r:"true"),e.removeAttribute("inert-contenteditable")})}function h(){document.querySelectorAll(n).forEach(t=>{o(t),c(t)})}function y(){f(),m()}export{n as a,s as b,h as c,y as d};
@@ -1 +0,0 @@
1
- import{a as u}from"./c-XMS6DPBR.js";import"./c-PZ4XEPUP.js";import{g as p,l as w,n as v,q as s}from"./c-OIBUTDXI.js";import{a as f}from"./c-4JZDZFF6.js";import"./c-VAK7SG37.js";import"./c-MFP2ZWD4.js";import{b as c}from"./c-NUHP2XDB.js";import{e as l}from"./c-OW5QIGG3.js";import"./c-BPF2NSPV.js";import"./c-P7KNDG34.js";import"./c-CYWLPPUS.js";import"./c-N7JPUPGC.js";import"./c-SPIORRYS.js";import"./c-XQXZAO7N.js";import"./c-S7LK4KUE.js";import"./c-VG5XIN4T.js";import"./c-2YYDMLNZ.js";import"./c-HA6INT6J.js";import"./c-DCFSEJZG.js";import"./c-WRBKEJD4.js";import"./c-VHNSBD2M.js";var E="Download a copy, then reduce its size; saving still works.",$="Download a copy to keep your work.",t=null,a=null,o=null,r=null;function m(e){return typeof e!="number"||!Number.isFinite(e)||e<0?"an unknown size":e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:e>=1024?`${Math.max(1,Math.round(e/1024))} KB`:`${e} bytes`}function z({bytes:e,maxBytes:n,state:g}){let d=`At the last save attempt: ${m(e)} of ${m(n)}.`;return g==="over"?`This host can't save a file this size. ${d} ${$}`:`This file is getting large. ${d} ${E}`}function i(){if(!t)return;let e=window.visualViewport,n=e?Math.max(0,window.innerHeight-e.height-e.offsetTop):0;c(t,"bottom",`calc(${16+n}px + env(safe-area-inset-bottom,0px))`)}function S(){u({})}function b(){t=w("div",["position:fixed","left:50%","transform:translateX(-50%)","z-index:2147483000","display:flex","align-items:center","gap:10px 12px","width:max-content","max-width:calc(100vw - 24px)","flex-wrap:wrap","padding:8px 8px 8px 14px","text-align:left",`color-scheme:${f()}`]),t.setAttribute("clay","editor-ui"),t.setAttribute("data-clay-save-size",""),t.setAttribute("role","status"),a=v("span",[],""),o=p("Download my copy",{small:!0,onClick:S}),s(o,!1,"inline-flex"),t.append(a,o),document.body.appendChild(t),i(),window.visualViewport?.addEventListener("resize",i),window.visualViewport?.addEventListener("scroll",i)}function y(e){t||b(),a.textContent=z(e),s(o,e.state==="over","inline-flex"),i()}function h(){t&&(window.visualViewport?.removeEventListener("resize",i),window.visualViewport?.removeEventListener("scroll",i),t.remove(),t=null,a=null,o=null)}function x(e){let n=e?.detail;n&&(n.state==="near"||n.state==="over"?y(n):h())}function A(){l||M()}function T(e){l&&(r||=new AbortController,document.addEventListener("clay:save-size",x,{signal:r.signal}),document.addEventListener("clay:modechange",A,{signal:r.signal}),e?.type==="clay:save-size"&&x(e))}function M(){r?.abort(),r=null,h()}export{T as start,M as stop};
@@ -1,25 +0,0 @@
1
- import{A as U,B as z,C as W,D as y,E,F as m,G as f,H as V,I as N,J as O,M as j,N as x,c as D,d as A,e as g,h as T,s as v,u as S,w as H,x as L,y as X,z as M}from"./c-3H6BZDNJ.js";import"./c-4DFEJ2PO.js";import"./c-6CRUUXOX.js";import"./c-336SGU5W.js";import"./c-6KEVEQ7L.js";import{A as q}from"./c-5J4E7O4Y.js";import{H as _,V as K,m as F}from"./c-WWXIDH4O.js";import"./c-4L3BTFRK.js";import"./c-5V3MOVJT.js";import"./c-VHNSBD2M.js";var G=`
2
- .page-editor .page-table { position: relative; }
3
- .page-table td { position: relative; }
4
- .page-table th { position: relative; }
5
- .page-table td.is-cell-selected { background: var(--page-block-selected); }
6
- .page-editor.has-cell-rect .page-table td ::selection, .page-editor.has-cell-rect .page-table td::selection { background: transparent; }
7
- .page-editor.has-cell-rect .page-table td { caret-color: transparent; }
8
- .page-table table.is-sized { table-layout: fixed; min-width: 0; }
9
- .page-table table.is-sized th, .page-table table.is-sized td { min-width: 0; overflow-wrap: anywhere; }
10
- .page-table-resize { position: absolute; top: 0; bottom: 0; inset-inline-end: -4px; width: 8px; z-index: 2; cursor: col-resize; touch-action: none; }
11
- .page-table-resize:hover, .page-table-resize:active, .page-table-resize:focus-visible { background: var(--page-accent); opacity: 0.4; }
12
- .page-table-add-row, .page-table-add-col { position: absolute; z-index: 1; border: 0; padding: 0; background: var(--page-chrome-bg-rest); color: var(--page-chrome-ink-rest); font: inherit; line-height: 1; cursor: pointer; opacity: 0; transition: opacity 120ms; }
13
- .page-table-add-row { left: 0; right: 0; top: 100%; height: 14px; border-radius: 0 0 6px 6px; }
14
- .page-table-add-col { top: 0; bottom: 0; left: 100%; width: 14px; border-radius: 0 6px 6px 0; }
15
- .page-table:hover > .page-table-add-row, .page-table:hover > .page-table-add-col, .page-table-add-row:focus-visible, .page-table-add-col:focus-visible { opacity: 1; }
16
- .page-table-add-row:hover, .page-table-add-col:hover { background: var(--page-chrome-bg-moved); color: var(--page-ink-soft); }
17
- .page-table-date { position: absolute; inset-inline-start: 0; top: 100%; z-index: 3; font: inherit; color: var(--page-pop-ink); background: var(--page-pop-bg); border: 1px solid var(--page-pop-line); border-radius: 6px; padding: 4px 6px; box-shadow: var(--page-pop-shadow); }
18
- @media (max-width: 560px) {
19
- .page-table-date { min-height: 44px; }
20
- .page-table-resize { display: none; }
21
- .page-table-add-row, .page-table-add-col { position: static; display: inline-block; width: 50%; height: 44px; border-radius: 0; opacity: 1; border-block-start: 1px solid var(--page-rule); }
22
- .page-table-add-row::after { content: " Row"; }
23
- .page-table-add-col::after { content: " Column"; }
24
- }
25
- `;var R=F.nodes,k=c=>_(c.attrs.cols),J=["fontFamily","fontSize","fontWeight","fontStyle","letterSpacing"],Q=c=>{let t=c.ownerDocument,e=t.defaultView.getComputedStyle(c),i=t.createElement("span");for(let o of J)i.style[o]=e[o];Object.assign(i.style,{position:"absolute",visibility:"hidden",whiteSpace:"pre",left:"-9999px",top:"0"}),i.textContent=c.textContent,t.body.append(i);let s=i.getBoundingClientRect().width;return i.remove(),Math.ceil(s)},Y=c=>Number.isFinite(c)&&c>0?Math.round(Math.min(E,Math.max(y,c))):null,P=(c,t,e)=>{let i=c.createElement("button");return i.type="button",i.textContent=t,i.setAttribute("aria-label",t),i.addEventListener("click",e),i},$=class{constructor(t,e,i){this.node=t,this.view=e,this.getPos=i,this.preview=null,this.focusCol=null;let s=e.dom.ownerDocument;this.dom=s.createElement("div"),this.dom.className="page-table",this.dom.dataset.id=t.attrs.id??"",this.dom.setAttribute("role","group"),this.dom.setAttribute("aria-label","Table");let o=s.createElement("div");o.className="page-table-scroll";let n=s.createElement("table");this.table=n,this.colgroup=s.createElement("colgroup"),this.header=s.createElement("thead"),this.header.contentEditable="false",this.contentDOM=s.createElement("tbody"),n.append(this.colgroup,this.header,this.contentDOM),o.append(n);let a=P(s,"+",()=>this.append("row"));a.className="page-table-add-row",a.setAttribute("aria-label","Add a row"),a.title="Add a row";let d=P(s,"+",()=>this.append("column"));d.className="page-table-add-col",d.setAttribute("aria-label","Add a column"),d.title="Add a column";for(let l of[a,d])l.contentEditable="false",l.addEventListener("mousedown",h=>h.preventDefault());this.dom.append(o,a,d),this.render()}append(t){let e=this.getPos();if(e==null)return;let i=t==="row"?[this.node.childCount-1,0]:[0,this.node.child(0).childCount-1];x(this.view,e,...i),(t==="row"?L(!0):M(!0))(this.view.state,this.view.dispatch),this.view.focus()}widths(){let t=k(this.node).some(i=>this.node.attrs.cols[i].width),e=k(this.node).map(i=>{let s=this.dom.ownerDocument.createElement("col");s.dataset.col=i;let o=this.node.attrs.cols[i].width;return t&&(s.style.width=`${o??m}px`),s});this.colgroup.replaceChildren(...e),this.table.classList.toggle("is-sized",t),this.table.style.width=t?`${k(this.node).reduce((i,s)=>i+(this.node.attrs.cols[s].width??m),0)}px`:""}resizer(t,e,i,s){let o=this.dom.ownerDocument,n=o.createElement("span");return n.className="page-table-resize",n.dataset.col=t,n.setAttribute("role","separator"),n.setAttribute("aria-orientation","vertical"),n.setAttribute("aria-label",`Resize column ${i.name||`Column ${s+1}`}`),n.setAttribute("aria-valuemin",String(y)),n.setAttribute("aria-valuemax",String(E)),n.setAttribute("aria-valuenow",String(this.widthOfColumn(t))),n.tabIndex=0,n.title="Drag or use the arrow keys to resize, double-click to fit",n.addEventListener("mousedown",a=>a.preventDefault()),n.addEventListener("focus",()=>{this.focusCol=t}),n.addEventListener("blur",()=>this.commitWidth(t)),n.addEventListener("keydown",a=>this.resizeKey(a,t)),n.addEventListener("keyup",a=>{["ArrowLeft","ArrowRight","Home","End"].includes(a.key)&&this.commitWidth(t)}),n.addEventListener("pointerdown",a=>{a.preventDefault();let d=a.clientX,l=this.node.attrs.cols[t].width??(e.getBoundingClientRect().width||m),h=this.dom.ownerDocument.defaultView.getComputedStyle?.(this.dom).direction==="rtl",b=l,u=r=>{b=Y(l+(h?d-r.clientX:r.clientX-d))??l;let w=[...this.colgroup.children].find(p=>p.dataset.col===t);w&&(this.table.classList.add("is-sized"),w.style.width=`${b}px`)},C=()=>{o.removeEventListener("pointermove",u),o.removeEventListener("pointerup",C),b!==l?this.command(f(t,b)):this.widths()};o.addEventListener("pointermove",u),o.addEventListener("pointerup",C)}),n.addEventListener("dblclick",a=>{a.preventDefault(),this.fit(t)}),n}widthOfColumn(t){return this.node.attrs.cols[t]?.width??m}handleFor(t){return[...this.header.querySelectorAll(".page-table-resize")].find(e=>e.dataset.col===t)??null}resizeKey(t,e){let i=t.shiftKey?50:10,s=this.preview?.col===e?this.preview.width:this.widthOfColumn(e),o;if(t.key==="ArrowLeft")o=s-i;else if(t.key==="ArrowRight")o=s+i;else if(t.key==="Home")o=y;else if(t.key==="End")o=E;else if(t.key==="Enter"){t.preventDefault(),this.commitWidth(e);return}else if(t.key==="Escape"){t.preventDefault(),this.cancelWidth(e);return}else return;t.preventDefault(),this.previewWidth(e,Math.min(E,Math.max(y,Math.round(o))))}previewWidth(t,e){let i=this.preview?.col===t?this.preview.base:this.widthOfColumn(t);this.preview={col:t,width:e,base:i};let s=[...this.colgroup.children].find(n=>n.dataset.col===t);s&&(this.table.classList.add("is-sized"),s.style.width=`${e}px`);let o=this.handleFor(t);o&&o.setAttribute("aria-valuenow",String(e))}cancelWidth(t){this.preview?.col===t&&(this.preview=null),this.widths(),this.handleFor(t)?.setAttribute("aria-valuenow",String(this.widthOfColumn(t)))}commitWidth(t){let e=this.preview;if(!e||e.col!==t)return!1;this.preview=null;let i=this.getPos(),s=i==null?null:this.view.state.doc.nodeAt(i),o=s?.type===R.table&&s.attrs.id===this.node.attrs.id?s.attrs.cols[t]:null;if(!o)return this.widths(),!1;if((o.width??m)===e.width)return this.widths(),!1;let n={...s.attrs.cols,[t]:{...o,width:e.width}};return this.view.dispatch(q(this.view.state.tr.setNodeMarkup(i,null,{...s.attrs,cols:n}))),!0}command(t){let e=this.getPos();if(e==null)return!1;x(this.view,e,0,0);let i=t(this.view.state,this.view.dispatch);return this.view.focus(),i}fit(t){let e=0;for(let s of this.contentDOM.querySelectorAll("td"))s.dataset.col===t&&(e=Math.max(e,Q(s.firstElementChild??s)));let i=[...this.header.querySelectorAll("th")].find(s=>s.dataset.col===t)?.querySelector("button");return e=Math.max(e,i?.scrollWidth??0),this.command(f(t,e+24))}render(t=null){let e=this.dom.ownerDocument,i=e.createElement("tr"),s=D(this.node);this.widths();for(let[o,n]of k(this.node).entries()){let a=this.node.attrs.cols[n],d=s[n],l=e.createElement("th");l.dataset.col=n,l.dataset.kind=d,this.node.attrs.sort?.col===n&&l.setAttribute("aria-sort",this.node.attrs.sort.dir==="asc"?"ascending":"descending");let h=P(e,a.name||`Column ${o+1}`,b=>{b.preventDefault();let u=r=>()=>{x(this.view,this.getPos(),0,o),r(this.view.state,this.view.dispatch),this.view.focus()},C=()=>{let r=e.createElement("input");r.type="text",r.value=a.name,r.setAttribute("aria-label","Column name");let w=p=>{p&&r.value.trim()?u(V(n,r.value))():r.isConnected&&(r.replaceWith(h),h.focus())};r.addEventListener("keydown",p=>{p.key==="Enter"&&(p.preventDefault(),w(!0)),p.key==="Escape"&&(p.preventDefault(),w(!1)),p.stopPropagation()}),h.replaceWith(r),r.focus(),r.select()};v(this.view,h,[{label:"Rename",run:C,focus:!1},{label:"Kind \u25B8",icon:A[d],hint:a.kind?g[d]:`Auto: ${g[d]}`,run:()=>v(this.view,h,[{label:"Auto",icon:a.kind?"":A[d],hint:a.kind?"":g[d],checked:!a.kind,run:u(N(n,"auto"))},...K.map(r=>({label:g[r],icon:A[r],checked:a.kind===r,run:u(N(n,r))}))]),focus:!1},{label:"Sort ascending",icon:"\u2191",run:u(O(n,"asc"))},{label:"Sort descending",icon:"\u2193",run:u(O(n,"desc"))},{label:"Width \u25B8",icon:"\u2194",hint:a.width?`${a.width}px`:"Auto",focus:!1,run:()=>v(this.view,h,[{label:"Wider",icon:"+",run:()=>this.command(f(n,(a.width??(l.getBoundingClientRect().width||m))+40))},{label:"Narrower",icon:"\u2212",run:()=>this.command(f(n,(a.width??(l.getBoundingClientRect().width||m))-40))},{label:"Fit to content",icon:"\u2194",run:()=>this.fit(n)},...a.width?[{label:"Reset width",icon:"\xD7",run:()=>this.command(f(n,null))}]:[]])},{label:"Chart this table",icon:"\u{1F4CA}",run:()=>{let r=this.getPos();return T(this.view).then(({insertChartAfterTable:w})=>w(this.view,r))}},{label:"Insert column left",icon:"+",run:u(M(!1))},{label:"Insert column right",icon:"+",run:u(M(!0))},...o>0?[{label:"Move left",icon:"\u2190",run:u(W(-1))}]:[],...o<k(this.node).length-1?[{label:"Move right",icon:"\u2192",run:u(W(1))}]:[],{label:"Select column",icon:"\u25A6",run:()=>S(this.view,this.getPos(),"col",o)},{label:"Delete column",icon:"\xD7",run:u(U)}])});h.dataset.kind=d,l.append(h,this.resizer(n,l,a,o)),i.append(l)}this.header.replaceChildren(i),t&&this.handleFor(t)?.focus()}update(t){if(t.type!==R.table)return!1;let e=this.focusCol&&this.dom.contains(this.dom.ownerDocument.activeElement),i=this.preview;this.node=t,this.dom.dataset.id=t.attrs.id??"",this.preview=null,this.render(e?this.focusCol:null),i&&t.attrs.cols[i.col]&&(t.attrs.cols[i.col].width??m)===i.base&&this.previewWidth(i.col,i.width);let s=D(t);for(let o of this.contentDOM.querySelectorAll("td[data-col]"))o.dataset.kind=s[o.dataset.col]??"text";return!0}stopEvent(t){return!!t.target.closest?.("thead")}ignoreMutation(t){return!this.contentDOM.contains(t.target)}},B=class{constructor(t,e,i){this.node=t,this.view=e,this.getPos=i,this.date=null;let s=e.dom.ownerDocument;this.dom=s.createElement("td"),H.set(this.dom,this),this.dom.dataset.col=t.attrs.col,this.contentDOM=s.createElement("span"),this.dom.append(this.contentDOM);let o=s.createElement("button");o.type="button",o.className="page-table-row-menu",o.textContent="Row actions",o.setAttribute("aria-label","Row actions"),o.contentEditable="false",o.addEventListener("click",()=>{let n=this.view.state.doc.resolve(this.getPos()),a=n.before(1),d=n.index(1),l=b=>()=>{x(this.view,a,d,0),b(this.view.state,this.view.dispatch),this.view.focus()},h=n.node(1).childCount;v(this.view,o,[{label:"Insert above",icon:"+",run:l(L(!1))},{label:"Insert below",icon:"+",run:l(L(!0))},...d>0?[{label:"Move up",icon:"\u2191",run:l(z(-1))}]:[],...d<h-1?[{label:"Move down",icon:"\u2193",run:l(z(1))}]:[],{label:"Select row",icon:"\u25A6",run:()=>S(this.view,a,"row",d)},{label:"Delete row",icon:"\xD7",run:l(X)}])}),this.menu=o,this.dom.append(o),this.update(t)}update(t){if(t.type!==R.table_cell)return!1;this.node=t;let e=this.view.state.doc.resolve(this.getPos()),i=e.node(1);return this.dom.dataset.kind=D(i)[t.attrs.col]??"text",this.menu.hidden=e.index(2)!==0,this.dom.dataset.kind!=="date"&&this.closeDate(),!0}openDate(){if(this.date||this.dom.dataset.kind!=="date")return!1;let e=this.dom.ownerDocument.createElement("input");e.type="date",e.className="page-table-date",e.contentEditable="false",e.setAttribute("aria-label","Pick a date");let i=this.node.textContent.trim();/^\d{4}-\d{2}-\d{2}$/.test(i)&&(e.value=i),e.addEventListener("change",()=>{e.value&&j(this.view,this.getPos(),e.value),this.closeDate(),this.view.focus()}),e.addEventListener("keydown",s=>{s.key==="Escape"&&(s.preventDefault(),this.closeDate(),this.view.focus()),s.stopPropagation()}),e.addEventListener("blur",()=>this.closeDate()),this.date=e,this.dom.append(e);try{e.showPicker?.()}catch{}return!0}closeDate(){let t=this.date;this.date=null,t?.isConnected&&t.remove()}destroy(){this.closeDate()}stopEvent(t){return!!t.target.closest?.(".page-table-row-menu, .page-table-date")}ignoreMutation(t){return!this.contentDOM.contains(t.target)}};function ct(){return{id:"table",nodeViews:{table:(c,t,e)=>new $(c,t,e),table_cell:(c,t,e)=>new B(c,t,e)},css:G,dispose(){}}}export{B as TableCellView,$ as TableView,ct as createFeature};
@@ -1 +0,0 @@
1
- import{a as h}from"./c-FDNHHZY5.js";import{c as g}from"./c-KBS3UV6B.js";import{l as k}from"./c-3H6BZDNJ.js";import"./c-4DFEJ2PO.js";import"./c-6CRUUXOX.js";import"./c-336SGU5W.js";import"./c-6KEVEQ7L.js";import{A as y}from"./c-5J4E7O4Y.js";import{b as m,m as d}from"./c-WWXIDH4O.js";import"./c-4L3BTFRK.js";import"./c-5V3MOVJT.js";import"./c-VHNSBD2M.js";var b=e=>String(e).padStart(2,"0");function A(e){if(typeof e!="string"||!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let s=new Date(`${e}T12:00:00Z`);return Number.isFinite(s.valueOf())&&s.toISOString().slice(0,10)===e}var $=(e=new Date)=>`${e.getFullYear()}-${b(e.getMonth()+1)}-${b(e.getDate())}`,E=(e,s)=>{let a=new Date(`${e}T12:00:00Z`);return a.setUTCDate(a.getUTCDate()+s),a.toISOString().slice(0,10)},I=e=>{let s=E(e,1);return[{id:"today",name:`Today (${e})`,date:e},{id:"tomorrow",name:`Tomorrow (${s})`,date:s}]};function L({view:e=null}={}){if(!e)return{run:()=>({ok:!1,code:"not-editing"}),dispose(){}};let s=e.dom.ownerDocument,a=null;function l(t){let o=e.state;if(!o.selection.empty||o.selection.from!==t.from||t.from<0||t.from>o.doc.content.size)return null;let r=o.doc.resolve(t.from);return!r.parent.isTextblock||r.parent.type.spec.code||!r.parent.type.allowsMarkType(d.marks.date)?null:t.from}function D(t){try{let o=e.dom.parentElement?.getBoundingClientRect?.()??{left:0,top:0},r=e.coordsAtPos(t.from);return{x:Math.max(8,r.left-o.left),y:r.bottom+6-o.top}}catch{return null}}function u(t){let o=t.picker.activeId();o?e.dom.setAttribute("aria-activedescendant",o):e.dom.getAttribute("aria-activedescendant")?.startsWith(t.picker.el.id)&&e.dom.removeAttribute("aria-activedescendant")}function c(){let t=a;if(t){a=null;for(let[o,r,n,i]of t.listen)o.removeEventListener(r,n,i);e.dom.getAttribute("aria-activedescendant")?.startsWith(`${t.picker.el.id}-`)&&e.dom.removeAttribute("aria-activedescendant"),t.picker.destroy()}}function x(t,o){let r=String(o),n=e.state.tr.insertText(r,t,t);return n.addMark(t,t+r.length,d.marks.date.create({date:r})),n.insertText(" ",t+r.length),n.setSelection(m.TextSelection.create(n.doc,t+r.length+1)),e.dispatch(y(n)),e.focus(),{ok:!0,date:r}}async function f(t){let o=a;if(!o)return{ok:!1,code:"not-editing"};let r=o.picker.personAt(t),n=l(o);return n===null||!r||!A(r.date)?(c(),r?n===null?{ok:!1,code:"stale-target"}:{ok:!1,code:"invalid-date"}:{ok:!1,code:"no-date"}):(c(),h(e,()=>{let i=l(o);return i===null?{ok:!1,code:"stale-target"}:x(i,r.date)}))}function S(t){let o=a;if(!o||k(t,e))return;let r=()=>{t.preventDefault(),t.stopPropagation()};t.key==="ArrowDown"||t.key==="ArrowUp"?(r(),o.picker.move(t.key==="ArrowDown"?1:-1),u(o)):t.key==="Enter"?(r(),f(o.picker.index())):(t.key==="Escape"||t.key==="Tab")&&(r(),c())}function T(){c();let t={from:e.state.selection.from,days:I($()),picker:null,listen:[]};t.picker=g({document:s,label:"Insert a date",empty:"No date to insert",onPick:r=>f(r)}),a=t;let o=(r,n,i,p)=>{r.addEventListener(n,i,p),t.listen.push([r,n,i,p])};return o(s,"keydown",r=>S(r),!0),o(e.dom,"input",()=>c()),o(s,"mousedown",r=>{t.picker.el.contains(r.target)||c()},!0),(e.dom.parentElement??s.body).appendChild(t.picker.el),l(t)===null?(c(),{ok:!1,code:"stale-target"}):(t.picker.show(t.days,D(t)),u(t),{ok:!0,picker:!0})}return{async run(){return T()},dispose(){c()}}}export{L as createFeature,I as earlyDays,A as isISODate,$ as localISODate};
@@ -1,135 +0,0 @@
1
- import{a as i,b as k}from"./c-Q7NQD65V.js";import{b as K,e as O}from"./c-336SGU5W.js";import{d as g}from"./c-5J4E7O4Y.js";import{H as D,m as y}from"./c-WWXIDH4O.js";import"./c-VHNSBD2M.js";var z=`
2
- :where(article[data-page], .page-shell) { --page-board-lane: 274px; --page-board-gap: 14px; --page-board-radius: 8px; --page-board-panel: 360px; }
3
- .page-editor .page-board { margin-block: 1.1em 1.5em; font-size: 15px; line-height: 1.4; white-space: normal; }
4
- :is(.page-board, .page-board-panel) .i { flex: none; width: 16px; height: 16px; }
5
- .page-board-scroll { position: relative; margin: -4px -4px 0; padding: 4px 4px 12px; overflow-x: auto; overscroll-behavior-x: contain; scrollbar-width: thin; scrollbar-color: var(--page-chrome-ink-rest) transparent; }
6
- .page-board-lanes { display: flex; align-items: flex-start; gap: var(--page-board-gap); width: max-content; }
7
- .page-board-lane { flex: 0 0 var(--page-board-lane); width: var(--page-board-lane); min-width: 0; }
8
- .page-board-head { position: relative; display: flex; align-items: flex-start; gap: 8px; padding: 8px 0 7px; margin-bottom: 10px; border-bottom: 1px solid var(--page-rule); }
9
- .page-board-name { min-width: 0; margin: 0; overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; color: var(--page-ink-strong); font: 600 14px/20px var(--page-font-heading); overflow-wrap: anywhere; }
10
- .page-board-count { flex: none; color: var(--page-ink-soft); font-size: 14px; line-height: 20px; font-variant-numeric: tabular-nums; }
11
- .page-board-icon { flex: none; display: inline-grid; place-items: center; width: 28px; height: 28px; margin-block: -4px; padding: 0; border: 0; border-radius: 6px; background: none; color: var(--page-ink-faint); cursor: pointer; transition: background-color var(--page-fade), color var(--page-fade); }
12
- .page-board-icon:hover, .page-board-icon[aria-expanded="true"] { background: var(--page-pop-hover); color: var(--page-ink-soft); }
13
- .page-board-icon:focus-visible { color: var(--page-ink-soft); }
14
- .page-board-colmenu { margin-inline: auto -4px; }
15
- .page-board-cards { display: flex; flex-direction: column; gap: 8px; margin: 0; padding: 0; list-style: none; }
16
- .page-board-cards > li { position: relative; }
17
- .page-board-card { display: block; width: 100%; margin: 0; padding: 10px 12px 11px; border: 1px solid var(--page-rule); border-radius: var(--page-board-radius); background: var(--page-pop-bg); color: var(--page-ink); font: inherit; text-align: start; cursor: pointer; transition: background-color var(--page-fade), border-color var(--page-fade); }
18
- .page-board-card:hover { background-color: color-mix(in srgb, var(--page-pop-bg) 96%, var(--page-ink)); }
19
- .page-board-card[aria-expanded="true"] { border-color: var(--page-accent); box-shadow: inset 0 0 0 1px var(--page-accent); }
20
- .page-board-title { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4; overflow: hidden; font-size: 15px; font-weight: 500; line-height: 21px; overflow-wrap: anywhere; }
21
- .page-board-meta { display: flex; align-items: center; gap: 8px; margin-top: 8px; color: var(--page-ink-soft); font-size: 13px; line-height: 20px; }
22
- .page-board-owner { display: inline-flex; align-items: center; gap: 6px; min-width: 0; }
23
- .page-board-owner-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
24
- .page-board-due { flex: none; display: inline-flex; align-items: center; gap: 6px; margin-inline-start: auto; white-space: nowrap; font-variant-numeric: tabular-nums; }
25
- .page-board-due[data-due="today"] { color: var(--page-ink); font-weight: 500; }
26
- .page-board-due[data-due="overdue"] { color: var(--page-ink); }
27
- .page-board-due[data-due="overdue"]::before { content: ""; flex: none; width: 6px; height: 6px; border-radius: 50%; background: var(--page-danger); }
28
- .page-board-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
29
- .page-board-add { display: flex; align-items: center; gap: 6px; width: 100%; min-height: 36px; margin-top: 6px; padding: 0 12px; border: 0; border-radius: 7px; background: none; color: var(--page-ink-soft); font: inherit; font-size: 14px; text-align: start; cursor: pointer; transition: background-color var(--page-fade); }
30
- .page-board-add .i { width: 14px; height: 14px; color: var(--page-ink-faint); }
31
- .page-board-add:hover { background: var(--page-pop-hover); }
32
- .page-board-addcol { flex: none; display: inline-grid; place-items: center; width: 32px; height: 32px; margin-top: 2px; padding: 0; border: 1px solid var(--page-chrome-line-rest); border-radius: var(--page-chrome-radius); background: var(--page-chrome-bg-rest); color: var(--page-ink-faint); cursor: pointer; transition: color var(--page-fade), background-color var(--page-fade), border-color var(--page-fade); }
33
- .page-board-addcol:hover { border-color: var(--page-chrome-line-moved); background: var(--page-chrome-bg-moved); color: var(--page-ink-soft); }
34
- .page-board-addcol .i { width: 14px; height: 14px; }
35
- .page-board-tray { margin-bottom: 18px; padding: 6px 12px 12px; border-radius: 10px; background: var(--page-callout-bg); }
36
- .page-board-tray-head { display: flex; align-items: center; gap: 8px; min-height: 44px; margin-bottom: 4px; }
37
- .page-board-tray .page-board-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px; }
38
- .page-board-select { position: relative; display: block; min-width: 0; }
39
- .page-board-select > .i { position: absolute; inset-inline-end: 8px; top: 50%; margin-top: -8px; color: var(--page-ink-faint); pointer-events: none; }
40
- .page-board-select select { appearance: none; -webkit-appearance: none; padding-inline-end: 32px; text-overflow: ellipsis; }
41
- .page-board-move { margin-top: 6px; }
42
- .page-board-move select { width: 100%; min-height: 32px; padding-inline-start: 10px; border: 1px solid var(--page-pop-line); border-radius: 7px; background: var(--page-pop-bg); color: var(--page-ink); font: inherit; font-size: 14px; cursor: pointer; }
43
- .page-board-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 32px; padding: 0 12px 0 10px; border: 1px solid var(--page-pop-line); border-radius: 7px; background: none; color: var(--page-pop-ink); font: inherit; font-size: 14px; cursor: pointer; transition: background-color var(--page-fade), color var(--page-fade); }
44
- .page-board-btn:hover { background: var(--page-pop-hover); }
45
- .page-board-btn .i { width: 14px; height: 14px; color: var(--page-pop-muted); }
46
- .page-board-btn:disabled { background: none; color: var(--page-ink-faint); cursor: default; }
47
- .page-board-btn:disabled .i { color: var(--page-ink-faint); }
48
- .page-board-restore { flex: none; margin-inline-start: auto; }
49
- .page-board-deleted { background: none; padding: 0; }
50
- .page-board-deleted-toggle[aria-expanded="false"] svg { transform: rotate(-90deg); }
51
- .page-board-deleted-list { list-style: none; margin: 0; padding: 0 0 0 12px; }
52
- .page-board-deleted-item { display: flex; align-items: center; gap: 8px; min-height: 44px; color: var(--page-ink-soft); }
53
- .page-board :is(button, select, input, textarea):focus-visible, .page-board-panel :is(button, select, input, textarea):focus-visible { outline: 2px solid var(--page-accent); outline-offset: 2px; }
54
- .page-board-pop { position: absolute; z-index: 6; padding: 6px; border: 1px solid var(--page-pop-line); border-radius: var(--page-pop-radius); background: var(--page-pop-bg); box-shadow: var(--page-pop-shadow); color: var(--page-pop-ink); font-size: 14px; line-height: 1.4; }
55
- .page-board-menu { top: calc(100% - 2px); inset-inline-end: -6px; width: 208px; }
56
- .page-board-option { display: flex; align-items: center; gap: 10px; width: 100%; min-height: 34px; padding: 4px 10px; border: 0; border-radius: 7px; background: none; color: inherit; font: inherit; text-align: start; cursor: pointer; }
57
- .page-board-option:hover, .page-board-option[aria-selected="true"], .page-board-option[aria-pressed="true"] { background: var(--page-pop-hover); }
58
- .page-board-option > .i { color: var(--page-pop-muted); }
59
- .page-board-option.is-danger { color: var(--page-danger); }
60
- .page-board-option.is-danger > .i { color: inherit; }
61
- .page-board-option:disabled { color: var(--page-ink-faint); cursor: default; background: none; }
62
- .page-board-option:disabled > .i { color: var(--page-ink-faint); }
63
- .page-board-sep { height: 1px; margin: 4px 6px; background: var(--page-pop-line); }
64
- .page-board-rename { flex: 1 1 auto; min-width: 0; height: 28px; margin: -4px 0 -4px -6px; padding: 0 6px; border: 0; border-radius: 6px; background: var(--page-pop-hover); color: var(--page-ink-strong); font: 600 14px/20px var(--page-font-heading); }
65
- .page-board-new { display: block; width: 100%; min-height: 44px; margin-top: 8px; padding: 10px 12px; border: 1px solid var(--page-rule); border-radius: var(--page-board-radius); background: var(--page-pop-bg); color: var(--page-ink); font: 500 15px/21px var(--page-font); }
66
- .page-board-new::placeholder, .page-board-rename::placeholder { color: var(--page-ink-faint); font-weight: 400; }
67
- .page-board-card, .page-board-name, .page-board-count { -webkit-user-select: none; user-select: none; }
68
- .page-editor[contenteditable="true"] .page-board-head[data-col] .page-board-name { cursor: grab; }
69
- .page-board.is-dragging, .page-board.is-dragging * { cursor: grabbing; }
70
- .page-board .is-drag-source { opacity: 0.45; }
71
- .page-board-drop { height: 2px; margin-block: -5px; border-radius: 1px; background: var(--page-drop, var(--page-accent)); pointer-events: none; }
72
- .page-board-drop.is-column { flex: 0 0 2px; align-self: stretch; width: 2px; height: auto; margin-block: 0; margin-inline: calc((var(--page-board-gap) + 2px) / -2); }
73
- .page-board-ghost { position: fixed; z-index: 6; top: 0; left: 0; box-sizing: border-box; margin: 0; box-shadow: var(--page-pop-shadow); pointer-events: none; }
74
- .page-board-lane.page-board-ghost { padding: 0 10px 10px; border-radius: var(--page-board-radius); background: var(--page-bg); }
75
- .page-board-scrim { display: none; position: fixed; inset: 0; z-index: 4; background: var(--page-scrim); }
76
- .page-board-panel { position: fixed; z-index: 5; inset-block: 0; inset-inline-end: 0; width: var(--page-board-panel); box-sizing: border-box; overflow-y: auto; padding: 18px 20px 24px; border-inline-start: 1px solid var(--page-pop-line); background: var(--page-pop-bg); color: var(--page-pop-ink); font-family: var(--page-font); font-size: 15px; line-height: 1.4; }
77
- .page-shell.has-board-panel { padding-inline-end: calc(var(--page-board-panel) + 16px); }
78
- .page-board-panel-top { display: flex; align-items: flex-start; gap: 8px; }
79
- .page-board-panel-title { flex: 1 1 0; min-width: 0; margin: -4px 0 0 -8px; padding: 4px 8px; border: 0; border-radius: 7px; background: none; color: var(--page-ink-strong); font: 600 20px/28px var(--page-font-heading); field-sizing: content; resize: none; overflow: hidden; }
80
- .page-board-panel-title:hover { background: var(--page-pop-hover); }
81
- .page-board-close { width: 32px; height: 32px; margin: -2px -6px 0 0; color: var(--page-ink-soft); }
82
- .page-board-fields { margin: 18px 0 0; border-top: 1px solid var(--page-pop-line); }
83
- .page-board-field { position: relative; display: grid; grid-template-columns: 84px minmax(0, 1fr); align-items: center; column-gap: 8px; min-height: 44px; border-bottom: 1px solid var(--page-pop-line); }
84
- .page-board-field.is-owner { align-items: start; padding-block: 8px; }
85
- .page-board-field.is-owner .page-board-label { padding-top: 4px; }
86
- .page-board-label { color: var(--page-pop-muted); font-size: 14px; }
87
- .page-board-control { display: flex; align-items: center; gap: 8px; width: 100%; min-width: 0; min-height: 34px; margin: 0; padding: 0 8px; border: 0; border-radius: 7px; background: none; color: var(--page-pop-ink); font: inherit; font-size: 15px; text-align: start; cursor: pointer; transition: background-color var(--page-fade); }
88
- .page-board-control:hover { background: var(--page-pop-hover); }
89
- .page-board-control > .i:last-child { margin-inline-start: auto; color: var(--page-ink-faint); }
90
- .page-board-control-text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
91
- .page-board-none { color: var(--page-ink-faint); }
92
- .page-board-control .page-board-due { margin: 0; color: var(--page-pop-ink); font-weight: 400; }
93
- .page-board-due-note { color: var(--page-pop-muted); font-size: 13px; }
94
- .page-board-control .page-board-due + .page-board-due-note { margin-inline-start: auto; }
95
- .page-board-control .page-board-due-note + .i { margin-inline-start: 0; }
96
- .page-board-date { border: 1px solid var(--page-pop-line); cursor: text; }
97
- .page-board-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 20px; }
98
- .page-board-delete { margin-inline-start: auto; border-color: transparent; color: var(--page-pop-muted); }
99
- .page-board-delete:hover { background: var(--page-pop-hover); color: var(--page-danger); }
100
- .page-board-delete:hover .i { color: inherit; }
101
- @media (max-width: 1039.98px) {
102
- .page-shell.has-board-panel { padding-inline-end: 16px; }
103
- .page-board-scrim { display: block; }
104
- .page-board-panel { inset: auto 0 0 0; width: auto; max-width: 640px; max-height: 85%; margin-inline: auto; padding: 14px 16px calc(16px + env(safe-area-inset-bottom)); border: 1px solid var(--page-pop-line); border-bottom: 0; border-radius: 16px 16px 0 0; box-shadow: var(--page-pop-shadow); }
105
- .page-board-close { width: 44px; height: 44px; margin: -8px -10px 0 0; }
106
- .page-board-panel-top { min-height: 36px; }
107
- .page-board-field { min-height: 48px; }
108
- .page-board-control { min-height: 44px; }
109
- .page-board-actions { margin-top: 16px; }
110
- .page-board-actions .page-board-btn { flex: 1 1 0; min-height: 44px; }
111
- .page-board-actions .page-board-delete { flex: 1 1 100%; margin-inline-start: 0; }
112
- }
113
- @media (max-width: 560px) {
114
- .page-board-scroll { scroll-snap-type: x proximity; scroll-padding-inline: 4px; }
115
- .page-board-lane { scroll-snap-align: start; }
116
- .page-board-head { padding: 12px 0 11px; }
117
- .page-board-head .page-board-icon { width: 44px; height: 44px; margin-block: -12px; }
118
- .page-board-colmenu { margin-inline-end: -12px; }
119
- .page-board-card { min-height: 44px; padding: 12px 14px 13px; }
120
- .page-board-add { min-height: 44px; padding-inline: 14px; }
121
- .page-board-addcol { width: 44px; height: 44px; margin-top: 0; }
122
- .page-board-tray-head { min-height: 48px; }
123
- .page-board-move select, .page-board-btn { min-height: 44px; }
124
- .page-board-move select, .page-board-new { font-size: 16px; }
125
- .page-board-option { min-height: 44px; }
126
- .page-board-rename { height: 44px; margin-block: -12px; font-size: 16px; }
127
- .page-board-panel { border-width: 1px 0 0; }
128
- .page-board-panel-title { margin-top: -8px; padding-block: 8px; }
129
- .page-board-control { font-size: 16px; }
130
- .page-board-label { font-size: 15px; }
131
- }
132
- @media (prefers-reduced-motion: reduce) {
133
- .page-board-icon, .page-board-card, .page-board-add, .page-board-addcol, .page-board-btn, .page-board-control { transition: none; }
134
- }
135
- `;var F=4,m=56,q=18,j=["id","data-focus","data-action","data-card","data-col"],C=(s,e)=>{let t=s.getBoundingClientRect();return e==="x"?t.left+t.width/2:t.top+t.height/2},P=(s,e,t)=>s<e+m?-q*Math.min(1,(e+m-s)/m):s>t-m?q*Math.min(1,(s-(t-m))/m):0,H=(s,e)=>s?.col===e?.col&&s?.afterId===e?.afterId&&!s==!e,I=class{constructor(e){this.host=e,this.state=null,this.line=null,this.suppress=!1,this.onMove=t=>this.move(t),this.onUp=t=>this.end(t),this.onCancel=t=>{t.pointerId===this.state?.pointer&&this.cancel()},this.onKey=t=>{t.key==="Escape"&&this.state?.active&&(t.preventDefault(),t.stopPropagation(),this.cancel())},e.dom.addEventListener("pointerdown",t=>this.start(t)),e.dom.addEventListener("click",t=>{this.suppress&&(this.suppress=!1,t.preventDefault(),t.stopImmediatePropagation())},!0)}start(e){let t=this.host;if(e.button!==0||e.pointerType==="touch"||this.state||!t.commands||!t.view.editable)return;let a=e.target.closest?.(".page-board-card[data-card]"),o=a?null:e.target.closest?.(".page-board-head[data-col]");if(!a&&(!o||e.target.closest("button, input")))return;this.state={kind:a?"card":"column",id:a?a.dataset.card:o.dataset.col,pointer:e.pointerId,x0:e.clientX,y0:e.clientY,x:e.clientX,y:e.clientY,active:!1,slot:null,raf:0,ghost:null};let r=t.dom.ownerDocument;r.addEventListener("pointermove",this.onMove),r.addEventListener("pointerup",this.onUp),r.addEventListener("pointercancel",this.onCancel)}move(e){let t=this.state;if(!(!t||e.pointerId!==t.pointer)){if(t.x=e.clientX,t.y=e.clientY,!t.active){if(Math.hypot(t.x-t.x0,t.y-t.y0)<=F)return;this.begin()}e.preventDefault(),this.track()}}source(){let{kind:e,id:t}=this.state;return[...e==="card"?this.host.dom.querySelectorAll(".page-board-card[data-card]"):this.host.lanes.querySelectorAll(".page-board-lane[data-col]")].find(o=>(e==="card"?o.dataset.card:o.dataset.col)===t)??null}exists(){let{kind:e,id:t}=this.state,a=this.host.board;return e==="card"?Object.hasOwn(a.cards,t):a.columnIds.includes(t)}begin(){let e=this.state,t=this.host,a=this.source();if(!a||!this.exists())return this.stop();t.menu!==null&&t.closeMenu(!1),e.active=!0;let o=a.getBoundingClientRect();e.dx=e.x0-o.left,e.dy=e.y0-o.top;let r=a.cloneNode(!0);for(let n of[r,...r.querySelectorAll("*")])for(let d of j)n.removeAttribute(d);r.classList.add("page-board-ghost"),r.setAttribute("aria-hidden","true"),r.setAttribute("inert",""),r.style.width=`${o.width}px`,e.ghost=r,t.dom.append(r),t.dom.classList.add("is-dragging"),this.line=t.dom.ownerDocument.createElement(e.kind==="card"?"li":"div"),this.line.className=e.kind==="card"?"page-board-drop":"page-board-drop is-column",this.line.setAttribute("aria-hidden","true"),t.dom.setPointerCapture?.(e.pointer),t.dom.addEventListener("lostpointercapture",this.onCancel),window.addEventListener("keydown",this.onKey,!0),a.classList.add("is-drag-source"),this.loop()}track(e=!1){let t=this.state;if(!t?.active)return;if(t.ghost.style.transform=`translate(${t.x-t.dx}px, ${t.y-t.dy}px)`,!this.exists())return this.cancel();let a=this.inBounds()?t.kind==="card"?this.cardSlot():this.columnSlot():null;!e&&H(a,t.slot)||(t.slot=a,this.paint())}inBounds(){let e=this.state,t=this.host.scroll.getBoundingClientRect();return e.x>=t.left-m&&e.x<=t.right+m&&e.y>=t.top-m&&e.y<=t.bottom+m}cardSlot(){let e=this.state,t=null,a=1/0;for(let n of this.host.lanes.querySelectorAll(".page-board-lane[data-col]")){let d=n.getBoundingClientRect(),l=e.x<d.left?d.left-e.x:e.x>d.right?e.x-d.right:0;l<a&&(a=l,t=n)}if(!t)return null;let o=[...t.querySelectorAll(".page-board-card[data-card]")].filter(n=>n.dataset.card!==e.id),r=o.filter(n=>C(n,"y")<e.y).length;return{col:t.dataset.col,afterId:r?o[r-1].dataset.card:null}}columnSlot(){let e=this.state,t=getComputedStyle(this.host.lanes).direction==="rtl",a=[...this.host.lanes.querySelectorAll(".page-board-lane[data-col]")].filter(r=>r.dataset.col!==e.id),o=a.filter(r=>t?C(r,"x")>e.x:C(r,"x")<e.x).length;return{col:null,afterId:o?a[o-1].dataset.col:null}}paint(){let e=this.state,t=this.line;if(t.remove(),!e.slot)return;let a=this.host.lanes;if(e.kind==="card"){let o=[...a.querySelectorAll(".page-board-lane[data-col]")].find(n=>n.dataset.col===e.slot.col)?.querySelector(".page-board-cards"),r=e.slot.afterId&&[...o?.querySelectorAll(".page-board-card[data-card]")??[]].find(n=>n.dataset.card===e.slot.afterId)?.closest("li");o?.insertBefore(t,r?r.nextSibling:o.firstChild)}else{let o=e.slot.afterId&&[...a.querySelectorAll(".page-board-lane[data-col]")].find(r=>r.dataset.col===e.slot.afterId);a.insertBefore(t,o?o.nextSibling:a.firstChild)}}repaint(){this.state?.active&&(this.source()?.classList.add("is-drag-source"),this.track(!0))}loop(){let e=()=>{let t=this.state;if(!t?.active)return;let a=this.host.scroll.getBoundingClientRect(),o=K(this.host.dom),r=o===o.ownerDocument.scrollingElement?{top:0,bottom:window.innerHeight}:o.getBoundingClientRect(),n=P(t.x,a.left,a.right),d=P(t.y,r.top,r.bottom);n&&(this.host.scroll.scrollLeft+=n),d&&(o.scrollTop+=d),(n||d)&&this.track(),this.state===t&&(t.raf=requestAnimationFrame(e))};this.state.raf=requestAnimationFrame(e)}end(e){let t=this.state;if(!t||e.pointerId!==t.pointer)return;if(!t.active)return this.stop();e.preventDefault(),this.suppress=!0,setTimeout(()=>{this.suppress=!1},0);let{kind:a,id:o,slot:r}=t;this.stop();let n=this.host;if(!r)return g(n.view,"Move cancelled");(a==="card"?n.run("moveCard",o,{columnId:r.col,afterId:r.afterId}):n.run("moveColumn",o,{afterId:r.afterId})).status==="moved"&&(a==="card"?(g(n.view,`Moved card to ${n.board.columns[r.col]?.name||"Untitled"}`),n.focusKey(`card:${o}`)):g(n.view,"Moved column"))}cancel(){this.stop(),g(this.host.view,"Move cancelled")}stop(){let e=this.state,t=this.host;if(!e)return;this.state=null,cancelAnimationFrame(e.raf);let a=t.dom.ownerDocument;a.removeEventListener("pointermove",this.onMove),a.removeEventListener("pointerup",this.onUp),a.removeEventListener("pointercancel",this.onCancel),t.dom.removeEventListener("lostpointercapture",this.onCancel),window.removeEventListener("keydown",this.onKey,!0),t.dom.hasPointerCapture?.(e.pointer)&&t.dom.releasePointerCapture(e.pointer),e.ghost?.remove(),this.line?.remove(),this.line=null,t.dom.classList.remove("is-dragging");for(let o of t.dom.querySelectorAll(".is-drag-source"))o.classList.remove("is-drag-source")}};var X=y.nodes,$=new WeakMap,N=/^\d{4}-\d{2}-\d{2}$/,Y=0,u=(s,e=!1)=>`<svg class="i" viewBox="0 0 16 16" width="16" height="16" fill="${e?"currentColor":"none"}" stroke="${e?"none":"currentColor"}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${s}</svg>`,v={plus:u('<path d="M8 3.25v9.5M3.25 8h9.5"/>'),more:u('<circle cx="3.5" cy="8" r="1.15"/><circle cx="8" cy="8" r="1.15"/><circle cx="12.5" cy="8" r="1.15"/>',!0),chevron:u('<path d="M4.75 6.5 8 9.75l3.25-3.25"/>'),close:u('<path d="M4.5 4.5l7 7M11.5 4.5l-7 7"/>'),up:u('<path d="M8 12.75v-9.5M4.25 7 8 3.25 11.75 7"/>'),down:u('<path d="M8 3.25v9.5M4.25 9 8 12.75 11.75 9"/>'),left:u('<path d="M12.75 8h-9.5M7 4.25 3.25 8 7 11.75"/>'),right:u('<path d="M3.25 8h9.5M9 4.25 12.75 8 9 11.75"/>'),trash:u('<path d="M2.75 4.5h10.5M6.25 4.5V2.75h3.5V4.5M4.25 4.5l.6 8.75h6.3l.6-8.75"/>'),calendar:u('<rect x="2.75" y="3.5" width="10.5" height="9.75" rx="1.75"/><path d="M2.75 6.75h10.5M5.5 2v2.5M10.5 2v2.5"/>'),pencil:u('<path d="M10.25 3.25l2.5 2.5-7 7H3.25v-2.5z"/>'),restore:u('<path d="M3.5 8a4.5 4.5 0 1 0 1.32-3.18M3.5 2.75v2.5H6"/>')};function h(s,e,t,a,o={}){let r=i(s,"button",e,{type:"button",...o});return r.innerHTML=v[t],a&&r.append(a),r}function x(s){let e=s.attrs.columns??{},t=s.attrs.cards??{},a=D(e),o=new Map(a.map(n=>[n,[]])),r=new Map;for(let n of D(t)){let d=String(t[n].col??"");o.has(d)?o.get(d).push(n):r.set(d,[...r.get(d)??[],n])}return{columns:e,cards:t,columnIds:a,lanes:o,missing:new Map([...r].sort(([n],[d])=>n<d?-1:n>d?1:0))}}var R=s=>String(s).padStart(2,"0"),w=(s=new Date)=>`${s.getFullYear()}-${R(s.getMonth()+1)}-${R(s.getDate())}`,M=(s,e=w())=>N.test(s)?s<e?"overdue":s===e?"today":"later":"later";function A(s,e=w(),t=!1){if(!N.test(s))return s;if(!t&&s===e)return"Today";let a=s.slice(0,4)===e.slice(0,4);return new Date(`${s}T00:00:00Z`).toLocaleDateString("en-US",{...t?{weekday:"short"}:{},month:"short",day:"numeric",...a?{}:{year:"numeric"},timeZone:"UTC"})}var L=(s,e)=>e>=2?s[e-2]:null,S=(s,e)=>i(s,"span","page-board-count",{"aria-label":`${e} ${e===1?"card":"cards"}`},String(e)),_=s=>/^(INPUT|TEXTAREA|SELECT)$/.test(s?.tagName??"");function V(s,e){let t=w(),a=M(e,t),o=i(s,"span","page-board-due",{"data-due":a});return o.append(i(s,"span","page-board-sr",{},"Due "),s.createTextNode(A(e,t))),a==="overdue"&&o.append(i(s,"span","page-board-sr",{},", overdue")),o}var E=class{constructor(e,t,a,{commands:o=null,undo:r=null,redo:n=null,panel:d=null}={}){this.node=e,this.view=t,this.getPos=a,this.commands=o,this.undo=r,this.redo=n,this.panel=d,this.uid=`page-board-${++Y}`,this.menu=null;let l=$.get(t)??new Map;$.set(t,l),l.set(e.attrs.id,this),this.editing=null,this.rendering=!1;let p=t.dom.ownerDocument;this.dom=i(p,"div","page-board",{"data-type":"board","data-id":e.attrs.id??"",role:"group","aria-label":"Board"}),this.dom.contentEditable="false",this.trays=i(p,"div","page-board-trays"),this.scroll=i(p,"div","page-board-scroll"),this.lanes=i(p,"div","page-board-lanes"),this.scroll.append(this.lanes),this.dom.append(this.trays,this.scroll),this.dom.addEventListener("click",c=>this.click(c)),this.dom.addEventListener("change",c=>this.change(c)),this.dom.addEventListener("keydown",c=>this.keydown(c)),this.dom.addEventListener("focusout",c=>this.focusout(c)),this.dom.addEventListener("mousedown",c=>{c.target.closest?.("button")&&c.preventDefault()}),this.dragger=new I(this),this.render()}get blockId(){return this.node.attrs.id}run(e,...t){if(!this.commands||!this.view.editable)return{status:"refused",code:"read-only"};let a=this.commands[e](this.blockId,...t);return a?.status==="refused"&&this.render(),a}focusKey(e){let t=e?[...this.dom.querySelectorAll("[data-focus]")].find(a=>a.dataset.focus===e&&!a.disabled):null;return t?(t.focus(),t.ownerDocument.activeElement===t):!1}render(){let e=this.dom.ownerDocument,t=e.activeElement,a=t&&this.dom.contains(t)?t.dataset?.focus??null:null,o=a&&typeof t.selectionStart=="number"?[t.selectionStart,t.selectionEnd]:null;this.rendering=!0;try{this.board=x(this.node),this.dom.dataset.id=this.blockId??"";let r=this.commands?.removed?.(this.blockId)??{columns:{},cards:{}},n=r.columns??{},d=Object.keys(r.cards??{}).filter(p=>!Object.hasOwn(this.board.cards,p));this.trays.replaceChildren(...[...this.board.missing].map(([p,c],b)=>this.tray(p,c,b,n[p]))),d.length?this.trays.append(this.deletedTray(d,r.cards)):this.showDeleted=!1;let l=this.board.columnIds.map((p,c)=>this.lane(p,c));this.editing?.kind==="column"?l.push(this.newLane()):l.push(h(e,"page-board-addcol","plus",null,{"aria-label":"Add column",title:"Add column","data-action":"add-column","data-focus":"add-column"})),this.lanes.replaceChildren(...l),a&&this.focusKey(a)&&o&&e.activeElement.setSelectionRange?.(...o),this.dragger?.repaint()}finally{this.rendering=!1}}lane(e,t){let a=this.dom.ownerDocument,o=this.board.lanes.get(e),r=this.board.columns[e].name||"Untitled",n=`${this.uid}-col-${t}`,d=i(a,"div","page-board-lane",{role:"group","aria-labelledby":n,"data-col":e}),l=i(a,"div","page-board-head",{"data-col":e});this.editing?.kind==="rename"&&this.editing.id===e?l.append(this.editing.input,i(a,"span","page-board-name page-board-sr",{id:n},r),S(a,o.length)):(l.append(i(a,"h4","page-board-name",{id:n},r),S(a,o.length)),l.append(h(a,"page-board-icon page-board-colmenu","more",null,{"aria-haspopup":"menu","aria-expanded":String(this.menu===e),"aria-label":`${r} column options`,"data-action":"colmenu","data-col":e,"data-focus":`colmenu:${e}`})),this.menu===e&&l.append(this.columnMenu(e,t,r)));let c=i(a,"ol","page-board-cards");for(let b of o){let T=i(a,"li");T.append(this.card(b)),c.append(T)}return d.append(l,c),this.editing?.kind==="card"&&this.editing.id===e?d.append(this.editing.input):d.append(h(a,"page-board-add","plus","Add card",{"data-action":"add-card","data-col":e,"data-focus":`add:${e}`})),d}newLane(){let e=this.dom.ownerDocument,t=i(e,"div","page-board-lane",{role:"group","aria-label":"New column"}),a=i(e,"div","page-board-head");return a.append(this.editing.input),t.append(a),t}card(e){let t=this.dom.ownerDocument,a=this.board.cards[e],o=i(t,"button","page-board-card",{type:"button","aria-haspopup":"dialog","aria-expanded":String(this.isOpen(e)),"data-action":"card","data-card":e,"data-focus":`card:${e}`});if(o.append(i(t,"span","page-board-title",{},a.title||"Untitled")),a.owner||a.due){let r=i(t,"span","page-board-meta");if(a.owner){let n=i(t,"span","page-board-owner");n.append(k(t,a.owner),i(t,"span","page-board-owner-name",{},a.owner)),r.append(n)}a.due&&r.append(V(t,a.due)),o.append(r)}return o}tray(e,t,a,o){let r=this.dom.ownerDocument,n=`${this.uid}-missing-${a}`,d=i(r,"div","page-board-tray",{role:"group","aria-labelledby":n,"data-col":e}),l=i(r,"div","page-board-tray-head");l.append(i(r,"h4","page-board-name",{id:n},o?`Cards from deleted column \u201C${o.name||"Untitled"}\u201D`:"Cards from a deleted column"),S(r,t.length)),o&&l.append(h(r,"page-board-btn page-board-restore","restore","Restore column",{"data-action":"restore-column","data-col":e,"data-focus":`restore:${e}`}));let p=i(r,"ol","page-board-cards");for(let c of t){let b=i(r,"li");b.append(this.card(c),this.moveSelect(c)),p.append(b)}return d.append(l,p),d}deletedTray(e,t){let a=this.dom.ownerDocument,o=i(a,"div","page-board-tray page-board-deleted",{role:"group","aria-label":"Deleted cards"}),r=i(a,"div","page-board-tray-head");if(r.append(h(a,"page-board-btn page-board-deleted-toggle","chevron",`Deleted cards (${e.length})`,{"aria-expanded":String(!!this.showDeleted),"data-action":"toggle-deleted","data-focus":"toggle-deleted"})),o.append(r),!this.showDeleted)return o;let n=i(a,"ol","page-board-deleted-list");for(let d of e.sort((l,p)=>(t[l].pos??"")<(t[p].pos??"")?-1:1)){let l=t[d].title||"Untitled",p=i(a,"li","page-board-deleted-item");p.append(i(a,"span","page-board-title",{},l),h(a,"page-board-btn page-board-restore","restore","Restore",{"aria-label":`Restore ${l}`,"data-action":"restore-card","data-card":d,"data-focus":`restore-card:${d}`})),n.append(p)}return o.append(n),o}moveSelect(e){let t=this.dom.ownerDocument,a=i(t,"span","page-board-select page-board-move"),o=i(t,"select",null,{"aria-label":`Move ${this.board.cards[e].title||"Untitled"} to column`,"data-action":"orphan-move","data-card":e,"data-focus":`move:${e}`,disabled:!this.board.columnIds.length});o.append(i(t,"option",null,{value:"",selected:!0,disabled:!0,hidden:!0},"Move to column"));for(let r of this.board.columnIds)o.append(i(t,"option",null,{value:r},this.board.columns[r].name||"Untitled"));return a.append(o),a.insertAdjacentHTML("beforeend",v.chevron),a}columnMenu(e,t,a){let o=this.dom.ownerDocument,r=this.board.columnIds.length-1,n=i(o,"div","page-board-pop page-board-menu",{role:"menu","aria-label":`${a} column`}),d=(l,p,c,b=!1)=>h(o,`page-board-option${l==="delete-column"?" is-danger":""}`,c,p,{role:"menuitem","data-action":l,"data-col":e,"data-focus":`${l}:${e}`,disabled:b});return n.append(d("rename","Rename","pencil"),d("left","Move left","left",t===0),d("right","Move right","right",t===r),i(o,"div","page-board-sep",{role:"separator"}),d("delete-column","Delete column","trash")),n}isOpen(e){return this.panel?.isOpen(this.blockId,e)??!1}openMenu(e){this.menu=e,this.render(),this.dom.querySelector(".page-board-menu .page-board-option:not(:disabled)")?.focus()}closeMenu(e){let t=this.menu;this.menu=null,this.dom.querySelector(".page-board-menu")?.remove();for(let a of this.dom.querySelectorAll(".page-board-colmenu"))a.setAttribute("aria-expanded","false");e&&this.focusKey(`colmenu:${t}`)}inlineInput(e,t,a,o=""){let r=i(this.dom.ownerDocument,"input",e,{type:"text","aria-label":t,"data-focus":a,placeholder:e==="page-board-new"?"Card title":"Column name"});return r.value=o,r.addEventListener("keydown",n=>{n.isComposing||n.keyCode===229||(n.key==="Enter"?(n.preventDefault(),this.finishEdit(!0,!0)):n.key==="Escape"&&(n.preventDefault(),this.finishEdit(!1,!0)))}),r.addEventListener("blur",()=>{this.rendering||setTimeout(()=>{this.editing?.input===r&&r.ownerDocument.activeElement!==r&&this.finishEdit(!0,!1)},0)}),r}startEdit(e,t){this.editing&&this.finishEdit(!0,!1),this.menu=null;let a=e==="rename"?this.board.columns[t]?.name??"":"",o=e==="card"?`new:${t}`:e==="column"?"new-column":`name:${t}`,r=this.inlineInput(e==="card"?"page-board-new":"page-board-rename",e==="card"?"New card title":"Column name",o,a);this.editing={kind:e,id:t,input:r},this.render(),r.focus(),r.select()}finishEdit(e,t){let a=this.editing;if(!a)return;let o=a.input.value.trim();if(a.kind==="card"&&e&&o&&t){if(this.run("createCard",{columnId:a.id,title:o})?.status!=="refused")a.input.value="";else if(!this.board.columns[a.id]){this.editing=null,this.render(),this.focusKey("add-column");return}this.focusKey(`new:${a.id}`);return}this.editing=null;let r=a.kind==="column"?"add-column":a.kind==="card"?`add:${a.id}`:`colmenu:${a.id}`;if(e&&o)if(a.kind==="card")this.run("createCard",{columnId:a.id,title:o});else if(a.kind==="column"){let n=this.run("createColumn",{name:o});n.status==="created"&&(r=`add:${n.id}`)}else o!==this.board.columns[a.id]?.name&&this.run("renameColumn",a.id,o);this.render(),t&&this.focusKey(r)}shiftColumn(e,t){let a=this.board.columnIds,o=a.indexOf(e);this.menu=null,this.run("moveColumn",e,{afterId:t<0?L(a,o):a[o+1]}),this.render(),this.focusKey(`colmenu:${e}`)}deleteColumn(e){let t=this.board.columnIds,a=t[t.indexOf(e)+1]??t[t.indexOf(e)-1];this.menu=null;let o=this.run("removeColumn",e);this.render(),o.status==="removed"&&(g(this.view,o.cards?"Column deleted. Its cards are under Cards from a deleted column.":"Column deleted"),!this.focusKey(`restore:${e}`)&&!this.focusKey(`colmenu:${a}`)&&this.focusKey("add-column"))}restoreCard(e){this.run("restoreCard",e).status==="restored"&&(g(this.view,"Card restored"),this.focusKey(`card:${e}`)||this.focusKey("toggle-deleted"))}restoreColumn(e){this.run("restoreColumn",e).status==="restored"&&(g(this.view,"Column restored"),this.focusKey(`colmenu:${e}`))}openCard(e){this.menu=null,this.dom.querySelector(".page-board-menu")?.remove(),this.panel?.open(this.blockId,e,{commands:this.commands,undo:this.undo,redo:this.redo})}click(e){let t=e.target.closest?.("[data-action]");if(!t||!this.dom.contains(t)||t.disabled)return;let{action:a,col:o,card:r}=t.dataset;this.editing&&a!=="add-card"&&a!=="add-column"&&a!=="rename"&&this.finishEdit(!0,!1),a==="card"?this.openCard(r):a==="colmenu"?this.menu===o?this.closeMenu(!0):this.openMenu(o):a==="rename"?this.startEdit("rename",o):a==="left"||a==="right"?this.shiftColumn(o,a==="left"?-1:1):a==="delete-column"?this.deleteColumn(o):a==="add-card"?this.startEdit("card",o):a==="add-column"?this.startEdit("column",null):a==="restore-column"?this.restoreColumn(o):a==="restore-card"?this.restoreCard(r):a==="toggle-deleted"&&(this.showDeleted=!this.showDeleted,this.render(),this.focusKey("toggle-deleted"))}change(e){let t=e.target;if(t.dataset?.action!=="orphan-move"||!t.value)return;let a=t.dataset.card,o=t.value,r=this.board.lanes.get(o)??[];this.run("moveCard",a,{columnId:o,afterId:r[r.length-1]??null}).status==="moved"&&this.focusKey(`card:${a}`)}keydown(e){let t=e.key.toLowerCase();if((e.metaKey||e.ctrlKey)&&(t==="z"||t==="y")&&!_(e.target)){e.preventDefault(),t==="y"||e.shiftKey?this.redo?.():this.undo?.();return}let a=e.target.closest?.(".page-board-menu");if(a){if(e.key==="Escape"||e.key==="Tab")e.preventDefault(),this.closeMenu(!0);else if(e.key==="ArrowDown"||e.key==="ArrowUp"){e.preventDefault();let o=[...a.querySelectorAll(".page-board-option:not(:disabled)")],r=o.indexOf(e.target);o[(r+(e.key==="ArrowDown"?1:-1)+o.length)%o.length]?.focus()}}}focusout(e){if(this.rendering||this.menu===null)return;let t=this.dom.querySelector(".page-board-menu");t?.contains(e.target)&&!t.contains(e.relatedTarget)&&this.closeMenu(!1)}update(e){if(e.type!==X.board||e.attrs.id!==this.node.attrs.id)return!1;let t=!e.sameMarkup(this.node);return this.node=e,t&&this.render(),!0}stopEvent(){return!0}ignoreMutation(){return!0}destroy(){let e=$.get(this.view),t=e?.get(this.blockId);this.editing&&t&&t!==this&&(t.editing=this.editing,t.render()),t===this&&e.delete(this.blockId),this.dragger.stop()}};var f=new WeakMap;var W="(max-width: 1039.98px)",Z=s=>/^(INPUT|TEXTAREA|SELECT)$/.test(s?.tagName??""),G=0;function U(s){return f.has(s)||f.set(s,new B(s)),f.get(s)}var B=class{constructor(e){this.view=e,this.blockId=null,this.cardId=null,this.host=null,this.node=null,this.people=[],this.dueInput=null,this.rendering=!1,this.titleBase="",this.ownerBase="";let t=e.dom.ownerDocument,a=`page-board-panel-${++G}`;this.scrim=i(t,"div","page-board-scrim",{"aria-hidden":"true"}),this.dom=i(t,"aside","page-board-panel",{role:"dialog","aria-modal":"false","aria-labelledby":`${a}-title`});let o=i(t,"div","page-board-panel-top");this.title=i(t,"textarea","page-board-panel-title",{id:`${a}-title`,rows:2,"aria-label":"Card title",spellcheck:"false","data-focus":"title"}),o.append(this.title,h(t,"page-board-icon page-board-close","close",null,{"aria-label":"Close","aria-keyshortcuts":"Escape","data-action":"close","data-focus":"close"})),this.ownerInput=i(t,"input","page-board-owner-input",{type:"text","aria-label":"Owner name",placeholder:"Or type a name\u2026","data-focus":"owner-name"}),this.fields=i(t,"div","page-board-fields"),this.actions=i(t,"div","page-board-actions"),this.dom.append(o,this.fields,this.actions),this.labels={column:`${a}-column`,owner:`${a}-owner`,due:`${a}-due`},this.textField(this.title,()=>this.commitTitle()),this.textField(this.ownerInput,()=>this.commitOwner()),this.dom.addEventListener("click",r=>this.click(r)),this.dom.addEventListener("mousedown",r=>{r.target.closest?.("button")&&r.preventDefault()}),this.dom.addEventListener("change",r=>{r.target.dataset.focus==="column"&&this.moveTo(r.target.value)}),this.dom.addEventListener("keydown",r=>this.keydown(r)),this.scrim.addEventListener("click",()=>this.hide(!0))}textField(e,t){e.addEventListener("keydown",a=>{a.isComposing||a.keyCode===229||(a.key==="Enter"&&!a.shiftKey?(a.preventDefault(),t()):a.key==="Escape"&&(a.preventDefault(),this.hide(!0)))}),e.addEventListener("blur",()=>{this.rendering||setTimeout(()=>{this.blockId!==null&&e.ownerDocument.activeElement!==e&&t()},0)})}get shell(){return this.view.dom.parentElement}isOpen(e,t){return this.blockId===e&&this.cardId===t}boardNode(){let e=null;return this.view.state.doc.forEach(t=>{!e&&t.type===y.nodes.board&&t.attrs.id===this.blockId&&(e=t)}),e}card(){return this.boardNode()?.attrs.cards?.[this.cardId]??null}boardButton(e,t){let a=[...this.view.dom.querySelectorAll(".page-board")].find(o=>o.dataset.id===e);return a?[...a.querySelectorAll("[data-focus]")].find(o=>o.dataset.focus===t&&!o.disabled)??null:null}setExpanded(e){this.boardButton(this.blockId,`card:${this.cardId}`)?.setAttribute("aria-expanded",String(e))}open(e,t,a){this.blockId!==null&&(this.commit(),this.setExpanded(!1)),this.blockId=e,this.cardId=t,this.host=a,this.dueInput=null,this.dom.isConnected||this.shell.append(this.scrim,this.dom),this.shell.classList.add("has-board-panel");let o=!!this.view.dom.ownerDocument.defaultView.matchMedia?.(W).matches;this.dom.setAttribute("aria-modal",String(o)),this.render(!0),this.setExpanded(!0),o?this.focusKey("close"):this.title.focus(),this.loadPeople()}hide(e=!1,t=!0){if(this.blockId===null)return;t&&this.commit();let{blockId:a,cardId:o}=this;this.setExpanded(!1),this.blockId=this.cardId=this.node=null,this.dueInput=null,this.scrim.remove(),this.dom.remove(),this.shell?.classList.remove("has-board-panel"),e&&this.boardButton(a,`card:${o}`)?.focus()}loadPeople(){let e=globalThis.clay?.people?.available;e&&Promise.resolve().then(()=>e()).then(t=>{this.people=(Array.isArray(t)?t:[]).filter(a=>typeof a?.name=="string"&&a.name),this.blockId!==null&&this.render(!1)}).catch(()=>{})}run(e,...t){if(!this.host?.commands||!this.view.editable)return{status:"refused",code:"read-only"};let a=this.host.commands[e](this.blockId,this.cardId,...t);return a?.status==="refused"&&this.sync(!0),a}commit(){this.commitTitle(),this.commitOwner(),this.dueInput&&this.commitDue()}commitTitle(){let e=this.card(),t=this.title.value.replace(/\s*\n\s*/g," ");this.title.value=t,e&&t!==e.title&&this.run("editCard",{title:t})}commitOwner(){let e=this.card(),t=this.ownerInput.value.trim();this.ownerInput.value=t;let a=t||null;e&&a!==(e.owner??null)&&this.run("editCard",{owner:a})}commitDue(){let e=this.card(),t=this.dueInput?.value||null;this.dueInput=null,e&&t!==(e.due??null)?this.run("editCard",{due:t}):this.blockId!==null&&this.render(!1)}openDue(){let e=this.view.dom.ownerDocument,t=i(e,"input","page-board-control page-board-date",{type:"date","aria-labelledby":this.labels.due,"data-focus":"due-input"});t.value=this.card()?.due??"",t.addEventListener("keydown",a=>{a.key==="Enter"?(a.preventDefault(),this.commitDue(),this.focusKey("due")):a.key==="Escape"&&(a.preventDefault(),a.stopPropagation(),this.dueInput=null,this.render(!1),this.focusKey("due"))}),t.addEventListener("blur",()=>{this.rendering||setTimeout(()=>{this.dueInput===t&&e.activeElement!==t&&this.commitDue()},0)}),this.dueInput=t,this.render(!1),t.focus();try{t.showPicker?.()}catch{}}sync(e=!1){if(this.blockId===null)return;let t=this.boardNode();if(!e&&t===this.node)return;let a=this.node?.attrs.cards?.[this.cardId]?.col;if(!t?.attrs.cards?.[this.cardId]){let o=this.dom.contains(this.view.dom.ownerDocument.activeElement),r=this.blockId;this.hide(!1,!1),o&&(this.boardButton(r,`add:${a}`)??this.boardButton(r,"add-column"))?.focus();return}this.render(!1)}focusKey(e){let t=[...this.dom.querySelectorAll("[data-focus]")].find(a=>a.dataset.focus===e&&!a.disabled);return t?.focus(),!!t}render(e){let t=this.view.dom.ownerDocument;this.node=this.boardNode();let a=x(this.node),o=a.cards[this.cardId];if(!o)return this.hide(!1,!1);let r=t.activeElement,n=this.dom.contains(r)?r.dataset.focus:null,d=n&&typeof r.selectionStart=="number"?[r.selectionStart,r.selectionEnd]:null;this.rendering=!0;try{let l=!e&&this.title.value!==this.titleBase;this.titleBase=o.title??"",l||(this.title.value=this.titleBase);let p=!e&&this.ownerInput.value!==this.ownerBase;this.ownerBase=o.owner??"",p||(this.ownerInput.value=this.ownerBase),this.fields.replaceChildren(this.columnField(a,o),this.ownerField(o),this.dueField(o)),this.actions.replaceChildren(...this.actionButtons(a,o)),n&&n!=="title"&&this.focusKey(n)?d&&t.activeElement.setSelectionRange?.(...d):(n==="up"||n==="down")&&this.focusKey(n==="up"?"down":"up")}finally{this.rendering=!1}}field(e,t,a,o=!1){let r=this.view.dom.ownerDocument,n=i(r,"div",`page-board-field${o?" is-owner":""}`);return n.append(i(r,"span","page-board-label",{id:this.labels[e]},t),a),n}columnField(e,t){let a=this.view.dom.ownerDocument,o=i(a,"span","page-board-select"),r=i(a,"select","page-board-control",{"aria-labelledby":this.labels.column,"data-focus":"column",disabled:!e.columnIds.length});e.lanes.has(t.col)||r.append(i(a,"option",null,{value:"",selected:!0,disabled:!0},"Deleted column"));for(let n of e.columnIds)r.append(i(a,"option",null,{value:n,selected:n===t.col},e.columns[n].name||"Untitled"));return o.append(r),o.insertAdjacentHTML("beforeend",v.chevron),this.field("column","Column",o)}ownerField(e){let t=this.view.dom.ownerDocument,a=i(t,"div","page-board-owners"),o=i(t,"div","page-board-people",{role:"group","aria-labelledby":this.labels.owner});for(let r of this.people){let n=i(t,"button","page-board-person",{type:"button","aria-pressed":String(r.name===e.owner),"data-action":"owner","data-owner":r.name,"data-focus":`owner:${r.id??r.name}`});n.append(k(t,r.name),i(t,"span",null,{},r.name)),o.append(n)}return o.append(i(t,"button","page-board-person is-none",{type:"button","aria-pressed":String(!e.owner),"data-action":"owner-none","data-focus":"owner-none"},"No owner")),a.append(o,this.ownerInput),this.field("owner","Owner",a,!0)}dueField(e){let t=this.view.dom.ownerDocument;if(this.dueInput)return this.field("due","Due",this.dueInput);let a=w(),o=e.due?M(e.due,a):null,r=e.due?A(e.due,a,!0):null,n=i(t,"button","page-board-control",{type:"button","aria-label":e.due?`Due ${r}${o==="overdue"?", overdue":""}`:"Set due date","data-action":"due","data-focus":"due"});return e.due?(n.append(i(t,"span","page-board-due",{"data-due":o},r)),o==="overdue"&&n.append(i(t,"span","page-board-due-note",{},"Overdue"))):n.append(i(t,"span","page-board-control-text page-board-none",{},"No date")),n.insertAdjacentHTML("beforeend",v.calendar),this.field("due","Due",n)}actionButtons(e,t){let a=this.view.dom.ownerDocument,o=e.lanes.get(t.col),r=o?o.indexOf(this.cardId):-1;return[h(a,"page-board-btn","up","Move up",{"data-action":"up","data-focus":"up",disabled:r<=0}),h(a,"page-board-btn","down","Move down",{"data-action":"down","data-focus":"down",disabled:r<0||r>=o.length-1}),h(a,"page-board-btn page-board-delete","trash","Delete card",{"data-action":"delete","data-focus":"delete"})]}step(e){let t=this.card(),a=t?x(this.node).lanes.get(t.col):null;if(!a)return;let o=a.indexOf(this.cardId);this.run("moveCard",{columnId:t.col,afterId:e<0?L(a,o):a[o+1]})}moveTo(e){let t=x(this.node).lanes.get(e)?.filter(a=>a!==this.cardId);t&&this.run("moveCard",{columnId:e,afterId:t[t.length-1]??null})}remove(){let e=this.card();if(!e)return;let t=x(this.node),a=t.lanes.get(e.col)??t.missing.get(e.col)??[],o=a.indexOf(this.cardId),r=a[o+1]??a[o-1],{blockId:n,cardId:d,host:l}=this;if(this.hide(!1,!1),!l?.commands||!this.view.editable||l.commands.removeCard(n,d).status!=="removed")return;g(this.view,"Card deleted"),(r&&this.boardButton(n,`card:${r}`)||this.boardButton(n,`add:${e.col}`)||this.boardButton(n,"add-column"))?.focus()}click(e){let t=e.target.closest?.("[data-action]");if(!t||t.disabled)return;let a=t.dataset.action;a!=="close"&&this.commitTitle(),a==="close"?this.hide(!0):a==="owner"?(this.ownerInput.value=this.ownerBase,this.run("editCard",{owner:t.dataset.owner})):a==="owner-none"?(this.ownerInput.value=this.ownerBase,this.run("editCard",{owner:null})):a==="due"?this.openDue():a==="up"||a==="down"?this.step(a==="up"?-1:1):a==="delete"&&this.remove()}keydown(e){let t=e.key.toLowerCase();if(!e.defaultPrevented){if(e.key==="Escape")e.preventDefault(),this.hide(!0);else if((e.metaKey||e.ctrlKey)&&(t==="z"||t==="y")&&!Z(e.target))e.preventDefault(),t==="y"||e.shiftKey?this.host?.redo?.():this.host?.undo?.();else if(e.key==="Tab"&&this.dom.getAttribute("aria-modal")==="true"){let a=[...this.dom.querySelectorAll("button, input, select, textarea")].filter(o=>!o.disabled);if(e.target!==a[e.shiftKey?0:a.length-1])return;e.preventDefault(),a[e.shiftKey?a.length-1:0].focus()}}}};function we({view:s=null,board:e=null,undo:t=null,redo:a=null}={}){let o=s?O(s,{update:r=>f.get(r)?.sync(),destroy:r=>{f.get(r)?.hide(!1,!1),f.delete(r)}}):()=>{};return{id:"board",nodeViews:e?{board:(r,n,d)=>new E(r,n,d,{commands:e,undo:t,redo:a,panel:U(n)})}:null,css:e?z:null,dispose(){o()}}}export{we as createFeature};
@@ -1 +0,0 @@
1
- import{a as m,b as N,c as E,d as L,f as k,j as v,k as T,l as D,n as w}from"./c-OIBUTDXI.js";import{a as O}from"./c-4JZDZFF6.js";import{b as F,e as g,f as I,g as f}from"./c-VAK7SG37.js";import{a as C,b as c}from"./c-NUHP2XDB.js";var M=new WeakMap,H='a[href], input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [contenteditable], [tabindex]:not([tabindex^="-"])';function U(u,l){let t=[...u.querySelectorAll(H)].filter(r=>r.offsetParent!==null);if(!t.length)return;let d=t.indexOf(document.activeElement);d===-1?(t[0].focus(),l.preventDefault()):l.shiftKey&&d===0?(t[t.length-1].focus(),l.preventDefault()):!l.shiftKey&&d===t.length-1&&(t[0].focus(),l.preventDefault())}var P=`1px solid ${g["line-2"]}`;function B(u,l,t=null,d=[],r=[]){let x=f.dialogCloseHover[0].slice(11),b=["position:absolute","top:-1px","right:-1px","z-index:2","display:grid","place-items:center",l?"height:calc(100% + 1px)":"height:62px","margin:0","padding:0","border:0",...f.dialogClose,...l?[]:[`border-bottom:${P}`],"cursor:pointer","outline:none"],e=v("button",b);if(e.type="button",e.setAttribute("aria-label",u),e.title=u,e.innerHTML=I.dialogClose,!m(t))return k(e.firstElementChild,16),e.addEventListener("pointerenter",()=>c(e,"background",x)),e.addEventListener("pointerleave",()=>c(e,"background",g.face)),e.addEventListener("focus",()=>{c(e,"outline",`2px solid ${g.brass}`),c(e,"outline-offset","-4px")}),e.addEventListener("blur",()=>c(e,"outline","none")),e;let n=["close",...d],s=["icon",...r];L(e,t,n),L(e.firstElementChild,t,s);let o={hover:!1,focus:!1,pressed:!1},a=()=>{let i={hover:o.hover,active:o.pressed,focus:o.focus},p=e.firstElementChild;p.style.cssText="",k(p,16),C(p,E(t,s,i)),T(e,[...b,...o.hover?[`background:${x}`]:[],...o.focus?[`outline:2px solid ${g.brass}`,"outline-offset:-4px"]:[],...N(t,"close",i),...E(t,n,i)])};return e.addEventListener("pointerenter",()=>{o.hover=!0,a()}),e.addEventListener("pointerleave",()=>{o.hover=!1,o.pressed=!1,a()}),e.addEventListener("pointerdown",i=>{i.button!==void 0&&i.button!==0||(o.pressed=!0,a())}),e.addEventListener("pointerup",()=>{o.pressed=!1,a()}),e.addEventListener("focus",()=>{o.focus=!0,a()}),e.addEventListener("blur",()=>{o.focus=!1,o.pressed=!1,a()}),a(),e}function q({zIndex:u="100",width:l="600px",closable:t=!1,titled:d=!1,theme:r=null,surface:x="modal"}={}){let b=m(r),e=b?r.tokens:{},n=e.spacing,s=y=>x==="modal"?[`dialog.${y}`]:[`dialog.${y}`,`${x}.${y}`],o=v("div",["display:block"],{theme:r,parts:s("root")});o.setAttribute("data-clay-modal",""),b&&o.setAttribute("data-clay-ui",x),o.setAttribute("aria-hidden","true"),c(o,"color-scheme",b?r.scheme:O());let a=v("div",["position:fixed","inset:0",`z-index:${u}`,"overflow:auto","display:flex","align-items:flex-start","justify-content:center","padding:min(96px, 10vh) 16px 16px",`background:color-mix(in srgb, ${g.ground} 72%, transparent)`],{theme:r,parts:s("overlay"),role:"overlay"});a.tabIndex=-1;let i=D("form",["position:relative","display:flex","flex-direction:column","margin:0",`width:min(${l}, 100%)`,"max-height:calc(100dvh - min(96px, 10vh) - 16px)",...f.dialogPanel],{theme:r,parts:s("panel")});i.setAttribute("role","dialog"),i.setAttribute("aria-modal","true");let p=null,$=null;d&&(p=v("div",["position:relative","display:block","flex:none",`padding:20px ${t?"68px":"22px"} 16px 22px`,...f.dialogHeader,...e.border?[`border-bottom-color:${e.border}`]:[],...n?[`padding:${n} ${t?`calc(${n} + 46px)`:n} calc(${n} * .7) ${n}`]:[]],{theme:r,parts:s("header")}),$=w("div",["display:block",...f.dialogHeading,"overflow-wrap:anywhere"],void 0,{theme:r,parts:s("title"),role:"heading"}),$.setAttribute("role","heading"),$.setAttribute("aria-level","2"),p.append($),i.append(p));let A=w("div",["display:block","flex:1 1 auto","min-height:0","overflow-y:auto","overflow-x:hidden",`padding:20px ${t&&!d?"84px":"22px"} 20px 22px`,"overflow-wrap:anywhere",`font:14.5px/1.55 ${F}`,...n?[`padding:${n} ${t&&!d?`calc(${n} + 62px)`:n} ${n} ${n}`]:[]],void 0,{theme:r,parts:s("body")}),S=v("div",["display:flex","flex:none","flex-wrap:wrap","justify-content:flex-end","align-items:center",...f.dialogFooter,...e.border?[`border-top-color:${e.border}`]:[],...n?[`padding:calc(${n} * .65) ${n}`,`gap:calc(${n} / 2)`]:[]],{theme:r,parts:[...s("footer"),...s("actions")]});i.append(A,S);let h=t?B("Close",d,r,s("close"),s("closeIcon")):null;return h&&(p||i).append(h),a.append(i),o.append(a),{root:o,overlay:a,panel:i,header:p,heading:$,body:A,footer:S,close:h,theme:r}}export{M as a,U as b,q as c};
@@ -1 +0,0 @@
1
- var O=/^(0|[1-9]\d*)$/,E=new Set(["set","del","add"]),s=e=>e!==null&&typeof e=="object",y=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function f(e,t,n){Object.defineProperty(e,t,{value:n,enumerable:!0,writable:!0,configurable:!0})}function j(e){if(Array.isArray(e)){for(let t of e)T(t);return e.slice()}if(typeof e!="string")throw new TypeError("clay.live: a path is a dotted string or an array of keys");return e===""?[]:e.split(".").map(t=>O.test(t)?Number(t):t)}function T(e){if(typeof e!="string"&&!(Number.isInteger(e)&&e>=0))throw new TypeError(`clay.live: path segment ${String(e)} is not a string or a non-negative integer`)}function a(e,t=new Set){if(e===null||typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError("clay.live: numbers must be finite");return e}if(typeof e!="object")throw new TypeError(`clay.live: a ${typeof e} is not JSON`);if(t.has(e))throw new TypeError("clay.live: the value contains a cycle");t.add(e);let n;if(Array.isArray(e)){n=[];for(let r=0;r<e.length;r++){if(!(r in e))throw new TypeError("clay.live: sparse arrays are not JSON");n.push(a(e[r],t))}}else{let r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null)throw new TypeError("clay.live: only plain objects and arrays are JSON");n={};for(let i of Object.keys(e))f(n,i,a(e[i],t))}return t.delete(e),n}function C(e){if(!s(e)||!E.has(e.op))throw new TypeError('clay.live: an op is { op: "set" | "del" | "add", path, ... }');let t=j(e.path);if(e.op==="set"){if(e.value===void 0)throw new TypeError("clay.live: set needs a value; use delete to remove");let n=a(e.value);if(t.length===0&&!s(n))throw new TypeError("clay.live: the whole value must be an object or an array");return{op:"set",path:t,value:n}}if(t.length===0)throw new TypeError(`clay.live: ${e.op} needs a path`);if(e.op==="add"){if(typeof e.n!="number"||!Number.isFinite(e.n))throw new TypeError("clay.live: add needs a finite number");return{op:"add",path:t,n:e.n}}return{op:"del",path:t}}function p(e,t){return typeof t=="number"?t:O.test(t)?Number(t):-1}function d(e,t){if(Array.isArray(e)){let r=p(e,t);return r>=0&&r<e.length?e[r]:void 0}let n=String(t);return y(e,n)?e[n]:void 0}function x(e,t){if(t.path.length===0){if(t.op==="set"&&(!s(t.value)||Array.isArray(t.value)!==Array.isArray(e)))throw new TypeError(`clay.live: the whole value must stay ${Array.isArray(e)?"a list":"an object"}`);return}let n=e;for(let r=0;r<t.path.length;r++){let i=t.path[r],o=r===t.path.length-1;if(!s(n)){if(t.op==="del")return;for(let l=r;l<t.path.length;l++)if(typeof t.path[l]=="number"&&t.path[l]!==0)throw new RangeError(`clay.live: index ${t.path[l]} would leave holes in a new list at ${t.path.slice(0,l).join(".")||"the root"}`);return}if(Array.isArray(n)){let l=p(n,i);if(l<0)throw new TypeError(`clay.live: "${i}" is not an index of the list at ${t.path.slice(0,r).join(".")||"the root"}`);let u=o&&t.op!=="del"?n.length:n.length-1;if(l>u&&!(o&&t.op==="del"))throw new RangeError(`clay.live: index ${l} is past the end of the list at ${t.path.slice(0,r).join(".")||"the root"}`)}if(o)return;n=d(n,i)}}function A(e,t,n){Array.isArray(e)?e[p(e,t)]=n:f(e,String(t),n)}function S(e,t){let{path:n}=t;if(n.length===0)return a(t.value);let r=e;for(let o=0;o<n.length-1;o++){let l=d(r,n[o]);if(!s(l)){if(t.op==="del")return e;l=typeof n[o+1]=="number"?[]:{},A(r,n[o],l)}r=l}let i=n[n.length-1];if(t.op==="set")A(r,i,a(t.value));else if(t.op==="add"){let o=d(r,i);A(r,i,(typeof o=="number"&&Number.isFinite(o)?o:0)+t.n)}else if(Array.isArray(r)){let o=p(r,i);o>=0&&o<r.length&&r.splice(o,1)}else delete r[String(i)];return e}function F(e,t){let n=e;for(let r of t)x(n,r),n=S(n,r);return n}function M(e,t){x(e,t);let{path:n}=t;if(n.length===0)return{root:a(t.value),at:null,key:null,kind:"put",old:e,path:[],size:0,keys:null,empty:!1};let r=e,i=n.length-1;for(let c=0;c<n.length-1;c++){let k=d(r,n[c]);if(!s(k)){if(t.op==="del")return null;i=c;break}r=k}let o=Array.isArray(r),l=o?p(r,n[i]):String(n[i]),u=o?r.length:0,g=o?l<u:y(r,l);if(t.op==="del"&&!g)return null;let w=t.op==="del"?"remove":g?"put":"add",m={root:e,at:r,key:l,kind:w,old:g?r[l]:void 0,path:n.slice(0,i+1),size:u,keys:null,empty:!1};return!o&&w==="remove"&&(m.keys=Object.keys(r)),!o&&w==="add"&&(m.empty=$(r)),S(e,t),m}function $(e){for(let t in e)if(y(e,t))return!1;return!0}function D(e){let{at:t,key:n,kind:r,old:i}=e;if(t===null)return i;if(Array.isArray(t))r==="put"?t[n]=i:r==="add"?t.length=e.size:t.splice(n,0,i);else if(r==="put")f(t,n,i);else if(r==="add")delete t[n];else if(e.keys[e.keys.length-1]===n)f(t,n,i);else{let o=e.keys.map(l=>l===n?i:t[l]);for(let l of e.keys)l!==n&&delete t[l];e.keys.forEach((l,u)=>f(t,l,o[u]))}return e.root}var N=(e,t)=>e.length===t.length&&e.every((n,r)=>String(n)===String(t[r]));function I(e){let t=[];for(let n of e){let r=t[t.length-1];if(!r||r.op==="del"||!N(r.path,n.path)){t.push(n);continue}if(n.op==="del"&&n.path.length>1)t.push(n);else if(n.op==="set"||n.op==="del")t[t.length-1]=n;else if(r.op==="add")t[t.length-1]={op:"add",path:r.path,n:r.n+n.n};else{let i=typeof r.value=="number"?r.value:0;t[t.length-1]={op:"set",path:r.path,value:i+n.n}}}return t}function R(e,t){let n=Math.min(e.length,t.length);for(let r=0;r<n;r++)if(String(e[r])!==String(t[r]))return!1;return!0}function P(e,t){if(Array.isArray(e)){for(let i=0;i<t.length;i++)e[i]=b(i<e.length?e[i]:void 0,t[i]);return e.length=t.length,e}let n=Object.keys(t),r=n.map(i=>b(y(e,i)?e[i]:void 0,t[i]));for(let i of Object.keys(e))delete e[i];return n.forEach((i,o)=>f(e,i,r[o])),e}function b(e,t){return s(e)&&s(t)&&Array.isArray(e)===Array.isArray(t)?P(e,t):t}function h(e){return JSON.stringify(e).replace(/</g,"\\u003c")}var J=/^([A-Za-z0-9-]{1,64}):(0|[1-9]\d*):([0-9a-f]{8})$/;function z(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,"0")}function q(e,t,n){return`${e}:${t}:${z(n)}`}function H(e){let t=typeof e=="string"?J.exec(e):null;return t?{epoch:t[1],seq:Number(t[2]),hash:t[3]}:null}function v(e,t,n=[]){if(!s(e)||!s(t)||Array.isArray(e)!==Array.isArray(t))return[{op:"set",path:n,value:a(t)}];if(Array.isArray(e)){if(e.length!==t.length)return[{op:"set",path:n,value:a(t)}];let i=[];for(let o=0;o<t.length;o++)h(e[o])!==h(t[o])&&i.push(...v(e[o],t[o],[...n,o]));return i}let r=[];for(let i of Object.keys(e))y(t,i)||r.push({op:"del",path:[...n,i]});for(let i of Object.keys(t))y(e,i)?h(e[i])!==h(t[i])&&r.push(...v(e[i],t[i],[...n,i])):r.push({op:"set",path:[...n,i],value:a(t[i])});return r}export{a,C as b,x as c,S as d,F as e,M as f,D as g,I as h,R as i,P as j,h as k,z as l,q as m,H as n,v as o};