@panphora/clayjs 1.23.0 → 1.24.1

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 (471) hide show
  1. package/dist/all.js +1 -1
  2. package/dist/blockeditor/themes/light-1.css +431 -0
  3. package/dist/clay-dom.js +1 -1
  4. package/dist/clay-events.js +1 -1
  5. package/dist/clay-internals.js +1 -1
  6. package/dist/clay-options.js +1 -1
  7. package/dist/clay-router.js +1 -1
  8. package/dist/clay-ui.js +1 -1
  9. package/dist/clay-utils.js +1 -1
  10. package/dist/clay.js +1 -1
  11. package/dist/clay.standalone.js +30285 -26613
  12. package/dist/m/c-277QP5ET.js +1 -0
  13. package/dist/m/c-2BLVA6IN.js +5 -0
  14. package/dist/m/c-2OJMOUPC.js +1 -0
  15. package/dist/m/c-2PVGJFI5.js +1 -0
  16. package/dist/m/{c-AYVGD6A6.js → c-3UW5EJ77.js} +1 -1
  17. package/dist/m/{c-T5NK2TVY.js → c-42ZNV7LI.js} +1 -1
  18. package/dist/m/{c-3TLG3OLG.js → c-46LJAZZJ.js} +1 -1
  19. package/dist/m/c-47IBJGPQ.js +1 -0
  20. package/dist/m/c-5FXEKU4Y.js +1 -0
  21. package/dist/m/c-5KXDKC5G.js +1 -0
  22. package/dist/m/{c-EUGJVHDD.js → c-5RZNFTWD.js} +1 -1
  23. package/dist/m/c-65LJU2H2.js +72 -0
  24. package/dist/m/{c-NQJRVJ56.js → c-6IJEVE6B.js} +1 -1
  25. package/dist/m/{c-NW54NHKE.js → c-6LEYVQJK.js} +1 -1
  26. package/dist/m/{c-GSRLXYWL.js → c-6Q6RGFBF.js} +1 -1
  27. package/dist/m/c-6RGEQNVV.js +1 -0
  28. package/dist/m/c-7CM4GMTS.js +6 -0
  29. package/dist/m/c-7NCWENHV.js +1 -0
  30. package/dist/m/c-7V6MGMX2.js +1 -0
  31. package/dist/m/{c-LKSL4AUJ.js → c-7WZSUTYP.js} +1 -1
  32. package/dist/m/c-A4L7APIU.js +1 -0
  33. package/dist/m/c-APGHGDZM.js +1 -0
  34. package/dist/m/c-AT7GLQGV.js +34 -0
  35. package/dist/m/{c-ZRXJD4G6.js → c-B7GOFGQR.js} +1 -1
  36. package/dist/m/{c-KDXIJEEF.js → c-BGN7RCTJ.js} +1 -1
  37. package/dist/m/c-BKM46LUJ.js +1 -0
  38. package/dist/m/c-BOMQIQ3V.js +1 -0
  39. package/dist/m/{c-62HZW5DH.js → c-C5AKJVRH.js} +1 -1
  40. package/dist/m/{c-BXYSDKAN.js → c-CJ7QYEWI.js} +1 -1
  41. package/dist/m/c-CTGRDT6E.js +1 -0
  42. package/dist/m/c-CV4T65JE.js +6 -0
  43. package/dist/m/c-CVSWLX3X.js +1 -0
  44. package/dist/m/c-CZHTXGJS.js +1 -0
  45. package/dist/m/c-D7NT5S4F.js +1 -0
  46. package/dist/m/c-DD26VXAP.js +1 -0
  47. package/dist/m/{c-ANNFZFLN.js → c-DDS23EY6.js} +1 -1
  48. package/dist/m/{c-ALDVFPWL.js → c-DFKBGSN2.js} +1 -1
  49. package/dist/m/c-DIKR7H57.js +147 -0
  50. package/dist/m/c-DXPOFLEJ.js +1 -0
  51. package/dist/m/c-EDE45NM7.js +1 -0
  52. package/dist/m/c-EILLN2H2.js +1 -0
  53. package/dist/m/c-EODTTNVA.js +1 -0
  54. package/dist/m/{c-G6COVIZB.js → c-ESK4S67I.js} +1 -1
  55. package/dist/m/c-FDWR3FL7.js +1 -0
  56. package/dist/m/{c-WQZTI5P2.js → c-FEC6LGFF.js} +1 -1
  57. package/dist/m/c-FLEIU6CG.js +1 -0
  58. package/dist/m/c-FQAQRXGK.js +1 -0
  59. package/dist/m/{c-W4JCVLAB.js → c-FSQXFG5T.js} +1 -1
  60. package/dist/m/c-FVPNX2GO.js +135 -0
  61. package/dist/m/c-FYDKYW6E.js +1 -0
  62. package/dist/m/c-GNI7WHKF.js +32 -0
  63. package/dist/m/c-GO635CRU.js +3 -0
  64. package/dist/m/c-H3FNLBHN.js +2 -0
  65. package/dist/m/c-HDVH3MVC.js +72 -0
  66. package/dist/m/c-HIX5H5L7.js +1 -0
  67. package/dist/m/c-HKSLOVU4.js +1 -0
  68. package/dist/m/{c-SGRIYOAJ.js → c-HL6BLJNA.js} +1 -1
  69. package/dist/m/c-HTLYXCUH.js +1 -0
  70. package/dist/m/{c-QIR5CAKM.js → c-IUL7PU4P.js} +1 -1
  71. package/dist/m/c-IXO7EI2Q.js +1 -0
  72. package/dist/m/{c-W5E5P2TZ.js → c-JQF2EUCG.js} +1 -1
  73. package/dist/m/{c-NEL7HQW3.js → c-JWDCQL6J.js} +1 -1
  74. package/dist/m/c-KQKKIVLW.js +20 -0
  75. package/dist/m/c-LATNQ6Q5.js +1 -0
  76. package/dist/m/c-LD6UVV5R.js +1 -0
  77. package/dist/m/c-LS7IVQVW.js +1 -0
  78. package/dist/m/{c-JCOQVZYS.js → c-LSVN3OLG.js} +1 -1
  79. package/dist/m/{c-JDZDF2QM.js → c-LTSPHVAK.js} +1 -1
  80. package/dist/m/c-MFOSMAVM.js +3 -0
  81. package/dist/m/c-MJ7GVE46.js +1 -0
  82. package/dist/m/c-MP6S4AZU.js +6 -0
  83. package/dist/m/c-MQKSKQHG.js +2 -0
  84. package/dist/m/{c-UHUNXWKN.js → c-MQYEDF3Q.js} +1 -1
  85. package/dist/m/{c-IHUWUKIU.js → c-MR75YPRT.js} +1 -1
  86. package/dist/m/c-ND3Q2G2I.js +1 -0
  87. package/dist/m/c-NEQRFC4O.js +1 -0
  88. package/dist/m/{c-5FKRZNJV.js → c-NFQFV7OP.js} +1 -1
  89. package/dist/m/c-NHXOBD6A.js +1 -0
  90. package/dist/m/{c-QIKT6SKM.js → c-NICICT4P.js} +1 -1
  91. package/dist/m/c-NQAPWM7O.js +1 -0
  92. package/dist/m/{c-QUGCKMWF.js → c-NVU3DORS.js} +1 -1
  93. package/dist/m/{c-LWIDDWAR.js → c-OCYG4NBQ.js} +22 -22
  94. package/dist/m/c-OH2FPYSY.js +19 -0
  95. package/dist/m/c-OYHI67B6.js +1 -0
  96. package/dist/m/{c-R2XUODVY.js → c-OYW5MFPZ.js} +1 -1
  97. package/dist/m/{c-5B4YBZXC.js → c-P2HKMJAW.js} +1 -1
  98. package/dist/m/{c-TSBVMWAH.js → c-PCNJETUA.js} +1 -1
  99. package/dist/m/c-PDBNCJCT.js +1 -0
  100. package/dist/m/c-PGSBXHUE.js +1 -0
  101. package/dist/m/{c-5TIZ2I64.js → c-PYG2NGWU.js} +1 -1
  102. package/dist/m/c-Q26XHBLQ.js +1 -0
  103. package/dist/m/c-Q6BG3ZLO.js +1 -0
  104. package/dist/m/c-QENKN7QI.js +1 -0
  105. package/dist/m/c-QQFHEODI.js +1 -0
  106. package/dist/m/c-QTEUO2K6.js +1 -0
  107. package/dist/m/c-R23UHMXG.js +1 -0
  108. package/dist/m/c-RETTCOWO.js +10 -0
  109. package/dist/m/c-SE3SIY7Y.js +7 -0
  110. package/dist/m/{c-XX75FFNL.js → c-SGGGCIVD.js} +1 -1
  111. package/dist/m/c-SGH3UTF3.js +1 -0
  112. package/dist/m/c-SIM7Z3U7.js +1 -0
  113. package/dist/m/{c-X5LNHET5.js → c-SKMIR5HQ.js} +1 -1
  114. package/dist/m/{c-R27DWQKX.js → c-STRI73GQ.js} +1 -1
  115. package/dist/m/c-SUXHUL7U.js +1 -0
  116. package/dist/m/c-SXGEWPFC.js +10 -0
  117. package/dist/m/c-SXNSSHPP.js +1 -0
  118. package/dist/m/c-T3P3AXEW.js +1 -0
  119. package/dist/m/{c-PXLTUYZC.js → c-TFLRT5JX.js} +1 -1
  120. package/dist/m/{c-YCLU4UNT.js → c-TGIMBAWE.js} +1 -1
  121. package/dist/m/c-TGSHHFO6.js +1 -0
  122. package/dist/m/c-U4NTUVDZ.js +1 -0
  123. package/dist/m/c-UOOIF2AL.js +1 -0
  124. package/dist/m/{c-6TYGD5AB.js → c-UOUUI265.js} +1 -1
  125. package/dist/m/c-V2U3F4QX.js +1 -0
  126. package/dist/m/c-V2V5FKXX.js +1 -0
  127. package/dist/m/c-VBXRXTVS.js +26 -0
  128. package/dist/m/c-VHSMPITY.js +1 -0
  129. package/dist/m/c-VPXCXBDT.js +1 -0
  130. package/dist/m/c-WCG6AKA7.js +1 -0
  131. package/dist/m/c-WNOLMHI2.js +1 -0
  132. package/dist/m/{c-CRPIDGXC.js → c-X6MOYATI.js} +1 -1
  133. package/dist/m/{c-FQGHR32O.js → c-X75G43SZ.js} +1 -1
  134. package/dist/m/c-XB6EAIAR.js +13 -0
  135. package/dist/m/c-XMIDHEKF.js +1 -0
  136. package/dist/m/c-XUZMRQ7O.js +4 -0
  137. package/dist/m/{c-2Z22FCFK.js → c-XW5TIYYB.js} +1 -1
  138. package/dist/m/c-YDW4VCHP.js +1 -0
  139. package/dist/m/{c-QGAPG7OM.js → c-YLHTD3KX.js} +1 -1
  140. package/dist/m/c-YNIEIPBS.js +1 -0
  141. package/dist/m/c-Z4G2UK6T.js +4 -0
  142. package/dist/m/c-Z6MROEQ4.js +1 -0
  143. package/dist/m/c-ZFO5RW6G.js +2 -0
  144. package/dist/m/c-ZGCO4J3H.js +8 -0
  145. package/dist/m/c-ZKKAF4UT.js +3 -0
  146. package/dist/m/c-ZRGEN6QQ.js +4 -0
  147. package/dist/m/core/{admin-attrs-U7IJNYBG.js → admin-attrs-ONRWVXPK.js} +1 -1
  148. package/dist/m/core/{autosave-F5YQCKVL.js → autosave-TBKAAAFB.js} +1 -1
  149. package/dist/m/core/conflict-notice-FOEE6I7E.js +1 -0
  150. package/dist/m/core/draft-mode-4MCL3LYI.js +1 -0
  151. package/dist/m/core/{host-permission-6EVJGNPL.js → host-permission-X4BENZEU.js} +1 -1
  152. package/dist/m/core/{is-edit-mode-GCX6767E.js → is-edit-mode-FFHCQ5DR.js} +1 -1
  153. package/dist/m/core/{persist-CJXIL7D4.js → persist-6ILUR34S.js} +1 -1
  154. package/dist/m/core/{recovery-DRFZRJED.js → recovery-APWADU4K.js} +1 -1
  155. package/dist/m/core/save-6HT2LABE.js +1 -0
  156. package/dist/m/core/save-core-EVMNZQ4V.js +1 -0
  157. package/dist/m/core/site-edits-G4BOZMV4.js +1 -0
  158. package/dist/m/core/{unsaved-warning-HNQVTA2D.js → unsaved-warning-ITZDIZ2I.js} +1 -1
  159. package/dist/m/internals/{index-NRPNDTSA.js → index-HS3CQDFW.js} +1 -1
  160. package/dist/m/loader-GLLVDUZA.js +1 -0
  161. package/dist/m/manifest-50FF1C45.js +1 -0
  162. package/dist/m/manifest-edit-BE1A621D.js +1 -0
  163. package/dist/m/manifest.json +2072 -1811
  164. package/dist/m/page/editor-KAZDJNND.js +307 -0
  165. package/dist/m/plugins/ai-edit-LABECCSN.js +6 -0
  166. package/dist/m/plugins/{cms-H7DTMUQX.js → cms-T2HLI7JG.js} +16 -16
  167. package/dist/m/plugins/{demo-42BSYQ7T.js → demo-T7B4RIKL.js} +1 -1
  168. package/dist/m/plugins/{derive-QVI3LI3A.js → derive-6LPJOCAV.js} +1 -1
  169. package/dist/m/plugins/indicator-J4ABFARX.js +1 -0
  170. package/dist/m/plugins/{live-DCUBKXY4.js → live-PGBIEMGB.js} +1 -1
  171. package/dist/m/plugins/menu-YZL3X2AJ.js +1 -0
  172. package/dist/m/plugins/page-WOCNX2IN.js +2 -0
  173. package/dist/m/plugins/page-view-SJODOOGE.js +1 -0
  174. package/dist/m/plugins/{people-5XRNRP5U.js → people-C4TCWFOQ.js} +1 -1
  175. package/dist/m/plugins/{quickcrop-WWF5I422.js → quickcrop-X5MRIBAP.js} +2 -2
  176. package/dist/m/plugins/richclay-Y2NV44NA.js +549 -0
  177. package/dist/m/plugins/sortable-XCHQG65Z.js +1 -0
  178. package/dist/m/plugins/{source-6BKMK4PO.js → source-YK7MO23W.js} +1 -1
  179. package/dist/m/plugins/{undo-3JEYK5QY.js → undo-VLRBQNPN.js} +1 -1
  180. package/dist/m/plugins/upgrade-NNTJBSK2.js +1 -0
  181. package/dist/m/plugins/{upload-TTCQRIM5.js → upload-ZKKJV76X.js} +1 -1
  182. package/dist/m/plugins/visitor-drafts-RTZNONHT.js +20 -0
  183. package/dist/m/plugins/{visitor-drafts-owner-Z5B2OQBR.js → visitor-drafts-owner-LHUHFU3L.js} +1 -1
  184. package/dist/m/plugins/{visitor-menu-4LQMKLPP.js → visitor-menu-FY4KM2SW.js} +1 -1
  185. package/dist/m/plugins/wire-M2NR354P.js +1 -0
  186. package/dist/m/{reader-core-POFQCKRV.js → reader-core-T2S3JC4E.js} +2 -2
  187. package/dist/m/sync/live-sync-Z64YREWQ.js +1 -0
  188. package/dist/m/ui/index-MGTWOW2C.js +1 -0
  189. package/dist/m/vendor/{sap-core.vendor-OA5SKL7Q.js → sap-core.vendor-QAEPMETX.js} +1 -1
  190. package/dist/offline-manifest.json +1250 -1082
  191. package/dist/server/core.cjs +132 -109
  192. package/dist/server/page-compaction-worker.cjs +5 -5
  193. package/dist/server/rooms.mjs +3 -1
  194. package/docs/guide.md +89 -44
  195. package/entries/clay-data.js +1 -1
  196. package/entries/sap.js +1 -1
  197. package/package.json +5 -3
  198. package/src/blockeditor/themes/content.css +70 -0
  199. package/src/blockeditor/themes/light-1.css +431 -0
  200. package/src/blockeditor/themes/light-1.source.css +270 -0
  201. package/src/blockeditor/themes/light-2.css +211 -0
  202. package/src/blockeditor/themes/light-3.css +130 -0
  203. package/src/blockeditor/themes/light-4.css +299 -0
  204. package/src/core/conflict-notice.js +28 -0
  205. package/src/core/draft-mode.js +6 -0
  206. package/src/core/host-meta.js +6 -6
  207. package/src/core/is-edit-mode.js +9 -3
  208. package/src/core/mode-support.js +3 -0
  209. package/src/core/mode-switch.js +4 -4
  210. package/src/core/mode-transition.js +3 -1
  211. package/src/core/page-format-wire.js +1 -1
  212. package/src/core/page-format.js +8 -8
  213. package/src/core/save-accepted.js +6 -7
  214. package/src/core/save-core.js +52 -23
  215. package/src/core/save-failure-notice.js +37 -0
  216. package/src/core/save-feedback.js +6 -0
  217. package/src/core/save-replace.js +1 -1
  218. package/src/core/save-size.js +2 -2
  219. package/src/core/save.js +78 -15
  220. package/src/core/site-edits.js +166 -0
  221. package/src/core/unsaved-warning.js +2 -2
  222. package/src/core/upgrade-run.js +4 -4
  223. package/src/lib/ai-comment.js +23 -0
  224. package/src/lib/effect.js +8 -0
  225. package/src/lib/idb-error-code.js +20 -0
  226. package/src/live/fast-lane.js +10 -10
  227. package/src/live/local-lane.js +10 -10
  228. package/src/live/page-compaction.js +8 -8
  229. package/src/live/server-lane.js +1 -1
  230. package/src/loader-logic.js +48 -18
  231. package/src/loader.js +11 -6
  232. package/src/page/adopt-boot.js +1 -1
  233. package/src/page/adopt.js +2 -2
  234. package/src/page/ai-area.js +182 -0
  235. package/src/page/ai-preview.js +80 -0
  236. package/src/page/ai-surface.js +257 -0
  237. package/src/page/ai-tool.js +308 -145
  238. package/src/page/announce.js +2 -2
  239. package/src/page/awareness.js +18 -18
  240. package/src/page/blocks.js +35 -34
  241. package/src/page/blocksel.js +2 -2
  242. package/src/page/board-drag.js +11 -11
  243. package/src/page/board-face.js +1 -1
  244. package/src/page/board-panel.js +26 -26
  245. package/src/page/board-style.js +127 -127
  246. package/src/page/board-view.js +48 -48
  247. package/src/page/chart.js +29 -29
  248. package/src/page/checkpoint-proof.js +19 -19
  249. package/src/page/chrome.js +74 -65
  250. package/src/page/clipboard-shape.js +1 -1
  251. package/src/page/csv-import.js +4 -4
  252. package/src/page/drag.js +5 -5
  253. package/src/page/editor.js +301 -296
  254. package/src/page/export-html.js +8 -8
  255. package/src/page/features/checklist.js +36 -36
  256. package/src/page/features/export-html.js +19 -19
  257. package/src/page/features/export-markdown.js +10 -10
  258. package/src/page/features/import-markdown.js +13 -13
  259. package/src/page/features/media.js +50 -50
  260. package/src/page/features/table.js +17 -17
  261. package/src/page/features/title-cover.js +17 -17
  262. package/src/page/features/title-icon.js +7 -7
  263. package/src/page/features/toc.js +1 -1
  264. package/src/page/features/tool.js +42 -18
  265. package/src/page/format-command.js +4 -4
  266. package/src/page/format-gate.js +6 -6
  267. package/src/page/format-host.js +6 -6
  268. package/src/page/format-level.js +3 -3
  269. package/src/page/format-native-commands.js +2 -2
  270. package/src/page/highlight-slot.js +1 -1
  271. package/src/page/highlight.js +4 -4
  272. package/src/page/history-intent.js +2 -2
  273. package/src/page/image-actions.js +4 -4
  274. package/src/page/link.js +10 -10
  275. package/src/page/media.js +3 -3
  276. package/src/page/mention-picker.js +7 -7
  277. package/src/page/merge.js +1 -1
  278. package/src/page/placeholder.js +3 -3
  279. package/src/page/projection.js +11 -11
  280. package/src/page/reader-patch.js +2 -2
  281. package/src/page/recover.js +26 -26
  282. package/src/page/recovery-ui.js +28 -28
  283. package/src/page/rich/chart.js +1 -1
  284. package/src/page/rich/page-tool.js +21 -6
  285. package/src/page/rich/tool-runtime.js +3 -2
  286. package/src/page/save-projection.js +2 -2
  287. package/src/page/save-states.js +9 -9
  288. package/src/page/schema.js +9 -9
  289. package/src/page/table-style.js +21 -21
  290. package/src/page/toc-link.js +1 -1
  291. package/src/page/tool-capability.js +8 -3
  292. package/src/page/tool-transport.js +52 -0
  293. package/src/page/tool-views.js +4 -0
  294. package/src/page/tools.js +6 -1
  295. package/src/page/view.js +6 -6
  296. package/src/page/ybind/binding.js +1 -1
  297. package/src/page/ybind/conversion.js +1 -1
  298. package/src/page/ybind/layout.js +4 -4
  299. package/src/page/ybind/migrate.js +1 -1
  300. package/src/page/ybind/origins.js +2 -2
  301. package/src/page/ybind/provider.js +2 -2
  302. package/src/page/ybind/recovery-proof.js +3 -3
  303. package/src/page/ybind/recovery-replay.js +2 -2
  304. package/src/plugins/ai-edit/picker.js +235 -0
  305. package/src/plugins/ai-edit.js +220 -34
  306. package/src/plugins/indicator-chip.js +39 -34
  307. package/src/plugins/indicator.js +13 -4
  308. package/src/plugins/live.js +21 -13
  309. package/src/plugins/menu/actions.js +89 -17
  310. package/src/plugins/menu/seo.js +32 -6
  311. package/src/plugins/menu/shell-style.js +26 -7
  312. package/src/plugins/menu/shell.js +12 -7
  313. package/src/plugins/menu/variants.js +6 -10
  314. package/src/plugins/menu/visitor.js +44 -34
  315. package/src/plugins/menu.js +3 -2
  316. package/src/plugins/page-view.js +2 -2
  317. package/src/plugins/page.js +257 -98
  318. package/src/plugins/sortable.js +7 -0
  319. package/src/plugins/upgrade.js +2 -1
  320. package/src/plugins/visitor-drafts/commit.js +303 -0
  321. package/src/plugins/visitor-drafts/idb.js +221 -0
  322. package/src/plugins/visitor-drafts/intro-style.js +1 -1
  323. package/src/plugins/visitor-drafts/intro.js +8 -25
  324. package/src/plugins/visitor-drafts/prompt.js +30 -4
  325. package/src/plugins/visitor-drafts/session.js +345 -0
  326. package/src/plugins/visitor-drafts/store.js +351 -32
  327. package/src/plugins/visitor-drafts.js +158 -27
  328. package/src/server/checkpoint/index.js +8 -8
  329. package/src/server/rooms/index.js +2 -2
  330. package/src/server/rooms/live-data-rooms.js +35 -35
  331. package/src/server/rooms/live-page-history.js +2 -2
  332. package/src/server/rooms/page-admission.js +34 -6
  333. package/src/server/rooms/page-conversion.js +1 -1
  334. package/src/server/rooms/page-lineage.js +4 -4
  335. package/src/server/rooms/page-rebase.js +4 -4
  336. package/src/server/rooms/page-room-conformance.js +14 -14
  337. package/src/server/rooms/page-state.js +2 -2
  338. package/src/server/rooms/page-write-admission.js +7 -7
  339. package/src/server/rooms/page-write-guard.js +3 -3
  340. package/src/sync/data-guard-notice.js +265 -0
  341. package/src/sync/live-sync.js +54 -11
  342. package/src/sync/page-relay.js +4 -4
  343. package/src/sync/presence-store.js +1 -1
  344. package/src/sync/presence-target.js +3 -3
  345. package/src/sync/presence.js +1 -1
  346. package/src/sync/stream.js +54 -13
  347. package/src/sync/wire-profile.js +8 -3
  348. package/src/ui/bevel.js +1 -1
  349. package/src/ui/index.js +9 -10
  350. package/src/ui/skins/cms.js +1 -1
  351. package/src/ui/skins/quickcrop.js +1 -1
  352. package/src/ui/skins/richclay.js +2 -2
  353. package/src/ui/toast-lazy.js +12 -3
  354. package/src/ui/toast.js +9 -3
  355. package/src/vendor/hyper-html-api-data.vendor.js +1 -1
  356. package/src/vendor/hyper-html-api-upgrade.vendor.js +2 -2
  357. package/src/vendor/hypercms.vendor.js +16 -16
  358. package/src/vendor/richclay.vendor.js +48 -20
  359. package/src/vendor/sap-core.vendor.js +1 -1
  360. package/tool-generation/context.md +44 -0
  361. package/tool-generation/system.md +23 -0
  362. package/dist/m/c-24PMUJIV.js +0 -2
  363. package/dist/m/c-2AYVYEI4.js +0 -1
  364. package/dist/m/c-2AZDZWCK.js +0 -1
  365. package/dist/m/c-2L6O5PDS.js +0 -6
  366. package/dist/m/c-2RYOGUQM.js +0 -2
  367. package/dist/m/c-2ZVOEU4M.js +0 -1
  368. package/dist/m/c-37NAONZA.js +0 -1
  369. package/dist/m/c-3GJ4SDE2.js +0 -1
  370. package/dist/m/c-3O7OBDCM.js +0 -1
  371. package/dist/m/c-5OJ7YF2N.js +0 -1
  372. package/dist/m/c-5WMXEKFH.js +0 -135
  373. package/dist/m/c-6RDOKLN7.js +0 -1
  374. package/dist/m/c-A4IP6MBC.js +0 -1
  375. package/dist/m/c-A6L3FMUS.js +0 -1
  376. package/dist/m/c-ATKAOH23.js +0 -1
  377. package/dist/m/c-B6O7AJYG.js +0 -32
  378. package/dist/m/c-BCGWJYXW.js +0 -1
  379. package/dist/m/c-BGKAT2FL.js +0 -7
  380. package/dist/m/c-BYTKL6UX.js +0 -1
  381. package/dist/m/c-DHBRA6DL.js +0 -1
  382. package/dist/m/c-DTMZ3ZHI.js +0 -1
  383. package/dist/m/c-E3ZXARWA.js +0 -1
  384. package/dist/m/c-EK63G3CG.js +0 -1
  385. package/dist/m/c-ELYIIYRS.js +0 -1
  386. package/dist/m/c-EXKHPOVC.js +0 -3
  387. package/dist/m/c-FCSZ3DC5.js +0 -20
  388. package/dist/m/c-FTWGYI5E.js +0 -1
  389. package/dist/m/c-G4PWUDD5.js +0 -1
  390. package/dist/m/c-GBKB5WDL.js +0 -2
  391. package/dist/m/c-GBTVCJXC.js +0 -1
  392. package/dist/m/c-GC2HICFJ.js +0 -1
  393. package/dist/m/c-GRWMD6O5.js +0 -1
  394. package/dist/m/c-HCNWJE4A.js +0 -4
  395. package/dist/m/c-HG2C77BM.js +0 -4
  396. package/dist/m/c-JGHEACGK.js +0 -1
  397. package/dist/m/c-JGLX6TBK.js +0 -1
  398. package/dist/m/c-JNRKHYWO.js +0 -1
  399. package/dist/m/c-KBS3UV6B.js +0 -1
  400. package/dist/m/c-KQ7E3PYY.js +0 -1
  401. package/dist/m/c-L3F5ZLIV.js +0 -1
  402. package/dist/m/c-L4KMT7FO.js +0 -6
  403. package/dist/m/c-L5VFATT6.js +0 -1
  404. package/dist/m/c-LCYPMULG.js +0 -1
  405. package/dist/m/c-LIGQYZ7M.js +0 -6
  406. package/dist/m/c-LKIWEPAV.js +0 -1
  407. package/dist/m/c-MPSKIU2I.js +0 -1
  408. package/dist/m/c-N7JPUPGC.js +0 -1
  409. package/dist/m/c-NK33MMYF.js +0 -1
  410. package/dist/m/c-NQLWOHLH.js +0 -10
  411. package/dist/m/c-NTHUTABN.js +0 -1
  412. package/dist/m/c-NWX3MFT4.js +0 -1
  413. package/dist/m/c-OKXI52N7.js +0 -1
  414. package/dist/m/c-OPONJ2UK.js +0 -128
  415. package/dist/m/c-OWQWOGYI.js +0 -1
  416. package/dist/m/c-P6Q2ZTFQ.js +0 -1
  417. package/dist/m/c-QEN6HZCA.js +0 -1
  418. package/dist/m/c-QIXT3Q7C.js +0 -28
  419. package/dist/m/c-QM5LXRDT.js +0 -9
  420. package/dist/m/c-QYYUVLVG.js +0 -1
  421. package/dist/m/c-RQRMPZXD.js +0 -1
  422. package/dist/m/c-SBCBXKOZ.js +0 -26
  423. package/dist/m/c-SKF5HL4I.js +0 -4
  424. package/dist/m/c-SRPC3VBE.js +0 -1
  425. package/dist/m/c-TANBH7FI.js +0 -1
  426. package/dist/m/c-THGQQDYY.js +0 -1
  427. package/dist/m/c-UD5JZTDL.js +0 -1
  428. package/dist/m/c-UDGEFWNU.js +0 -1
  429. package/dist/m/c-UGNV5MFB.js +0 -1
  430. package/dist/m/c-VIRFF5HG.js +0 -8
  431. package/dist/m/c-VJYEVRYK.js +0 -1
  432. package/dist/m/c-VQCEOGKH.js +0 -13
  433. package/dist/m/c-VYJ7O4RI.js +0 -34
  434. package/dist/m/c-W7IPVCAA.js +0 -1
  435. package/dist/m/c-WBGWGOM7.js +0 -1
  436. package/dist/m/c-WJ5DRBHT.js +0 -72
  437. package/dist/m/c-X5WC4PX5.js +0 -1
  438. package/dist/m/c-XCFQEWW6.js +0 -3
  439. package/dist/m/c-XGH4GS2T.js +0 -1
  440. package/dist/m/c-XLQ3BDMM.js +0 -1
  441. package/dist/m/c-ZQXNHZZT.js +0 -72
  442. package/dist/m/core/conflict-notice-42H4ASLA.js +0 -1
  443. package/dist/m/core/draft-mode-WSQAT67S.js +0 -1
  444. package/dist/m/core/save-ESPSQPLV.js +0 -1
  445. package/dist/m/core/save-core-6SQHOR6W.js +0 -1
  446. package/dist/m/loader-FBDE2UAB.js +0 -1
  447. package/dist/m/manifest-1D2F5CA5.js +0 -1
  448. package/dist/m/manifest-edit-F7CC5CFD.js +0 -1
  449. package/dist/m/page/editor-OSKOW6RS.js +0 -304
  450. package/dist/m/plugins/ai-edit-VV4QTINH.js +0 -6
  451. package/dist/m/plugins/indicator-WVPGMOZ7.js +0 -1
  452. package/dist/m/plugins/menu-Q4MFFQ6E.js +0 -1
  453. package/dist/m/plugins/page-OAWUJQEL.js +0 -2
  454. package/dist/m/plugins/page-view-DZ26ZDDQ.js +0 -1
  455. package/dist/m/plugins/richclay-PGOOJ4OK.js +0 -517
  456. package/dist/m/plugins/sortable-266HY6TR.js +0 -1
  457. package/dist/m/plugins/upgrade-BNZVFHMZ.js +0 -1
  458. package/dist/m/plugins/visitor-drafts-2AUYKAIJ.js +0 -20
  459. package/dist/m/plugins/wire-W2EV36KZ.js +0 -1
  460. package/dist/m/sync/live-sync-XGUPHI3I.js +0 -1
  461. package/dist/m/ui/index-VGYAKAKI.js +0 -1
  462. package/dist/page/themes/light-1.css +0 -431
  463. package/src/page/themes/content.css +0 -70
  464. package/src/page/themes/light-1.css +0 -431
  465. package/src/page/themes/light-1.source.css +0 -270
  466. package/src/page/themes/light-2.css +0 -211
  467. package/src/page/themes/light-3.css +0 -130
  468. package/src/page/themes/light-4.css +0 -299
  469. /package/dist/m/{c-FILLTJA7.js → c-QTTJYJMA.js} +0 -0
  470. /package/dist/m/plugins/{quickcrop-WWF5I422.js.LEGAL.txt → quickcrop-X5MRIBAP.js.LEGAL.txt} +0 -0
  471. /package/dist/m/plugins/{richclay-PGOOJ4OK.js.LEGAL.txt → richclay-Y2NV44NA.js.LEGAL.txt} +0 -0
@@ -1,135 +0,0 @@
1
- import{b as K}from"./c-DTMZ3ZHI.js";import{c as O}from"./c-W4JCVLAB.js";import{d as g}from"./c-HCNWJE4A.js";import{I as C,m as y}from"./c-QIXT3Q7C.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"],D=(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,k=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=>D(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?D(r,"x")>e.x:D(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")}};function i(s,e,t,a={},o=null){let r=s.createElement(e);t&&(r.className=t);for(let[n,d]of Object.entries(a))d!=null&&d!==!1&&r.setAttribute(n,d===!0?"":String(d));return o!==null&&(r.textContent=o),r}var X=s=>([...String(s).trim()][0]??"?").toUpperCase(),I=(s,e)=>i(s,"span","page-board-face",{"aria-hidden":"true"},X(e));var Y=y.nodes,S=new WeakMap,N=/^\d{4}-\d{2}-\d{2}$/,_=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=C(e),o=new Map(a.map(n=>[n,[]])),r=new Map;for(let n of C(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,e)=>i(s,"span","page-board-count",{"aria-label":`${e} ${e===1?"card":"cards"}`},String(e)),V=s=>/^(INPUT|TEXTAREA|SELECT)$/.test(s?.tagName??"");function W(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-${++_}`,this.menu=null;let l=S.get(t)??new Map;S.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 k(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),$(a,o.length)):(l.append(i(a,"h4","page-board-name",{id:n},r),$(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(I(t,a.owner),i(t,"span","page-board-owner-name",{},a.owner)),r.append(n)}a.due&&r.append(W(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"),$(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")&&!V(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!==Y.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=S.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 Z="(max-width: 1039.98px)",G=s=>/^(INPUT|TEXTAREA|SELECT)$/.test(s?.tagName??""),J=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-${++J}`;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?.(Z).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(I(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")&&!G(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 ke({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{ke as createFeature};
@@ -1 +0,0 @@
1
- import{B as h,d as f,h as x}from"./c-HCNWJE4A.js";import{J as g,b as E,l as I,m as $}from"./c-QIXT3Q7C.js";var{Plugin:B,PluginKey:j}=E,k=$.nodes,m=new j("page-media"),L=1.5*1024*1024,u=new WeakMap,C=new WeakMap,U=(t,o)=>{let s=t.resolve(Math.max(0,Math.min(o,t.content.size)));return s.depth===0?s.pos:s.after(1)};function b(t,o){let s=x(t.doc),e=s[Math.min(o,s.length-1)],a=e.node.type===k.paragraph&&e.node.content.size===0;return{hostId:e.node.attrs.id,at:a?e.at:s[e.subEnd].end,parent:e.node.attrs.parent??null,replaceId:a?e.node.attrs.id:null}}var O={init:()=>({items:[],placed:{},picker:null}),apply(t,o){let{items:s,placed:e,picker:a}=o;if(t.docChanged&&(s=s.map(r=>({...r,pos:U(t.doc,t.mapping.map(r.pos,-1))}))),a&&t.docChanged&&(a={...a,place:{...a.place,at:U(t.doc,t.mapping.map(a.place.at,-1))}},a.remove)){let r=t.mapping.map(a.remove.from,1),c=t.mapping.map(a.remove.to,-1);a=r<=c&&t.doc.textBetween(r,c)===a.remove.text?{...a,remove:{...a.remove,from:r,to:c}}:null}let n=t.getMeta(m);if(n?.picker!==void 0&&(a=n.picker),n?.add&&(s=[...s,...n.add]),n?.update&&(s=s.map(r=>r.id===n.update.id?{...r,...n.update}:r)),n?.placed){let{id:r,at:c,size:d,blockId:p}=n.placed,i=o.items.find(l=>l.id===r);s=s.filter(l=>l.id!==r).map(l=>i&&l.pos===c&&l.group===i.group&&l.order>i.order?{...l,pos:l.pos+d}:l),i&&(e={...e,[i.group]:[...e[i.group]||[],p]})}n?.remove&&(s=s.filter(r=>r.id!==n.remove));for(let r of Object.keys(e))s.some(c=>c.group===r)||(e={...e},delete e[r]);return{items:s,placed:e,picker:a}}};function R(t,o,s){if(!o)return;let e=null,a=null;t.doc.forEach((n,r)=>{n.attrs.id===o&&e&&s.includes(e.attrs.id)&&(a={n,off:r}),e=n}),a&&a.n.type===k.paragraph&&a.n.content.size===0&&t.delete(a.off,a.off+a.n.nodeSize)}function P(t,o,s){let{items:e,placed:a}=m.getState(t),n=e.find(i=>i.id===o);if(!n)return null;let r=U(t.doc,n.pos),c=g(),d=(n.kind==="image"?k.image:k.file).create({...s,id:c,pos:null,parent:n.parent}),p=t.tr.insert(r,d);return e.some(i=>i.group===n.group&&i.id!==o)||R(p,n.replaceId,[...a[n.group]||[],c]),h(p).setMeta(m,{placed:{id:o,at:r,size:d.nodeSize,blockId:c}})}function F(t,o){let{items:s,placed:e}=m.getState(t),a=s.find(r=>r.id===o);if(!a)return null;let n=t.tr;return s.some(r=>r.group===a.group&&r.id!==o)||R(n,a.replaceId,e[a.group]||[]),n.docChanged&&h(n),n.setMeta(m,{remove:o})}function y(t,o,s=b(t.state,t.state.selection.$head.index(0))){if(o=[...o].filter(Boolean),!o.length)return!1;let e=g("g"),a=o.map((n,r)=>{let c=/^image\//.test(n.type||"")?"image":"file";return{id:g("u"),pos:s.at,group:e,order:r,file:n,kind:c,name:n.name||(c==="image"?"image":"file"),parent:s.parent,replaceId:s.replaceId,state:"uploading",percent:0,preview:c==="image"&&globalThis.URL?.createObjectURL?URL.createObjectURL(n):null}});t.dispatch(t.state.tr.setMeta(m,{add:a}));for(let n of a)H(t,n);return f(t,o.length===1?`Uploading ${a[0].name}`:`Uploading ${o.length} files`),!0}var z=(t,o)=>m.getState(t.state).items.find(s=>s.id===o),M=(t,o,s)=>t.dispatch(t.state.tr.setMeta(m,{update:{id:o,...s}})),A=(t,o)=>t.kind==="image"?{src:o,alt:"",caption:""}:{src:o,name:t.name,size:t.file.size??null,mime:t.file.type||null};function T(t,o,s){t.preview&&URL.revokeObjectURL?.(t.preview),s&&o.dispatch(s)}async function H(t,o){let s=u.get(t),e=new AbortController;s.aborts.set(o.id,e);let a=-5,n=({percent:d})=>{d-a<5&&d!==100||(a=d,u.has(t)&&z(t,o.id)&&M(t,o.id,{percent:d}))},r;try{r=await s.upload(o.file,{onProgress:n,signal:e.signal})}catch{r={code:"network",msg:"Upload failed"}}if(s.aborts.delete(o.id),!u.has(t)||!z(t,o.id))return;if(r?.ok){let d=I(r.uploads?.[0]?.url);if(d){T(o,t,P(t.state,o.id,A(o,d))),f(t,`${o.name} added`);return}r={code:"bad-response",msg:"The upload returned an invalid address"}}if((!r||typeof r!="object")&&(r={code:"bad-response",msg:"The upload returned an invalid response"}),r.code==="aborted")return T(o,t,F(t.state,o.id));if(r.code==="unsupported"){let d=/^image\/(png|jpeg|gif|webp)$/i.test(o.file.type)&&o.file.size<=L,p=d?"This host doesn't store files. You can keep this image inside the document, which makes the document larger.":o.kind==="image"&&o.file.size>L?"This host doesn't store files, and this image is over 1.5 MB, too large to keep inside the document.":"This host doesn't store files.";M(t,o.id,{state:d?"embed-choice":"error",code:r.code,message:p}),f(t,`${o.name}: ${p}`);return}let c=r.code==="timeout"?"The upload timed out. It may have arrived; trying again is safe.":r.msg||"Upload failed";M(t,o.id,{state:"error",code:r.code,message:c}),f(t,`${o.name}: ${c}`)}var Y=t=>t.replace(/<(meta|style|img)\b[^>]*>/gi,"").replace(/<[^>]+>/g,"").trim()!=="";function Q({upload:t,features:o=null}){let s=e=>{!o||o.has("media")||!u.has(e)||o.ensure("media").catch(()=>{})};return new B({key:m,state:O,view(e){let n=e.dom.ownerDocument.createElement("input");n.type="file",n.multiple=!0,n.hidden=!0,n.className="page-file-input",e.dom.parentElement.append(n),u.set(e,{upload:t,aborts:new Map,input:n}),n.addEventListener("change",()=>{let c=[...n.files??[]],d=m.getState(e.state).picker;if(e.dispatch(e.state.tr.setMeta(m,{picker:null})),c.length&&d){let{remove:p}=d;p&&e.state.doc.textBetween(p.from,p.to)===p.text&&e.dispatch(h(e.state.tr.delete(p.from,p.to)));let i=_(e.state.doc,d.place.hostId);(!d.place.hostId||i>=0)&&(y(e,c,i>=0?b(e.state,i):d.place),s(e))}n.value="",e.focus()}),n.addEventListener("cancel",()=>e.dispatch(e.state.tr.setMeta(m,{picker:null})));let r=c=>{let d=c.target.closest?.(".page-upload-btn");if(!d)return;c.preventDefault();let p=C.get(e),i=d.dataset.upload;d.dataset.act==="retry"?p?.retryUpload(e,i):d.dataset.act==="embed"?p?.embedUpload(e,i):p?.cancelUpload(e,i)};return e.dom.addEventListener("click",r),{destroy(){e.dom.removeEventListener("click",r);let c=u.get(e);u.delete(e);for(let d of m.getState(e.state).items)d.preview&&URL.revokeObjectURL?.(d.preview);for(let d of c.aborts.values())d.abort();n.remove()}}},props:{handlePaste(e,a){let n=a.clipboardData,r=[...n?.files??[]];if(!r.length||e.state.selection.$from.parent.type.spec.code||Y(n.getData("text/html")||""))return!1;let c=b(e.state,e.state.selection.$head.index(0));return a.preventDefault(),y(e,r,c),s(e),!0},handleDrop(e,a,n,r){let c=[...a.dataTransfer?.files??[]];if(r||!c.length)return!1;let d=e.posAtCoords({left:a.clientX,top:a.clientY});if(!d)return!1;let p=x(e.state.doc),i=Math.min(e.state.doc.resolve(d.pos).index(0),p.length-1),l=e.nodeDOM(p[i].at)?.getBoundingClientRect?.(),D=l&&a.clientY<l.top+l.height/2;a.preventDefault();let S={at:D?p[i].at:p[p[i].subEnd].end,parent:p[i].node.attrs.parent??null,replaceId:null};return y(e,c,S),s(e),!0}}})}var _=(t,o)=>{let s=-1;return t.forEach((e,a,n)=>{e.attrs.id===o&&(s=n)}),s};function V(t,o,s=b(t.state,t.state.selection.$head.index(0)),e=null){let a=u.get(t);if(!a)return!1;let n={place:s,remove:e&&{...e,text:t.state.doc.textBetween(e.from,e.to)}};return t.dispatch(t.state.tr.setMeta(m,{picker:n})),a.input.accept=o,a.input.click(),!0}export{m as a,L as b,u as c,C as d,U as e,b as f,P as g,F as h,z as i,M as j,A as k,T as l,H as m,Q as n,V as o};
@@ -1 +0,0 @@
1
- import{a as b,b as c,c as d,d as e,e as f}from"./c-W7IPVCAA.js";import{g as a}from"./c-LIGQYZ7M.js";import"./c-EXKHPOVC.js";import"./c-L5VFATT6.js";import"./c-6RDOKLN7.js";import"./c-DTMZ3ZHI.js";import"./c-W4JCVLAB.js";import"./c-7K4SCQB7.js";import"./c-WMRJKQ2V.js";import"./c-HCNWJE4A.js";import"./c-QIXT3Q7C.js";import"./c-LCYPMULG.js";import"./c-57XDY6HC.js";import"./c-I2SCCUEW.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
- import{a,b}from"./c-R2XUODVY.js";import"./c-QIXT3Q7C.js";import"./c-VHNSBD2M.js";export{a as tablesFromDoc,b as toolContext};
@@ -1 +0,0 @@
1
- var n=[];function l(e){n.push(e)}function r(e,c,o=null){for(let p of n)try{p(e,o?{captureId:c??null,artifact:o}:{captureId:c??null})}catch(t){console.error("clayjs: onSaveAccepted hook failed:",t)}}export{l as a,r as b};
@@ -1,32 +0,0 @@
1
- import{A as v,B as P,C as x,D as T,E as A,F as k,G as E,H as z,I as C,J as O,K as tt,L as et,M as nt,N as B,O as D,R as it,S as K,c as M,d as L,e as f,n as J,s as $,w as g,x as Q,z as Z}from"./c-LIGQYZ7M.js";import"./c-EXKHPOVC.js";import"./c-L5VFATT6.js";import"./c-6RDOKLN7.js";import"./c-DTMZ3ZHI.js";import"./c-W4JCVLAB.js";import"./c-7K4SCQB7.js";import"./c-WMRJKQ2V.js";import{B as Y,d as N}from"./c-HCNWJE4A.js";import{I as X,W as G,m as V}from"./c-QIXT3Q7C.js";import"./c-LCYPMULG.js";import"./c-57XDY6HC.js";import{a as j}from"./c-I2SCCUEW.js";import"./c-VHNSBD2M.js";var ot=`
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; padding: 0; background: var(--page-chrome-bg-moved); color: var(--page-ink-soft); display: flex; align-items: center; justify-content: center; font: inherit; font-size: 14px; line-height: 1; cursor: pointer; opacity: 0; transition: opacity 120ms; }
13
- .page-table-add-row { left: 0; right: 0; top: 100%; height: 16px; border-radius: 0 0 6px 6px; border: 1px solid var(--page-chrome-line-moved); border-top: 0; padding-bottom: 2px; box-sizing: border-box; }
14
- .page-table-add-col { top: 0; bottom: 0; left: 100%; width: 16px; border-radius: 0 6px 6px 0; border: 1px solid var(--page-chrome-line-moved); border-left: 0; box-sizing: border-box; }
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-pop-hover); color: var(--page-ink); }
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 y=V.nodes,b=d=>X(d.attrs.cols),rt="That part of the table is no longer available.",lt='<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><g transform="scale(0.6667)" stroke-width="2.25"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></g></svg>',ht=`
26
- .page-editor .page-table-actions { position: absolute; z-index: 2; bottom: 100%; inset-inline-end: 0; inset-inline-start: auto; width: 24px; height: 20px; padding: 0; display: grid; place-items: center; border: 1px solid var(--page-chrome-line-rest); border-bottom: 0; border-radius: 6px 6px 0 0; background: var(--page-chrome-bg-moved); color: var(--page-chrome-ink-moved); font: inherit; cursor: pointer; opacity: 1; }
27
- .page-editor .page-table-actions:hover { background: var(--page-pop-hover); color: var(--page-ink-soft); }
28
- @media (max-width: 560px) {
29
- .page-editor .page-table-actions { position: absolute; }
30
- .page-editor .page-table-actions::after { content: ""; position: absolute; inset: -12px; }
31
- }
32
- `,dt=(d,t)=>`${d}-${t}`,st=(d,t)=>d.name||`Column ${t+1}`,ut=(d,t)=>(d.childCount?d.child(0).textContent.trim():"")||`Row ${t+1}`,R=(d,t)=>{let e=null;return d.forEach((n,i)=>{!e&&n.type===y.table&&n.attrs.id===t&&(e={table:n,pos:i})}),e},W=(d,t)=>t==null?0:[...d.content.content].findIndex(e=>e.attrs.id===t),F=(d,t)=>t==null?0:b(d).indexOf(t),ct=(d,t,e)=>{let n=R(d.state.doc,t.tableId);if(!n)return!1;let i=e==="row"?W(n.table,t.rowId):F(n.table,t.colId);return i<0?!1:J(d,n.pos,e,i)},U=(d,t,e)=>{let n=R(d.state.doc,t.tableId);if(!n)return!1;let i=W(n.table,t.rowId),s=F(n.table,t.colId);return i<0||s<0||(K(d,n.pos,i,s),e(d.state,null)!==!0)?!1:e(d.state,d.dispatch)},pt=["fontFamily","fontSize","fontWeight","fontStyle","letterSpacing"],mt=d=>{let t=d.ownerDocument,e=t.defaultView.getComputedStyle(d),n=t.createElement("span");for(let s of pt)n.style[s]=e[s];Object.assign(n.style,{position:"absolute",visibility:"hidden",whiteSpace:"pre",left:"-9999px",top:"0"}),n.textContent=d.textContent,t.body.append(n);let i=n.getBoundingClientRect().width;return n.remove(),Math.ceil(i)},bt=d=>Number.isFinite(d)&&d>0?Math.round(Math.min(z,Math.max(E,d))):null,at=(d,t,e)=>{let n=d.createElement("button");return n.type="button",n.textContent=t,n.setAttribute("aria-label",t),n.addEventListener("click",e),n},_=class{constructor(t,e,n){this.node=t,this.view=e,this.getPos=n,this.preview=null,this.renaming=null,this.renamingUnsaved=null,this.menuAnchor=null,this.destroyed=!1;let i=e.dom.ownerDocument;this.dom=i.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 s=i.createElement("div");s.className="page-table-scroll";let o=i.createElement("table");o.setAttribute("aria-label","Table"),this.table=o,this.colgroup=i.createElement("colgroup"),this.header=i.createElement("thead"),this.header.contentEditable="false",this.contentDOM=i.createElement("tbody"),o.append(this.colgroup,this.header,this.contentDOM),s.append(o);let r=at(i,"+",()=>this.append("row"));r.className="page-table-add-row",r.setAttribute("aria-label","Add a row"),r.title="Add a row";let a=at(i,"+",()=>this.append("column"));a.className="page-table-add-col",a.setAttribute("aria-label","Add a column"),a.title="Add a column";let l=i.createElement("button");l.type="button",l.className="page-table-actions",l.innerHTML=lt,l.dataset.control="actions",l.setAttribute("aria-haspopup","menu"),l.setAttribute("aria-expanded","false"),l.setAttribute("aria-label","Table actions"),l.title="Table actions",this.actionsButton=l,l.addEventListener("click",c=>{c.preventDefault(),this.menuAnchor=l,this.openActions()}),l.addEventListener("keydown",c=>{c.key!=="Enter"&&c.key!==" "||(c.preventDefault(),this.menuAnchor=l,this.openActions())});for(let c of[r,a,l])c.contentEditable="false",c.addEventListener("mousedown",u=>u.preventDefault());this.dom.append(s,r,a,l),this.render()}control(t){return!t||t.tableId&&t.tableId!==this.node.attrs.id?null:[...this.dom.querySelectorAll(`[data-control="${t.control}"]`)].find(n=>(t.colId==null||n.dataset.col===t.colId)&&(t.rowId==null||n.dataset.row===t.rowId))??null}controls(t){return[...this.dom.querySelectorAll(`[data-control="${t}"]`)].filter(e=>!e.hidden&&!e.closest("[hidden]"))}focusControl(t){if(!t||t.tableId&&t.tableId!==this.node.attrs.id)return null;let e=this.control(t),n=e?[]:this.controls(t.control),i=n.length?n[Math.min(t.index??0,n.length-1)]:null,s=e??i??this.actionsButton;return s?.focus?.(),s}describe(t){if(!t||!this.dom.contains(t))return null;let e=t.dataset?.control;return e?{tableId:this.node.attrs.id,rowId:t.dataset.row??null,colId:t.dataset.col??null,control:e,index:this.controls(e).indexOf(t)}:null}afterUpdate(t){queueMicrotask(()=>{if(this.destroyed||this.view.isDestroyed)return;let e=this.dom.ownerDocument.activeElement;e&&this.dom.contains(e)||this.focusControl(t)})}act(t,e,n){let i=U(this.view,t,e);return N(this.view,i?n:rt),i}cellTarget(t=this.node){let e=this.getPos(),{$head:n}=this.view.state.selection,i=0,s=0;for(let r=n.depth;r>0;r--)if(n.node(r).type===y.table){e!=null&&n.before(r)===e&&(i=r<n.depth?n.index(r):0,s=r+1<n.depth?n.index(r+1):0);break}let o=[...t.content.content];return{tableId:t.attrs.id,rowId:o[i]?.attrs.id??null,colId:b(t)[s]??null}}openActions(){let t=this.cellTarget(),e=R(this.view.state.doc,t.tableId)?.table;return e?this.actions(e,t):!1}actions(t,e){let n=b(t),i=Math.max(0,F(t,e.colId)),s=Math.max(0,W(t,e.rowId)),o=t.attrs.cols[n[i]]??{},r=t.attrs.sort,a=(c,u)=>()=>this.act(e,c,u),l=this.widthOfColumn(n[i]);return g(this.view,this.actionsButton,[{label:"Insert row above",icon:"+",run:a(v(!1),"Row inserted")},{label:"Insert row below",icon:"+",run:a(v(!0),"Row inserted")},...s>0?[{label:"Move row up",icon:"\u2191",run:a(A(-1),"Row moved")}]:[],...s<t.childCount-1?[{label:"Move row down",icon:"\u2193",run:a(A(1),"Row moved")}]:[],{label:"Delete row",icon:"\xD7",run:a(P,"Row deleted")},{label:"Insert column left",icon:"+",run:a(x(!1),"Column inserted")},{label:"Insert column right",icon:"+",run:a(x(!0),"Column inserted")},...i>0?[{label:"Move column left",icon:"\u2190",run:a(k(-1),"Column moved")}]:[],...i<n.length-1?[{label:"Move column right",icon:"\u2192",run:a(k(1),"Column moved")}]:[],...n.length>1?[{label:"Delete column",icon:"\xD7",run:a(T,"Column deleted")}]:[],{label:"Sort ascending",icon:"\u2191",checked:r?.col===n[i]&&r.dir==="asc",run:a(D(n[i],"asc"),"Sorted ascending")},{label:"Sort descending",icon:"\u2193",checked:r?.col===n[i]&&r.dir==="desc",run:a(D(n[i],"desc"),"Sorted descending")},{label:"Chart this table",icon:"\u{1F4CA}",run:()=>{let c=this.getPos();return $(this.view).then(({insertChartAfterTable:u})=>u(this.view,c))}},{label:"Rename column",focus:!1,run:()=>this.beginRename(n[i])},{label:"Column width \u25B8",icon:"\u2194",hint:o.width?`${o.width}px`:"Auto",focus:!1,run:()=>g(this.view,this.actionsButton,[{label:"Wider",icon:"+",run:a(this.widthCommand(n[i],l+40),"Column width changed")},{label:"Narrower",icon:"\u2212",run:a(this.widthCommand(n[i],l-40),"Column width changed")},{label:"Fit to content",icon:"\u2194",run:()=>this.fit(n[i])},...this.isSized()?[{label:"Reset widths",icon:"\xD7",run:a(O(n[i]),"Column widths reset")}]:[]])}],{persist:!0})}beginRename(t){let e=this.control({control:"column",colId:t}),n=this.node.attrs.cols[t];if(!e||!n)return!1;let i=this.dom.ownerDocument,s=this.node.attrs.id,o=i.createElement("input");o.type="text",o.className="page-table-rename",o.dataset.control="rename",o.dataset.col=t,o.value=n.name??"",o.setAttribute("aria-label","Column name");let r=j({id:"table-rename",isPending:()=>this.renaming===o&&o.value.trim()!==(n.name??"")});this.renamingUnsaved=r;let a=l=>{if(this.renaming!==o)return;this.renaming=null,this.renamingUnsaved=null,r.dispose();let c=o.value.trim();l&&c&&this.act({tableId:s,colId:t},nt(t,c),"Column renamed"),o.isConnected&&o.replaceWith(e),this.focusControl({tableId:s,control:"column",colId:t})};return o.addEventListener("keydown",l=>{l.isComposing||l.keyCode===229||(l.key==="Enter"&&(l.preventDefault(),a(!0)),l.key==="Escape"&&(l.preventDefault(),a(!1)),l.stopPropagation())}),o.addEventListener("blur",()=>a(!0)),this.renaming=o,e.replaceWith(o),o.focus(),o.select(),!0}append(t){let e=this.getPos();if(e==null)return;let n=t==="row"?[this.node.childCount-1,0]:[0,this.node.child(0).childCount-1];K(this.view,e,...n),(t==="row"?v(!0):x(!0))(this.view.state,this.view.dispatch),this.view.focus()}widths(){this.frozen=null;let t=b(this.node).some(n=>this.node.attrs.cols[n].width),e=b(this.node).map(n=>{let i=this.dom.ownerDocument.createElement("col");i.dataset.col=n;let s=this.node.attrs.cols[n].width;return t&&(i.style.width=`${s??C}px`),i});this.colgroup.replaceChildren(...e),this.table.classList.toggle("is-sized",t),this.table.style.width=t?`${b(this.node).reduce((n,i)=>n+(this.node.attrs.cols[i].width??C),0)}px`:""}resizer(t,e,n,i){let s=this.dom.ownerDocument,o=s.createElement("span");return o.className="page-table-resize",o.dataset.control="resize",o.dataset.col=t,o.setAttribute("role","separator"),o.setAttribute("aria-orientation","vertical"),o.setAttribute("aria-label",`Resize column ${st(n,i)}`),o.setAttribute("aria-valuemin",String(E)),o.setAttribute("aria-valuemax",String(z)),o.setAttribute("aria-valuenow",String(this.widthOfColumn(t))),o.tabIndex=0,o.title="Drag or use the arrow keys to resize, double-click to reset the table to the page width",o.addEventListener("mousedown",r=>r.preventDefault()),o.addEventListener("blur",()=>this.commitWidth(t)),o.addEventListener("keydown",r=>this.resizeKey(r,t)),o.addEventListener("keyup",r=>{["ArrowLeft","ArrowRight","Home","End"].includes(r.key)&&this.commitWidth(t)}),o.addEventListener("pointerdown",r=>{r.preventDefault();let a=r.clientX,l=this.widthOfColumn(t);this.freeze();let c=this.dom.ownerDocument.defaultView.getComputedStyle?.(this.dom).direction==="rtl",u=l,p=S=>{u=bt(l+(c?a-S.clientX:S.clientX-a))??l,this.showWidth(t,u)},h=()=>{s.removeEventListener("pointermove",p),s.removeEventListener("pointerup",h),u!==l?this.sizeColumn(t,u):this.widths()};s.addEventListener("pointermove",p),s.addEventListener("pointerup",h)}),o.addEventListener("dblclick",r=>{r.preventDefault(),this.command(t,O(t))}),o}isSized(){return b(this.node).some(t=>this.node.attrs.cols[t].width)}drawnWidths(){let t={};for(let e of this.header.querySelectorAll("th"))t[e.dataset.col]=Math.round(e.getBoundingClientRect().width)||C;return t}widthOfColumn(t){let e=this.node.attrs.cols[t]?.width;return e||(this.isSized()?C:this.drawnWidths()[t]??C)}freeze(){if(!(this.isSized()||this.frozen)){this.frozen=this.drawnWidths();for(let t of this.colgroup.children)t.style.width=`${this.frozen[t.dataset.col]}px`;this.table.style.width=`${Object.values(this.frozen).reduce((t,e)=>t+e,0)}px`,this.table.classList.add("is-sized")}}showWidth(t,e){let n=[...this.colgroup.children].find(i=>i.dataset.col===t);n&&(this.table.classList.add("is-sized"),n.style.width=`${e}px`,this.frozen&&(this.table.style.width=`${Object.values({...this.frozen,[t]:e}).reduce((i,s)=>i+s,0)}px`))}widthCommand(t,e){return this.isSized()?et(t,e):tt({...this.frozen??this.drawnWidths(),[t]:e},t)}sizeColumn(t,e){return this.command(t,this.widthCommand(t,e))}handleFor(t){return[...this.header.querySelectorAll(".page-table-resize")].find(e=>e.dataset.col===t)??null}resizeKey(t,e){let n=t.shiftKey?50:10,i=this.preview?.col===e?this.preview.width:this.widthOfColumn(e),s;if(t.key==="ArrowLeft")s=i-n;else if(t.key==="ArrowRight")s=i+n;else if(t.key==="Home")s=E;else if(t.key==="End")s=z;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(z,Math.max(E,Math.round(s))))}previewWidth(t,e){let n=this.preview?.col===t?this.preview.base:this.widthOfColumn(t);this.freeze(),this.preview={col:t,width:e,base:n},this.showWidth(t,e);let i=this.handleFor(t);i&&i.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 n=this.getPos(),i=n==null?null:this.view.state.doc.nodeAt(n),s=i?.type===y.table&&i.attrs.id===this.node.attrs.id?i.attrs.cols[t]:null;if(!s)return this.widths(),!1;if((s.width??e.base)===e.width)return this.widths(),!1;let o=b(i).some(a=>i.attrs.cols[a].width)?{}:this.frozen??this.drawnWidths(),r={...i.attrs.cols};for(let[a,l]of Object.entries(o))r[a]&&(r[a]={...r[a],width:l});return r[t]={...s,width:e.width},this.view.dispatch(Y(this.view.state.tr.setNodeMarkup(n,null,{...i.attrs,cols:r}))),!0}command(t,e){let n=U(this.view,{tableId:this.node.attrs.id,colId:t},e);return this.view.focus(),n}fit(t){let e=0;for(let i of this.contentDOM.querySelectorAll("td"))i.dataset.col===t&&(e=Math.max(e,mt(i.querySelector("span")??i)));let n=[...this.header.querySelectorAll("th")].find(i=>i.dataset.col===t)?.querySelector("button");return e=Math.max(e,n?.scrollWidth??0),this.sizeColumn(t,e+24)}render(t=null){let e=this.dom.ownerDocument,n=e.createElement("tr"),i=M(this.node),s=this.node.attrs.id;this.widths();for(let[r,a]of b(this.node).entries()){let l=this.node.attrs.cols[a],c=i[a],u=st(l,r),p=e.createElement("th");p.dataset.col=a,p.dataset.kind=c,p.setAttribute("scope","col"),p.id=dt(s,a),this.node.attrs.sort?.col===a&&p.setAttribute("aria-sort",this.node.attrs.sort.dir==="asc"?"ascending":"descending");let h=e.createElement("button");h.type="button",h.className="page-table-col-menu",h.textContent=u,h.dataset.control="column",h.dataset.col=a,h.dataset.kind=c,h.setAttribute("aria-haspopup","menu"),h.setAttribute("aria-expanded","false"),h.setAttribute("aria-label",`${u} column actions`),h.addEventListener("click",S=>{S.preventDefault(),this.menuAnchor=h;let H={tableId:s,colId:a},m=(w,I)=>()=>this.act(H,w,I);g(this.view,h,[{label:"Rename",run:()=>this.beginRename(a),focus:!1},{label:"Kind \u25B8",icon:L[c],hint:l.kind?f[c]:`Auto: ${f[c]}`,run:()=>g(this.view,h,[{label:"Auto",icon:l.kind?"":L[c],hint:l.kind?"":f[c],checked:!l.kind,run:m(B(a,"auto"),`Kind ${f[c]}`)},...G.map(w=>({label:f[w],icon:L[w],checked:l.kind===w,run:m(B(a,w),`Kind ${f[w]}`)}))]),focus:!1},{label:"Sort ascending",icon:"\u2191",run:m(D(a,"asc"),"Sorted ascending")},{label:"Sort descending",icon:"\u2193",run:m(D(a,"desc"),"Sorted descending")},{label:"Width \u25B8",icon:"\u2194",hint:l.width?`${l.width}px`:"Auto",focus:!1,run:()=>g(this.view,h,[{label:"Wider",icon:"+",run:m(this.widthCommand(a,this.widthOfColumn(a)+40),"Column width changed")},{label:"Narrower",icon:"\u2212",run:m(this.widthCommand(a,this.widthOfColumn(a)-40),"Column width changed")},{label:"Fit to content",icon:"\u2194",run:()=>this.fit(a)},...this.isSized()?[{label:"Reset widths",icon:"\xD7",run:m(O(a),"Column widths reset")}]:[]])},{label:"Chart this table",icon:"\u{1F4CA}",run:()=>{let w=this.getPos();return $(this.view).then(({insertChartAfterTable:I})=>I(this.view,w))}},{label:"Insert column left",icon:"+",run:m(x(!1),"Column inserted")},{label:"Insert column right",icon:"+",run:m(x(!0),"Column inserted")},...r>0?[{label:"Move left",icon:"\u2190",run:m(k(-1),"Column moved")}]:[],...r<b(this.node).length-1?[{label:"Move right",icon:"\u2192",run:m(k(1),"Column moved")}]:[],{label:"Select column",icon:"\u25A6",run:()=>ct(this.view,H,"col")},{label:"Delete column",icon:"\xD7",run:m(T,"Column deleted")}],{persist:!0})}),p.append(h,this.resizer(a,p,l,r)),n.append(p)}let o=this.menuAnchor;if(this.header.replaceChildren(n),o){let r=this.control({tableId:s,control:o.dataset.control,colId:o.dataset.col??null,rowId:o.dataset.row??null});this.menuAnchor=r&&r!==o&&Q(this.view,o,r)?r:null}t&&this.focusControl(t)}update(t){if(t.type!==y.table)return!1;let e=this.describe(this.dom.ownerDocument.activeElement),n=this.preview,i=this.renaming?.isConnected&&e?.control==="rename";this.node=t,this.dom.dataset.id=t.attrs.id??"",this.preview=null,i?this.widths():this.render(e),n&&t.attrs.cols[n.col]&&(t.attrs.cols[n.col].width??n.base)===n.base&&this.previewWidth(n.col,n.width);let s=M(t);for(let o of this.contentDOM.querySelectorAll("td[data-col]"))o.dataset.kind=s[o.dataset.col]??"text";return e&&!i&&this.afterUpdate(e),!0}stopEvent(t){return!!t.target.closest?.("thead, .page-table-actions, .page-table-add-row, .page-table-add-col")}ignoreMutation(t){return!this.contentDOM.contains(t.target)}destroy(){this.destroyed=!0,this.renaming=null,this.renamingUnsaved?.dispose(),this.renamingUnsaved=null,this.menuAnchor=null,this.preview=null}},q=class{constructor(t,e,n){this.node=t,this.view=e,this.getPos=n,this.date=null;let i=e.dom.ownerDocument;this.dom=i.createElement("td"),Z.set(this.dom,this),this.dom.dataset.col=t.attrs.col,this.contentDOM=i.createElement("span");let s=i.createElement("button");s.type="button",s.className="page-table-row-menu",s.innerHTML=lt,s.dataset.control="row",s.setAttribute("aria-haspopup","menu"),s.setAttribute("aria-expanded","false"),s.setAttribute("aria-label","Row actions"),s.title="Row actions",s.contentEditable="false",s.addEventListener("click",()=>{let o=this.target();if(!o)return;let r=R(this.view.state.doc,o.tableId);if(!r)return;let a=(u,p)=>()=>{let h=U(this.view,o,u);return N(this.view,h?p:rt),h},l=Math.max(0,W(r.table,o.rowId)),c=r.table.childCount;g(this.view,s,[{label:"Insert above",icon:"+",run:a(v(!1),"Row inserted")},{label:"Insert below",icon:"+",run:a(v(!0),"Row inserted")},...l>0?[{label:"Move up",icon:"\u2191",run:a(A(-1),"Row moved")}]:[],...l<c-1?[{label:"Move down",icon:"\u2193",run:a(A(1),"Row moved")}]:[],{label:"Select row",icon:"\u25A6",run:()=>ct(this.view,o,"row")},{label:"Delete row",icon:"\xD7",run:a(P,"Row deleted")}],{persist:!0})}),this.menu=s,this.dom.append(s,this.contentDOM),this.update(t)}target(){let t=this.getPos(),e=t==null?null:this.view.state.doc.resolve(t),n=e?.node(1);return!n||n.type!==y.table?null:{tableId:n.attrs.id,rowId:e.node(2).attrs.id??null,colId:this.node.attrs.col??null}}update(t){if(t.type!==y.table_cell)return!1;this.node=t;let e=this.view.state.doc.resolve(this.getPos()),n=e.node(1),i=e.node(2),s=e.index(1);return this.dom.dataset.col=t.attrs.col,this.dom.setAttribute("headers",dt(n.attrs.id,t.attrs.col)),this.dom.dataset.kind=M(n)[t.attrs.col]??"text",this.menu.dataset.col=t.attrs.col,this.menu.dataset.row=i.attrs.id??"",this.menu.setAttribute("aria-label",`Row actions: ${ut(i,s)}`),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 n=this.node.textContent.trim();/^\d{4}-\d{2}-\d{2}$/.test(n)&&(e.value=n),e.addEventListener("change",()=>{e.value&&it(this.view,this.getPos(),e.value),this.closeDate(),this.view.focus()}),e.addEventListener("keydown",i=>{i.key==="Escape"&&(i.preventDefault(),this.closeDate(),this.view.focus()),i.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 Lt(){return{id:"table",nodeViews:{table:(d,t,e)=>new _(d,t,e),table_cell:(d,t,e)=>new q(d,t,e)},css:ot+ht,dispose(){}}}export{q as TableCellView,_ as TableView,Lt as createFeature};
@@ -1 +0,0 @@
1
- import{c as z}from"./c-W4JCVLAB.js";import{B as J}from"./c-HCNWJE4A.js";import{d as _,m as F}from"./c-QIXT3Q7C.js";import"./c-VHNSBD2M.js";var{Decoration:ee,DecorationSet:te}=_,c=(t,n,a,e={},o=null)=>{let l=t.createElement(n);a&&(l.className=a);for(let[s,i]of Object.entries(e))i!=null&&i!==!1&&l.setAttribute(s,i===!0?"":String(i));return o!==null&&(l.textContent=o),l},ne=(t,n)=>c(t,"span","page-board-face",{"aria-hidden":"true"},([...String(n).trim()][0]??"?").toUpperCase());function I(t,n){let a=null;return t.state.doc.forEach((e,o)=>{e.attrs.id===n&&e.type===F.nodes.list_item&&e.attrs.kind==="check"&&(a={node:e,pos:o})}),a}function X(t,n,a,e){let o=I(t,n);o&&t.dispatch(J(t.state.tr.setNodeMarkup(o.pos,null,{...o.node.attrs,[a]:e||null})))}var L={person:'<circle cx="8" cy="5.4" r="2.3"/><path d="M3.6 13.2c.6-2.1 2.2-3.3 4.4-3.3s3.8 1.2 4.4 3.3"/>',calendar:'<rect x="2.5" y="3.5" width="11" height="10"/><path d="M2.5 6.8h11M5.5 2v2.4M10.5 2v2.4"/>',clock:'<circle cx="8" cy="8" r="5.5"/><path d="M8 4.8v3.4l2.3 1.4"/>',tick:'<path d="M3.5 8.3l3 3 6-6.2"/>',plus:'<path d="M8 3.5v9M3.5 8h9"/>',clear:'<path d="M4.8 4.8l6.4 6.4M11.2 4.8l-6.4 6.4"/>',"chevron-left":'<path d="M9.8 3.6L5.4 8l4.4 4.4"/>',"chevron-right":'<path d="M6.2 3.6L10.6 8l-4.4 4.4"/>'};function q(t,n){let a=t.createElementNS("http://www.w3.org/2000/svg","svg");return a.setAttribute("viewBox","0 0 16 16"),a.setAttribute("width","14"),a.setAttribute("height","14"),a.setAttribute("fill","none"),a.setAttribute("stroke","currentColor"),a.setAttribute("stroke-width","1.5"),a.setAttribute("stroke-linecap","round"),a.setAttribute("stroke-linejoin","round"),a.setAttribute("aria-hidden","true"),a.innerHTML=n,a}var Z=t=>String(t).padStart(2,"0"),B=/^\d{4}-\d{2}-\d{2}$/,S=(t=new Date)=>`${t.getFullYear()}-${Z(t.getMonth()+1)}-${Z(t.getDate())}`,ae=t=>{let n=new Date(`${t}T00:00:00Z`);return n.setUTCDate(n.getUTCDate()+1),n.toISOString().slice(0,10)};function oe(t,n){if(!t)return"No date";if(!B.test(t))return t;if(t===n)return"Today";if(t===ae(n))return"Tomorrow";let a=t.slice(0,4)===n.slice(0,4);return new Date(`${t}T00:00:00Z`).toLocaleDateString("en-US",{month:"short",day:"numeric",...a?{}:{year:"numeric"},timeZone:"UTC"})}function j(t,{name:n,paths:a,label:e,aria:o,filled:l,overdue:s=!1}){let i=c(t,"button","page-check-chip",{type:"button","data-check":n,"data-filled":String(l),"data-overdue":s?"true":null,"aria-expanded":"false","aria-label":o});return i.append(q(t,a),c(t,"span","page-check-chip-label",{},e)),i}var N=null;function G(t,n,{className:a,label:e,check:o,onKey:l=null}){let s=n.ownerDocument,i=s.defaultView;N&&N.close();for(let d of s.querySelectorAll(".page-check-popup"))d.remove();let y=t.dom.parentNode,h=["relative","absolute","fixed","sticky"].includes(i?.getComputedStyle?.(y)?.position??""),g=y&&h?y:s.body,f=c(s,"div",`page-check-popup ${a}`,{role:"dialog","aria-label":e,"data-check":o}),A=!1,E=()=>{let d=n.getBoundingClientRect(),r=g===s.body?{top:-(i?.scrollY??0),left:-(i?.scrollX??0)}:g.getBoundingClientRect(),u=f.getBoundingClientRect(),p=u.width||Math.min(264,(i?.innerWidth||292)-28),k=(i?.innerHeight??0)-d.bottom-2,b=u.height>0&&k<u.height;f.style.left=`${Math.round(d.right-p-r.left)}px`,f.style.top=`${Math.round((b?d.top-u.height-2:d.bottom+2)-r.top)}px`},C=d=>{if(!f.isConnected)return w();f.contains(d.target)||n.contains(d.target)||w()},w=({focusAnchor:d=!1}={})=>{if(A)return;A=!0,s.removeEventListener("mousedown",C,!0),i?.removeEventListener("resize",E),i?.removeEventListener("scroll",E,!0),N?.panel===f&&(N=null),f.remove(),n.setAttribute("aria-expanded","false");let r=n.dataset.fromKeys==="true";delete n.dataset.fromKeys,d&&r?t.focus():d&&n.focus()};return f.addEventListener("keydown",d=>{if(d.stopPropagation(),d.key==="Escape"){d.preventDefault(),w({focusAnchor:!0});return}l?.(d,f)}),g.append(f),n.setAttribute("aria-expanded","true"),N={panel:f,close:()=>w()},s.addEventListener("mousedown",C,!0),i?.addEventListener("resize",E),i?.addEventListener("scroll",E,!0),{panel:f,close:w,place:E}}function re(t,n){let a=new Map;t.state.doc.forEach(e=>{if(e.type!==F.nodes.list_item||e.attrs.kind!=="check")return;let o=String(e.attrs.owner??"").trim();if(!o)return;let l=o.toLowerCase(),s=a.get(l)??{name:o,count:0};s.count+=1,a.set(l,s)});for(let e of n??[]){let o=String((typeof e=="string"?e:e?.name)??"").trim();o&&!a.has(o.toLowerCase())&&a.set(o.toLowerCase(),{name:o,count:0})}return[...a.values()].sort((e,o)=>e.name.localeCompare(o.name))}function ce(t,n,a){let e=a.ownerDocument,o=I(t,n)?.node.attrs.owner||"",{panel:l,close:s,place:i}=G(t,a,{className:"page-check-owner",label:"Assignee",check:"owner-panel",onKey:(r,u)=>{if(r.key!=="ArrowDown"&&r.key!=="ArrowUp")return;r.preventDefault();let p=[...u.querySelectorAll("input, button:not([disabled])")],k=p.indexOf(e.activeElement),b=r.key==="ArrowDown"?1:-1;(k<0?b>0?p[0]:p[p.length-1]:p[(k+b+p.length)%p.length])?.focus()}}),y=c(e,"input","page-check-search",{type:"text",placeholder:"Find or type a name","aria-label":"Find or type a name"}),h=c(e,"div","page-check-people"),g=c(e,"button","page-check-person page-check-danger",{type:"button","data-check":"clear-owner"});g.append(q(e,L.clear),c(e,"span","page-check-person-name",{},"Remove assignee")),g.disabled=!o,g.addEventListener("click",()=>A(null)),l.append(y,c(e,"div","page-check-subhead",{},"People in this document"),h,c(e,"div","page-check-divider"),g);let f=[],A=r=>{s(),X(t,n,"owner",r)},E=(r,u)=>{let p=r.toLowerCase()===String(o).toLowerCase(),k=c(e,"button","page-check-person",{type:"button","data-check":"owner-option","data-name":r,"aria-pressed":String(p)});return k.append(ne(e,r),c(e,"span","page-check-person-name",{},r),c(e,"span","page-check-person-meta",{},`${u} ${u===1?"item":"items"}`)),p&&k.append(q(e,L.tick)),k.addEventListener("click",()=>A(r)),k},C=r=>{let u=c(e,"button","page-check-person",{type:"button","data-check":"owner-new","data-name":r}),p=c(e,"span","page-check-person-name",{},"Assign to ");return p.append(c(e,"strong",null,{},r)),u.append(q(e,L.plus),p,c(e,"span","page-check-person-meta",{},"New")),u.addEventListener("click",()=>A(r)),u},w=()=>{let r=y.value.trim(),u=r.toLowerCase(),p=re(t,f),k=[];r&&!p.some(b=>b.name.toLowerCase()===u)&&k.push(C(r));for(let b of p)u&&!b.name.toLowerCase().includes(u)||k.push(E(b.name,b.count));h.replaceChildren(...k)};y.addEventListener("keydown",r=>{if(r.stopPropagation(),r.key==="Escape"){r.preventDefault(),s({focusAnchor:!0});return}r.key==="Enter"&&(r.preventDefault(),h.querySelector("button[data-check]")?.click())}),y.addEventListener("input",w),w(),i(),y.focus();let d=globalThis.clay?.people?.available;d&&Promise.resolve().then(()=>d()).then(r=>{!N||N.panel!==l||(f=Array.isArray(r)?r:[],w())}).catch(()=>{})}var se=["January","February","March","April","May","June","July","August","September","October","November","December"],$=(t,n,a)=>new Date(t,n,a),ie=t=>t.toLocaleDateString("en-US",{weekday:"short",month:"short",day:"numeric"}),le=t=>t.toLocaleDateString("en-US",{weekday:"long",month:"long",day:"numeric",year:"numeric"}),W=t=>{if(!t||!B.test(t))return null;let[n,a,e]=t.split("-").map(Number);return $(n,a-1,e)};function de(t,n,a){let e=a.ownerDocument,o=I(t,n)?.node.attrs.due||null,l=S(),s=new Date,i=$(s.getFullYear(),s.getMonth(),s.getDate()),y=W(o)??i,h=y.getFullYear(),g=y.getMonth(),{panel:f,close:A,place:E}=G(t,a,{className:"page-check-date",label:"Due date",check:"date-panel",onKey:(m,D)=>Q(m,D)}),C=m=>{A(),X(t,n,"due",m)},w=c(e,"div","page-check-quick"),d=(m,D)=>{let M=$(i.getFullYear(),i.getMonth(),i.getDate()+D),x=c(e,"button","page-check-quick-row",{type:"button","data-check":"date-quick","data-date":S(M)});return x.append(q(e,L.calendar),c(e,"span","page-check-quick-label",{},m),c(e,"span","page-check-quick-meta",{},ie(M))),x.addEventListener("click",()=>C(S(M))),x};w.append(d("Today",0),d("Tomorrow",1),d("Next week",7));let r=c(e,"div","page-check-cal"),u=c(e,"div","page-check-cal-head"),p=c(e,"span","page-check-cal-month"),k=c(e,"span","page-check-cal-nav"),b=m=>{let D=$(h,g+m,1);h=D.getFullYear(),g=D.getMonth(),H()},U=c(e,"button","page-check-cal-btn",{type:"button","aria-label":"Previous month"}),O=c(e,"button","page-check-cal-btn",{type:"button","aria-label":"Next month"});U.append(q(e,L["chevron-left"])),O.append(q(e,L["chevron-right"])),U.addEventListener("click",()=>b(-1)),O.addEventListener("click",()=>b(1)),k.append(U,O),u.append(p,k);let Y=c(e,"div","page-check-cal-grid");r.append(u,Y);let H=()=>{p.replaceChildren(c(e,"span",null,{},`${se[g]} `),c(e,"span","page-check-cal-year",{},String(h)));let m=$(h,g,1),D=$(h,g+1,0).getDate(),M=Math.ceil((m.getDay()+D)/7)*7,x=["S","M","T","W","T","F","S"].map(v=>c(e,"span","page-check-cal-dow",{},v)),T=[];for(let v=0;v<M;v+=1){let P=$(h,g,1-m.getDay()+v),R=S(P),V=c(e,"button","page-check-cal-day",{type:"button","data-check":"date-day","data-date":R,"data-outside":String(P.getMonth()!==g),"data-today":String(R===l),"aria-pressed":String(R===o),"aria-label":le(P)},String(P.getDate()));V.addEventListener("click",()=>C(R)),T.push(V)}Y.replaceChildren(...x,...T)},Q=(m,D)=>{let M=e.activeElement?.closest?.('[data-check="date-day"]');if(!M)return;if(m.key==="Enter"||m.key===" "){m.preventDefault(),M.click();return}let x={ArrowLeft:-1,ArrowRight:1,ArrowUp:-7,ArrowDown:7}[m.key];if(!x)return;m.preventDefault();let T=W(M.dataset.date),v=$(T.getFullYear(),T.getMonth(),T.getDate()+x);(v.getMonth()!==g||v.getFullYear()!==h)&&(h=v.getFullYear(),g=v.getMonth(),H()),D.querySelector(`[data-check="date-day"][data-date="${S(v)}"]`)?.focus()},K=c(e,"button","page-check-quick-row page-check-danger",{type:"button","data-check":"clear-date"});K.append(q(e,L.clear),c(e,"span","page-check-quick-label",{},"Clear date")),K.disabled=!o,K.addEventListener("click",()=>C(null)),f.append(w,r,c(e,"div","page-check-divider"),K),H(),E(),(Y.querySelector('[data-check="date-day"][aria-pressed="true"]')??Y.querySelector('[data-check="date-day"][data-today="true"]'))?.focus()}function pe(t,n){let a=t.dom.ownerDocument,e=a.createElement("span");e.className="page-check-controls",e.contentEditable="false",e.dataset.empty=String(!n.attrs.owner&&!n.attrs.due);let o=S(),l=n.attrs.owner||"Unassigned",s=j(a,{name:"owner",paths:L.person,label:l,aria:`Assignee: ${l}`,filled:!!n.attrs.owner}),i=oe(n.attrs.due,o),y=!!n.attrs.due&&!n.attrs.checked&&B.test(n.attrs.due)&&n.attrs.due<o,h=j(a,{name:"date",paths:y?L.clock:L.calendar,label:i,aria:`Due date: ${i}`,filled:!!n.attrs.due,overdue:y});return s.addEventListener("click",()=>ce(t,n.attrs.id,s)),h.addEventListener("click",()=>de(t,n.attrs.id,h)),e.append(s,h),e}function ue(t,n){let a=t.state.selection.$head;if(a.depth!==1||a.parent.type!==F.nodes.list_item||a.parent.attrs.kind!=="check")return!1;let e=a.parent.attrs.id,l=[...t.dom.querySelectorAll(".page-check-controls")].find(s=>s.dataset.item===e)?.querySelector(`[data-check="${n}"]`);return l?(l.dataset.fromKeys="true",l.click(),!0):!1}function he(t){let n=[],a=S();return t.doc.forEach((e,o)=>{e.type!==F.nodes.list_item||e.attrs.kind!=="check"||n.push(ee.widget(o+e.nodeSize-1,l=>{let s=pe(l,e);return s.dataset.item=e.attrs.id,s},{key:`${e.attrs.id}:${e.attrs.owner}:${e.attrs.due}:${e.attrs.checked}:${a}`,side:-1,stopEvent:l=>!!l.target.closest?.(".page-check-chip, .page-check-popup"),ignoreSelection:!0}))}),te.create(t.doc,n)}function ge(t){let n=S(),a=()=>{t.isDestroyed||S()===n||(n=S(),t.dispatch(t.state.tr.setMeta("addToHistory",!1)))},e=t.dom.ownerDocument.defaultView,o=e.setInterval(a,6e4);return e.document.addEventListener("visibilitychange",a),()=>{e.clearInterval(o),e.document.removeEventListener("visibilitychange",a)}}function be({view:t=null}={}){let n=t?z(t,{decorations:he,focusControl:ue}):()=>{},a=t?ge(t):()=>{};return t&&!t.isDestroyed&&t.dispatch(t.state.tr.setMeta("addToHistory",!1)),{id:"checklist",dispose(){n(),a()}}}export{be as createFeature,he as decorations,ue as focusControl};
@@ -1,7 +0,0 @@
1
- import{x as O}from"./c-HCNWJE4A.js";import{H as x,I as C,J as $,a as A,m as N}from"./c-QIXT3Q7C.js";import"./c-VHNSBD2M.js";var g=N.nodes,H=e=>e.attrs.parent??null,_=e=>{let a=new Set;return e.forEach(t=>t.forEach(o=>a.add(o.attrs.col))),C(e.attrs.cols).filter(t=>a.has(t))};function S(e,a){let t=a.ownerDocument,o=t.createElement("thead").appendChild(t.createElement("tr"));for(let s of _(e)){let p=e.attrs.cols[s],r=o.appendChild(t.createElement("th"));r.setAttribute("data-col",s),r.setAttribute("scope","col"),p.kind&&r.setAttribute("data-kind",p.kind),p.width&&(r.setAttribute("data-width",String(p.width)),r.style.width=`${p.width}px`),r.textContent=p.name??""}a.prepend(o.parentNode),e.attrs.sort&&a.setAttribute("data-sort",JSON.stringify(e.attrs.sort))}function v(e,a){let t=[];e.forEach((o,s,p)=>{let r=a[p];if(!r||r.nodeType!==1)return;if(o.type===g.table&&S(o,r),o.type!==g.list_item||H(o)!==null){t=[];return}let f=r.ownerDocument,{indent:d,kind:i}=o.attrs,l=i==="ordered"?"OL":"UL";for(;t.length&&t.at(-1).indent>d;)t.pop();if(t.at(-1)?.indent===d&&t.at(-1).list.tagName!==l&&t.pop(),!t.length||t.at(-1).indent<d){let c=f.createElement(l);t.length?t.at(-1).li.append(c):r.before(c),t.push({indent:d,list:c,li:null})}let u=f.createElement("li");i==="check"&&(u.innerHTML=`<input type="checkbox" disabled${o.attrs.checked?" checked":""}>`),u.append(...r.childNodes),t.at(-1).list.append(u),t.at(-1).li=u,r.remove()})}var T=e=>/[\t\n\r"]/.test(e)?`"${e.replace(/"/g,'""')}"`:e;function q(e){if(!e.content.firstChild?.type.spec.group?.includes("block"))return null;let a="",t=[],o=!1;return e.content.forEach((s,p,r)=>{let f=s.type===g.list_item,d=s.textBetween(0,s.content.size,`
2
-
3
- `);if(f){let{indent:i,kind:l}=s.attrs;for(;t.length&&t.at(-1).indent>i;)t.pop();t.at(-1)?.indent===i&&t.at(-1).kind!==l&&t.pop(),(!t.length||t.at(-1).indent<i)&&t.push({indent:i,kind:l,n:0});let u=t.at(-1),c=l==="ordered"?`${++u.n}.`:l==="check"?`- [${s.attrs.checked?"x":" "}]`:"-";d=`${" ".repeat(t.length-1)}${c} ${d}`}else t=[];if(s.type===g.table){let i=[_(s).map(l=>T(s.attrs.cols[l].name??""))];s.forEach(l=>{let u=[];l.forEach(c=>u.push(T(c.textContent))),i.push(u)}),d=i.map(l=>l.join(" ")).join(`
4
- `)}a+=(r?o&&f?`
5
- `:`
6
-
7
- `:"")+d,o=f}),a}var w=new WeakMap;function b(e){if(w.has(e))return w.get(e);let a=n=>[...n.children].filter(h=>h.tagName==="TD"||h.tagName==="TH"),t=[...e.querySelectorAll("tr")].filter(n=>n.closest("table")===e),o=t.find(n=>n.parentElement.tagName==="THEAD")??(t.length>1&&a(t[0]).every(n=>n.tagName==="TH")?t[0]:null),s=t.filter(n=>n!==o),p=o?a(o):[],r=Math.max(1,p.length,...s.map(n=>a(n).length)),f=x(null,null,r),d=[],i={};for(let n=0;n<r;n++){let h=p[n],m=h?.getAttribute("data-col");(!m||Object.hasOwn(i,m))&&(m=$("c"));let y=h?.getAttribute("data-kind"),E=Math.round(Number(h?.getAttribute("data-width")));i[m]={pos:f[n],name:h?.textContent.replace(/\s+/g," ").trim()||`Column ${n+1}`,...y?{kind:y}:{},...E>0?{width:E}:{}},d.push(m)}let l=(n,h)=>n?O.parse(n,{topNode:g.table_cell.create({col:h})}):g.table_cell.create({col:h}),u=(s.length?s:[null]).map(n=>g.table_row.create(null,d.map((h,m)=>l(n&&a(n)[m],h)))),c=null;try{c=JSON.parse(e.getAttribute("data-sort"))}catch{}let k={cols:i,sort:c&&d.includes(c.col)&&(c.dir==="asc"||c.dir==="desc")?{col:c.col,dir:c.dir}:null,rows:A.Fragment.from(u)};return w.set(e,k),k}var B=e=>({cols:b(e).cols,sort:b(e).sort,parent:e.getAttribute("data-page-parent")||null}),I=e=>b(e).rows;export{v as copy,I as rows,B as table,q as text};
@@ -1 +0,0 @@
1
- var e=new WeakMap;export{e as a};
@@ -1 +0,0 @@
1
- import{a as ue,b as me}from"./c-L3F5ZLIV.js";import{i as pe,k as U,u as A}from"./c-EXKHPOVC.js";import{c as de,g as ae,h as K,p as fe,t as le}from"./c-L5VFATT6.js";import{f as L,h as N,u as W}from"./c-WMRJKQ2V.js";import{$ as oe,C as Z,N as ee,O as q,Q as te,a as J,aa as H,da as z,e as Q,fa as ne,ja as S,ka as D,la as re,m as E,na as v,oa as k,pa as se,qa as V,ra as ce,sa as ie,ua as I,x as G,y as P,z as X}from"./c-QIXT3Q7C.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=te(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?Z(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 J.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(ee(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?Q.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=ie(s,{fallbackOf:i,clean:ce(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 re(o)}var $e=(o,e)=>{let t;try{t=P(E,o)}catch{return g(`Invalid mark key on block: ${e}`)}return G([...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]!==oe)&&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}=X(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=ne(s),i=Object.fromEntries(r.map((n,h)=>[n,Ee(n,s[n],h)]));t=new L,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 W(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(N(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(se(`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{B as H,C as X,d as M,g as L,h as O,j as D,l as I,m as R,n as x,o as C,p as A,q as N,s as $}from"./c-HCNWJE4A.js";import{m as B}from"./c-QIXT3Q7C.js";var _=new WeakMap;function v(s){let t=_.get(s);return t||_.set(s,t=O(s)),t}var F=B.nodes,w=s=>s.type===F.list_item,S=s=>s.type===F.toggle,y=s=>s.attrs.parent??null;function J(s,t,e){if(e<0)return[null];let n=[],i=s[e].node;S(i)&&i.attrs.open&&!s[e].hidden&&n.unshift(i.attrs.id);for(let r=y(i);r!==null&&!n.includes(r);){let c=s[t.get(r)];if(!c)break;n.unshift(r),r=y(c.node)}let o=[null];for(let r of n){let c=s[t.get(r)];if(!c.node.attrs.open||c.hidden)break;o.push(r)}return o}function Y(s,t,e,n){let i=y(s[t].node),o=w(s[t].node)?n.indent-s[t].node.attrs.indent:0;return r=>r.i<t||r.i>e||y(r.node)!==i?null:w(r.node)?{parent:n.parent,indent:r.node.attrs.indent+o}:{parent:n.parent}}function Q(s,t){let e=null;s.doc.forEach((n,i)=>{n.attrs.id===t&&S(n)&&(e={n,off:i})}),e&&!e.n.attrs.open&&s.setNodeMarkup(e.off,null,{...e.n.attrs,open:!0})}function P(s,t,e,n,i,o=null){let r=Y(t,e,n,i),c=t[e].at,d=t[n].end,h=o??new C(s.doc.resolve(c),s.doc.resolve(d)),a;if(i.at===c||i.at===d){a=s.tr;for(let l=e;l<=n;l++){let p=r(t[l]);p&&a.setNodeMarkup(t[l].at,null,{...t[l].node.attrs,...p})}a.setSelection(h.map(a.doc,a.mapping)),a.setMeta(L,A(t,e,n,i.at,r))}else a=N(s,t,e,n,i.at,r,h);if(i.open){Q(a,i.open);let l=a.getMeta(L);l&&a.setMeta(L,{...l,attrs:{...l.attrs,[i.open]:{open:!0}}})}return a}function K(s,t,e,n,i){if(i.parent!=null&&t.slice(e,n+1).some(a=>a.node.attrs.id===i.parent))return!1;let o=t[n].end-t[e].at,r=Y(t,e,n,i);for(let a=e;a<=n;a++)if(w(t[a].node)&&(r(t[a])?.indent??t[a].node.attrs.indent)>$)return!1;let c=P(s,t,e,n,i),h=i.at===t[e].at||i.at===t[n].end?t[e].at:i.at>t[e].at?i.at-o:i.at;return D(c.doc,s.doc).every(a=>a.at>=h&&a.at<h+o)}function U(s,t,e,n,i){let o=new Map;t.forEach(l=>{S(l.node)&&l.node.attrs.id&&o.set(l.node.attrs.id,l.i)});let r=i<0?s.doc.content.size:t[i].at;if(r>t[e].at&&r<t[n].end)return[];let c=(i<0?t.length:i)-1,d=J(t,o,c),h=d.indexOf(i<0?null:y(t[i].node)),a=[];for(let l of d.slice(Math.max(0,h))){let p=l===null?0:t[o.get(l)].depth+1,E=c>=0&&w(t[c].node)&&y(t[c].node)===l?t[c].node:null,f=w(t[e].node)&&E?E.attrs.indent+1:0;for(let u=0;u<=f;u++){let m={at:r,parent:l,indent:u,depth:p+(w(t[e].node)?u:0)};K(s,t,e,n,m)&&a.push(m)}}return a}function q(s,t,e,n,i){let o=t[i];if(!o||!S(o.node)||o.node.attrs.open||o.hidden||i>=e&&i<=n||o.at>t[e].at&&o.at<t[n].end)return null;let r=o.node.attrs.id,c={at:t[o.subEnd].end,parent:r,indent:0,depth:o.depth+1,open:r};return K(s,t,e,n,c)?c:null}function z(s,t){let e=null;for(let n of s)(!e||Math.abs(n.depth-t)<Math.abs(e.depth-t))&&(e=n);return e}var Z=4,tt=250,V=8,b=56,W=18;function et(s){for(let t=s.parentElement;t;t=t.parentElement){let e=getComputedStyle(t).overflowY;if((e==="auto"||e==="scroll")&&t.scrollHeight>t.clientHeight)return t}return s.ownerDocument.scrollingElement}var j=new WeakMap;function nt(s,t){let e=j.get(s);if(!e){e=[];for(let n of s){if(n.hidden)continue;let i=t.nodeDOM(n.at);i?.getBoundingClientRect&&e.push({i:n.i,dom:i})}j.set(s,e)}return e}function it(s,t){let e=0,n=s.length;for(;e<n;){let i=e+n>>1,o=s[i].dom.getBoundingClientRect();t<o.top+o.height/2?n=i:e=i+1}return e<s.length?e:-1}var G=class{constructor(t,e,{index:n,onClick:i}){this.view=t,this.grip=e,this.index=n,this.onClick=i,this.shell=t.dom.parentElement,this.line=document.createElement("div"),this.line.className="page-drop",this.line.hidden=!0,this.line.setAttribute("aria-hidden","true"),this.shell.append(this.line),this.state=null,this.onMove=o=>this.move(o),this.onUp=o=>this.end(o),this.onCancel=o=>{o.pointerId===this.state?.pointer&&this.cancel()},this.onKey=o=>{o.key==="Escape"&&this.state?.active&&(o.preventDefault(),o.stopPropagation(),this.cancel())},this.onOther=o=>{this.state&&o.pointerId!==this.state.pointer&&this.cancel()},this.onBlur=()=>this.cancel(),this.onScroll=()=>{this.state&&!this.state.active&&this.stop()},e.addEventListener("pointerdown",o=>this.start(o))}start(t){if(t.button!==0||this.state)return;let e=this.view.state,n=v(e.doc),i=e.selection,o=Math.min(this.index(),n.length-1),r=i instanceof C&&n[o].at>=i.from&&n[o].end<=i.to,{lo:c,hi:d}=r?i.span(e.doc):I(n,o,o);if(this.state={index:o,span:R(n,c,d),touch:t.pointerType==="touch",pointer:t.pointerId,x0:t.clientX,y0:t.clientY,x:t.clientX,y:t.clientY,hold:0,active:!1,raf:0,gap:void 0,targets:[],target:null},this.grip.setPointerCapture?.(t.pointerId),this.grip.addEventListener("pointermove",this.onMove),this.grip.addEventListener("pointerup",this.onUp),this.grip.addEventListener("pointercancel",this.onCancel),this.grip.addEventListener("lostpointercapture",this.onCancel),this.state.touch){let h=this.state;h.hold=setTimeout(()=>this.held(h),tt),window.addEventListener("pointerdown",this.onOther,!0),window.addEventListener("blur",this.onBlur),window.addEventListener("scroll",this.onScroll,!0)}t.preventDefault()}held(t){if(!(this.state!==t||t.active)){if(t.hold=0,Math.hypot(t.x-t.x0,t.y-t.y0)>V||!this.view.editable)return this.stop();this.begin()}}move(t){let e=this.state;if(!(!e||t.pointerId!==e.pointer)){if(e.x=t.clientX,e.y=t.clientY,e.touch&&!this.view.editable)return e.active?this.cancel():this.stop();if(!e.active){let n=Math.hypot(e.x-e.x0,e.y-e.y0);if(e.touch){n>V&&this.stop();return}if(n<=Z)return;this.begin()}this.track()}}begin(){let t=this.state;if(!t||t.active)return;let e=this.view.state,n=v(e.doc),i=x(n,t.span);if(!i)return this.cancel();t.active=!0,this.view.dispatch(e.tr.setSelection(X(e.doc,i.lo,i.hi))),this.shell.classList.add("is-dragging");let o=this.shell.appendChild(document.createElement("div"));o.style.cssText="position:absolute;visibility:hidden;width:var(--page-indent)",this.indentPx=o.getBoundingClientRect().width||27,o.remove(),this.scroller=et(this.view.dom),window.addEventListener("keydown",this.onKey,!0),this.loop(),this.track()}track(){let t=this.state,e=this.view,n=e.state;if(!t)return;let i=v(n.doc),o=x(i,t.span);if(!o)return this.cancel();let{lo:r,hi:c}=o,d=nt(i,e),h=it(d,t.y),a=-1,l=null,p=null,E=h<0?d.length:h+1;for(let k=Math.max(0,E-2);k<E;k++){let g=d[k].dom.getBoundingClientRect();t.y>=g.top+g.height/4&&t.y<=g.bottom-g.height/4&&(p={i:d[k].i,bottom:g.bottom}),l=g.bottom+2}h>=0&&(a=d[h].i,l=d[h].dom.getBoundingClientRect().top-2);let f=r<0?null:p&&q(n,i,r,c,p.i),u=f?`summary:${p.i}`:a;(u!==t.gap||n.doc!==t.doc)&&(t.gap=u,t.doc=n.doc,t.targets=r<0?[]:f?[f]:U(n,i,r,c,a)),f&&(l=p.bottom+2);let m=e.dom.getBoundingClientRect().left;t.target=z(t.targets,(t.x-m)/this.indentPx);let T=this.shell.getBoundingClientRect();if(!t.target||l===null){this.line.hidden=!0,this.shell.dataset.drop="none";return}this.shell.dataset.drop="ok",this.line.hidden=!1,this.line.style.setProperty("--page-drop-y",`${l-T.top}px`),this.line.style.setProperty("--page-drop-x",`${m-T.left+t.target.depth*this.indentPx}px`),this.line.style.setProperty("--page-drop-w",`${e.dom.getBoundingClientRect().right-m-t.target.depth*this.indentPx}px`)}loop(){let t=()=>{let e=this.state;if(!e?.active)return;if(e.touch&&!this.view.editable)return this.cancel();let n=this.scroller,i=n===n.ownerDocument.scrollingElement?{top:0,bottom:window.innerHeight}:n.getBoundingClientRect(),o=0;e.y<i.top+b?o=-W*Math.min(1,(i.top+b-e.y)/b):e.y>i.bottom-b&&(o=W*Math.min(1,(e.y-(i.bottom-b))/b)),o&&(n.scrollTop+=o,this.track()),e.raf=requestAnimationFrame(t)};this.state.raf=requestAnimationFrame(t)}end(t){let e=this.state;if(!e||t.pointerId!==e.pointer)return;if(!e.active){if(this.stop(),t.type==="pointerup"){let l=v(this.view.state.doc),p=x(l,e.span);p&&this.onClick(p.lo)}return}if(this.track(),this.state!==e)return;let n=e.target,i=this.view.state,o=v(i.doc),r=x(o,e.span);if(this.stop(),!n||!r)return;let{lo:c,hi:d}=r;if(!n.open&&(n.at===o[c].at||n.at===o[d].end)&&n.parent===(o[c].node.attrs.parent??null)&&(o[c].node.type.name!=="list_item"||n.indent===o[c].node.attrs.indent))return;if(this.view.dispatch(H(P(i,o,c,d,n)).scrollIntoView()),this.view.state.doc===i.doc)return M(this.view,"Move cancelled");let a=d-c+1;M(this.view,`Moved ${a} ${a===1?"block":"blocks"}`),this.view.focus()}cancel(){this.stop(),M(this.view,"Move cancelled")}stop(){let t=this.state;t&&(this.state=null,clearTimeout(t.hold),cancelAnimationFrame(t.raf),this.grip.removeEventListener("pointermove",this.onMove),this.grip.removeEventListener("pointerup",this.onUp),this.grip.removeEventListener("pointercancel",this.onCancel),this.grip.removeEventListener("lostpointercapture",this.onCancel),this.grip.releasePointerCapture?.(t.pointer),window.removeEventListener("pointerdown",this.onOther,!0),window.removeEventListener("blur",this.onBlur),window.removeEventListener("scroll",this.onScroll,!0),window.removeEventListener("keydown",this.onKey,!0),this.shell.classList.remove("is-dragging"),delete this.shell.dataset.drop,this.line.hidden=!0)}destroy(){this.stop(),this.line.remove()}};export{v as a,et as b,G as c};
@@ -1 +0,0 @@
1
- import{b as T}from"./c-LKSL4AUJ.js";import{a as R}from"./c-I2SCCUEW.js";import{c as G,d as h,e as M,f as _,i as N}from"./c-EK63G3CG.js";import"./c-VHNSBD2M.js";var U="page-format-command",b="This document uses a newer page format; update the editor in the other tabs to keep writing",D=s=>({status:"upgrade-required",code:h,required:s,minimum:s,message:b});function J({host:s,capability:A=1,supported:O=()=>!0,installed:y=()=>null,revision:w=()=>null,lane:E=null}={}){if(!s||typeof s.activate!="function")throw new TypeError("format-gate: a host adapter is required");let t=0,f=null,l=!1,o=null,d=!1,g=Promise.resolve(!1),c=null,i=!1;function p(e){return t=Math.max(t,M(e)),N(t),t>=1&&P(),t}function P(){return d||i||(d=!0,l=!0,g=m(null)),g}async function F(){try{let e=await s.read();p(e?.floor??_(e?.html))}catch{}return t}async function S(){try{let e=await s.capabilities();return Array.isArray(e)?e:[]}catch{return[]}}async function k(){try{return await O()!==!1}catch{return!1}}async function q(){if(i)return{status:"disposed",retry:!1};if(!await k())return{status:"unsupported-host",code:"page-format-unsupported",extension:G};if(await F(),t>=1)return await P(),{status:"active",floor:t};let e=await S(),a=T({floor:t,required:1,capability:A,admitted:e});if(!a.ok)return D(a.minimum);let u={revision:w(),installed:y()},n;try{n=await s.activate({floor:1,capability:A,revision:u.revision,installed:u.installed})}catch(x){return{status:"failed",code:"page-format-activation-failed",error:x,retry:!0}}return!n||n.accepted!==!0?n?.code===h?D(1):{status:"failed",code:n?.code??"page-format-activation-failed",retry:!0}:i?(d=!0,p(1),{status:"disposed",retry:!1}):(d=!0,p(1),l=!0,o=n.receipt??null,await m(o),{status:"active",floor:t,receipt:o})}async function m(e){if(!E||!l)return!1;if(c)return c;let a=e??o;c=(async()=>{try{let u=await E.switchScope(1,{covered:!!a,receipt:a});if(u&&(u.status==="switched"||u.status==="already"))return l=!1,o=null,!0}catch{}return!1})();try{return await c}finally{c=null}}function v(){return i?Promise.resolve({status:"disposed",retry:!1}):t>=1?m(null).then(()=>({status:"active",floor:t})):(f||(f=q().finally(()=>{f=null})),f)}return{get floor(){return t},get disposed(){return i},note:p,read:F,activate:v,async run(e){let a={revision:w(),installed:y()},u=R({id:U,isPending:()=>!0});try{let n=await v();return n.status!=="active"?n:i?{status:"disposed",retry:!1}:w()!==a.revision||y()!==a.installed?{status:"retry",code:"format-gate-stale",retry:!0}:{status:"applied",floor:t,result:await e?.apply?.(a)}}finally{u.dispose()}},async retry(){return i?{status:"disposed",retry:!1}:await m(null)?{status:"active",floor:t}:v()},dispose(){return i=!0,l=!1,o=null,{status:"disposed"}}}}export{J as createFormatGate};
@@ -1 +0,0 @@
1
- var f="X-Clay-Page-Format";var p="clay-page-format",u="page-format-v1",m="page-format-upgrade-required",o=e=>Number.isSafeInteger(e)&&e>0?e:0,s=e=>/<meta\b[^>]*\bname\s*=\s*["']?clay-page-format["']?[^>]*>/i.exec(e);function P(e){return typeof e=="number"?o(e):typeof e!="string"||!/^\s*\d+\s*$/.test(e)?0:o(Number(e))}function x(e){if(typeof e!="string")return 0;let n=s(e);if(!n)return 0;let t=/\bcontent\s*=\s*["']?(\d+)/i.exec(n[0]);return t?o(Number(t[1])):0}function _(e,n){let t=o(n);if(typeof e!="string"||!t)return e;let r=s(e);if(r&&x(r[0])===t)return e;let i=`<meta name="${p}" content="${t}">`;if(r)return e.slice(0,r.index)+i+e.slice(r.index+r[0].length);let c=/<\/head\s*>/i.exec(e)||/<body\b/i.exec(e);return c?e.slice(0,c.index)+i+e.slice(c.index):i+e}var a=0,R=()=>a;function T(e){return a=Math.max(a,o(e)),a}export{f as a,p as b,u as c,m as d,P as e,x as f,_ as g,R as h,T as i};
@@ -1 +0,0 @@
1
- import"./c-LKSL4AUJ.js";import{b as s,d as c,f as p,h as l}from"./c-EK63G3CG.js";import{f as i}from"./c-XGH4GS2T.js";import"./c-3O7OBDCM.js";import"./c-BPF2NSPV.js";import"./c-P7KNDG34.js";import"./c-CYWLPPUS.js";import"./c-N7JPUPGC.js";import"./c-HA6INT6J.js";import"./c-WRBKEJD4.js";import"./c-VHNSBD2M.js";var u="page-format-activation-failed";function d(){let e=document.querySelector(`meta[name="${s}"]`);return e?p(e.outerHTML):0}var F=async e=>(await import("./core/save-ESPSQPLV.js")).savePageForce(()=>{},e),P=4,g=1e4,f=e=>e?.ok===!1&&e?.msgType==="skipped"&&/in progress/i.test(e?.msg??""),w=async()=>{let{isSaveInProgress:e}=await import("./core/save-core-6SQHOR6W.js"),r=Date.now()+g;for(;e()&&Date.now()<r;)await new Promise(n=>setTimeout(n,50))};function v({save:e=F,settles:r=w,supported:n=()=>i().then(a=>a===1)}={}){return{read(){return{floor:Math.max(l(),d()),revision:null}},capabilities(){return[]},supported:n,async activate({floor:a=1}={}){let t;try{t=await e({pageFormatFloor:a});for(let o=1;o<P&&f(t);o+=1)await r(),t=await e({pageFormatFloor:a})}catch(o){return{accepted:!1,code:o?.code??u}}return t?.ok?{accepted:!0,revision:null,receipt:t.receipt??t.etag??null}:t?.code===c?{accepted:!1,code:c}:{accepted:!1,code:t?.code??u}}}}export{v as createFormatHost};