@panphora/clayjs 1.15.2 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (551) hide show
  1. package/README.md +4 -5
  2. package/THIRD-PARTY-NOTICES.md +16 -0
  3. package/compat/highlight-11.9.0.min.js +1213 -0
  4. package/compat/highlight-LICENSE +29 -0
  5. package/compat/journal-assets.lock.json +22 -0
  6. package/compat/overtype-2.6.1.min.js +116 -0
  7. package/compat/overtype-LICENSE +21 -0
  8. package/dist/all.js +90 -0
  9. package/dist/clay-dom.js +84 -0
  10. package/dist/clay-events.js +103 -0
  11. package/dist/clay-internals.js +85 -0
  12. package/dist/clay-options.js +93 -0
  13. package/dist/clay-router.js +98 -0
  14. package/dist/clay-ui.js +95 -0
  15. package/dist/clay-utils.js +84 -0
  16. package/dist/clay.js +146 -0
  17. package/dist/clay.standalone.js +84291 -57611
  18. package/dist/m/attrs/add-from-T5LJXFFI.js +1 -0
  19. package/dist/m/attrs/onaftersave-OKSWEJQF.js +1 -0
  20. package/dist/m/attrs/refetch-on-save-ZUE7PSCI.js +1 -0
  21. package/dist/m/attrs/save-freeze-MYNVXREN.js +1 -0
  22. package/dist/m/c-2AZDZWCK.js +1 -0
  23. package/dist/m/c-2SPVQSHC.js +1 -0
  24. package/dist/m/c-2YYDMLNZ.js +1 -0
  25. package/dist/m/c-336SGU5W.js +1 -0
  26. package/dist/m/c-33JJ6CBX.js +2 -0
  27. package/dist/m/c-3GJ4SDE2.js +1 -0
  28. package/dist/m/c-3H6BZDNJ.js +6 -0
  29. package/dist/m/c-3OWDMNJR.js +2 -0
  30. package/dist/m/c-3RUU4TPX.js +91 -0
  31. package/dist/m/c-3XIRD4NU.js +1 -0
  32. package/dist/m/c-46XYM55L.js +1 -0
  33. package/dist/m/c-4DFEJ2PO.js +3 -0
  34. package/dist/m/c-4JZDZFF6.js +1 -0
  35. package/dist/m/c-4L3BTFRK.js +1 -0
  36. package/dist/m/c-4Q2XTQ2N.js +2 -0
  37. package/dist/m/c-4WKFKEKF.js +1 -0
  38. package/dist/m/c-56QRZTZH.js +1 -0
  39. package/dist/m/c-5J4E7O4Y.js +4 -0
  40. package/dist/m/c-5LKDWQTL.js +19 -0
  41. package/dist/m/c-5QWQ7A5L.js +1 -0
  42. package/dist/m/c-5RJFTLSF.js +1 -0
  43. package/dist/m/c-5V3MOVJT.js +1 -0
  44. package/dist/m/c-5VYOWDTI.js +1 -0
  45. package/dist/m/c-5YIHJ3TJ.js +1 -0
  46. package/dist/m/c-6AZOGAPE.js +1 -0
  47. package/dist/m/c-6CRUUXOX.js +5 -0
  48. package/dist/m/c-6HMB24EV.js +1 -0
  49. package/dist/m/c-6KEVEQ7L.js +1 -0
  50. package/dist/m/c-6NC5I2TV.js +1 -0
  51. package/dist/m/c-74MGYWZF.js +1 -0
  52. package/dist/m/c-7DJDKPGL.js +1 -0
  53. package/dist/m/c-7OLLJPWP.js +1 -0
  54. package/dist/m/c-7SWMYKAI.js +1 -0
  55. package/dist/m/c-A3E3NIMC.js +1 -0
  56. package/dist/m/c-A7LS5UZW.js +1 -0
  57. package/dist/m/c-AMSNPOCX.js +1 -0
  58. package/dist/m/c-AQLFEATB.js +1 -0
  59. package/dist/m/c-B3JM5ZXC.js +1 -0
  60. package/dist/m/c-BBVGTQG7.js +1 -0
  61. package/dist/m/c-BPF2NSPV.js +1 -0
  62. package/dist/m/c-BQ6LOBEE.js +1 -0
  63. package/dist/m/c-BTDI4Y23.js +1 -0
  64. package/dist/m/c-BWFVSBDF.js +1 -0
  65. package/dist/m/c-BYTKL6UX.js +1 -0
  66. package/dist/m/c-CFHW5AMY.js +6 -0
  67. package/dist/m/c-CJ3A7ZKE.js +1 -0
  68. package/dist/m/c-CQHPGKX2.js +1 -0
  69. package/dist/m/c-CYWLPPUS.js +1 -0
  70. package/dist/m/c-CZUSOB7V.js +1 -0
  71. package/dist/m/c-DCFSEJZG.js +1 -0
  72. package/dist/m/c-DCXOXBF3.js +1 -0
  73. package/dist/m/c-DFS4XZJV.js +2 -0
  74. package/dist/m/c-DNENWY4O.js +1 -0
  75. package/dist/m/c-DNZ5IFM6.js +1 -0
  76. package/dist/m/c-E4LIR5X5.js +1 -0
  77. package/dist/m/c-EJTGYSLN.js +1 -0
  78. package/dist/m/c-EVCQ3BKA.js +1 -0
  79. package/dist/m/c-EZU56NQV.js +34 -0
  80. package/dist/m/c-FDNHHZY5.js +1 -0
  81. package/dist/m/c-FILLTJA7.js +1 -0
  82. package/dist/m/c-FRLHSY7E.js +1 -0
  83. package/dist/m/c-FROJUZMV.js +1 -0
  84. package/dist/m/c-G2JPKCTP.js +1 -0
  85. package/dist/m/c-GB6TU7WV.js +1 -0
  86. package/dist/m/c-GFJJEBTU.js +1 -0
  87. package/dist/m/c-GJAEGGXY.js +1 -0
  88. package/dist/m/c-GOWBDM6J.js +1 -0
  89. package/dist/m/c-GQ6F6IDK.js +1 -0
  90. package/dist/m/c-GSFIGKOP.js +1 -0
  91. package/dist/m/c-GY422N3Q.js +1 -0
  92. package/dist/m/c-H4LG442Q.js +1 -0
  93. package/dist/m/c-HA6INT6J.js +1 -0
  94. package/dist/m/c-HAWFNBYG.js +1 -0
  95. package/dist/m/c-HDDEEL77.js +1 -0
  96. package/dist/m/c-HFKUVACH.js +1 -0
  97. package/dist/m/c-HHDFCNHV.js +1 -0
  98. package/dist/m/c-HPURYVZS.js +2 -0
  99. package/dist/m/c-I2ZATQCD.js +2 -0
  100. package/dist/m/c-IEM4NTCS.js +1 -0
  101. package/dist/m/c-IJUK2GPW.js +1 -0
  102. package/dist/m/c-IW6GGOU2.js +1 -0
  103. package/dist/m/c-JAX2667S.js +6 -0
  104. package/dist/m/c-JDCX26UP.js +25 -0
  105. package/dist/m/c-JRKY44DK.js +1 -0
  106. package/dist/m/c-JU3NK25H.js +1 -0
  107. package/dist/m/c-KAU6E43D.js +1 -0
  108. package/dist/m/c-KBS3UV6B.js +1 -0
  109. package/dist/m/c-KGVGROZT.js +1 -0
  110. package/dist/m/c-KI7M4AY3.js +1 -0
  111. package/dist/m/c-KIPQJX4B.js +1 -0
  112. package/dist/m/c-KQ6TYJAP.js +135 -0
  113. package/dist/m/c-KU3ZFADW.js +1 -0
  114. package/dist/m/c-L4WQSC27.js +1 -0
  115. package/dist/m/c-LFPHCXY3.js +1 -0
  116. package/dist/m/c-LRPUO2MX.js +1 -0
  117. package/dist/m/c-LWLBHLVC.js +3 -0
  118. package/dist/m/c-LZJPNR2W.js +1 -0
  119. package/dist/m/c-M2L47S2X.js +7 -0
  120. package/dist/m/c-MFP2ZWD4.js +1 -0
  121. package/dist/m/c-MKSQ4Y57.js +1 -0
  122. package/dist/m/c-MTQHWQC3.js +1 -0
  123. package/dist/m/c-N326R2JD.js +1 -0
  124. package/dist/m/c-N7JPUPGC.js +1 -0
  125. package/dist/m/c-NRPJEVJS.js +1 -0
  126. package/dist/m/c-NUFFJVVJ.js +1 -0
  127. package/dist/m/c-NUHP2XDB.js +1 -0
  128. package/dist/m/c-NUHSPT5P.js +1 -0
  129. package/dist/m/c-O72HVYSA.js +1 -0
  130. package/dist/m/c-OCSZ4QGN.js +1 -0
  131. package/dist/m/c-OIBUTDXI.js +1 -0
  132. package/dist/m/c-OIDRZKAF.js +1 -0
  133. package/dist/m/c-OW5QIGG3.js +1 -0
  134. package/dist/m/c-P7KNDG34.js +1 -0
  135. package/dist/m/c-PGRCK73F.js +1 -0
  136. package/dist/m/c-PQ5LK6QE.js +993 -0
  137. package/dist/m/c-PS5ARVWR.js +9 -0
  138. package/dist/m/c-PZ4XEPUP.js +2 -0
  139. package/dist/m/c-Q622NS2Y.js +1 -0
  140. package/dist/m/c-Q7NQD65V.js +1 -0
  141. package/dist/m/c-QH63LQOS.js +1 -0
  142. package/dist/m/c-QHIWXHRO.js +1 -0
  143. package/dist/m/c-QHWJ5ZIJ.js +1 -0
  144. package/dist/m/c-QICP2YR5.js +1 -0
  145. package/dist/m/c-QJ4OM3G6.js +1 -0
  146. package/dist/m/c-QNKREOL6.js +1 -0
  147. package/dist/m/c-R3L7ZJGB.js +2 -0
  148. package/dist/m/c-R7IWVINQ.js +1 -0
  149. package/dist/m/c-RM7J7BV2.js +1 -0
  150. package/dist/m/c-RSMOODDU.js +1 -0
  151. package/dist/m/c-RVMWGXEJ.js +1 -0
  152. package/dist/m/c-RYUXUUBX.js +1 -0
  153. package/dist/m/c-S4ZEH46B.js +9 -0
  154. package/dist/m/c-S7H2DRCB.js +1 -0
  155. package/dist/m/c-S7LK4KUE.js +1 -0
  156. package/dist/m/c-SDAXDM2D.js +1 -0
  157. package/dist/m/c-SGIA4IEQ.js +188 -0
  158. package/dist/m/c-SMBZG5X4.js +1 -0
  159. package/dist/m/c-SMGU7RT3.js +235 -0
  160. package/dist/m/c-SPIORRYS.js +1 -0
  161. package/dist/m/c-SWLRT66R.js +1 -0
  162. package/dist/m/c-SZGYW5HT.js +1 -0
  163. package/dist/m/c-TCCA5BZN.js +2 -0
  164. package/dist/m/c-TCJTVAFN.js +1 -0
  165. package/dist/m/c-TJ6WOJL3.js +67 -0
  166. package/dist/m/c-TQEMVJCS.js +1 -0
  167. package/dist/m/c-TRS6TM6O.js +1 -0
  168. package/dist/m/c-TYLXX4NF.js +21 -0
  169. package/dist/m/c-U62OB4BT.js +1 -0
  170. package/dist/m/c-U6YWUAR3.js +8 -0
  171. package/dist/m/c-UDCSU5G5.js +2 -0
  172. package/dist/m/c-UDUUJPFZ.js +1 -0
  173. package/dist/m/c-UGHH4MB3.js +1 -0
  174. package/dist/m/c-UL2YUY52.js +1 -0
  175. package/dist/m/c-VAK7SG37.js +1 -0
  176. package/dist/m/c-VDSS4K3Z.js +1 -0
  177. package/dist/m/c-VE6ZMYMC.js +1 -0
  178. package/dist/m/c-VG5XIN4T.js +1 -0
  179. package/dist/m/c-VHM5XQHK.js +1 -0
  180. package/dist/m/c-VHNSBD2M.js +1 -0
  181. package/dist/m/c-VI5RMSVY.js +1 -0
  182. package/dist/m/c-VKEDWYDF.js +1 -0
  183. package/dist/m/c-VRZN56XY.js +1 -0
  184. package/dist/m/c-W5MCHEGA.js +1 -0
  185. package/dist/m/c-WDC5GVKU.js +1 -0
  186. package/dist/m/c-WN5AY3OZ.js +1 -0
  187. package/dist/m/c-WNYBLIOZ.js +1 -0
  188. package/dist/m/c-WRBKEJD4.js +1 -0
  189. package/dist/m/c-WWXIDH4O.js +28 -0
  190. package/dist/m/c-WYFDLITL.js +1 -0
  191. package/dist/m/c-XCNTK76U.js +1 -0
  192. package/dist/m/c-XMS6DPBR.js +1 -0
  193. package/dist/m/c-XN6MBKI6.js +67 -0
  194. package/dist/m/c-XPELB6E5.js +1 -0
  195. package/dist/m/c-XQXZAO7N.js +1 -0
  196. package/dist/m/c-Y5HBBIQ4.js +1 -0
  197. package/dist/m/c-ZE46QDIH.js +1 -0
  198. package/dist/m/c-ZUCOKOHT.js +1 -0
  199. package/dist/m/c-ZVPVXTJF.js +4 -0
  200. package/dist/m/c-ZVRKXKM7.js +1 -0
  201. package/dist/m/c-ZWIOJGMT.js +1 -0
  202. package/dist/m/core/admin-attrs-QHOKPJ7W.js +1 -0
  203. package/dist/m/core/autosave-HRYGUWV6.js +1 -0
  204. package/dist/m/core/conflict-notice-6MROJN2L.js +1 -0
  205. package/dist/m/core/draft-mode-WSQAT67S.js +1 -0
  206. package/dist/m/core/host-permission-FNXVEFNE.js +1 -0
  207. package/dist/m/core/is-edit-mode-KTWA3O5N.js +1 -0
  208. package/dist/m/core/persist-JFYRHMRJ.js +3 -0
  209. package/dist/m/core/recovery-FLTCC2OC.js +1 -0
  210. package/dist/m/core/save-HQZ4S667.js +1 -0
  211. package/dist/m/core/save-core-KGQWFUNH.js +1 -0
  212. package/dist/m/core/snapshot-EGQZNT45.js +1 -0
  213. package/dist/m/core/unsaved-warning-IDJLD66H.js +1 -0
  214. package/dist/m/dom/all-APS5ZSKP.js +1 -0
  215. package/dist/m/dom/dom-helpers-L7OSR6S4.js +1 -0
  216. package/dist/m/events/index-RN2JNGBV.js +1 -0
  217. package/dist/m/internals/index-PVXGPUDA.js +1 -0
  218. package/dist/m/lib/cache-bust-MUMFXZK6.js +1 -0
  219. package/dist/m/lib/region-policy-SB2AWVG5.js +1 -0
  220. package/dist/m/loader-S4I7GKXR.js +1 -0
  221. package/dist/m/manifest-4C419D67.js +1 -0
  222. package/dist/m/manifest-edit-B077F288.js +1 -0
  223. package/dist/m/manifest.json +3988 -0
  224. package/dist/m/options/options-EJMS3K24.js +1 -0
  225. package/dist/m/page/editor-NNJA4OKD.js +202 -0
  226. package/dist/m/plugins/ai-edit-QN4PMMNL.js +6 -0
  227. package/dist/m/plugins/bind-text-NX46N5UV.js +1 -0
  228. package/dist/m/plugins/cms-HP3LSTPN.js +2293 -0
  229. package/dist/m/plugins/demo-RM5IR6AO.js +1 -0
  230. package/dist/m/plugins/derive-UAAA4V4S.js +1 -0
  231. package/dist/m/plugins/indicator-URDBBOQO.js +1 -0
  232. package/dist/m/plugins/live-HFWD4OIH.js +1 -0
  233. package/dist/m/plugins/menu-3HIEQSI6.js +138 -0
  234. package/dist/m/plugins/message-LQ6EDH4V.js +1 -0
  235. package/dist/m/plugins/page-JOKB6XPR.js +2 -0
  236. package/dist/m/plugins/page-view-NXOJHNW6.js +1 -0
  237. package/dist/m/plugins/people-SGPJKANK.js +1 -0
  238. package/dist/m/plugins/quickcrop-QNY3PKLD.js +26 -0
  239. package/dist/m/plugins/quickcrop-QNY3PKLD.js.LEGAL.txt +7 -0
  240. package/dist/m/plugins/richclay-NRQDSWX6.js +517 -0
  241. package/dist/m/plugins/richclay-NRQDSWX6.js.LEGAL.txt +1 -0
  242. package/dist/m/plugins/sortable-GWT4PWDV.js +1 -0
  243. package/dist/m/plugins/source-4ZRSAIYM.js +1 -0
  244. package/dist/m/plugins/undo-VDA5P7FH.js +1 -0
  245. package/dist/m/plugins/unsent-HJFLQJ2O.js +1 -0
  246. package/dist/m/plugins/upgrade-W7FG5VFG.js +1 -0
  247. package/dist/m/plugins/upload-WLYKK6TL.js +1 -0
  248. package/dist/m/plugins/visitor-drafts-LIDY7NH6.js +21 -0
  249. package/dist/m/plugins/visitor-drafts-owner-ZXCKBZE7.js +1 -0
  250. package/dist/m/plugins/wire-4N6GYAF6.js +1 -0
  251. package/dist/m/reader-core-DXYCURFF.js +68 -0
  252. package/dist/m/route/route-KOCZSEGN.js +1 -0
  253. package/dist/m/sync/live-sync-J7VMYTKS.js +1 -0
  254. package/dist/m/ui/index-3JLVI27O.js +1 -0
  255. package/dist/m/utils/index-4TJCVLT7.js +1 -0
  256. package/dist/m/vendor/Sortable.vendor-A755ITLN.js +3 -0
  257. package/dist/m/vendor/Sortable.vendor-A755ITLN.js.LEGAL.txt +1 -0
  258. package/dist/m/vendor/sap-core.vendor-A7BMUYZT.js +6 -0
  259. package/dist/offline-manifest.json +4034 -0
  260. package/dist/page/themes/light-1.css +430 -0
  261. package/dist/server/core.cjs +23748 -22855
  262. package/dist/server/offline-runtime.cjs +4954 -0
  263. package/dist/server/offline-runtime.mjs +4923 -0
  264. package/dist/server/rooms.mjs +9 -0
  265. package/docs/guide.md +1078 -669
  266. package/entries/all.js +2 -0
  267. package/entries/clay-data.js +1 -1
  268. package/entries/clay-dom.js +2 -0
  269. package/entries/clay-events.js +2 -0
  270. package/entries/clay-internals.js +2 -0
  271. package/entries/clay-options.js +2 -0
  272. package/entries/clay-router.js +2 -0
  273. package/entries/clay-ui.js +2 -0
  274. package/entries/clay-utils.js +2 -0
  275. package/entries/clay.js +2 -0
  276. package/entries/sap.js +6 -6
  277. package/fonts/ibm-plex-mono-LICENSE +93 -0
  278. package/fonts/ibm-plex-mono-latin-300-normal.woff2 +0 -0
  279. package/fonts/ibm-plex-mono-latin-400-italic.woff2 +0 -0
  280. package/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
  281. package/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
  282. package/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
  283. package/fonts/ibm-plex-sans-LICENSE +93 -0
  284. package/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
  285. package/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
  286. package/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
  287. package/fonts/ibm-plex.css +71 -0
  288. package/fonts/inter-LICENSE +93 -0
  289. package/fonts/inter-cyrillic-ext-wght-normal.woff2 +0 -0
  290. package/fonts/inter-cyrillic-wght-normal.woff2 +0 -0
  291. package/fonts/inter-greek-ext-wght-normal.woff2 +0 -0
  292. package/fonts/inter-greek-wght-normal.woff2 +0 -0
  293. package/fonts/inter-latin-ext-wght-normal.woff2 +0 -0
  294. package/fonts/inter-latin-wght-normal.woff2 +0 -0
  295. package/fonts/inter-vietnamese-wght-normal.woff2 +0 -0
  296. package/fonts/inter.css +62 -0
  297. package/fonts/newsreader-LICENSE +93 -0
  298. package/fonts/newsreader-latin-ext-opsz-normal.woff2 +0 -0
  299. package/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
  300. package/fonts/newsreader-vietnamese-opsz-normal.woff2 +0 -0
  301. package/fonts/newsreader.css +26 -0
  302. package/fonts/work-sans-LICENSE +93 -0
  303. package/fonts/work-sans-latin-wght-normal.woff2 +0 -0
  304. package/fonts/work-sans.css +8 -0
  305. package/package.json +20 -3
  306. package/packed-contract.json +1 -0
  307. package/src/attrs/add-from.js +27 -4
  308. package/src/attrs/save-freeze.js +7 -52
  309. package/src/core/admin-attrs.js +119 -12
  310. package/src/core/admin-contenteditable.js +12 -10
  311. package/src/core/admin-inputs.js +14 -15
  312. package/src/core/admin-onclick.js +2 -0
  313. package/src/core/autosave.js +74 -21
  314. package/src/core/boot-phase.js +2 -1
  315. package/src/core/conflict-download.js +19 -23
  316. package/src/core/conflict-notice-ui.js +1173 -0
  317. package/src/core/conflict-notice.js +140 -697
  318. package/src/core/download.js +32 -0
  319. package/src/core/edit-mode.js +147 -14
  320. package/src/core/etag.js +30 -12
  321. package/src/core/host-meta.js +90 -8
  322. package/src/core/host-permission.js +29 -0
  323. package/src/core/is-edit-mode.js +145 -12
  324. package/src/core/mode-key.js +125 -0
  325. package/src/core/mode-lifecycle.js +544 -0
  326. package/src/core/mode-receipt.js +30 -0
  327. package/src/core/mode-refusal.js +13 -0
  328. package/src/core/mode-resources.js +52 -0
  329. package/src/core/mode-support.js +82 -0
  330. package/src/core/mode-switch.js +259 -0
  331. package/src/core/mode-transition.js +112 -0
  332. package/src/core/page-data-write.js +305 -0
  333. package/src/core/page-data.js +26 -227
  334. package/src/core/page-format-wire.js +4 -0
  335. package/src/core/page-format.js +58 -0
  336. package/src/core/persist.js +37 -9
  337. package/src/core/preserve-authored.js +114 -0
  338. package/src/core/recovery.js +772 -0
  339. package/src/core/runtime-url.js +105 -0
  340. package/src/core/save-core.js +113 -12
  341. package/src/core/save-replace.js +72 -0
  342. package/src/core/save-size-notice.js +134 -0
  343. package/src/core/save-size.js +140 -0
  344. package/src/core/save.js +806 -119
  345. package/src/core/snapshot.js +159 -11
  346. package/src/core/source-map.js +157 -9
  347. package/src/core/unsaved-warning.js +14 -4
  348. package/src/core/upgrade-run.js +408 -0
  349. package/src/core/version.js +18 -0
  350. package/src/lib/assets.js +30 -0
  351. package/src/lib/autosave-debug-gate.js +50 -0
  352. package/src/lib/autosave-scheduler.js +140 -0
  353. package/src/lib/boot-imports.js +8 -0
  354. package/src/lib/derived.js +3 -1
  355. package/src/lib/dirty-gate.js +15 -0
  356. package/src/lib/doc-storage.js +33 -0
  357. package/src/lib/effect.js +9 -4
  358. package/src/lib/mutation.js +4 -2
  359. package/src/lib/offline-runtime.js +226 -0
  360. package/src/lib/preload.js +48 -0
  361. package/src/lib/root-attrs.js +1 -1
  362. package/src/lib/trash.js +18 -0
  363. package/src/lib/undo/capture-move.js +152 -0
  364. package/src/live/local-channel.js +61 -0
  365. package/src/live/local-lane.js +60 -9
  366. package/src/live/server-lane.js +6 -3
  367. package/src/loader-logic.js +76 -15
  368. package/src/loader.js +218 -30
  369. package/src/page/adopt-boot.js +76 -22
  370. package/src/page/adopt.js +25 -4
  371. package/src/page/awareness.js +230 -0
  372. package/src/page/blocks.js +113 -6
  373. package/src/page/blocksel.js +20 -4
  374. package/src/page/board-face.js +13 -0
  375. package/src/page/board-panel.js +5 -17
  376. package/src/page/board-style.js +2 -13
  377. package/src/page/board-view.js +1 -11
  378. package/src/page/board-views.js +3 -0
  379. package/src/page/board.js +2 -2
  380. package/src/page/boot-pack.js +26 -0
  381. package/src/page/boot.js +237 -0
  382. package/src/page/chart-tables.js +11 -0
  383. package/src/page/chart.js +6 -10
  384. package/src/page/checklist.js +1 -1
  385. package/src/page/checkpoint-proof.js +289 -0
  386. package/src/page/chrome.js +431 -63
  387. package/src/page/csv-import.js +17 -2
  388. package/src/page/document-title-dom.js +52 -0
  389. package/src/page/document-title-runtime.js +90 -0
  390. package/src/page/document-title.js +12 -0
  391. package/src/page/drag.js +48 -13
  392. package/src/page/drop.js +2 -1
  393. package/src/page/editor.js +399 -90
  394. package/src/page/emoji-data.js +162 -0
  395. package/src/page/feature-loader.js +72 -0
  396. package/src/page/features/board.js +21 -0
  397. package/src/page/features/chart.js +11 -0
  398. package/src/page/features/code.js +13 -0
  399. package/src/page/features/dates.js +180 -0
  400. package/src/page/features/emoji.js +187 -0
  401. package/src/page/features/media.js +290 -0
  402. package/src/page/features/mentions.js +188 -0
  403. package/src/page/features/registry.js +28 -0
  404. package/src/page/features/table.js +383 -0
  405. package/src/page/{tool-view.js → features/tool.js} +33 -2
  406. package/src/page/format-codec.js +215 -0
  407. package/src/page/format-command.js +9 -0
  408. package/src/page/format-gate.js +179 -0
  409. package/src/page/format-host.js +54 -0
  410. package/src/page/format-level.js +157 -0
  411. package/src/page/format-native-commands.js +142 -0
  412. package/src/page/format-native.js +42 -0
  413. package/src/page/highlight-slot.js +23 -0
  414. package/src/page/highlight.js +30 -16
  415. package/src/page/history-intent.js +78 -0
  416. package/src/page/inline.js +45 -28
  417. package/src/page/items.js +67 -14
  418. package/src/page/link.js +1 -0
  419. package/src/page/markdown.js +112 -3
  420. package/src/page/media-views.js +3 -0
  421. package/src/page/media.js +33 -245
  422. package/src/page/mention-picker.js +99 -0
  423. package/src/page/merge.js +1 -1
  424. package/src/page/outline-cache.js +11 -0
  425. package/src/page/placeholder.js +27 -7
  426. package/src/page/projection.js +240 -51
  427. package/src/page/reader-patch.js +306 -0
  428. package/src/page/recover.js +1 -1
  429. package/src/page/rich/page-tool.js +1 -4
  430. package/src/page/runtime-owner.js +27 -0
  431. package/src/page/save-projection.js +46 -4
  432. package/src/page/save-states.js +1 -1
  433. package/src/page/schema.js +47 -0
  434. package/src/page/table-rect-key.js +3 -0
  435. package/src/page/table-select.js +4 -3
  436. package/src/page/table-style.js +1 -1
  437. package/src/page/table-views.js +3 -0
  438. package/src/page/table.js +8 -293
  439. package/src/page/themes/content.css +25 -1
  440. package/src/page/themes/light-1.css +163 -2
  441. package/src/page/themes/light-1.source.css +269 -0
  442. package/src/page/tool-capability.js +3 -0
  443. package/src/page/tool-views.js +3 -0
  444. package/src/page/view-hooks.js +32 -0
  445. package/src/page/view.js +390 -107
  446. package/src/page/ybind/awareness.js +172 -0
  447. package/src/page/ybind/binding.js +40 -5
  448. package/src/page/ybind/bridge.js +50 -47
  449. package/src/page/ybind/decode.js +52 -19
  450. package/src/page/ybind/doc.js +27 -2
  451. package/src/page/ybind/group.js +12 -3
  452. package/src/page/ybind/index.js +2 -0
  453. package/src/page/ybind/lineage.js +71 -0
  454. package/src/page/ybind/marks.js +26 -1
  455. package/src/page/ybind/migrate.js +48 -13
  456. package/src/page/ybind/moves.js +32 -21
  457. package/src/page/ybind/positions.js +50 -0
  458. package/src/page/ybind/provider.js +97 -24
  459. package/src/page/ybind/recovery-proof.js +191 -0
  460. package/src/page/ybind/recovery-replay.js +488 -0
  461. package/src/page/ybind/tokens.js +15 -6
  462. package/src/page/ybind/walk.js +10 -3
  463. package/src/page/ybind/writer.js +48 -4
  464. package/src/plugins/ai-edit.js +167 -32
  465. package/src/plugins/bind-text.js +218 -0
  466. package/src/plugins/cms.js +93 -0
  467. package/src/plugins/indicator.js +57 -5
  468. package/src/plugins/live.js +319 -35
  469. package/src/plugins/menu/claygoo.svg.js +1 -0
  470. package/src/plugins/menu/seo-head.js +323 -0
  471. package/src/plugins/menu/seo.js +849 -0
  472. package/src/plugins/menu.js +425 -0
  473. package/src/plugins/page-view.js +131 -0
  474. package/src/plugins/page.js +1131 -270
  475. package/src/plugins/people.js +158 -31
  476. package/src/plugins/richclay.js +119 -9
  477. package/src/plugins/sortable.js +370 -60
  478. package/src/plugins/source.js +189 -366
  479. package/src/plugins/undo.js +289 -19
  480. package/src/plugins/unsent.js +132 -0
  481. package/src/plugins/upgrade-run.js +1 -0
  482. package/src/plugins/upgrade.js +210 -0
  483. package/src/plugins/upload-task.js +571 -0
  484. package/src/plugins/upload-ui.js +265 -0
  485. package/src/plugins/upload.js +34 -153
  486. package/src/plugins/visitor-drafts/inert.js +32 -0
  487. package/src/plugins/visitor-drafts/intro.js +2 -1
  488. package/src/plugins/visitor-drafts/owner-chip.js +3 -0
  489. package/src/plugins/visitor-drafts/prompt.js +2 -2
  490. package/src/plugins/visitor-drafts-owner.js +85 -0
  491. package/src/plugins/visitor-drafts.js +31 -42
  492. package/src/plugins/wire.js +82 -1
  493. package/src/reader-core.js +26 -0
  494. package/src/recovery/conflicts.js +287 -0
  495. package/src/recovery/identity.js +154 -0
  496. package/src/recovery/store.js +792 -0
  497. package/src/recovery/undo.js +257 -0
  498. package/src/server/checkpoint/index.js +68 -4
  499. package/src/server/offline-runtime/index.js +214 -0
  500. package/src/server/rooms/index.js +2 -1
  501. package/src/server/rooms/live-data-rooms.js +2 -2
  502. package/src/server/rooms/page-admission.js +33 -0
  503. package/src/server/rooms/page-lineage.js +56 -0
  504. package/src/server/rooms/page-rebase.js +11 -5
  505. package/src/server/rooms/page-state.js +2 -0
  506. package/src/server/rooms/page-write-admission.js +9 -3
  507. package/src/source/session.js +705 -0
  508. package/src/sync/conflict-revert.js +5 -4
  509. package/src/sync/conflicts-edit.js +119 -0
  510. package/src/sync/conflicts-facade.js +49 -0
  511. package/src/sync/conflicts.js +99 -1
  512. package/src/sync/editing-marker.js +37 -6
  513. package/src/sync/editing-sender.js +8 -1
  514. package/src/sync/live-sync-edit.js +63 -0
  515. package/src/sync/live-sync.js +364 -119
  516. package/src/sync/local-presence.js +187 -0
  517. package/src/sync/merge-declarations.js +10 -0
  518. package/src/sync/merge-engine.js +12 -0
  519. package/src/sync/presence-store.js +412 -0
  520. package/src/sync/presence-target.js +243 -0
  521. package/src/sync/presence.js +72 -41
  522. package/src/sync/saved-handoff.js +200 -0
  523. package/src/sync/saved-stream.js +544 -0
  524. package/src/sync/version-guard.js +92 -0
  525. package/src/sync/wire-profile.js +81 -0
  526. package/src/ui/bevel-controls.js +2 -8
  527. package/src/ui/page-scheme.js +7 -0
  528. package/src/ui/skins/cms.js +1 -1
  529. package/src/ui/theme-config.js +150 -0
  530. package/src/ui/theme.js +6 -138
  531. package/src/ui/toast-lazy.js +11 -0
  532. package/src/vendor/LICENSES-optional.md +253 -0
  533. package/src/vendor/highlight.vendor.js +3 -0
  534. package/src/vendor/hljs-bash.vendor.js +2 -0
  535. package/src/vendor/hljs-css.vendor.js +2 -0
  536. package/src/vendor/hljs-javascript.vendor.js +2 -0
  537. package/src/vendor/hljs-json.vendor.js +2 -0
  538. package/src/vendor/hljs-python.vendor.js +2 -0
  539. package/src/vendor/hljs-xml.vendor.js +2 -0
  540. package/src/vendor/hyper-html-api-data.vendor.js +1 -1
  541. package/src/vendor/hyper-html-api-upgrade.vendor.js +5 -0
  542. package/src/vendor/hyper-morph-identity.vendor.js +2 -0
  543. package/src/vendor/hyper-morph-json.vendor.js +3 -0
  544. package/src/vendor/hyper-morph.vendor.js +6 -6
  545. package/src/vendor/hyper-undo.vendor.js +1 -1
  546. package/src/vendor/hypercms.vendor.js +169 -84
  547. package/src/vendor/marked.vendor.js +68 -0
  548. package/src/vendor/overtype.vendor.js +994 -0
  549. package/src/vendor/richclay.vendor.js +17 -17
  550. package/src/vendor/sap-core.vendor.js +5 -5
  551. package/src/vendor/sap-ownership.vendor.js +11 -7
@@ -0,0 +1,9 @@
1
+ import{c as h}from"./c-4Q2XTQ2N.js";import{s as d}from"./c-3H6BZDNJ.js";import"./c-4DFEJ2PO.js";import"./c-6CRUUXOX.js";import"./c-336SGU5W.js";import"./c-6KEVEQ7L.js";import"./c-5J4E7O4Y.js";import{m as p}from"./c-WWXIDH4O.js";import{a as s}from"./c-BYTKL6UX.js";import"./c-4L3BTFRK.js";import"./c-LRPUO2MX.js";import"./c-5V3MOVJT.js";import"./c-VHNSBD2M.js";var c=`
2
+ .page-tool-block { position: relative; min-height: 48px; border: 1px solid var(--page-rule); border-radius: 8px; padding: 12px; }
3
+ .page-tool-settings { position: absolute; top: 4px; inset-inline-end: 4px; border: 0; border-radius: 5px; background: var(--page-pop-bg); color: var(--page-ink-soft); font: 12px var(--page-font); padding: 5px 8px; cursor: pointer; opacity: 0; }
4
+ .page-tool-block:hover .page-tool-settings, .page-tool-block:focus-within .page-tool-settings { opacity: 1; }
5
+ .page-ai-panel { position: relative; z-index: 5; width: min(520px, 100%); box-sizing: border-box; margin: 12px auto; padding: 14px; border: 1px solid var(--page-pop-line); border-radius: 10px; background: var(--page-pop-bg); color: var(--page-pop-ink); box-shadow: var(--page-pop-shadow); }
6
+ .page-ai-panel textarea { width: 100%; min-height: 88px; box-sizing: border-box; padding: 8px; border: 1px solid var(--page-pop-line); border-radius: 6px; background: var(--page-pop-bg); color: inherit; font: inherit; resize: vertical; }
7
+ .page-ai-actions { display: flex; gap: 8px; margin-top: 8px; }
8
+ .page-ai-actions button { border: 1px solid var(--page-pop-line); border-radius: 6px; background: var(--page-pop-bg); color: inherit; font: inherit; padding: 5px 10px; cursor: pointer; }
9
+ .page-ai-status, [data-tool-note], [data-tool-error] { color: var(--page-danger); font-size: 0.85em; }`,l=class{constructor(t,e,o,{host:n,revise:r=null}){this.node=t,this.view=e,this.getPos=o,this.host=n,this.revise=r,this.showingFallback=!1;let i=e.dom.ownerDocument;this.dom=i.createElement("section"),this.dom.className="page-tool-block",this.dom.dataset.type="tool",this.dom.dataset.id=t.attrs.id??"",this.dom.contentEditable="false",this.content=i.createElement("div"),this.content.className="page-tool-content",this.menu=i.createElement("button"),this.menu.type="button",this.menu.className="page-tool-settings",this.menu.textContent="Tool options",this.menu.setAttribute("aria-label","Tool options"),this.menu.addEventListener("click",()=>this.openMenu()),this.dom.append(this.content,this.menu),this.mount()}mount(){this.instance?.dispose(),this.instance=null,this.showingFallback?this.content.innerHTML=this.node.attrs.artifact?.fallbackHtml??"":this.instance=this.host.mount(this.content,{id:this.node.attrs.id,artifact:this.node.attrs.artifact,rev:this.node.attrs.rev,seed:this.node.attrs.state})}openMenu(){let t=[];this.revise&&t.push({label:"Revise\u2026",run:()=>this.revise(this.node.attrs.id,this.node.attrs.rev)}),t.push({label:this.showingFallback?"Show tool":"Show fallback",run:()=>{this.showingFallback=!this.showingFallback,this.mount()}}),t.push({label:"Delete",run:()=>{let e=this.getPos();e==null||this.view.state.doc.nodeAt(e)?.type!==p.nodes.tool||this.view.dispatch(this.view.state.tr.delete(e,e+this.node.nodeSize))}}),d(this.view,this.menu,t)}update(t){if(t.type!==p.nodes.tool||t.attrs.id!==this.node.attrs.id)return!1;let e=t.attrs.rev!==this.node.attrs.rev||JSON.stringify(t.attrs.artifact)!==JSON.stringify(this.node.attrs.artifact);return this.node=t,e&&this.mount(),!0}stopEvent(t){return this.dom.contains(t.target)}ignoreMutation(){return!0}destroy(){this.instance?.dispose(),this.instance=null}};function x({toolHost:a=null,revise:t=null,view:e=null}={}){let o=a??h({mode:"edit"});return e&&s.set(e,o),{id:"tool",nodeViews:{tool:(n,r,i)=>new l(n,r,i,{host:o,revise:t})},css:c,dispose(){e&&s.get(e)===o&&s.delete(e),a||o.dispose()}}}export{c as TOOL_CSS,l as ToolView,x as createFeature};
@@ -0,0 +1,2 @@
1
+ var j={p:"Paragraph",a:"Link",li:"List item",ul:"List",ol:"List",img:"Image",section:"Section",article:"Article",div:"Block",span:"Text",td:"Table cell",th:"Table cell",tr:"Table row",table:"Table",button:"Button",blockquote:"Quote",pre:"Code block",code:"Code",script:"Data block",style:"Style",figure:"Figure",video:"Video",input:"Field",textarea:"Field",select:"Field",label:"Label",template:"Template"},D={href:"Link address",alt:"Image description",title:"Tooltip",class:"Style",style:"Style",value:"Field value",placeholder:"Placeholder"},v=new Set(["section","article","div","li","aside","main","header","footer","nav"]),f=new Set(["script","style","template","noscript"]),P="h1,h2,h3,h4,h5,h6",O=":scope > :is(h1,h2,h3,h4,h5,h6)",p=40;function x(e,t=p){let n=e.replace(/\s+/g," ").trim();return n.length>t?n.slice(0,t).trimEnd()+"\u2026":n}function y(e){if(e==null)return"";let t=document.createElement("template");return t.innerHTML=String(e),t.content.textContent}function h(e){return e?e.nodeType===1?e:e.parentElement:null}function g(e){let t=e;for(;t;){if(t.isConnected)return h(t);let n=t.getRootNode?.();if(n&&n.nodeType===11&&n.host){t=n.host;continue}let o=n&&n.nodeType===11?B(n):null;if(o){t=o;continue}return null}return null}function B(e){for(let t of document.querySelectorAll("template"))if(t.content===e)return t;return null}function m(e){if(!e)return"Edit";let t=e.localName;return/^h[1-6]$/.test(t)?"Heading":j[t]||t.charAt(0).toUpperCase()+t.slice(1)}function w(e){let t=null;for(let n of document.body.querySelectorAll(P))n===e||n.contains(e)||n.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING&&(t=n);return t?x(t.textContent):null}function d(e,t){if(!e)return t?`"${t}" attribute`:"Edit";if(t){let i=t==="src"?e.localName==="img"||e.localName==="video"?"Image address":"Address":D[t]||`"${t}" attribute`,s=e.isConnected?w(e):null;return s?`${i} under ${s}`:i}if(f.has(e.localName))return m(e);if(/^h[1-6]$/.test(e.localName)){let i=w(e);return i?`Heading under ${i}`:"Page heading"}if(v.has(e.localName)){let i=e.querySelector(O);if(i&&i.textContent.trim())return`${x(i.textContent)} section`}let n=m(e),o=e.isConnected?w(e):null;return o?`${n} under ${o}`:n}function F(e,t,n){let o=e.slice(Math.max(0,t-p),t),i=e.slice(n,n+p),s=t-p>0,l=n+p<e.length;if(s){let c=o.indexOf(" ");o=c>=0?o.slice(c+1):o}if(l){let c=i.lastIndexOf(" ");i=c>=0?i.slice(0,c):i}return{before:o,after:i,cutBefore:s,cutAfter:l}}function u(e,t){return{before:t?.before||"",hit:e,after:t?.after||"",cutBefore:!!t?.cutBefore,cutAfter:!!t?.cutAfter}}var H={"edit-beats-delete":e=>`You deleted this ${e}. The other edit changed it at the same time, so it is still here.`,"move-beats-delete":e=>`You deleted this ${e}. The other edit moved it at the same time, so it is still here.`,"both-moved":e=>`You moved this ${e}. The other edit moved it somewhere else. Their place is showing.`,"both-reordered":e=>`You reordered the items in this ${e}. The other edit reordered them too. Their order is showing.`,"insert-collision":()=>"You added something here. The other edit added something else in the same place. Theirs is showing."};function q(e,t){let n=e.detail||e.reason,o=H[n];return o?o(t.toLowerCase()):"Your change here was replaced by the other edit."}function I(e){let t=e.parentElement;for(;t&&f.has(t.localName);)t=t.parentElement;return t&&t!==document.documentElement?t:null}var _="\uFFFC",G="";function b(e){return e.replaceAll(_,"[item]").replaceAll(G,`
2
+ `)}function S(e){if(!e||typeof e.text!="string")return null;let t=F(e.text,e.start,e.end);return{before:b(t.before),hit:b(e.text.slice(e.start,e.end)),after:b(t.after),cutBefore:t.cutBefore,cutAfter:t.cutAfter}}function $(e){for(let t of e?.live||[])if(g(t))return t;return null}function M(e,t){let n=e;for(let o of t){if(!n)return null;n=o==="content"?n.content:n.childNodes[o]}return n||null}function Y(e,t){let n=window.clay?.conflicts?.recoveryOf?.(e.id)?.root,o=t?.local?.[0];return n&&o?M(n,o):null}function R(e){let t=g(e);return t&&f.has(t.localName)?I(t):t}function k(e){let t=h(e);if(!t)return null;if(v.has(t.localName)){let o=t.querySelector(O);if(o&&o.textContent.trim())return`into the ${x(o.textContent)} section`}let n=t.isConnected?w(t):null;return n?`under ${n}`:null}function K(e,t,n){let o=t.structure,i=n.toLowerCase();switch(`${o.localAction}/${o.remoteAction}`){case"deleted/edited":return`You deleted this ${i}. The other edit changed it at the same time, so it is still here.`;case"deleted/moved":return`You deleted this ${i}. The other edit moved it, so it is still here.`;case"reordered/reordered":return`You changed the order of the items in this ${i}. The other edit changed their order too. Their order is showing.`;case"inserted/inserted":return"You and the other edit added different content in the same place. Their content is showing.";case"moved/moved":{let s=k($(o.localPlacement?.parent)||Y(e,o.localPlacement?.parent)),l=k($(o.mergedPlacement?.parent));return s&&l&&s!==l?`You moved this ${i} ${s}. The other edit moved it ${l}. Their position is showing.`:`You moved this ${i}. The other edit moved it somewhere else. Their position is showing.`}default:return"Your change here was replaced by the other edit."}}var N="The other edit replaced this, and the page changed again before it could be shown here. Download my copy keeps your version.",W={3:"Text",8:"Comment"};function J(e,t){let n=e.id,o=t.applied!==!1,i=o?$(t.subject):null,s=i?R(i):null,l=h(i)||h(Y(e,t.subject)),c=W[t.subject?.nodeType];if(t.attribute)return{id:n,kind:"attr",name:d(l,t.attribute.qualifiedName),target:s,yours:u(String(e.local??"")),now:o?u(String(e.remote??"")):null,sentence:o?null:N};if(t.structure){let r=c||(l?m(l):"Block"),T=c||(i?d(h(i)):r);return{id:n,kind:"struct",name:T,target:s,yours:null,now:null,sentence:o?K(e,t,r):N}}let a=c==="Comment"?"Comment":l&&f.has(l.localName)?m(l):d(l);return{id:n,kind:"text",name:a,target:s,yours:S(t.text?.local),now:o?S(t.text?.merged):null,sentence:o?null:N}}function U(e){let t=[],n=0;for(;n<e.length;){if(e[n]==="."){n++;continue}if(e[n]==="["){let i=n+1,s=!1;for(;i<e.length;i++){let a=e[i];if(s)a==="\\"?i++:a==='"'&&(s=!1);else if(a==='"')s=!0;else if(a==="]")break}let l=e.slice(n+1,i),c=/^[A-Za-z_$][\w$]*=/.exec(l);c&&(l=l.slice(c[0].length));try{t.push(String(JSON.parse(l)))}catch{t.push(l)}n=i+1;continue}let o=n;for(;o<e.length&&e[o]!=="."&&e[o]!=="[";)o++;t.push(e.slice(n,o)),n=o}return t.join(" \u2192 ")}var E=e=>e===void 0?"(deleted)":JSON.stringify(e);function V(e){let t=e.id;if(e.recovery?.version===1)return J(e,e.recovery);if(e.kind==="attr"){let r=e.el||null;return{id:t,kind:"attr",name:d(r,e.name),target:g(r),yours:u(String(e.local??"")),now:u(String(e.remote??"")),sentence:null}}if(e.kind==="structure"){let r=e.el&&e.el.isConnected?e.el:null,T=r||e.base||e.el||null,A=m(h(T)),L=q(e,A),C=typeof e.local=="string"&&typeof e.remote=="string";return{id:t,kind:"struct",name:r?d(r):A,target:r?g(r):null,yours:C?u(y(e.local)):null,now:C?u(y(e.remote)):null,sentence:L}}if(e.kind==="json"){let r=U(e.path||"");return{id:t,kind:"json",name:r?`${e.name} \u2192 ${r}`:e.name,target:null,yours:u(E(e.local)),now:u(E(e.resolved)),sentence:null}}let n=g(e.node),o=h(e.node),i=o&&f.has(o.localName)?m(o):e.node?.nodeType===8?"Comment":d(o),s=typeof e.lss=="number",l=r=>r==null?"":Array.isArray(r)?r.join(""):String(r),c=s?y(e.local):l(e.local),a=s?y(e.remote):l(e.remote);return{id:t,kind:"text",name:i,target:n&&!f.has(n.localName)?n:n?I(n):null,yours:u(c),now:u(a),sentence:null}}export{y as a,V as b};
@@ -0,0 +1 @@
1
+ import{b as L,c as M,d as _,f as N}from"./c-GFJJEBTU.js";import"./c-BWFVSBDF.js";import{a as D,b as x}from"./c-A7LS5UZW.js";import"./c-VRZN56XY.js";import"./c-OW5QIGG3.js";import"./c-BPF2NSPV.js";import"./c-P7KNDG34.js";import"./c-CYWLPPUS.js";import"./c-N7JPUPGC.js";import"./c-HA6INT6J.js";import"./c-DCFSEJZG.js";import"./c-WRBKEJD4.js";import"./c-VHNSBD2M.js";var m="This computer",C=64,O=64,R=/^[\x20-\x7e]{1,128}$/;function X(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():Math.random().toString(36).slice(2)+Date.now().toString(36)}function B(e){return typeof e!="string"?m:e.trim().slice(0,O)||m}function v(e){let r=_(e===void 0?null:e);return r.ok?r.target:null}function j(e,r){let c=null,f=-1;for(let l of r)l.editing===null||l.n<=f||(c=l.editing,f=l.n);return e.editing!==null&&e.n>=f?e.editing:c}function Y({scope:e=null,key:r=null,store:c=N,channel:f=null,label:l=m}={}){let S=B(l),w=r??"clay-live:"+(e??(typeof window<"u"?window.location.pathname:"/")),P="local:"+(e??w),b=X(),i=new Map,d=null,u=0,p=null,I=null,s=null,g=null,a=!1;function h(n){p&&p.post({type:D,from:b,...n})}function y(){let n={id:b,you:!0,n:u,editing:d},t=[];for(let o of i.values())t.push({id:o.id,you:!1,n:o.n,editing:o.editing});let E=[n,...t].sort((o,A)=>o.id<A.id?-1:o.id>A.id?1:0);c.receive({people:[{id:P,name:S,you:!0,canEdit:!0,editing:j(n,t),sessions:E}],anonymous:0})}function T(n){if(!n||n.from===b||typeof n.from!="string"||!R.test(n.from))return;let t=i.get(n.from);if(n.op==="bye"){t&&i.delete(n.from),y();return}if(n.op!=="hello"&&n.op!=="update"&&n.op!=="beat"||!t&&i.size>=C)return;let E=n.op==="beat"?t?t.editing:null:v(n.editing),o=Number.isSafeInteger(n.n)&&n.n>=0?n.n:0;t&&o<t.n||(i.set(n.from,{id:n.from,n:o,editing:E,seenAt:Date.now()}),n.op==="hello"&&!t&&h({op:"hello",n:u,editing:d,label:S}),y())}function U(){if(!a)return;h({op:"beat",n:u});let n=Date.now(),t=!1;for(let[E,o]of i)n-o.seenAt<=M||(i.delete(E),t=!0);t&&y()}function k(n){let t=n&&typeof n=="object"&&"editing"in n?n.editing:null;return d=v(t),u+=1,h({op:"update",n:u,editing:d}),y(),!0}return{sessionId:b,start(){return a||(a=!0,p=f??x(w),I=p.subscribe("presence",T),s=c.attachTransport({send:k}),h({op:"hello",n:u,editing:d,label:S}),y(),g=setInterval(U,L)),s},stop(){a&&(a=!1,g!==null&&clearInterval(g),g=null,h({op:"bye"}),i.clear(),I?.(),I=null,p=null,s?.detach(),s=null)}}}export{m as LOCAL_LABEL,C as MAX_SESSIONS,Y as localPresence};
@@ -0,0 +1 @@
1
+ function c(e,r,a,o={},i=null){let n=e.createElement(r);a&&(n.className=a);for(let[l,t]of Object.entries(o))t!=null&&t!==!1&&n.setAttribute(l,t===!0?"":String(t));return i!==null&&(n.textContent=i),n}var f=e=>([...String(e).trim()][0]??"?").toUpperCase(),s=(e,r)=>c(e,"span","page-board-face",{"aria-hidden":"true"},f(r));export{c as a,s as b};
@@ -0,0 +1 @@
1
+ import{a as P}from"./c-SWLRT66R.js";import{b as h,c as y,d as A,e as E,h as F}from"./c-SDAXDM2D.js";import"./c-TQEMVJCS.js";import"./c-VHNSBD2M.js";var x="This document uses a newer page format; update the editor in the other tabs to keep writing",G=s=>({status:"upgrade-required",code:y,required:s,minimum:s,message:x});function N({host:s,capability:w=1,supported:T=()=>!0,installed:f=()=>null,revision:d=()=>null,lane:g=null}={}){if(!s||typeof s.activate!="function")throw new TypeError("format-gate: a host adapter is required");let t=0,o=null,c=!1,n=!1;function l(e){return t=Math.max(t,A(e)),F(t),t}async function v(){try{let e=await s.read();l(e?.floor??E(e?.html))}catch{}return t}async function _(){try{let e=await s.capabilities();return Array.isArray(e)?e:[]}catch{return[]}}async function M(){try{return await T()!==!1}catch{return!1}}async function R(){if(n)return{status:"disposed",retry:!1};if(!await M())return{status:"unsupported-host",code:"page-format-unsupported",extension:h};if(await v(),t>=1)return{status:"active",floor:t};let e=await _(),r=P({floor:t,required:1,capability:w,admitted:e});if(!r.ok)return G(r.minimum);let u={revision:d(),installed:f()},i;try{i=await s.activate({floor:1,capability:w,revision:u.revision,installed:u.installed})}catch(O){return{status:"failed",code:"page-format-activation-failed",error:O,retry:!0}}return!i||i.accepted!==!0?i?.code===y?G(1):{status:"failed",code:i?.code??"page-format-activation-failed",retry:!0}:n?(l(1),{status:"disposed",retry:!1}):(l(1),c=!0,await p(i.receipt??null),{status:"active",floor:t,receipt:i.receipt??null})}async function p(e){if(!g||!c)return!1;try{let r=await g.switchTo({floor:1,receipt:e});if(r&&r.status==="switched")return c=!1,!0}catch{}return!1}function m(){return n?Promise.resolve({status:"disposed",retry:!1}):t>=1?p(null).then(()=>({status:"active",floor:t})):(o||(o=R().finally(()=>{o=null})),o)}return{get floor(){return t},get disposed(){return n},note:l,read:v,activate:m,async run(e){let r={revision:d(),installed:f()},u=await m();return u.status!=="active"?u:n?{status:"disposed",retry:!1}:d()!==r.revision||f()!==r.installed?{status:"retry",code:"format-gate-stale",retry:!0}:{status:"applied",floor:t,result:await e?.apply?.(r)}},async retry(){return n?{status:"disposed",retry:!1}:await p(null)?{status:"active",floor:t}:m()},dispose(){return n=!0,c=!1,{status:"disposed"}}}}export{N as createFormatGate};
@@ -0,0 +1 @@
1
+ import{a}from"./c-AQLFEATB.js";import"./c-VHNSBD2M.js";export{a as modeRefusalText};
@@ -0,0 +1 @@
1
+ import{a as f}from"./c-4JZDZFF6.js";import{a,d as u,f as i,g as d}from"./c-46XYM55L.js";var b=t=>t.replace(/[A-Z]/g,r=>`-${r.toLowerCase()}`);function s(t){let r=String(t).trim().toLowerCase(),e=/^#([0-9a-f]{3}|[0-9a-f]{6})$/.exec(r);if(e){let o=e[1].length===3?[...e[1]].map(c=>c+c).join(""):e[1];return[0,2,4].map(c=>parseInt(o.slice(c,c+2),16)).concat(1)}if(e=/^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:\s*[,/]\s*([\d.]+)(%?))?\s*\)$/.exec(r),!e)return null;let n=e[4]===void 0?1:Number(e[4])/(e[5]?100:1);return[Number(e[1]),Number(e[2]),Number(e[3]),n]}function l([t,r,e]){let n=o=>(o/=255)<=.03928?o/12.92:((o+.055)/1.055)**2.4;return .2126*n(t)+.7152*n(r)+.0722*n(e)}function m(t,r){let[e,n]=[l(t),l(r)].sort((o,c)=>c-o);return(e+.05)/(n+.05)}var p=new Set(["","transparent","rgba(0, 0, 0, 0)"]),x=new Set(["serif","times","times new roman","-webkit-standard","tinos","liberation serif"]);function h(t){let r=String(t||"").split(",").map(e=>e.trim().replace(/^["']|["']$/g,"").toLowerCase()).filter(Boolean);return r.length&&!r.every(e=>x.has(e))}function g(t){if(!t)return null;let r=getComputedStyle(t);if(r.backgroundImage&&r.backgroundImage!=="none")return{blocked:!0};let e=(r.backgroundColor||"").trim();if(p.has(e))return null;let n=s(e);return n?n[3]===0?null:n[3]<1?{blocked:!0}:{value:e,rgb:n}:{blocked:!0}}function k(){let t={},r=document.body;if(!r)return t;let e=getComputedStyle(r);h(e.fontFamily)&&(t.font=e.fontFamily.trim());let n=g(r);n||(n=g(document.documentElement));let o=s(e.color);return n&&!n.blocked&&o&&o[3]===1&&m(n.rgb,o)>=3&&(t.background=n.value,t.surface=n.value,t.text=e.color),t}function S(){let t={};if(!document.body)return t;let r=getComputedStyle(document.body);for(let[e,n]of Object.entries(a)){let o=r.getPropertyValue(`--clay-ui-${b(e)}`).trim();o&&u(n,o)&&(t[e]=e==="spacing"&&o==="0"?"0px":o)}return t}function y(t,r){if(t!=="page")return t;let e=getComputedStyle(document.documentElement).colorScheme;if(e&&e!=="normal")return e;let n=document.querySelector('meta[name="color-scheme"]')?.getAttribute("content")?.trim();if(n&&/\b(light|dark)\b/.test(n))return n;let o=s(r.surface||"");return o?l(o)<.2?"dark":"light":"light dark"}function T(t,r){let e=s(t),n=s(r.text),o=s(r.surface);return e&&n&&o?m(e,n)>=m(e,o)?r.text:r.surface:null}function E(){i();let t=d();if(t===!1)return{bevel:!0,scheme:f(),tokens:{},parts:{}};let e={...t.auto?k():{},...S(),...t.tokens};e.text&&e.surface&&(e.mutedText??=`color-mix(in srgb, ${e.text} 70%, ${e.surface})`,e.border??=`color-mix(in srgb, ${e.text} 18%, ${e.surface})`,e.overlay??=`color-mix(in srgb, ${e.text} 20%, transparent)`,e.accent??=e.text);for(let[n,o]of[["accent","accentText"],["danger","dangerText"]]){if(!e[n]||e[o])continue;let c=T(e[n],e);c?e[o]=c:console.warn(`clayjs: theme sets ${n} without ${o}; pass ${o} so text on it stays readable`)}return{bevel:!1,scheme:y(t.colorScheme,e),tokens:e,parts:t.parts}}export{s as a,m as b,k as c,E as d};
@@ -0,0 +1 @@
1
+ import{b as $}from"./c-RSMOODDU.js";import{a as k,b as B,c as L}from"./c-4Q2XTQ2N.js";import{A as M}from"./c-5J4E7O4Y.js";import{F as P,I as R,b as O,m as q}from"./c-WWXIDH4O.js";import"./c-3GJ4SDE2.js";import{a as N}from"./c-LRPUO2MX.js";import"./c-VHNSBD2M.js";var K=16384,G=p=>new TextEncoder().encode(JSON.stringify(p)).length,I=class extends Error{constructor(s,n=s){super(n),this.name="ToolRequestError",this.code=s}};function V(p){let s=N(p);for(Array.isArray(s.tables)||(s.tables=[]),Array.isArray(s.outline)||(s.outline=[]);G(s)>K;){let n=[...s.tables].reverse().find(i=>Array.isArray(i.rows)&&i.rows.length);if(n)n.rows.pop();else if(s.outline.length)s.outline.pop();else break}if(G(s)>K)throw new I("context-too-large");return s}function J({transport:p,newId:s}){let n=null,i=a=>{!a||a.discarded||a.done||(a.discarded=!0,n===a&&(n=null),p.cancel(a.requestId),a.resolve({requestId:a.requestId,code:"discarded",message:"Candidate discarded"}))};return{request(a,r,t=null){let m=V(r);n&&i(n);let c=s(),l={requestId:c,discarded:!1,done:!1};l.promise=new Promise(o=>{l.resolve=o}),n=l;let y={protocol:"page-tool/1",requestId:c,prompt:a,context:m,target:t};l.request=y;let v=o=>{if(!(l.discarded||l.done||o?.requestId!==c))if(l.done=!0,n===l&&(n=null),o?.artifact!==void 0){let d=k(o.artifact),C=B(o.state),w=d.ok?C.ok?null:C:d;l.resolve(w?{requestId:c,code:w.code,message:w.code}:o)}else l.resolve(typeof o?.code=="string"?o:{requestId:c,code:"invalid-result",message:"invalid-result"})};try{Promise.resolve(p.request(y)).then(v,o=>v({requestId:c,code:"transport-error",message:String(o?.message??o)}))}catch(o){v({requestId:c,code:"transport-error",message:String(o?.message??o)})}return l},discard:i,async wait(a,{signal:r}={}){if(r?.aborted)throw new DOMException("Aborted","AbortError");let t,m=await(r?Promise.race([a.promise,new Promise((c,l)=>{t=()=>l(new DOMException("Aborted","AbortError")),r.addEventListener("abort",t,{once:!0})})]).finally(()=>r.removeEventListener("abort",t)):a.promise);if(m?.code)throw new I(m.code,m.message);return m}}}var{Selection:X}=O;function W(p,s){let n=null;return p.forEach((i,a,r)=>{i.attrs.id===s&&(n={node:i,at:a,index:r})}),n}function j(p,s,n){let i=p.state,a=W(i.doc,n?.hostId)??(()=>{let w=Math.min(i.selection.$head.index(0),i.doc.childCount-1),f=0;for(let g=0;g<w;g++)f+=i.doc.child(g).nodeSize;return{node:i.doc.child(w),at:f,index:w}})(),{node:r,at:t,index:m}=a,c=i.doc.maybeChild(m+1),l=r.isTextblock&&(r.content.size===0||n?.hostId===r.attrs.id&&r.textContent===n.slashText),y=l?r.attrs.pos:P(r.attrs.pos,c?.attrs.pos??null),v=q.nodes.tool.create({id:s.id,pos:y,parent:r.attrs.parent??null,artifact:s.artifact,rev:s.rev,state:s.state}),o=l?t:t+r.nodeSize,d=i.tr;if(!l&&n?.hostId===r.attrs.id&&n.slashText&&n.slashOffset>=0){let w=t+1+n.slashOffset,f=w+n.slashText.length;f<=t+r.nodeSize-1&&i.doc.textBetween(w,f)===n.slashText&&d.delete(w,f)}let C=d.mapping.map(o);d.replaceWith(C,l?d.mapping.map(t+r.nodeSize):C,v),d.setSelection(X.near(d.doc.resolve(Math.min(C+v.nodeSize,d.doc.content.size)))),p.dispatch(M(d).scrollIntoView())}function ie({getView:p,store:s,transport:n,acceptState:i=()=>globalThis.clay?.save?.flush?.(),newId:a=R}){let r=n?J({transport:n,newId:()=>a("request")}):null,t=null,m=0,c=()=>{m++,t&&(r?.discard(t.pending),t.preview?.dispose(),t.previewHost?.dispose(),t.element.remove(),t=null)};return{open:({target:y=null,remove:v=null}={})=>{c();let o=p();if(!o)return;let d=o.state.selection,w={hostId:o.state.doc.child(Math.min(d.$head.index(0),o.state.doc.childCount-1))?.attrs.id,slashText:v?o.state.doc.textBetween(v.from,v.to):null,slashOffset:v&&d.$head.depth?v.from-d.$head.before(1)-1:null},f=o.dom.ownerDocument,g=f.createElement("section");g.className="page-ai-panel",g.contentEditable="false",g.setAttribute("role","dialog"),g.setAttribute("aria-label",y?"Revise tool":"Make a tool with AI");let E=f.createElement("textarea");E.setAttribute("aria-label","Describe the tool"),E.placeholder=y?"What should change?":"Describe the tool you want";let A=f.createElement("p");A.className="page-ai-status";let S=f.createElement("div");S.className="page-ai-preview";let T=f.createElement("div");T.className="page-ai-actions",g.append(E,A,S,T),o.dom.parentElement.append(g),t={element:g,input:E,status:A,previewRoot:S,actions:T,target:y,bookmark:w,candidate:null,pending:null,preview:null,previewHost:null,kept:!1,busy:!1};let x=(e,u)=>{let h=f.createElement("button");h.type="button",h.textContent=e,h.addEventListener("click",u),T.append(h)},z=()=>{t&&(t.preview?.dispose(),t.previewHost?.dispose(),t.preview=null,t.previewHost=null,t.previewRoot.replaceChildren(),t.input.hidden=!1,t.actions.replaceChildren(),x("Generate",D),x("Cancel",c),t.input.focus())},_=()=>{let e=t;e.input.hidden=!0,e.status.textContent="",e.previewHost=L({mode:"view"}),e.preview=e.previewHost.mount(e.previewRoot,{id:"preview",rev:"preview",artifact:e.candidate.artifact,seed:e.candidate.state}),e.actions.replaceChildren(),x("Keep",H),x("Revise",z),x("Discard",c)},D=async()=>{let e=t;if(!e||e.busy||!e.input.value.trim())return;if(!r){e.status.textContent="Tool generation is unavailable";return}e.busy=!0,e.status.textContent="Making your tool\u2026",e.actions.replaceChildren(),x("Cancel",c);let u=++m,h=r.request(e.input.value.trim(),$(o.state.doc,f.title),e.target);e.pending=h;try{let b=await r.wait(h);if(t!==e||u!==m)return;e.candidate={artifact:b.artifact,state:b.state,id:null,rev:null},_()}catch(b){if(t!==e||u!==m)return;e.status.textContent=b.message,e.actions.replaceChildren(),x("Generate",D),x("Cancel",c)}finally{e.busy=!1}},H=async()=>{let e=t;if(!e?.candidate||e.busy||e.kept)return;e.busy=!0;let u=e.candidate;u.id??=e.target?.toolId??a("b"),u.rev??=a("rev");try{if(!s)throw new Error("This document can't save tool state");await s.set([u.id,u.rev],u.state);let h=await i();if(h?.ok!==!0&&!["saved","clean"].includes(h?.state))throw new Error(h?.msg??h?.message??"Tool state was not saved");if(t!==e||e.kept)return;if(e.target){let b=W(o.state.doc,e.target.toolId);if(b?.node.type!==q.nodes.tool||b.node.attrs.rev!==e.target.rev){e.status.textContent="This tool changed while you were revising. Keep as a new tool, or discard.",e.target=null,u.id=null,u.rev=null,e.actions.replaceChildren(),x("Keep as new tool",H),x("Discard",c);return}o.dispatch(M(o.state.tr.setNodeMarkup(b.at,null,{...b.node.attrs,artifact:u.artifact,rev:u.rev})))}else j(o,u,e.bookmark);e.kept=!0,c()}catch(h){t===e&&(e.status.textContent=h.message)}finally{e.busy=!1}};return z(),g},dispose:c}}export{ie as createAiTool};
@@ -0,0 +1 @@
1
+ import{a as r}from"./c-WYFDLITL.js";import{a as p}from"./c-ZWIOJGMT.js";import{e as u}from"./c-OW5QIGG3.js";import{n as d,o as l}from"./c-DCFSEJZG.js";var n=0,g=0,c=!1,m=!1,y=!1,i=!1;function o(){!u||i||(i=!0,queueMicrotask(()=>{if(i=!1,typeof document>"u")return;let e=C();if(e===y)return;y=e;let t=document.documentElement;e?t.setAttribute("unsaved","true"):t.removeAttribute("unsaved"),document.dispatchEvent(new CustomEvent(e?"clay:dirty":"clay:clean"))}))}var T=`input${r}, textarea${r}, select${r}`,h=`${d}, ${l}`,a=new WeakMap;function v(){let e=[];for(let t of document.querySelectorAll(T))t.closest(h)||e.push(t);return e}function E(e){let t=e.target;!t||t.nodeType!==1||(t.matches("input, textarea, select")||t.isContentEditable)&&(t.closest(h)||(n++,o()))}function x(){m||(m=!0,p.onAnyChange({omitChangeDetails:!0,require:"dirty"},()=>{c||(n++,o())}),document.addEventListener("input",E,!0),document.addEventListener("change",E,!0))}function L(){c=!0}function k(){c=!1}function f(e){return e instanceof HTMLSelectElement?Array.from(e.selectedOptions,t=>t.value).join("\0"):e instanceof HTMLInputElement&&(e.type==="checkbox"||e.type==="radio")?e.checked?"1":"0":e.value}function M(e){return e instanceof HTMLSelectElement?Array.from(e.options).every(t=>t.selected===t.defaultSelected):e instanceof HTMLInputElement?e.type==="checkbox"||e.type==="radio"?e.checked===e.defaultChecked:e.value===e.defaultValue:e instanceof HTMLTextAreaElement?e.hasAttribute("data-value")?e.value===e.getAttribute("data-value"):e.value===e.defaultValue:!0}function S(){for(let e of v()){let t=f(e);if(a.get(e)!==t){if(M(e)){a.set(e,t);continue}return!0}}return!1}function C(){return n>g||S()}function D(){return n}function O(){let e=[];for(let t of v())e.push([t,f(t)]);return{gen:n,probe:e}}function b(){n++,o()}function H(e){if(e){n===e.gen&&(g=e.gen);for(let[t,s]of e.probe)f(t)===s&&a.set(t,s);o()}}typeof document<"u"&&u&&x();typeof window<"u"&&(window.clay=window.clay||{},window.clay.markDirty=b);export{x as a,L as b,k as c,C as d,D as e,O as f,b as g,H as h};
@@ -0,0 +1 @@
1
+ import"./c-VHNSBD2M.js";var x="clay-recovery",re=1,P="records",V="watermarks",Y="meta",ne=33554432,se=67108864;var Z="byScope",z=["usage","*"],F=typeof TextEncoder=="function"?new TextEncoder:null;function Q(e){return F?F.encode(e).length:e.length*2}function W(e){if(typeof e=="string")return Q(e);if(e&&typeof e.byteLength=="number"&&(e instanceof Uint8Array||e instanceof ArrayBuffer))return e.byteLength;if(Array.isArray(e))return e.reduce((w,p)=>w+W(p),0);if(typeof e=="number"||typeof e=="boolean"||typeof e=="bigint")return 8;if(!e||typeof e!="object")return 0;let n=0;for(let[w,p]of Object.entries(e))n+=Q(w)+W(p);return n}function G(e){if(!e||typeof e!="object")return 0;let n=0;for(let[w,p]of Object.entries(e))n+=Q(w)+W(p);return n}function R(e){let n=e?.name||"";return n==="QuotaExceededError"||n==="NS_ERROR_DOM_QUOTA_REACHED"?"quota":n==="VersionError"?"unknown-schema":n==="DataCloneError"?"uncloneable":n==="AbortError"||n==="TransactionInactiveError"||n==="InvalidStateError"?"aborted":n==="SecurityError"||n==="UnknownError"||n==="NotSupportedError"?"unavailable":"error"}function q(e,n){if(e===n)return!0;if(e instanceof ArrayBuffer&&(e=new Uint8Array(e)),n instanceof ArrayBuffer&&(n=new Uint8Array(n)),e instanceof Uint8Array||n instanceof Uint8Array){if(!(e instanceof Uint8Array)||!(n instanceof Uint8Array)||e.length!==n.length)return!1;for(let p=0;p<e.length;p++)if(e[p]!==n[p])return!1;return!0}if(!e||!n||typeof e!="object"||typeof n!="object"||Array.isArray(e)!==Array.isArray(n))return!1;let w=Object.keys(e);return w.length!==Object.keys(n).length?!1:w.every(p=>Object.prototype.hasOwnProperty.call(n,p)&&q(e[p],n[p]))}function ee(e,n){if(!Array.isArray(e)||typeof n!="number")return!1;for(let w of e)if(Array.isArray(w)&&n>=w[0]&&n<=w[1])return!0;return!1}function H(e,n){let w=(Array.isArray(e)?e:[]).map(b=>[b[0],b[1]]);w.push([n,n]),w.sort((b,h)=>b[0]-h[0]);let p=[];for(let b of w){let h=p[p.length-1];h&&b[0]<=h[1]+1?h[1]=Math.max(h[1],b[1]):p.push([b[0],b[1]])}return p}function J(e){return JSON.stringify(e)}function l(e){return new Promise((n,w)=>{e.onsuccess=()=>n(e.result),e.onerror=()=>w(e.error)})}function X(e,n){return new Promise((w,p)=>{let b=n===void 0?e.openCursor():e.openCursor(n),h=[];b.onerror=()=>p(b.error),b.onsuccess=()=>{let S=b.result;if(!S){w(h);return}h.push(S.value),S.continue()}})}function te(e){e.objectStoreNames.contains(P)||e.createObjectStore(P,{keyPath:"slot"}).createIndex(Z,"scope"),e.objectStoreNames.contains(V)||e.createObjectStore(V,{keyPath:"key"}),e.objectStoreNames.contains(Y)||e.createObjectStore(Y,{keyPath:"key"})}function oe(e=globalThis.indexedDB,{name:n=x,version:w=1}={}){return new Promise(p=>{if(!e||typeof e.open!="function"){p({ok:!1,code:"unavailable"});return}let b;try{b=e.open(n,w)}catch(A){p({ok:!1,code:R(A)});return}let h=!1,S=A=>{h||(h=!0,clearTimeout(M),p(A))},M=setTimeout(()=>S({ok:!1,code:"blocked"}),5e3);b.onupgradeneeded=()=>te(b.result),b.onsuccess=()=>{let A=b.result;A.onversionchange=()=>{try{A.close()}catch{}},S({ok:!0,db:A})},b.onerror=()=>S({ok:!1,code:R(b.error)}),b.onblocked=()=>S({ok:!1,code:"blocked"})})}function ae({scope:e,indexedDB:n=globalThis.indexedDB,now:w=()=>Date.now(),maxScopeBytes:p=33554432,maxDbBytes:b=67108864}={}){if(!Array.isArray(e)||e.length!==4)throw new TypeError("createStore needs a four-part scope");let h=null,S=null,M=null,A={scopeBytes:0,dbBytes:null,maxScopeBytes:p,maxDbBytes:b},L=()=>({ok:M?.ok!==!1,code:M?.code??null,durable:M?.ok===!0,usage:{...A}});async function j(){return h||(h=oe(n).then(o=>(M=o.ok?{ok:!0}:{ok:!1,code:o.code},o.ok&&(S=o.db),o))),h}let K=["usage",...e];async function D(o,t){let[a,r]=await Promise.all([l(o.get(K)),l(o.get(z))]);if(a&&r)return{scopeBytes:a.value,dbBytes:r.value};let d=await X(t),u={scopeBytes:0,dbBytes:0};for(let s of d){let c=s.bytes??G(s);u.dbBytes+=c,_(s.scope)&&(u.scopeBytes+=c)}return u}async function I(o,t){A.scopeBytes=t.scopeBytes,A.dbBytes=t.dbBytes,await Promise.all([l(o.put({key:K,value:t.scopeBytes})),l(o.put({key:z,value:t.dbBytes}))])}function _(o){return Array.isArray(o)&&o.length===4&&o.every((t,a)=>t===e[a])}function T(o){return Array.isArray(o)?[...e,...o]:o}function N(o){return new Promise(t=>{if(!S){t({ok:!1,code:M?.code||"unavailable"});return}let a;try{a=S.transaction([P,V,Y],"readwrite")}catch(i){t({ok:!1,code:R(i)});return}let r={...A},d=!1,u=null,s=null,c=i=>{d||(d=!0,t(i))},y=i=>{u||(u=i);try{a.abort()}catch{}};a.oncomplete=()=>{u&&Object.assign(A,r),c(u?{ok:!1,code:u}:{ok:!0,result:s})},a.onerror=()=>{u||(u=R(a.error))},a.onabort=()=>{Object.assign(A,r),c({ok:!1,code:u||R(a.error)||"aborted"})};let k={tx:a,records:a.objectStore(P),watermarks:a.objectStore(V),meta:a.objectStore(Y),abort:y};Promise.resolve().then(()=>o(k)).then(i=>{s=i},i=>y(R(i)))})}async function $(o,t){let{records:a,watermarks:r,meta:d}=o,u=await l(a.get(t.slot));if(u&&u.revision>t.revision)return{ok:!0,skipped:!0,id:t.id,revision:t.revision};if(t.kind==="text"){let y=await l(r.get(t.slot));if(y&&y.ackRevision>=t.revision)return{ok:!0,skipped:!0,id:t.id,revision:t.revision}}let s=await D(d,a),c=t.bytes-(u?.bytes??0);return s.scopeBytes+c>p||s.dbBytes+c>b?{ok:!1,code:"over-budget"}:(u?.created&&(t.created=u.created),await l(a.put(t)),await I(d,{scopeBytes:s.scopeBytes+c,dbBytes:s.dbBytes+c}),{ok:!0,id:t.id,revision:t.revision})}return{scope:e,open:j,status:L,async put(o){let t=await j();if(!t.ok)return{ok:!1,code:t.code};let a={...o,scope:[...e],slot:T(o.id)};a.bytes=G(a);let r=await N(d=>$(d,a));return r.ok?r.result:{ok:!1,code:r.code}},async get(o){let t=await j();if(!t.ok)return{ok:!1,code:t.code};let a;try{a=S.transaction([P],"readonly")}catch(d){return{ok:!1,code:R(d)}}let r=await l(a.objectStore(P).get(T(o)));return!r||!_(r.scope)?{ok:!1,code:"missing"}:{ok:!0,record:r}},async list(){let o=await j();if(!o.ok)return{ok:!1,code:o.code,records:[],status:L()};let t;try{t=S.transaction([P,Y],"readonly")}catch(c){return{ok:!1,code:R(c),records:[],status:L()}}let a=t.objectStore(P),r=t.objectStore(Y),[d,u,s]=await Promise.all([X(a.index(Z),[...e]),l(r.get(K)),l(r.get(z))]);return u?A.scopeBytes=u.value:A.scopeBytes=d.reduce((c,y)=>c+(y.bytes??0),0),A.dbBytes=s?s.value:null,{ok:!0,records:d,status:L()}},async remove(o,{revision:t}={}){let a=await j();if(!a.ok)return{ok:!1,code:a.code};let r=await N(async d=>{let u=T(o),s=await l(d.records.get(u));if(!s||!_(s.scope))return{ok:!1,code:"missing"};if(t!==void 0&&s.revision!==t)return{ok:!1,code:"stale"};let c=await D(d.meta,d.records);return await l(d.records.delete(u)),await I(d.meta,{scopeBytes:Math.max(0,c.scopeBytes-s.bytes),dbBytes:Math.max(0,c.dbBytes-s.bytes)}),{ok:!0,id:o}});return r.ok?r.result:{ok:!1,code:r.code}},async acknowledge(o,{revision:t,etag:a=null,captureId:r=null,drop:d=!0}={}){if(typeof t!="number"||!Array.isArray(o))return{ok:!1,code:"invalid"};let u=await j();if(!u.ok)return{ok:!1,code:u.code};let s=T(o),c=await N(async y=>{let k=await l(y.watermarks.get(s)),i=Math.max(k?.ackRevision??0,t);await l(y.watermarks.put({key:s,ackRevision:i,etag:a,captureId:r,updated:w()}));let f=await l(y.records.get(s));if(!f||!_(f.scope)||!d||f.revision>i)return{ok:!0,acknowledged:i,deleted:!1};let B=await D(y.meta,y.records);return await l(y.records.delete(s)),await I(y.meta,{scopeBytes:Math.max(0,B.scopeBytes-f.bytes),dbBytes:Math.max(0,B.dbBytes-f.bytes)}),{ok:!0,acknowledged:i,deleted:!0}});return c.ok?c.result:{ok:!1,code:c.code}},async appendBinary(o,t=null){if(!o||o.id===void 0||typeof o.revision!="number")return{ok:!1,code:"invalid"};let a=await j();if(!a.ok)return{ok:!1,code:a.code};let r={...o,kind:"binary-batch",scope:[...e],slot:T(o.id)};r.bytes=G(r);let d=T(o.capsuleId),u=await N(async s=>{let c=await l(s.records.get(d));if(c){if(!_(c.scope)||c.kind!=="binary"||c.channel!==r.channel)return{ok:!1,code:"channel-mismatch"};if(c.version!==r.version)return{ok:!1,code:"unknown-version"};if(!q(c.context,r.context))return{ok:!1,code:"context-mismatch"}}let y=await l(s.watermarks.get(d));if(ee(y?.retired,r.revision))return{ok:!0,skipped:!0,id:r.id,revision:r.revision};let k=await l(s.records.get(r.slot));if(k&&_(k.scope)&&k.revision>=r.revision)return{ok:!0,skipped:!0,id:r.id,revision:r.revision};let i=null;if(!c){if(!t)return{ok:!1,code:"missing"};i={...t,kind:"binary",scope:[...e],slot:d},i.bytes=G(i)}let f=await D(s.meta,s.records),B=r.bytes+(i?.bytes??0)-(k?.bytes??0);return f.scopeBytes+B>p||f.dbBytes+B>b?{ok:!1,code:"over-budget"}:(i&&await l(s.records.put(i)),await l(s.records.put(r)),await I(s.meta,{scopeBytes:f.scopeBytes+B,dbBytes:f.dbBytes+B}),{ok:!0,id:r.id,revision:r.revision})});return u.ok?u.result:{ok:!1,code:u.code}},async acknowledgeBinary({channel:o,version:t,writerId:a,records:r=[],authority:d=null,epoch:u=null,sequence:s=null}={}){if(!Array.isArray(r)||!r.length)return{ok:!0,acknowledged:0};let c=await j();if(!c.ok)return{ok:!1,code:c.code};let y=await N(async k=>{let i=new Map;for(let E of r){if(!E||E.id===void 0||typeof E.revision!="number")continue;let O=T(E.id),v=await l(k.records.get(O));if(!v||!_(v.scope)||v.channel!==o||v.version!==t||v.writerId!==a||v.revision!==E.revision)continue;let g=v,C=O;v.kind!=="binary"&&(C=T(v.capsuleId),g=await l(k.records.get(C)),!g||!_(g.scope)||g.channel!==o||g.version!==t)||i.set(J(C),{capsuleSlot:C,capsule:g})}if(!i.size)return{ok:!0,acknowledged:0};let f={authority:d,epoch:u,sequence:s},B=await D(k.meta,k.records),m=0;for(let{capsuleSlot:E,capsule:O}of i.values()){let v={...O,acknowledged:f};v.bytes=G(v),m+=v.bytes-O.bytes,await l(k.records.put(v));let g=await l(k.watermarks.get(E));await l(k.watermarks.put({...g||{},key:E,kind:"binary",retired:g?.retired??[],acknowledged:f,updated:w()}))}return await I(k.meta,{scopeBytes:Math.max(0,B.scopeBytes+m),dbBytes:Math.max(0,B.dbBytes+m)}),{ok:!0,acknowledged:i.size}});return y.ok?y.result:{ok:!1,code:y.code}},async checkpointBinary({channel:o,version:t,writerId:a,records:r=[]}={}){if(!Array.isArray(r)||!r.length)return{ok:!0,retired:[]};let d=await j();if(!d.ok)return{ok:!1,code:d.code};let u=await N(async s=>{let c=[],y=new Map,k=0;for(let f of r){if(!f||f.id===void 0||typeof f.revision!="number")continue;let B=T(f.id),m=await l(s.records.get(B));if(!m||!_(m.scope)||m.channel!==o||m.version!==t||m.writerId!==a||m.revision!==f.revision)continue;c.push({slot:B,existing:m}),k+=m.bytes;let E=m.kind==="binary"?B:T(m.capsuleId),O=J(E);y.has(O)||y.set(O,{markSlot:E,ranges:(await l(s.watermarks.get(E)))?.retired??[]}),y.get(O).ranges=H(y.get(O).ranges,m.revision)}if(!c.length)return{ok:!0,retired:[]};let i=await D(s.meta,s.records);for(let{slot:f}of c)await l(s.records.delete(f));for(let{markSlot:f,ranges:B}of y.values()){let m=await l(s.watermarks.get(f));await l(s.watermarks.put({...m||{},key:f,kind:"binary",retired:B,acknowledged:m?.acknowledged??null,updated:w()}))}return await I(s.meta,{scopeBytes:Math.max(0,i.scopeBytes-k),dbBytes:Math.max(0,i.dbBytes-k)}),{ok:!0,retired:c.map(({existing:f})=>({id:f.id,revision:f.revision}))}});return u.ok?u.result:{ok:!1,code:u.code}},async compactBinary({channel:o,version:t,capsuleId:a,expectedRevision:r,replacement:d=null,inputs:u=[]}={}){if(!d||typeof d.revision!="number")return{ok:!1,code:"invalid"};let s=await j();if(!s.ok)return{ok:!1,code:s.code};let c=T(a),y=await N(async k=>{let i=await l(k.records.get(c));if(!i||!_(i.scope)||i.kind!=="binary")return{ok:!1,code:"missing"};if(i.channel!==o)return{ok:!1,code:"channel-mismatch"};if(i.version!==t)return{ok:!1,code:"unknown-version"};if(i.revision!==r)return{ok:!1,code:"stale"};if(d.revision<=i.revision)return{ok:!1,code:"invalid"};let f=[];for(let g of u){if(!g||g.id===void 0||typeof g.revision!="number")return{ok:!1,code:"stale"};let C=T(g.id),U=await l(k.records.get(C));if(!U||!_(U.scope))return{ok:!1,code:"stale"};if(U.kind!=="binary-batch"||U.channel!==i.channel||U.version!==i.version)return{ok:!1,code:"stale"};if(!q(U.capsuleId,i.id)||U.revision!==g.revision)return{ok:!1,code:"stale"};f.push({slot:C,existing:U})}let B={...i,revision:d.revision,payload:d.payload,updated:d.updated};B.bytes=G(B);let m=B.bytes-i.bytes;for(let{existing:g}of f)m-=g.bytes;let E=await D(k.meta,k.records);if(E.scopeBytes+m>p||E.dbBytes+m>b)return{ok:!1,code:"over-budget"};for(let{slot:g}of f)await l(k.records.delete(g));await l(k.records.put(B));let O=await l(k.watermarks.get(c)),v=O?.retired??[];for(let{existing:g}of f)v=H(v,g.revision);return await l(k.watermarks.put({...O||{},key:c,kind:"binary",retired:v,acknowledged:O?.acknowledged??i.acknowledged??null,updated:w()})),await I(k.meta,{scopeBytes:E.scopeBytes+m,dbBytes:E.dbBytes+m}),{ok:!0,retired:f.map(({existing:g})=>({id:g.id,revision:g.revision})),revision:B.revision}});return y.ok?y.result:{ok:!1,code:y.code}},close(){try{S?.close()}catch{}S=null,h=null,M=null}}}export{se as DB_BUDGET_BYTES,x as DB_NAME,re as DB_VERSION,Y as META,P as RECORDS,ne as SCOPE_BUDGET_BYTES,V as WATERMARKS,R as codeFor,ae as createStore,oe as openDatabase,G as recordBytes};
@@ -0,0 +1,2 @@
1
+ import{a as u}from"./c-HDDEEL77.js";import{A as M}from"./c-5J4E7O4Y.js";import{b,d as x,m as v}from"./c-WWXIDH4O.js";import"./c-VHNSBD2M.js";var{Plugin:R}=b,{Decoration:D}=x;var O=[["","Plain text"],["javascript","JavaScript"],["typescript","TypeScript"],["jsx","JSX"],["tsx","TSX"],["json","JSON"],["html","HTML"],["css","CSS"],["python","Python"],["shellscript","Shell"],["sql","SQL"],["go","Go"],["rust","Rust"],["java","Java"],["c","C"],["cpp","C++"],["csharp","C#"],["ruby","Ruby"],["php","PHP"],["yaml","YAML"],["markdown","Markdown"],["diff","Diff"],["swift","Swift"],["kotlin","Kotlin"],["xml","XML"]],L=new Set(O.map(([s])=>s)),T={js:"javascript",mjs:"javascript",ts:"typescript",py:"python",sh:"shellscript",bash:"shellscript",shell:"shellscript",zsh:"shellscript",rb:"ruby",yml:"yaml",md:"markdown",htm:"html",golang:"go",rs:"rust","c++":"cpp",cs:"csharp","c#":"csharp",kt:"kotlin"},m=s=>{let t=String(s??"").trim().toLowerCase(),e=T[t]??t;return L.has(e)?e:""},n=s=>({color:s}),C={name:"page",appearance:"light",cssVariables:{prefix:"--page-code-token-"},style:{syntax:{comment:n("comment"),keyword:n("keyword"),operator:n("keyword"),preproc:n("keyword"),"punctuation.special":n("keyword"),string:n("string-expression"),"string.escape":n("constant"),"string.regex":n("constant"),"string.special":n("constant"),number:n("constant"),boolean:n("constant"),constant:n("constant"),type:n("constant"),property:n("constant"),enum:n("constant"),variant:n("constant"),namespace:n("constant"),label:n("constant"),function:n("function"),constructor:n("function"),selector:n("function"),attribute:n("function"),"variable.parameter":n("parameter"),tag:n("string-expression"),link_uri:n("link"),link_text:n("link"),"diff.plus":n("string-expression"),"diff.minus":n("keyword"),title:{font_weight:700},emphasis:{font_style:"italic"},"emphasis.strong":{font_weight:700}}}},E=null;async function P(s,t){E??=import("./c-3OWDMNJR.js");let{codeToTokens:e}=await E;return e(s,{lang:t,theme:C}).tokens}var _="var(--page-code-token-foreground)",A=s=>{let t=[];return s.color&&s.color!==_&&t.push(`color: ${s.color}`),s.fontStyle&1&&t.push("font-style: italic"),s.fontStyle&2&&t.push("font-weight: 600"),s.fontStyle&4&&t.push("text-decoration: underline"),t.join("; ")},H=200,y=class{constructor(t,e,i){this.view=t,this.run=e,this.delay=i,this.cache=new Map,this.pending=new Set,this.visible=new Set,this.targets=new Map,this.timer=0;let c=t.dom.ownerDocument.defaultView.IntersectionObserver;this.io=c?new c(a=>{for(let o of a){let r=o.target.dataset.id;this.targets.get(r)===o.target&&this.visible[o.isIntersecting?"add":"delete"](r)}this.schedule(0)},{rootMargin:"200px 0px"}):null,this.schedule(0)}update(t,e){(!e||t.state.doc!==e.doc)&&this.schedule(this.delay)}schedule(t){clearTimeout(this.timer),this.timer=setTimeout(()=>this.pass(),t)}pass(){let{view:t}=this;if(t.isDestroyed)return;let e=[],i=new Map,c=u.getState(t.state);t.state.doc.forEach((o,r)=>{if(o.type!==v.nodes.code_block)return;let p=o.attrs.id,d=t.nodeDOM(r);d&&i.set(p,d);let g=m(o.attrs.lang);if(!g)return;let k=o.textContent,l=`${g}
2
+ ${k}`,w=this.cache.get(l);if(w)for(let h of w){let S=A(h);S&&h.content&&e.push(D.inline(r+1+h.offset,r+1+h.offset+h.content.length,{style:S}))}else{if(e.push(...c.find(r,r+o.nodeSize)),this.io&&!this.visible.has(p)||this.pending.has(l))return;this.pending.add(l),this.run(k,g).then(h=>h.flat(),()=>[]).then(h=>{this.pending.delete(l),this.cache.set(l,h),this.cache.size>H&&this.cache.delete(this.cache.keys().next().value),this.schedule(0)})}}),this.track(i);let a=o=>o.map(r=>`${r.from}:${r.to}:${r.type.attrs.style}`).join("|");a(e)!==a(u.getState(t.state).find())&&t.dispatch(t.state.tr.setMeta(u,e).setMeta("addToHistory",!1))}track(t){if(this.io){for(let[e,i]of this.targets)t.get(e)!==i&&(this.io.unobserve(i),this.targets.delete(e),this.visible.delete(e));for(let[e,i]of t)this.targets.get(e)!==i&&(this.targets.set(e,i),this.io.observe(i))}}destroy(){clearTimeout(this.timer),this.io?.disconnect()}};function j(s,{tokenize:t=P,delay:e=300}={}){let i=new y(s,t,e),c=s.dispatch.bind(s),a=s.state.doc,o=p=>{if(c(p),s.state.doc===a)return;let d={doc:a};a=s.state.doc,i.update(s,d)};s.dispatch=o;let r=i.destroy.bind(i);return i.destroy=()=>{s.dispatch===o&&(s.dispatch=c),r()},i}var f=class{constructor(t,e,i){this.node=t,this.view=e,this.getPos=i;let c=e.dom.ownerDocument;this.dom=c.createElement("pre"),this.contentDOM=c.createElement("code"),this.select=c.createElement("select"),this.select.className="page-code-lang",this.select.contentEditable="false",this.select.setAttribute("aria-label","Code language");for(let[a,o]of O)this.select.append(new Option(o,a));this.select.addEventListener("change",()=>this.setLang(this.select.value)),this.dom.append(this.select,this.contentDOM),this.render(t)}render(t){this.node=t,this.dom.dataset.id=t.attrs.id??"";let e=m(t.attrs.lang);e?this.dom.dataset.lang=e:delete this.dom.dataset.lang,this.select.value=e}setLang(t){let e=this.getPos();e==null||t===m(this.node.attrs.lang)||(this.view.dispatch(M(this.view.state.tr.setNodeMarkup(e,null,{...this.node.attrs,lang:t}))),this.view.focus())}update(t){return t.type!==this.node.type?!1:(this.render(t),!0)}stopEvent(t){return this.select.contains(t.target)}ignoreMutation(t){return t.type!=="selection"&&this.select.contains(t.target)}};function X({view:s=null,highlight:t={}}={}){let e=s?j(s,t):null;return{id:"code",nodeViews:{code_block:(i,c,a)=>new f(i,c,a)},css:null,dispose(){e?.destroy()}}}export{X as createFeature};
@@ -0,0 +1 @@
1
+ import{F as j,G as P,M as V,n as l,o as T,q as I,u as $,x as B}from"./c-4DFEJ2PO.js";import{C as J,D as k,E as v,F as K,M as R,N as b,o as w,s as _,t as E,u as U,v as D,w as O}from"./c-6CRUUXOX.js";import{$ as Y,_ as F,ca as M,ia as N,ja as x,m as h,r as C,w as A}from"./c-WWXIDH4O.js";var y=t=>t&&typeof t=="object"?JSON.parse(JSON.stringify(t)):t,p=t=>{throw new l("unsupported-content",t)},H=t=>{if(t._map){for(let e of t._map.values())if(!e.deleted)return!0}for(let e=t._start;e;e=e.right)if(!e.deleted)return!0;return!1},f=t=>{throw new l("invalid-content",t)},G={span:["length","sourceClient","sourceClock"],alias:["sourceClient","sourceClock"],boundary:["blockId","kind","recoveryOf"]},Q=["copy","removed","restore"],u=t=>Number.isSafeInteger(t)&&t>=0,W=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),S=(t,e)=>`${t}.${e}`,q=t=>JSON.stringify([t.blockId,t.kind,t.recoveryOf??null]),X=(t,e)=>{try{return C({[b(t)]:e}),!0}catch{return!1}};function Z(t){t.flow._map.size&&p("The page flow must contain text and block markers");for(let e=t.flow._start;e;e=e.right){if(e.deleted)continue;let r=e.content;if(!(r instanceof D)){if(r instanceof U){r.value!==null&&!Object.hasOwn(h.marks,b(r.key))&&!X(r.key,r.value)&&p(`Unsupported page mark: ${r.key}`);continue}if(r instanceof E){let o=r.embed;if(o&&Object.keys(o).length===1&&(typeof o.b=="string"&&o.b||o.br===1))continue}p("Unsupported content in the page flow")}}for(let[e,r]of t.attrs)r instanceof _||p(`Unsupported attributes for page block: ${e}`)}var m=(t,e)=>{let r=typeof e=="string"?j(e):e;if(!r)return!1;let o;try{o=w(t.ydoc.store,r)}catch{return!1}return o instanceof O&&o.parent===t.flow&&o.id.clock<=r.clock&&r.clock<o.id.clock+o.length},ee=t=>t.charCodeAt(0)===91?JSON.parse(t)[1]:t;function te(t){let e;try{e=P(t.gone,{strict:!0})}catch(o){throw o instanceof B?new l("invalid-content",o.message):o}for(let o of e.textDeletes){let a=w(t.ydoc.store,{client:o.client,clock:o.clock});if(!(a instanceof O)||a.parent!==t.flow||a.id.clock>o.clock||o.clock+o.length>a.id.clock+a.length)throw new l("invalid-content",`Invalid text-delete record: ${o.key}`)}let r=o=>{throw new l("invalid-content",o)};for(let o of e.removals)m(t,o.source)||r(`Invalid removal source: ${o.key}`),o.end!==null&&!m(t,o.end)&&r(`Invalid removal end: ${o.key}`);for(let o of e.restores){m(t,o.sourceKey)||r(`Invalid restore source: ${o.key}`);for(let a of o.covers)m(t,ee(a))||r(`Invalid restore cover: ${o.key}`)}for(let o of e.copyActive)m(t,o)||r(`Invalid copy-active record: ${o}`);for(let o of e.attrs.keys())m(t,o)||r(`Invalid attribute override: ${o}`)}function oe(t){let e=new Map,r=new Map,o=(s,n,c)=>{W(s)||f(`Invalid origin record: ${c}`);for(let i of Object.keys(s))n.includes(i)||f(`Unsupported origin field ${i} in ${c}`)};for(let[s,n]of t.origins){(typeof s!="string"||s.charCodeAt(0)!==91)&&f(`Malformed origin key: ${s}`);let c=null;try{c=JSON.parse(s)}catch{f(`Malformed origin key: ${s}`)}(!Array.isArray(c)||typeof c[0]!="string")&&f(`Malformed origin key: ${s}`);let i=c[0];if(i==="author"){(c.length!==2||!u(c[1]))&&f(`Malformed origin key: ${s}`),(typeof n!="string"||!n)&&f(`Invalid author record: ${s}`);continue}if(Object.hasOwn(G,i)||p(`Unsupported origin record: ${s}`),(c.length!==3||!u(c[1])||!u(c[2]))&&f(`Malformed origin key: ${s}`),o(n,G[i],s),i==="span"){(!Number.isSafeInteger(n.length)||n.length<1||!u(n.sourceClient)||!u(n.sourceClock)||!u(n.sourceClock+n.length-1))&&f(`Invalid span record: ${s}`);continue}if(i==="alias"){(!u(n.sourceClient)||!u(n.sourceClock))&&f(`Invalid alias record: ${s}`),e.set(S(c[1],c[2]),{client:n.sourceClient,clock:n.sourceClock});continue}(typeof n.blockId!="string"||!n.blockId||!Q.includes(n.kind))&&f(`Invalid boundary record: ${s}`),n.recoveryOf!==void 0&&!j(n.recoveryOf)&&f(`Invalid boundary record: ${s}`),r.set(S(c[1],c[2]),n)}let a=new Map;for(let[s,n]of r){let c=s,i=new Set;for(;!i.has(c);){i.add(c);let g=e.get(c);if(!g)break;c=S(g.client,g.clock)}i.has(c)&&e.has(c)&&f(`Cyclic boundary alias: ${s}`);let d=a.get(c);d&&q(d)!==q(n)&&f(`Conflicting boundary values: ${s}`),a.set(c,n)}}function L(t){let e="",r=[];for(let a of t.runs)if(!a.hole)if(a.br)t.t==="code_block"&&p("A code block cannot contain a hard-break atom"),e+=F,r.push(Y);else{e+=a.text;let s=A([...a.marks].sort((n,c)=>n.type.rank-c.type.rank));for(let n=0;n<a.text.length;n++)r.push(s)}let o={c:e};return r.some(Boolean)&&(o.m=N(r)),o}var z=(t,e)=>t.fields?Object.entries(t.fields):e?e.entries():[];function ne(t,e,r){let o=t.attrs.get(e.baseId),a={t:e.t,pos:String(r+1).padStart(8,"0")};for(let[s,n]of z(e,o))s!=="t"&&s!=="pos"&&(a[s]=y(n));return Object.assign(a,L(e))}function re(t,e,r){if(!Object.hasOwn(M,e.t))return(typeof e.t!="string"||!e.t||e.t==="opaque_block")&&p(`Unsupported page block type: ${e.t}`),ne(t,e,r);let o=h.nodes[e.t],a=t.attrs.get(e.baseId),s=e.t==="table"&&!e.fields?I(t.tableFields,e.baseId,{cols:a?.get("cols"),rows:a?.get("rows")}):null,n={t:e.t,pos:String(r+1).padStart(8,"0")};for(let i of k(o)){if(e.t==="board"&&(i==="columns"||i==="cards"))continue;let d=e.fields?e.fields[i]:s&&(i==="cols"||i==="rows")?s[i]:a?.has(i)?a.get(i):v(o,i);K(d,v(o,i))||(n[i]=y(d))}e.t==="table"&&(n.rows=y((e.fields?e.fields.rows:s.rows)??{})),e.t==="board"&&Object.assign(n,e.fields?{columns:y(e.fields.columns??{}),cards:y(e.fields.cards??{})}:$(t.boardFields,e.baseId));let c=new Set(k(o));for(let[i,d]of z(e,a))i==="t"||i==="pos"||c.has(i)||Object.hasOwn(n,i)||(n[i]=y(d));return o.isTextblock&&Object.assign(n,L(e)),n}function ie(t){let e=T(t,{strict:!0});try{for(let[n,c]of e.share)!J.includes(n)&&H(c)&&p(`Unsupported page root: ${n}`);let r=R(e);Z(r),$(r.boardFields),I(r.tableFields),te(r),oe(r);let o=V(r).visible,a=new Set(o.filter(n=>!n.implicit).map(n=>n.id)),s=new Set;return Object.fromEntries(o.map((n,c)=>{let i=n.id;if(s.has(i)||n.implicit&&a.has(i)){let d=2;do i=`${n.id}~${d++}`;while(s.has(i)||a.has(i))}return s.add(i),[i,re(r,n,c)]}))}catch(r){throw r instanceof l?r:new l("invalid-content",`Invalid Yjs page content: ${r.message}`)}finally{e.destroy()}}function we(t){if(t.some(e=>!e||typeof e!="object"||Array.isArray(e)))throw new l("invalid-value","Expected a page data object");if(!t.some(e=>Object.hasOwn(e,"y")||Object.hasOwn(e,"v")))return x(t);if(t.length!==1||Object.hasOwn(t[0],"blocks")||Object.hasOwn(t[0],"deleted"))throw new l("invalid-value","A Yjs page must have one page tag without hybrid block data");return ie(t[0])}export{ie as a,we as b};
@@ -0,0 +1 @@
1
+ import{a,b}from"./c-KIPQJX4B.js";import"./c-QHWJ5ZIJ.js";import"./c-LFPHCXY3.js";import"./c-OIBUTDXI.js";import"./c-4JZDZFF6.js";import"./c-VAK7SG37.js";import"./c-46XYM55L.js";import"./c-NUHP2XDB.js";import"./c-VHNSBD2M.js";export{a as SURFACE_THEME,b as default};
@@ -0,0 +1 @@
1
+ import{C as c,L as a,ka as i,m as s}from"./c-WWXIDH4O.js";function b(r){let e=[],o="";return r.forEach(t=>{if(t.type===s.nodes.heading&&(o=t.textContent),t.type!==s.nodes.table)return;let l=i({[t.attrs.id]:a(t)})[0],m=l.rows.map(n=>({...n,cells:Object.fromEntries(Object.entries(n.cells).map(([p,f])=>[p,c(f)]))}));e.push({id:l.id,name:o||`Table ${e.length+1}`,cols:l.cols,rows:m})}),e}function j(r,e){let o=[];return r.forEach(t=>{t.type===s.nodes.heading&&o.push({level:t.attrs.level,text:t.textContent})}),{title:e,outline:o,tables:b(r)}}export{b as a,j as b};
@@ -0,0 +1 @@
1
+ var o=Object.freeze(["#6b4fa8","#2f6a9e","#9a6a1c","#a8463d","#2f7a69","#4f6178","#3f7d3a","#a2457a"]);function n(t){let e=0;for(let r of String(t))e=e*31+r.codePointAt(0)>>>0;return e%o.length}function a(t){return o[n(t)]}function f(t){return String(t).trim().split(/\s+/).filter(Boolean).slice(0,2).map(r=>Array.from(r)[0]).join("").toUpperCase()||"?"}export{n as a,a as b,f as c};
@@ -0,0 +1 @@
1
+ import{a as r}from"./c-VKEDWYDF.js";import{e as o}from"./c-OW5QIGG3.js";import{m as c}from"./c-SPIORRYS.js";var l="[editmode\\:resource]:is(style, link, script)",u='[editmode\\:resource]:is(style, link, script)[type^="inert/"]',i="inert/";function s(e){let t=e.getAttribute("type");return t&&t.startsWith(i)?!1:(e.setAttribute("type",i+(t||"")),!0)}function m(e){let t=e.getAttribute("type").slice(i.length);t?e.setAttribute("type",t):e.removeAttribute("type")}function d(){c(e=>{e.querySelectorAll(l).forEach(s)})}function f(){o&&r(()=>{a()})}function a(e=document){let t=(e.ownerDocument||e)===document;e.querySelectorAll(u).forEach(n=>{m(n),t&&n.replaceWith(n.cloneNode(!0))})}function R(){document.querySelectorAll(l).forEach(e=>{s(e)&&e.replaceWith(e.cloneNode(!0))})}function b(){d(),f()}export{l as a,a as b,R as c,b as d};
@@ -0,0 +1,9 @@
1
+ import{a as Re}from"./c-TCCA5BZN.js";import{a as Q,b as Qe,c as et,d as tt,e as gt,f as mt,g as nt,h as qn,i as Be,j as yt,k as V,l as rt,m as Nt,n as ot,o as Sn}from"./c-LRPUO2MX.js";import{b as $t}from"./c-A7LS5UZW.js";import{d as An}from"./c-5V3MOVJT.js";import{e as bn}from"./c-LZJPNR2W.js";import{E as Rt,J as wn,f as yn,q as vn}from"./c-TCJTVAFN.js";import{a as Tt}from"./c-2SPVQSHC.js";import{e as dn,f as pn,g as hn,h as gn,i as mn}from"./c-LWLBHLVC.js";import{a as Mt}from"./c-TQEMVJCS.js";import{a as Ot,c as fn}from"./c-DCXOXBF3.js";import{e as ht,j as cn}from"./c-VRZN56XY.js";import{e as He}from"./c-OW5QIGG3.js";import{f as an,k as un}from"./c-SPIORRYS.js";var gr=/^[A-Za-z0-9_-]{1,64}$/,mr=/^[1-9]\d{0,15}$/;var It=e=>mr.test(e)&&Number.isSafeInteger(Number(e));function Fe(...e){let t=new Map;for(let r of e)for(let[o,n]of r??[])t.has(o)||t.set(o,[]),t.get(o).push(...n.map(([i,a])=>[i,a]));return[...t].sort(([r],[o])=>r<o?-1:r>o?1:0).map(([r,o])=>{let n=[];for(let[i,a]of o.sort((d,m)=>d[0]-m[0])){let d=n[n.length-1];d&&i<=d[1]+1?d[1]=Math.max(d[1],a):n.push([i,a])}return[r,n]}).filter(([,r])=>r.length)}var xn=e=>e.reduce((t,[,r])=>t+r.length,0),We=(e,t)=>!!e?.some(([r,o])=>r<=t&&t<=o),st=(e,t,r)=>We(e?.find(([o])=>o===t)?.[1],r),yr=([e,t])=>[[e,[[t,t]]]],vt=e=>e?.v===2?e.frames:e?[[e.client,[[1,e.n]]]]:[],On=e=>e?.v===2?Fe(e.ancestors,yr(e.capture)):[];function kn(e){if(!e)return[];let t=[],r=0;for(let o of e.split(";")){let n=o.split(":");if(n.length!==2||!gr.test(n[0])||!n[1])return null;let i=[];for(let a of n[1].split(",")){if(++r>256)return null;let d=a.split("-");if(d.length>2||!d.every(It))return null;let m=Number(d[0]),q=Number(d[1]??d[0]);if(q<m)return null;i.push([m,q])}t.push([n[0],i])}return Fe(t)}function En(e){return Fe(e).map(([t,r])=>`${t}:${r.map(([o,n])=>o===n?String(o):`${o}-${n}`).join(",")}`).join(";")}function it(e){if(typeof e!="string"||e.length>32768)return null;if(!e.startsWith("v2|")){let a=/^([A-Za-z0-9_-]{1,64}):([1-9]\d{0,15})$/.exec(e);return a&&It(a[2])?{client:a[1],n:Number(a[2])}:null}let t=e.split("|");if(t.length!==4)return null;let r=kn(t[1]),o=kn(t[2]),n=/^([A-Za-z0-9_-]{1,64}):([1-9]\d{0,15})$/.exec(t[3]);if(!r||!o||!n||!It(n[2])||xn(r)+xn(o)+1>256)return null;let i=[n[1],Number(n[2])];return st(o,...i)?null:{v:2,frames:r,ancestors:o,capture:i}}function Mn(e){let t=`v2|${En(e.frames)}|${En(e.ancestors)}|${e.capture[0]}:${e.capture[1]}`;return it(t)?t:null}var vr=new Set(["push","pop","shift","unshift","splice","sort","reverse","fill","copyWithin"]),wr=/^(0|[1-9]\d*)$/,Ne=e=>e!==null&&typeof e=="object",Ue=e=>Array.isArray(e)?"a list":"an object";function $e(e,t){let r=e;for(let o of t){if(!Ne(r))return;Array.isArray(r)?r=r[Number(o)]:r=Object.prototype.hasOwnProperty.call(r,o)?r[o]:void 0}return r}var wt=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),br=(e,t)=>V(e)===V(t);function Tn(e,t){let r=[];try{for(let o of t){let n=mt(e,o);n&&(r.push(n),e=n.root)}return r}catch{return Pt(r),null}}function Pt(e){let t;for(let r=e.length-1;r>=0;r--)t=nt(e[r]);return t}function qr(e,t,r){let o=[];for(let n of e){if(n.at===null||Array.isArray(n.at))return null;let i=o.find(a=>a.path.length===n.path.length&&Be(a.path,n.path));if(i){if(i.removed&&n.kind!=="remove")return null;n.kind==="remove"&&(i.removed=!0);continue}if(o.some(a=>Be(a.path,n.path)))return null;o.push({path:n.path,at:n.at,key:n.key,had:n.kind!=="add",old:n.old,removed:n.kind==="remove"})}for(let n of o){if(n.has=wt(n.at,n.key),n.had&&n.has&&n.removed||(n.into=$e(r,n.path.slice(0,-1)),!Ne(n.into)||Array.isArray(n.into)||wt(n.into,n.key)!==n.had))return null;let i=n.path.slice(0,-1);for(let a of t){let d=a.op.path;if(Be(n.path,d)||a.op.op==="del"&&d.length<=n.path.length&&Be(d.slice(0,-1),n.path)&&Array.isArray($e(r,d.slice(0,-1))))return null;if(!n.had&&n.has&&d.length>i.length&&Be(i,d)){let m=d[i.length];if(d.length===i.length+1&&a.op.op==="del"||!wt(n.at,String(m)))return null}}}return o}function Sr(e,t){if(t.op==="set"){let r=$e(e,t.path);if(Ne(r)&&Ne(t.value)&&Array.isArray(r)===Array.isArray(t.value)){yt(r,Q(t.value));return}}tt(e,t)}function Ct({name:e,value:t,ephemeral:r=!1}){if(!Ne(t))throw new TypeError(`clay.live("${e}"): the tag must hold a JSON object or list`);let o=Q(t),n=Q(t),i=!0,a=[],d=1,m=null,q="file",g=new Set,C=new Set,F=new Set,P=new Set,_=new Set,U=new WeakMap;function O(f,y){let v={source:f,ops:y};for(let k of[...g])try{k(v)}catch(L){console.error(`clay.live("${e}"): a change listener threw`,L)}}function B(){let f=Q(o),y=[];for(let v of a)try{et(f,v.op),f=tt(f,v.op),y.push(v)}catch{}a=y,yt(n,f),i=!0}function X(f){for(let y of[...F])try{y(f)}catch(v){console.error(`clay.live("${e}"): a rebase listener threw`,v)}}function T(f,{source:y="remote",confirmed:v=0,through:k,drop:L,dropIds:W,frame:ue=null,room:oe=null,cause:re=null}={}){if(!Ne(f)||Ue(f)!==Ue(n))return console.warn(`clay.live("${e}"): ignored an incoming value that is not ${Ue(n)}`),!1;let he=V(n),ge=o;if(o=Q(f),L)a=a.filter(te=>te.id<L[0]||te.id>L[1]);else if(W){let te=new Set(W);a=a.filter(we=>!te.has(we.id))}else a=k===void 0?a.slice(v):a.filter(te=>te.id>k);return B(),X({source:y,frame:ue,room:oe,cause:re,prev:ge,before:te=>$e(ge,te),next:o}),V(n)!==he&&O(y,null),!0}function ee(f){let y=Q(o);for(let v=f.length-1;v>=0;v--){let k=f[v];nt({...k,at:$e(y,k.path.slice(0,-1))})}return y}function w(f){for(let y of[...C])try{y(f)}catch(v){console.error(`clay.live("${e}"): a transport threw`,v)}O("local",f)}function J(f){let y=f.map(Qe);for(let v of y)if(v.path.length===0&&Ue(v.value)!==Ue(n))throw new TypeError(`clay.live("${e}"): the whole value must stay ${Ue(n)}`);y.length===1?et(n,y[0]):gt(Q(n),y);for(let v of y)Sr(n,v);a.push(...y.map(v=>({id:d++,op:v}))),m?m.push(...y):w(y)}function D(f,y){let v=U.get(f);v||U.set(f,v=new Map);let k=JSON.stringify(y),L=v.get(k);return L||(L=new Proxy(f,de(y)),v.set(k,L)),L}function de(f){return{get(y,v){if(Array.isArray(y)&&vr.has(v))return(...L)=>{let W=Q(y),ue=Array.prototype[v].apply(W,L);return J([{op:"set",path:f,value:W}]),ue===W?D(y,f):ue};let k=y[v];return typeof v=="symbol"||!Ne(k)||!Object.prototype.hasOwnProperty.call(y,v)?k:D(k,[...f,Array.isArray(y)?Number(v):v])},set(y,v,k){if(typeof v=="symbol")throw new TypeError(`clay.live("${e}"): symbol keys are not JSON`);if(Array.isArray(y)){if(v==="length"){let L=Q(y);return L.length=k,J([{op:"set",path:f,value:L}]),!0}if(!wr.test(v))throw new TypeError(`clay.live("${e}"): "${v}" is not a list index`);return J([{op:"set",path:[...f,Number(v)],value:k}]),!0}return J([{op:"set",path:[...f,v],value:k}]),!0},deleteProperty(y,v){if(typeof v=="symbol")return!0;if(Array.isArray(y))throw new TypeError(`clay.live("${e}"): remove a list item with splice`);return J([{op:"del",path:[...f,v]}]),!0},defineProperty(){throw new TypeError(`clay.live("${e}"): assign values instead of defining properties`)},setPrototypeOf(){return!1},preventExtensions(){return!1}}}let Y=D(n,[]),ae,pe=new Promise(f=>{ae=f}),z=Object.freeze({name:e,ephemeral:r,ready:pe,get data(){return Y},get status(){return{mode:q}},set(f,y){J([{op:"set",path:f,value:y}])},delete(f){J([{op:"del",path:f}])},add(f,y=1){J([{op:"add",path:f,n:y}])},update(f){if(typeof f!="function")throw new TypeError(`clay.live("${e}"): update() takes a function`);if(m)return f(Y);m=[];let y=a.length,v=d,k;try{if(k=f(Y),k&&typeof k.then=="function")throw new TypeError(`clay.live("${e}"): update() runs synchronously; do async work before calling it`)}catch(W){throw m=null,a.length=y,d=v,B(),W}let L=qn(m);return m=null,a.length=y,d=v,a.push(...L.map(W=>({id:d++,op:W}))),L.length&&w(L),k},on(f,y){if(f!=="change")throw new TypeError(`clay.live("${e}"): the only event is "change"`);if(typeof y!="function")throw new TypeError(`clay.live("${e}"): on() takes a function`);return g.add(y),()=>g.delete(y)},off(f,y){g.delete(y)},toJSON(){return Q(n)}});return ae(z),{handle:z,name:e,ephemeral:r,get value(){return n},get authoritative(){return o},get pending(){return a.map(f=>f.op)},pendingEntries(){return a.map(f=>({id:f.id,op:f.op}))},get mark(){return d-1},setMode(f){q=f},onLocal(f){return C.add(f),()=>C.delete(f)},confirm(f){let y=a.filter(v=>v.id<=f);if(y.length){try{o=gt(Q(o),y.map(v=>v.op))}catch{o=Q(n),i=!1}a=a.filter(v=>v.id>f);for(let v of[...P])try{v({through:f})}catch(k){console.error(`clay.live("${e}"): a confirmation listener threw`,k)}}},onConfirm(f){return P.add(f),()=>P.delete(f)},rebase:T,checkOps(f){let y;try{y=f.map(Qe)}catch{return null}let v=Tn(o,y);return v?(Pt(v),y):null},rebaseOps(f,{source:y="remote",confirmed:v=0,through:k,frame:L=null,room:W=null,cause:ue=null}={}){let oe=Tn(o,f);if(!oe)return!1;let re=k===void 0?a.slice(v):a.filter($=>$.id>k),he=a.length-re.length,ge=oe.some($=>$.at===null),te=i&&!ge&&he===f.length&&f.every(($,Z)=>br($,a[Z].op)),we=i&&!te&&he===0?qr(oe,re,n):null;if(!te&&!we)return Pt(oe),T(gt(Q(o),f),{source:y,confirmed:v,through:k,frame:L,room:W,cause:ue});a=re;let _e=!1;for(let $ of we??[]){let Z=$.into;if($.has){let je=$.at[$.key];(!$.had||V($.old)!==V(je))&&(_e=!0);let s=$.had?Z[$.key]:void 0,p=Q(je),A=Ne(s)&&Ne(p)&&Array.isArray(s)===Array.isArray(p);Object.defineProperty(Z,$.key,{value:A?yt(s,p):p,enumerable:!0,writable:!0,configurable:!0})}else $.had&&(_e=!0,delete Z[$.key])}let be=null,Oe=()=>be??=ee(oe),ce=oe.some($=>Array.isArray($.at)&&$.kind!=="put");return X({source:y,frame:L,room:W,cause:ue,get prev(){return Oe()},before:$=>{if(ce)return $e(Oe(),$);for(let Z of oe)if(Be(Z.path,$))return Z.path.length>$.length?$e(Oe(),$):$e(Z.old,$.slice(Z.path.length));return $e(o,$)},next:o}),_e&&O(y,null),!0},onRebase(f){return F.add(f),()=>F.delete(f)},onDelivery(f){return _.add(f),()=>_.delete(f)},deliver(f){for(let y of[..._])try{y(f)}catch(v){console.error(`clay.live("${e}"): a delivery listener threw`,v)}}}}function Rn({needsSave:e,blocked:t,save:r,saveNow:o,now:n=()=>Date.now(),setTimer:i=setTimeout,clearTimer:a=clearTimeout}){let d=null,m=null,q=!1,g=!1,C=0;function F(O){let B=O&&!O.ok&&O.msgType==="skipped";return C=O?.ok||B?0:n()+8e3,B?1e3:8e3}function P(O){d=O,m!==null&&a(m),m=i(U,Math.max(0,O-n()))}function _(){m!==null&&a(m),m=null,d=null}async function U(){if(m=null,d=null,!e())return;if(t()){P(n()+1e3);return}q=!0;let O=null;try{O=await r()}catch{O=null}finally{q=!1}let B=F(O);e()&&P(n()+B)}return{changed(){d===null&&!q&&P(n()+8e3)},flush(){q||!e()||t()||(_(),q=!0,g=!0,Promise.resolve().then(o).catch(()=>null).then(O=>{q=!1,g=!1;let B=F(O);e()&&P(n()+B)}))},soon(){if(q)return;let O=Math.max(n(),C);(d===null||O<d)&&P(O)},within(O){if(q)return;let B=Math.max(n()+O,C);(d===null||B<d)&&P(B)},get flushing(){return g},get deadline(){return d}}}var Ar=40,$n=128,lt=500,xr=1e4,kr=63*1024,Nn=15*1024,Er=/^page(\.[0-9]+)?$/,Or=512,_t=8e3,Mr=new Set([401,403]),Tr=new Set([401,403,404]),Rr=new TextEncoder,bt=e=>Rr.encode(JSON.stringify(e)).length,In=e=>e===0||e===408||e===429||e>=500,Pn=e=>e===429||e===503;function Lt({transport:e,entries:t,onEpoch:r=()=>{},onLeave:o=()=>{},onWriter:n=()=>{},onApplied:i=()=>{},onLanded:a=()=>{},onCheckpoint:d=()=>{},held:m=()=>!1,heldIds:q=()=>[],hold:g=()=>!0,taken:C=()=>{},onStop:F=()=>{},now:P=()=>Date.now(),setTimer:_=setTimeout,clearTimer:U=clearTimeout}){let O=null,B=!1,X=!1,T=null,ee=null,w=null,J=0,D=0,de=null,Y=new Set,ae=[],pe=!1,z=!1,f=!1,y=null,v=-1/0,k=0,L=null,W=null,ue=lt,oe=kr,re=lt,he=0,ge,te=0,we=!1,_e=0,be=!1,Oe=null,ce=new Map,Me=new Set,$=(l,c)=>t.get(l)?.store.deliver?.({code:null,n:null,seq:null,through:null,retryAfter:null,client:O,...c});function Z(l){let c=ce.get(l);return c||ce.set(l,c={n:0,unsent:[],awaiting:[],framed:0}),c}function je(l,c){!l.adopted||c.through<l.adopted.through||(c.adopted=l.adopted.rev,l.adopted=null)}function s(l,c){let u=t.get(l)?.store;return u?u.pendingEntries().filter(h=>h.id>c.framed):[]}function p(l,c){let u=t.get(l)?.store;if(!u)return;let h=new Set(u.pendingEntries().map(S=>S.id));c.awaiting=c.awaiting.filter(S=>S===y||!S.entries||S.entries.some(x=>h.has(x.id)))}let A=l=>l.refused===!0&&!l.uncertain;function M(l,c,u=!0){let h=t.get(l)?.store;for(let S of c.awaiting)S===y&&(S.undecided=!0);u&&(be=!0),c.out=!0,o(l,{epoch:T,seq:D}),c.unsent=[],h?.setMode("file"),i()}function b(){if(L!==null||f||z)return;let l=P(),c=Math.max(0,v+Ar-l,k-l);L=_(()=>{L=null,se()},c)}function N(){for(let[l,c]of ce){if(!Y.has(l)||m(l))continue;let u=c.awaiting.find(h=>!h.sent);if(u)return{name:l,lane:c,frame:u}}for(let[l,c]of ce){if(!c.unsent.length||!Y.has(l)||m(l))continue;let u=bt({name:l,n:c.n+1,ops:[],epoch:T}),h=0;for(;h<c.unsent.length&&h<$n;){let I=bt(c.unsent[h].op)+1;if(h&&u+I>oe)break;u+=I,h++}let S=c.unsent.splice(0,h),x={n:++c.n,ops:S.map(I=>I.op),entries:S,first:S[0].id,through:S[S.length-1].id,seq:null,sent:!1,receiptGeneration:ee,pageGeneration:w};return je(c,x),c.framed=Math.max(c.framed,x.through),c.awaiting.push(x),{name:l,lane:c,frame:x}}return null}async function se(){if(f||z||!B||!X||ge===null)return;let l=N();if(!l)return;let{name:c,lane:u,frame:h}=l;ce.delete(c),ce.set(c,u);let S=T;h.epoch=S,h.client=O,h.sentOn=he,h.sent=!0,$(c,{phase:"sent",n:h.n,first:h.first,through:h.through}),h.refused=!1,f=!0,y=h,v=P();let x;try{x=await e.send(O,{name:c,n:h.n,ops:h.ops,epoch:S,...ge!==void 0&&{conn:ge},...h.receiptGeneration!==null&&{receiptGeneration:h.receiptGeneration},...h.pageGeneration!==null&&Er.test(c)&&{pageGeneration:h.pageGeneration},...h.adopted&&{adopted:h.adopted}})}catch{x=null}f=!1,y=null,!z&&(h.undecided?xe(c,u,h,x||{status:0}):S===T&&u.awaiting.includes(h)&&De(c,u,h,x||{status:0}),b())}function xe(l,c,u,{status:h,body:S}){if(delete u.undecided,!c.awaiting.includes(u))return;if((S?.stale===!0||Pn(h)||h>=400&&h<500&&!In(h))&&!u.uncertain){u.refused=!0,u.sent=!1,u.seq=null,u.epoch!==T&&(u.receiptGeneration=ee),u.epoch!==T&&(u.pageGeneration=w);return}if(!Y.has(l)){h>=200&&h<300&&Number.isInteger(S?.seq)&&!S?.stale?u.seq=S.seq:(u.uncertain=!0,u.uncertainSince??=u.sentOn);return}c.awaiting.splice(c.awaiting.indexOf(u),1);let I=t.get(l)?.store;I?.rebase(I.authoritative,{source:"state",through:u.through,cause:"decided"})}function Ve(){for(let[l,c]of ce){if(!Y.has(l))continue;let u;for(;c.awaiting.length&&c.awaiting[0].seq!==null&&c.awaiting[0].seq<=D;)u=c.awaiting.shift().through;if(u===void 0)continue;let h=t.get(l)?.store;h?.rebase(h.authoritative,{source:"state",through:u,cause:"settled"})}}function De(l,c,u,{status:h,body:S,retryAfter:x}){if(h>=200&&h<300){if(ue=lt,S?.stale){u.sent=!1,u.refused=!0,S.epoch!==T?ne():b();return}if(S?.epoch&&S.epoch!==T){ne();return}u.seq=Number.isInteger(S?.seq)?S.seq:null,$(l,{phase:"landed",n:u.n,seq:u.seq,through:u.through}),Ve();return}if(In(h)){if(u.sent=!1,$(l,{phase:"retry",code:S?.code??(h===0?"offline":h===429?"rate-limited":"server"),n:u.n,through:u.through,retryAfter:x??null}),Pn(h)?u.refused=!0:(u.uncertain=!0,u.uncertainSince??=u.sentOn),h===503&&S?.code==="not-connected"){ge=null,ne();return}if(h===503&&S?.code==="busy"){$(l,{phase:"left",code:"busy",n:u.n,through:u.through}),console.warn(`clay.live("${l}"): the room is full, so it stays at save speed for now`),Y.delete(l),M(l,c),_(ne,(x>0?x:60)*1e3);return}if(u.uncertain&&u.sentOn!==he){ne();return}k=P()+(x>0?x*1e3:ue),ue=Math.min(ue*2,_t);return}if(Mr.has(h)){$(l,{phase:"refused",code:"revoked",n:u.n,through:u.through}),u.uncertain||(u.refused=!0),Et();return}let I=S?.error||S?.code||`status ${h}`;if(h===404){$(l,{phase:"left",code:"no-store",n:u.n,through:u.through}),console.warn(`clay.live("${l}"): the room has no such store, so it stays at save speed (${I})`),u.refused=!0,Y.delete(l),M(l,c,!1);return}if(c.awaiting.splice(c.awaiting.indexOf(u),1),h===413&&!S?.code&&u.entries?.length>1&&oe>Nn){oe=Nn,console.warn(`clay.live("${l}"): the host takes smaller updates, so they go in frames of ${oe} bytes`),c.unsent.unshift(...u.entries),u.adopted&&(c.adopted={rev:u.adopted,through:u.through}),c.framed=u.first-1;return}let G=t.get(l)?.store,me=S?.code??(h===413&&u.entries?.length===1?"too-large":"refused");$(l,{phase:"refused",code:me,n:u.n,from:u.first,through:u.through,...S?.code==="receipt-expired"&&{ops:u.ops}}),console.warn(`clay.live("${l}"): the host refused an update, so it was undone (${I})`),G?.rebase(G.authoritative,{source:"state",drop:u.first===void 0?void 0:[u.first,u.through],through:u.first===void 0?u.through:void 0,cause:"refused"}),S?.code==="receipt-expired"&&ne()}function pt(l){D=l.seq;let c=t.get(l.name)?.store;if(!c||Me.has(l.name))return;if(!Y.has(l.name)){be=!0;return}let u=c.checkOps(l.ops);if(!u){ne();return}let h,S=l.from===O;if(S){let x=Z(l.name),I=x.awaiting.findIndex(G=>G.n===l.n);I>=0&&(h=x.awaiting[I].through,$(l.name,{phase:"echoed",n:l.n,seq:l.seq,through:h}),x.awaiting.splice(0,I+1))}c.rebaseOps(u,{source:S?"state":"remote",through:h,frame:{seq:l.seq,from:l.from,n:l.n,ops:l.ops}}),t.get(l.name).last=l.seq,i(),l.checkpoint===!0&&d(),Ve()}function Xe(l){if(!(z||!l||!Number.isInteger(l.seq))){if(!X){ae.push(l),ae.length>Or&&ae.shift();return}if(l.epoch!==T){ae.push(l),ne();return}if(!(l.seq<=D)){if(l.seq!==D+1){ae.push(l),ne();return}pt(l)}}}function ke(l,c){let u=c.seen?c.seen[O]??0:null,h=[],S=[];for(let x of l)u!==null&&x.n<=u||We(c.saved,x.n)?S.push(...x.entries.map(I=>I.id)):x.sent&&x===y?(x.undecided=!0,h.push(x)):A(x)?h.push(x):S.push(...x.entries.map(I=>I.id));return{resend:h,dropIds:S}}function Ge(l,c,u,h){let S=q(l);if(!S.length)return!1;if(!h){let x=new Set;for(let I of c.awaiting)if(We(u.saved,I.n))for(let G of I.entries??[])x.add(G.id);if(S.every(I=>x.has(I)))return!1}return g(l,S)?!0:(p(l,c),!1)}function nn(l,c=0){if(z||!l||typeof l.epoch!="string")return;if(te++,l.epoch===T&&Number.isInteger(l.seq)&&l.seq<D){rn();return}let u=l.epoch!==T;J=Number.isInteger(l.provenanceVersion)?l.provenanceVersion:0,ee=Number.isSafeInteger(l.receiptGeneration)?l.receiptGeneration:null;let h=w;w=typeof l.pageTransition?.id=="string"?l.pageTransition.id:null;let S=w!==h,x=!1;be=!1,T=l.epoch,D=Number.isInteger(l.seq)?l.seq:0,de=l.writer??null,"conn"in l&&(ge=l.conn);let I=l.stores||{};Y=new Set(Object.keys(I));for(let H of Me)Y.delete(H);let G=!1,me=!1;for(let[H,ye]of t){if(Me.has(H))continue;let K=I[H],j=Z(H);p(H,j);let pr=j.room;if(j.room=!!K,!K){j.out||(pr&&S&&$(H,{phase:"left",code:"no-store"}),M(H,j,!1)),j.after!==void 0&&c>=j.after&&(j.after=void 0,j.deferred=!1,C(H));continue}let on=j.after!==void 0&&c<j.after;if(on||Ge(H,j,K,u||j.stale===!0)){Y.delete(H),j.deferred=!0,u&&(j.stale=!0),on&&(me=!0),G=!0;continue}let sn=u||j.stale===!0;j.deferred=!1,j.stale=!1,j.after=void 0;let hr=ye.store.handle.status.mode==="file";j.out=!1,ye.store.setMode("fast"),ye.last=Number.isInteger(K.last)?K.last:0,ye.landed=Number.isInteger(K.landed)?K.landed:0;let ln=[];if(!sn&&ee!==null){let Te=K.seen?.[O];j.awaiting=j.awaiting.filter(ie=>We(K.saved,ie.n)||Te!==void 0&&ie.n<=Te||ie.seq!==null&&ie.seq<=D||(ie.receiptGeneration??0)===ee?!0:(ln.push(...ie.entries.map(le=>le.id)),$(H,{phase:"refused",code:"receipt-expired",n:ie.n,from:ie.first,through:ie.through,ops:ie.ops}),console.warn(`clay.live("${H}"): the room retired an update receipt, so the update was not replayed. Check the saved value before restoring it.`),!1))}if(sn){let{resend:Te,dropIds:ie}=ke(j.awaiting,K);for(let qe of Te)qe.undecided||(qe.sent=!1,qe.seq=null,qe.receiptGeneration=ee,qe.pageGeneration=w);j.awaiting=Te,ye.store.rebase(K.value,{source:"state",dropIds:ie,room:{seq:D,fresh:!0,moves:l.moves?.[H]??null,floor:Number.isInteger(K.floor)?K.floor:null}}),j.unsent=s(H,j)}else{let Te=K.seen?K.seen[O]:void 0,ie=[],qe=[...ln];for(let le of j.awaiting)We(K.saved,le.n)?qe.push(...le.entries.map(Ze=>Ze.id)):le===y?ie.push(le):le.seq!==null&&le.seq<=D||Te!==void 0&&le.n<=Te?qe.push(...le.entries.map(Ze=>Ze.id)):le.seq!==null?ie.push(le):!le.uncertain||Te!==void 0||le.uncertainSince===he?(le.sent=!1,ie.push(le)):qe.push(...le.entries.map(Ze=>Ze.id));j.awaiting=ie,ye.store.rebase(K.value,{source:"state",dropIds:qe,room:{seq:D,fresh:!1,moves:l.moves?.[H]??null,floor:Number.isInteger(K.floor)?K.floor:null}}),hr&&(j.unsent=s(H,j),x=!0)}C(H)}G&&(be=!0),(u||x)&&r(T),i(),n(),rn(),me&&ne()}function rn(){X=!0;let l=ae.filter(c=>c.epoch===T&&c.seq>D).sort((c,u)=>c.seq-u.seq);ae=[];for(let c of l)Xe(c);b()}async function ne(){if(z)return;if(pe){we=!0;return}pe=!0,we=!1,X=!1;let l={connection:he,stateCount:te,read:++_e},c=null,u=typeof AbortController=="function"?new AbortController:null,h=new Promise(S=>{W=_(()=>{W=null,u?.abort(),S(null)},xr)});try{c=await Promise.race([e.fetchState(O,T!==null&&D>0&&!be?{epoch:T,seq:D}:null,u?{signal:u.signal}:{}),h])}catch{}if(W!==null&&U(W),W=null,pe=!1,!z){if(l.connection!==he||we){B&&ne();return}if(l.stateCount!==te){if(X)return;c=null}if(c&&typeof c.epoch=="string"){re=lt,nn(c,l.read);return}if(c&&Tr.has(c.status)){Et();return}if(c&&c.status===503){let S=c.code==="busy";for(let[x,I]of t)I.store.handle.status.mode==="fast"&&($(x,{phase:"left",code:S?"busy":"unavailable"}),console.warn(`clay.live("${x}"): the host has no room for this document now, so it stays at save speed for now`),M(x,Z(x)));if(Y=new Set,!B)return;S||c.retryAfter>0?(re=lt,_(ne,(c.retryAfter>0?c.retryAfter:60)*1e3)):(_(ne,re),re=Math.min(re*2,_t));return}B&&(_(ne,re),re=Math.min(re*2,_t))}}function Et(){if(!z){z=!0,L!==null&&U(L),L=null,W!==null&&U(W),W=null,Oe?.();for(let[l,c]of t){let u=ce.get(l);u?.out||(u?M(l,u):(o(l,{epoch:T,seq:D}),c.store.setMode("file")))}F()}}let dr={open(l){O=l.clientId,B=!0,he++,ne()},close(){B=!1,he++,X=!1,ae=[]},frame:Xe,state(l){be&&l&&!("moves"in l)?ne():nn(l)},writer(l){if(!(!l||l.epoch!==T)){if(de=l.writer??null,l.landed&&typeof l.landed=="object"){te++;for(let[c,u]of Object.entries(l.landed)){let h=t.get(c);h&&Number.isInteger(u)&&(h.landed=u,$(c,{phase:"checkpointed",seq:u}))}a()}n()}}};return{start(){!Oe&&!z&&(Oe=e.start(dr))},local(l,c,u){if(z||T===null||!Y.has(l))return;let h=Z(l),S=u-c.length+1;c.forEach((x,I)=>h.unsent.push({id:S+I,op:x})),b()},abandon(l){if(Me.has(l))return;Me.add(l),Y.delete(l);let c=Z(l);c.awaiting=c.awaiting.filter(u=>u===y),c.unsent=[],c.adopted=null},adopted(l,c,u){if(z||!Y.has(l))return;let h=Z(l),S=h.awaiting.find(x=>!x.sent&&x.through>=u);S?S.adopted=c:h.adopted={rev:c,through:u}},release(l,{read:c=!1}={}){if(z)return;let u=Z(l);if(u.deferred||c){u.after=_e+1,T!==null&&B&&ne();return}T!==null&&Y.has(l)&&(p(l,u),u.unsent=s(l,u),b())},framed(l){return ce.get(l)?.n??0},pendingFrames(l,c,{reserve:u=!1}={}){let h=ce.get(l);if(u&&h&&O&&T===c?.epoch){let G=s(l,h);for(;G.length;){let me=bt({name:l,n:h.n+1,ops:[],epoch:T}),H=0;for(;H<G.length&&H<$n;){let j=bt(G[H].op)+1;if(H&&me+j>oe)break;me+=j,H++}let ye=G.splice(0,H),K={n:++h.n,ops:ye.map(j=>j.op),entries:ye,first:ye[0].id,through:ye[ye.length-1].id,seq:null,sent:!1,refused:!0,epoch:T,client:O,receiptGeneration:ee,pageGeneration:w};je(h,K),h.awaiting.push(K),h.framed=K.through}h.unsent=[]}let S=new Set(t.get(l)?.store.pendingEntries().map(G=>G.id)??[]),x=[],I=!0;for(let G of h?.awaiting??[]){let me=G.entries.filter(H=>S.has(H.id));if(me.length){if(me.length!==G.entries.length||G.epoch!==c?.epoch||!G.client){I=!1;continue}x=Fe(x,[[G.client,[[G.n,G.n]]]])}}return{frames:x,complete:I}},captured(l,c,u){let h=ce.get(l);if(!h||!c||c.epoch!==T)return[];let S=vt(u),x=[];return h.awaiting=h.awaiting.filter(I=>{let G=I.epoch===c.epoch&&(st(S,I.client,I.n)||I.seq!==null&&I.seq<=c.seq);return G&&x.push(...I.entries.map(me=>me.id)),!G}),x},refresh(){T!==null&&B&&ne()},storeOpened(){T!==null&&B&&ne()},roomBound(l){return!z&&ce.get(l)?.room===!0},isWriter(){return de!==null&&de===O},get status(){return{connected:B,synced:X,epoch:T,seq:D,writer:de,clientId:O,stopped:z,provenanceVersion:J,receiptGeneration:ee}},stop:Et}}var Je=[0,1e4,3e4],$r=6e3,Nr=2;async function Ir(e){let t=globalThis.crypto&&globalThis.crypto.subtle;if(!t)return null;try{let r=new TextEncoder().encode(String(e)),o=await t.digest("SHA-256",r),n=new Uint8Array(o),i="";for(let a=0;a<n.length;a+=1)i+=n[a].toString(16).padStart(2,"0");return i}catch{return null}}function Pr(e){let t=[];for(let r of e||[]){let o=r&&r.saveId;if(typeof o=="string"&&o&&!t.includes(o)&&t.push(o),t.length>=Nr)break}return t}function Cr(e,t,r){return!!(e&&typeof e=="object"&&e.saveId===t&&e.requestHash===r&&e.status==="applied")}function Cn({query:e,digest:t=Ir,now:r=()=>Date.now(),setTimer:o=setTimeout,clearTimer:n=clearTimeout}={}){function i({captureId:a,html:d,attempts:m,initialOutcome:q,startedAt:g,onApplied:C,onUnknown:F}){let P=g+45e3,_=Pr(m),U=new Set,O=new Set,B=d,X=null,T=!1;function ee(f,y){try{typeof f=="function"&&f(y)}catch(v){console.error("clayjs: save-history callback failed:",v)}}function w(){T=!0,B=null;for(let f of U)n(f);U.clear();for(let f of O)f.abort();O.clear()}function J(f,y){T||(w(),ee(C,{captureId:a,saveId:f,requestHash:y}))}function D(f){T||(w(),ee(F,{captureId:a,reason:f}))}function de(f,y){let v=null;return v=o(()=>{v!==null&&U.delete(v),f()},Math.max(0,y)),U.add(v),v}function Y(f){f!==null&&(n(f),U.delete(f))}async function ae(f){if(T)return;let y=P-r();if(y<=0)return;let v=new AbortController;O.add(v);let k=de(()=>v.abort(),Math.min($r,y)),L=null;try{L=await e({saveId:f,requestHash:X,signal:v.signal})}catch{L=null}finally{Y(k),O.delete(v)}T||Cr(L,f,X)&&J(f,X)}function pe(){if(!T&&!(r()>=P))for(let f of _)ae(f)}async function z(){let f=null;try{f=await t(B)}catch{f=null}if(B=null,T)return;if(typeof f!="string"||!f){D("unavailable");return}if(X=f,q&&typeof q=="object"&&q.status==="applied"&&q.requestHash===X&&_.includes(q.saveId)){J(q.saveId,X);return}let y=r()-g;if(y>=45e3){D("expired");return}let v=-1;for(let k=0;k<Je.length;k+=1)Je[k]<=y&&(v=k);if(v<0){for(let k=0;k<Je.length;k+=1)de(pe,g+Je[k]-r());return}pe();for(let k=v+1;k<Je.length;k+=1)de(pe,g+Je[k]-r())}return de(()=>D("expired"),P-r()),z(),{cancel(){w()}}}return{start:i}}var _r="/_/sync/data";function Ln(){return new URL(_r,window.location.origin)}async function Lr(e,t){let r=Ln();r.searchParams.set("client-id",e);try{let o=await fetch(r.href,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json","Document-URL":window.location.href,[Mt]:String(1)},body:JSON.stringify(t)}),n=null;try{n=await o.json()}catch{}let i=Number(o.headers?.get?.("Retry-After"))||0;return{status:o.status,body:n,retryAfter:i}}catch{return{status:0,body:null,retryAfter:0}}}async function jr(e,t=null,{signal:r}={}){let o=Ln();e&&o.searchParams.set("client-id",e),t&&typeof t.epoch=="string"&&Number.isInteger(t.seq)&&o.searchParams.set("since",`${t.epoch}:${t.seq}`);try{let n=await fetch(o.href,{credentials:"same-origin",cache:"no-store",headers:{"Document-URL":window.location.href,[Mt]:String(1)},signal:r});if(!n.ok){let a=null;try{a=await n.json()}catch{}return{status:n.status,code:a?.code??null,retryAfter:Number(n.headers?.get?.("Retry-After"))||0}}let i=await n.json();return i&&typeof i.epoch=="string"&&i.conn===null?null:i}catch{return null}}function jn(){return{start(e){return bn({open(t){t.lane==="live"&&e.open(t)},close:()=>e.close(),event(t,r){t==="data"?e.frame(r):t==="data-state"?e.state(r):t==="data-writer"&&e.writer(r)}})},send:Lr,fetchState:jr}}function Bn(e,t){return!t||!Number.isInteger(t.seq)?null:t.seq>=(e.last??0)?[]:t.seq<(e.floor??0)?null:e.log.filter(r=>r.seq>t.seq).map(r=>({seq:r.seq,ops:r.ops}))}var Br=4,Fr=2e3,Dr=500,Gr=1024,Hr=256*1024;function Fn(e,t){let r=[],o=()=>{for(let n=r.length-1;n>=0;n--)nt(r[n])};try{for(let n of t){let i=mt(e,n);i&&(r.push(i),e=i.root)}}catch(n){throw o(),n}return{value:e,undo:o}}var Wr=new TextEncoder,Dn="page-format:1";function Hn(){return typeof BroadcastChannel=="function"&&typeof navigator<"u"&&typeof navigator.locks?.request=="function"}function Gn(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():Math.random().toString(36).slice(2)+Date.now().toString(36)}function Wn({seed:e,key:t="clay-live:"+window.location.pathname,channel:r=null,floor:o=0}){let n=Gn(),i=o>=1?1:0,a=i?`${t}:${Dn}`:t,d=null,m=null,q=null,g=null,C=!1,F=null,P=!1,_=null,U=0,O=0,B=new Map,X=new Map,T=new Set,ee=new Map,w={epoch:null,seq:0,sequencer:null,closedBy:null,stale:!1,seen:new Map,stores:new Map};function J(s){d?.post(s)}function D(s,p){for(p.bytes=Wr.encode(JSON.stringify(p.ops)).length,s.log.push(p),s.logBytes+=p.bytes;s.log.length>Gr||s.logBytes>Hr;){let A=s.log.shift();s.logBytes-=A.bytes,s.floor=A.seq}}function de(s){let p=w.stores.get(s.name);p&&(p.value=Fn(p.value,s.ops).value,p.last=s.seq,p.ephemeral||D(p,{seq:s.seq,ops:s.ops})),w.seq=s.seq;let A=s.name+`
2
+ `+s.from;(w.seen.get(A)??0)<s.n&&w.seen.set(A,s.n)}function Y(s){let p={};for(let[A,M]of w.seen){let b=A.indexOf(`
3
+ `);A.slice(0,b)===s&&(p[A.slice(b+1)]=M)}return p}let ae=s=>s.behind||s.landed===null?-1:s.landed;function pe(s){let p={},A={};for(let[b,N]of w.stores)p[b]={value:Q(N.value),ephemeral:N.ephemeral,seen:Y(b),last:N.last,landed:ae(N)},A[b]={log:N.log,last:N.last,landed:N.landed,floor:N.floor,behind:N.behind,file:N.file,inFile:N.inFile};let M={epoch:g.epoch,seq:g.seq,writer:n,stores:p,mirror:{seen:[...w.seen],stores:A}};if(s!==void 0){let b=s&&s.epoch===w.epoch&&Number.isInteger(s.seq)?s.seq:0,N={};for(let[se,xe]of w.stores)N[se]=Bn(xe,{seq:b});M.moves=N}return M}function z(s,p){return s?.file?p.seq!=null&&s.file.seq!=null?p.seq<=s.file.seq:s.file.hash===rt(V(Re(p.text))):!1}function f(){for(let[s,p]of ee)try{z(w.stores.get(s),p)&&ee.delete(s)}catch{ee.delete(s)}}function y(s){if(g||!s||typeof s.epoch!="string"||!Number.isInteger(s.seq)||!s.mirror||T.has(s.epoch)||s.epoch===w.epoch&&s.seq<w.seq)return!1;w.epoch!==null&&s.epoch!==w.epoch&&T.add(w.epoch);let p=new Map;for(let[A,M]of Object.entries(s.stores||{})){let b=s.mirror.stores?.[A]||{},N=Array.isArray(b.log)?b.log:[];p.set(A,{value:Q(M.value),ephemeral:M.ephemeral===!0,log:N,logBytes:N.reduce((se,xe)=>se+(xe.bytes||0),0),last:Number.isInteger(b.last)?b.last:0,landed:Number.isInteger(b.landed)?b.landed:null,floor:Number.isInteger(b.floor)?b.floor:0,behind:b.behind===!0,file:b.file||null,inFile:Array.isArray(b.inFile)?[...b.inFile]:[]})}return w={epoch:s.epoch,seq:s.seq,sequencer:s.writer??null,closedBy:null,stale:!1,seen:new Map(s.mirror.seen||[]),stores:p},f(),O+=1,!0}function v(){let s=pe();J({type:"data-state",state:s}),q.state(s)}function k(){w.epoch!==null&&T.add(w.epoch),w.epoch=Gn(),w.seq=0;for(let s of w.stores.values())s.log=[],s.logBytes=0,s.last=0,s.landed=null,s.floor=0,s.behind=!0,s.file=null,s.inFile=[]}function L({fresh:s}){let p=w.epoch===null;p&&k();for(let[M,b]of e())w.stores.has(M)||w.stores.set(M,{value:Q(b.value),ephemeral:b.ephemeral,log:[],logBytes:0,last:0,landed:0,floor:0,behind:!1,file:null,inFile:[]});w.stale=!1,w.sequencer=n,w.closedBy=null;let A=new Map;for(let[M,b]of w.seen)A.set(M,{n:b,seq:0});g={epoch:w.epoch,seq:w.seq,lastN:A};for(let[M,b]of ee){let N=w.stores.get(M);if(!(!N||N.ephemeral)){try{if(z(N,b))continue}catch{continue}we(M,b)}}ee.clear(),s&&!p&&(k(),g.epoch=w.epoch,g.seq=0),O+=1,v()}function W(){k(),g.epoch=w.epoch,g.seq=0,O+=1,v()}function ue(){g&&(J({type:"closed",from:n,state:pe()}),g=null,F?.(),F=null)}function oe(s){return w.closedBy!==null&&(s===null||w.closedBy===s)?Promise.resolve(!0):new Promise(p=>{let A=setTimeout(()=>{_=null,p(!1)},Dr);_={sequencer:s,resolve(M){clearTimeout(A),_=null,p(M)}}})}function re(){P||C||(P=!0,navigator.locks.request(a,async()=>{if(C)return;let s=await oe(w.sequencer);if(!C)return L({fresh:w.epoch===null||!s}),new Promise(p=>{F=p})}).catch(()=>{}).finally(()=>{P=!1}))}function he(s,p){if(!p||typeof p.name!="string"||!Number.isInteger(p.n)||p.n<1||!Array.isArray(p.ops)||!p.ops.length)return{status:400,body:{error:"bad-frame"},retryAfter:0};let A=w.stores.get(p.name);if(!A)return{status:404,body:{error:"unknown-store"},retryAfter:0};let M=p.name+`
4
+ `+s,b=g.lastN.get(M);if(b&&p.n<=b.n)return{status:200,body:{duplicate:!0,seq:b.seq,epoch:g.epoch},retryAfter:0};let N;try{N=p.ops.map(Qe),Fn(A.value,N).undo()}catch(xe){return{status:422,body:{error:xe.message},retryAfter:0}}g.seq+=1,g.lastN.set(M,{n:p.n,seq:g.seq});let se={epoch:g.epoch,seq:g.seq,name:p.name,ops:N,from:s,n:p.n};return de(se),J({type:"data",data:se}),q.frame(Q(se)),{status:200,body:{seq:g.seq,epoch:g.epoch},retryAfter:0}}function ge(s){if(!g||!s.length)return;let p={};for(let A of s){let M=w.stores.get(A);M&&(p[A]=ae(M))}q.writer({epoch:g.epoch,writer:n,landed:p})}function te(s,p){let A=w.stores.get(s);return!A||A.ephemeral||!p||p.epoch!==w.epoch||!Number.isInteger(p.seq)||!A.behind&&A.landed!==null&&p.seq<=A.landed?!1:(A.landed=p.seq,A.behind=!1,!0)}function we(s,{text:p,at:A,seq:M}){let b=w.stores.get(s);if(!b||b.ephemeral)return null;let N;try{N=Q(Re(p))}catch{return null}if(N===null||typeof N!="object"||Array.isArray(N)!==Array.isArray(b.value))return null;let se={seq:M??null,hash:rt(V(N))},xe=!!A&&A.epoch===w.epoch&&A.seq<=g.seq,Ve=xe&&A.hash===se.hash,De=xe?A.seq:b.behind?null:b.landed;if(De===null||De<b.floor){let ke=!b.behind;return b.behind=!0,b.file=se,{changed:!1,moved:ke}}let pt=b.log.filter(ke=>ke.seq>De&&(Ve||!b.inFile.includes(ke.seq)));Ve&&(b.inFile=[]);for(let ke of pt)for(let Ge of ke.ops)try{et(N,Ge),N=tt(N,Ge)}catch{}let Xe=!1;if(V(N)!==V(b.value)){let ke=Sn(b.value,N);b.value=N,g.seq+=1,w.seq=g.seq,b.last=g.seq,D(b,{seq:g.seq,ops:ke}),b.inFile=[...b.inFile.filter(Ge=>Ge>b.floor),g.seq],Xe=!0}return b.landed=pt.length?De:b.last,b.behind=!1,b.file=se,{changed:Xe,moved:!0}}function _e(s){let p=!1,A=[];for(let[M,b]of s){let N=w.stores.get(M);if(!N||N.ephemeral)continue;if(!g){ee.set(M,b);continue}let se=we(M,b);se&&(se.changed?p=!0:se.moved&&A.push(M))}p?v():ge(A)}function be(s){return new Promise(p=>{let A=++U,M=setTimeout(()=>{B.delete(A),X.delete(A),p(null)},Fr);s.type==="post"&&X.set(A,w.sequencer),B.set(A,b=>{clearTimeout(M),B.delete(A),X.delete(A),p(b)}),J({...s,from:n,rid:A})})}function Oe(s){if(!(!s||typeof s.name!="string"||typeof s.epoch!="string"||!Number.isInteger(s.seq))&&!(g||T.has(s.epoch))){if(s.epoch!==w.epoch)w.stale=!0;else if(!w.stale&&s.seq===w.seq+1)try{de(s)}catch{w.stale=!0}else s.seq>w.seq&&(w.stale=!0);q.frame(s)}}function ce(s,p){if(!(typeof s!="string"||!p)){y(p)&&(w.closedBy=s,q.state(p));for(let[A,M]of X)M===s&&B.get(A)?.(null);_&&(_.sequencer===null||_.sequencer===s)&&_.resolve(w.closedBy===s)}}function Me({data:s}){if(!(C||!s||s.v!==Br)){if(g&&(s.type==="data"&&s.data?.epoch===g.epoch||(s.type==="data-state"||s.type==="closed")&&s.state?.epoch===g.epoch&&s.state.writer!==n)){W();return}if(!g&&s.type==="data-state"&&s.state?.epoch===w.epoch&&s.state.writer!==w.sequencer&&Number.isInteger(s.state.seq)&&s.state.seq<w.seq){J({type:"forked",epoch:w.epoch,to:s.state.writer});return}if(s.type==="forked"){g&&s.epoch===g.epoch&&s.to===n&&W();return}s.type==="data"?Oe(s.data):s.type==="data-state"?y(s.state)&&q.state(s.state):s.type==="closed"?ce(s.from,s.state):s.type==="landed"?typeof s.name=="string"&&te(s.name,s.at)&&ge([s.name]):s.type==="answer"?s.to===n&&B.get(s.rid)?.(s.result):g&&s.type==="post"?s.epoch===g.epoch&&J({type:"answer",to:s.from,rid:s.rid,result:he(s.from,s.frame)}):g&&s.type==="state-request"&&J({type:"answer",to:s.from,rid:s.rid,result:pe(s.since)})}}function $(){ue()}function Z(s){!s.persisted||C||g||P||(w.sequencer=null,w.closedBy=null,re(),q.close(),q.open({clientId:n,lane:"live"}))}function je(s,{covered:p=!1}={}){let A=s>=1?1:0,M={floor:i,scope:a};return A<=i?{status:"already",...M}:C||!d?{status:"refused",code:"lane-stopped",...M}:r?{status:"refused",code:"shared-channel",...M}:p?(ue(),m?.(),a=A?`${t}:${Dn}`:t,i=A,d=$t(a),m=d.subscribe("durable",b=>Me({data:b})),w.sequencer=w.closedBy=null,P=!1,re(),q.close(),q.open({clientId:n,lane:"live"}),{status:"switched",floor:i,scope:a}):{status:"refused",code:"uncovered",...M}}return{clientId:n,get scope(){return a},get floor(){return i},switchScope:je,start(s){return q=s,d=r??$t(a),m=d.subscribe("durable",p=>Me({data:p})),window.addEventListener("pagehide",$),window.addEventListener("pageshow",Z),re(),q.open({clientId:n,lane:"live"}),()=>{ue(),C=!0,_?.resolve(!1),window.removeEventListener("pagehide",$),window.removeEventListener("pageshow",Z);for(let p of B.values())p(null);m?.(),m=null,d=null}},async send(s,p){return g?he(n,p):await be({type:"post",frame:p,epoch:w.epoch})||{status:0,body:null,retryAfter:0}},async fetchState(s,p=null){if(g)return pe(p);let A=O,M=await be({type:"state-request",since:p});return g?pe(p):A!==O||!y(M)?null:M},fileFrame(s){C||_e(s)},landed(s,p){C||!p||(te(s,p)&&ge([s]),J({type:"landed",name:s,at:{epoch:p.epoch,seq:p.seq}}))},get isSequencer(){return g!==null}}}var Jr=/^[A-Za-z0-9_.:-]{1,64}$/,R=new Map,Zn="save_"+[...crypto.getRandomValues(new Uint32Array(4))].map(e=>e.toString(16).padStart(8,"0")).join(""),Bt=0,Yr=0,zr=45e3;function Ut(e){let t=ot(e.getAttribute("live-at"));if(!t||t.hash!==mo(e.textContent))return null;let r=e.getAttribute("live-by"),o=r===null?null:it(r);return r!==null&&!o?null:o&&o.v!==2?{disk:!0}:{epoch:t.epoch,seq:t.seq,frames:vt(o),ancestors:On(o)}}function Kr(e,t){let r=e.leftAt;if(!r||r.disk)return null;let o=E?.pendingFrames(e.store.name,r,{reserve:t})??{frames:[],complete:!0};if(!o.complete)return null;let n=Fe(r.frames??[],o.frames),i=r.ancestors??[],a=V(e.store.value),d=JSON.stringify([r.epoch,r.seq,n,i,e.store.mark,a]);if(e.capture?.key===d)return e.capture.value;let m={v:2,frames:n,ancestors:i,capture:[Zn,Bt+1]},q=Mn(m),g=q?{at:Nt(r.epoch,r.seq,a),by:q}:null;return e.capture={key:d,value:g},g}var Le=new Map,Ie=null,Se=null,Ee=null,Vr=Cn({query:e=>cn?.(e)??null}),Ae=new Map;function Qn(e){if(!e.captureOps.size)return;let t=new Set(e.store.pendingEntries().map(r=>r.id));for(let[r,o]of e.captureOps)o.ids=o.ids.filter(n=>t.has(n)),o.ids.length||e.captureOps.delete(r);[...e.captureOps.values()].some(r=>r.ended)||ft(e)}var er=(e,t)=>Ie===null||!pn()?!1:Le.get(Ie)?.get(e)?.key===t;function ut(e){let t=R.get(e);if(!t||!t.captureOps.size)return[];let r=new Set(t.store.pendingEntries().map(n=>n.id)),o=new Set;for(let[n,i]of t.captureOps)if(!(!i.ended&&!er(e,n)))for(let a of i.ids)r.has(a)&&o.add(a);return[...o]}function Jt(e){for(let[t,r]of e.captureOps)if(r.ended)return[t,r];return null}Tt({id:"live:held",isPending:()=>[...R.values()].some(e=>Jt(e))});var Un=e=>[...e.captureOps].some(([t,r])=>!r.ended&&er(e.store.name,t));function Xr({op:e,path:t,n:r,value:o}){let n=t.length?t.join("."):"the whole value",i=e==="add"?`${n} + ${r}`:e==="del"?`${n} removed`:`${n} = ${JSON.stringify(o)}`;return i.length>60?`${i.slice(0,57)}...`:i}function Yt(e){clearTimeout(e.timer),e.timer=setTimeout(()=>{e.timer=null,ze(e)},zr)}function ft(e){clearTimeout(e.timer),e.timer=null}function ze(e,{read:t=!0}={}){let r=e.store.name,o=ut(r);if(ft(e),e.withheld=!1,e.reading=!1,nr(e),o.length){let n=e.store.pendingEntries().filter(m=>o.includes(m.id)).map(m=>m.op);e.store.handle.status.mode==="file"&&(e.leftAt=null),e.store.rebase(e.store.authoritative,{source:"state",dropIds:o});let i=n.slice(0,5).map(Xr).join("; "),a=n.length>5?` and ${n.length-5} more`:"",d=`A save of "${r}" ended without an answer, so ${n.length===1?"this edit was":"these edits were"} not sent again: ${i}${a}. Check the value, and redo ${n.length===1?"it":"any"} if missing.`;console.warn(`clay.live("${r}"): ${d}`,n),document.dispatchEvent(new CustomEvent("clay:live-notice",{detail:{name:r,code:"save-uncertain",ops:n,message:d}}))}t&&E?.release(r,{read:E.roomBound(r)})}function ct(e){Qn(e);let t=e.store.name;if(e.recovery&&!eo(e)&&nr(e),!(!e.withheld||e.reading||ut(t).length)){if(!E?.roomBound(t)){e.withheld=!1,ft(e);return}e.reading=!0,Yt(e),E.release(t,{read:!0})}}function Zr(e){let t=R.get(e);t&&(zt(t),!(!t.withheld&&!t.reading)&&(t.withheld=!1,t.reading=!1,[...t.captureOps.values()].some(r=>r.ended)||ft(t)))}function Qr(){for(let e of R.values())if(e.recovery||e.historicalRefreshPending)return!0;return!1}function eo(e){let t=new Set(e.store.pendingEntries().map(o=>o.id));return e.recovery.targets.find(({name:o})=>o===e.store.name)?.ids.some(o=>t.has(o))??!1}function to(e){if(!Ee||Ee.captureId!==e||typeof Ee.html!="string")return null;let t=[];for(let[r,o]of Ee.qualified)!R.get(r)||!o.length||t.push({name:r,ids:[...o],saved:Ee.saved.get(r)});return t.length?{captureId:e,html:Ee.html,targets:t}:null}function qt(){Ee&&(Ee.html=null)}function no(e,t){tr(e);let r=e.store.name;e.refreshTimer=setTimeout(()=>{if(e.refreshTimer=null,!e.historicalRefreshPending)return;let o=`The save of "${r}" that ended without an answer did happen, but the value the file holds now must load before newer edits can be saved.`;console.warn(`clay.live("${r}"): ${o}`),document.dispatchEvent(new CustomEvent("clay:live-notice",{detail:{name:r,code:"save-history-refresh-required",message:o}}))},Math.max(0,t-Date.now()))}function zt(e){e.historicalRefreshPending&&(e.historicalRefreshPending=!1,tr(e))}function tr(e){e.refreshTimer!==null&&(clearTimeout(e.refreshTimer),e.refreshTimer=null)}function nr(e){let t=e.recovery;t&&(e.recovery=null,!t.targets.some(r=>R.get(r.name)?.recovery===t)&&(Ae.delete(t.captureId),t.run?.cancel()))}function rr(e){if(e==null)return;let t=Ae.get(e);if(t){Ae.delete(e);for(let r of t.targets){let o=R.get(r.name);o&&o.recovery===t&&(o.recovery=null)}t.run?.cancel()}}function ro(e,{result:t,attempts:r,startedAt:o}){let{captureId:n,html:i}=e,a={captureId:n,deadline:o+45e3,targets:e.targets,run:null};Ae.set(n,a);for(let d of e.targets){let m=R.get(d.name);ft(m),m.recovery=a}ht("save-history").then(d=>{if(Ae.get(n)===a){if(e.html=null,!d)return Jn(n);a.run=Vr.start({captureId:n,html:i,attempts:r,initialOutcome:t?.saveOutcome??null,startedAt:o,onApplied:({saveId:m,requestHash:q})=>oo(n,m,q),onUnknown:({reason:m})=>so(n,m)})}},()=>{e.html=null,Jn(n)})}function oo(e,t,r){let o=Ae.get(e);if(o){Ae.delete(e);for(let n of o.targets){let i=R.get(n.name);if(!i||i.recovery!==o)continue;i.recovery=null,i.historicalRefreshPending=!0;let a=new Set(i.store.pendingEntries().map(m=>m.id)),d=n.ids.filter(m=>a.has(m));if(i.store.rebase(JSON.parse(n.saved),{source:"state",dropIds:d}),!E){zt(i);continue}E.release(i.store.name,{read:!0}),no(i,o.deadline)}}}function Jn(e){let t=Ae.get(e);if(t){Ae.delete(e);for(let r of t.targets){let o=R.get(r.name);if(!(!o||o.recovery!==t)){if(o.recovery=null,!E?.roomBound(o.store.name)){ze(o,{read:!1});continue}o.withheld=!0,o.reading=!0,Yt(o),E.release(o.store.name,{read:!0})}}}}function so(e,t){let r=Ae.get(e);if(r){Ae.delete(e);for(let o of r.targets){let n=R.get(o.name);!n||n.recovery!==r||(n.recovery=null,ze(n))}}}function io(e,t,r){let o=e.captureOps.get(t),n=e.store.name;if(!o){e.store.handle.status.mode==="file"&&(e.leftAt=null);return}if(o.ended=!0,r?.has(n)){e.withheld=!0,e.reading=!0;return}if(!E?.roomBound(n)){ze(e,{read:!1});return}e.withheld=!0,e.reading=!0,Yt(e),E.release(n,{read:!0})}function Ft(e){if(Array.isArray(e))return e.map(Ft);if(e===null||typeof e!="object")return e;let t={};for(let r of Object.keys(e).sort())t[r]=Ft(e[r]);return t}function Kt(e){try{return JSON.stringify(Ft(Re(e)))}catch{return null}}var fe=null,dt=()=>!fe||fe.admitted;function lo(){if(!He||!dt())return!1;for(let e of R.values())if(!e.store.ephemeral){if(e.store.handle.status.mode==="fast"){if(E?.isWriter()&&e.landed<e.last)return!0}else if(e.store.pending.length>0)return!0}return!1}var Dt=new Set;function or(){for(let e of[...Dt])e()}var ve=Rn({needsSave:lo,blocked:()=>!dt()||!wn()||vn()||yn()||Qr(),save:()=>Rt().finally(or),saveNow:()=>dn(!0,()=>Rt())}),E=null,Gt=!1,Ht=0,St=null,Vt=!1,Pe=null,Xt=!1;function Zt(){return[...R.values()].filter(e=>!e.store.ephemeral)}function sr(){if(!fe||fe.admitted||!E||E.status.stopped)return!1;for(let e of Zt())if(e.store.handle.status.mode==="fast"&&e.store.pending.length>0)return!0;return!1}async function ir({timeoutMs:e=5e3}={}){let t=Date.now()+e,r=()=>{for(let o of Zt())o.store.handle.status.mode==="fast"&&o.store.pending.length>0&&E?.release(o.store.name)};for(r();sr();){if(Date.now()>=t)return{ok:!1,code:"timeout"};await new Promise(o=>setTimeout(o,5)),r()}return{ok:!0}}Tt({id:"live:writer",isPending:sr,flush:ir});function ao(){for(let e of R.values()){e.framesSince=!1;let t=e.store.pendingEntries().map(r=>r.id);t.length&&e.store.rebase(e.store.authoritative,{source:"state",dropIds:t})}}function uo(){let e=E;E=null,Gt=!1,Ht++,St=null,Pe=null,Vt=!1,At=null,Qt=null,at=null,Ye=null,e?.stop()}function ss(){return{id:"clay:live",order:200,prepare(e={}){if(e.initial===!0)return fe||(fe={admitted:!0}),zn(fe,{adopted:!0});lr();let t={admitted:!1,wantsLane:!0};return fe=t,ao(),xt(),zn(t)}}}function Yn(){for(let e of Zt())e.store.pending.length>0&&E?.release(e.store.name)}function zn(e,{adopted:t=!1}={}){return{enable(){t||fe!==e||(e.admitted=!0,xt(),Yn())},quiesce(){if(fe===e)return e.admitted=!1,ir()},resume(){fe===e&&(e.admitted=!0,Yn())},dispose(){fe===e&&(fe=null,uo())}}}var At=null,Qt=null,at=null,Ye=null;function lr(){At=new Promise(e=>{at=e}),Qt=new Promise(e=>{Ye=e})}function en(){return At||lr(),{laneReady:At,writerReady:Qt}}function is(){return en().laneReady}function ls(){return en().writerReady}function Kn(){for(let e of R.values())if(!e.store.ephemeral&&e.store.handle.status.mode==="fast"&&e.landed===-1){ve.soon();return}ve.changed()}function jt(e,t){e.store.rebase(e.store.authoritative,{source:"state",through:t})}function tn(e,t,r=null){if(e)for(let[o,n]of e){let i=R.get(o);!i||n.mode!=="file"||(t||n.maybeLanded?io(i,n.key,r):(i.captureOps.delete(n.key),ct(i)),i.store.handle.status.mode==="fast"&&E?.release(o))}}function Ke(e){let t=Le.get(e);return Le.delete(e),Ie===e&&(Ie=null),Se===e&&(Se=null),t}function ar(e,t=null){let r=t??Ie??Se;r!==null&&tn(Ke(r),e)}function co(e,t){let r=e?.code,o=r==="page-converting"||r==="page-capacity";return r==="save-already-applied"||e?.hadTimeout===!0||t!==!1&&!o&&!(e?.status>=400&&e?.status<500)}function Vn(e){return{transport:e,entries:R,onWriter:()=>{ve.changed(),E&&E.status.writer!==null&&Ye?.(E)},onApplied:Kn,onLanded:()=>{Kn(),or()},onCheckpoint:()=>ve.soon(),onLeave:(t,r)=>{let o=R.get(t);o?.store.handle.status.mode==="fast"&&(o.leftAt={...r,frames:[],ancestors:[]})},held:t=>ut(t).length>0,heldIds:ut,hold:t=>{let r=R.get(t);return r?r.recovery?!0:Un(r)?(r.withheld=!0,!0):(ze(r,{read:!1}),!1):!1},taken:Zr,onStop:()=>{for(let t of R.values())zt(t),!t.recovery&&(Un(t)||ze(t,{read:!1}))}}}function fo(){let e=new Map;for(let[t,r]of Ce(document,{warn:!1})){let o=R.get(t);if(o){e.set(t,{value:o.store.authoritative,ephemeral:o.store.ephemeral});continue}try{let n=Re(r.element.textContent);n!==null&&typeof n=="object"&&e.set(t,{value:n,ephemeral:r.ephemeral})}catch{}}return e}function xt(){if(en(),Gt||!(fe?fe.admitted||fe.wantsLane:He))return;Gt=!0;let e=++Ht;ht("live-data").then(async t=>{let r=t&&await ht("live-provenance");if(e===Ht){if(St=t,Vt=r,t)E=Lt(Vn(jn()));else if(Hn())Pe=Wn({seed:fo,floor:document.querySelector('meta[name="clay-page-format"]')?.getAttribute("content")}),E=Lt(Vn(Pe));else{at?.(null),Ye?.(null);return}for(let o of Ce(document,{warn:!1}).keys())if(!R.has(o))try{cr(o)}catch{}for(let[o,n]of R)n.historicalRefreshPending&&E.release(o,{read:!0});E.start(),at?.(E),E.status.writer!==null&&Ye?.(E)}}).catch(()=>{at?.(null),Ye?.(null)})}function po(e){let t=(e||"").split(";")[0].trim().toLowerCase();return t==="application/json"||t.endsWith("+json")}function Ce(e=document,{warn:t=!0}={}){let r=new Map,o=new Set;for(let n of e.querySelectorAll('script[merge][clay~="live"]')){if(n.hasAttribute("src")||!po(n.getAttribute("type")))continue;let i=n.getAttribute("merge");if(Jr.test(i)){if(r.has(i)){o.add(i);continue}r.set(i,{name:i,ephemeral:n.getAttribute("clay").split(/\s+/).includes("ephemeral"),element:n})}}for(let n of o)t&&console.warn(`clay.live: more than one live tag is named "${n}", so none of them is live`),r.delete(n);return r}function kt(e){return new DOMParser().parseFromString(e,"text/html")}function ho(e){let t=e.store.handle.status.mode==="fast",r=t?e.store.authoritative:e.store.value,o=t&&/^page(\.[0-9]+)?$/.test(e.store.name)?An(r):r;return e.layout==="lines"?go(o):e.layout==="pretty"?JSON.stringify(o,null,2).replace(/</g,"\\u003c"):V(o)}var Xn=e=>e!==null&&typeof e=="object"&&!Array.isArray(e);function go(e){return Xn(e)?`{${Object.entries(e).map(([r,o])=>!Xn(o)||!Object.keys(o).length?`${V(r)}:${V(o)}`:`${V(r)}:{
5
+ ${Object.entries(o).map(([n,i])=>`${V(n)}:${V(i)}`).join(`,
6
+ `)}
7
+ }`).join(`,
8
+ `)}}`:V(e)}function mo(e){try{return rt(V(Re(e)))}catch{return null}}function yo(e,t,r,o){let n;try{n=Re(t)}catch{return}e.store.rebase(n,{source:r,...o?.length&&{dropIds:o}})&&(e.framesSince=!0)}function ur(e,t,{layout:r="line",leftAt:o=null,staged:n=null}={}){let i={store:t,layout:r,framesSince:!1,last:0,landed:0,leftAt:o,captureOps:new Map,withheld:!1,reading:!1,timer:null,recovery:null,historicalRefreshPending:!1,refreshTimer:null,staged:n};return R.set(e,i),t.onDelivery(a=>{a.code==="receipt-expired"&&document.dispatchEvent(new CustomEvent("clay:live-notice",{detail:{name:e,code:a.code,ops:a.ops,message:"The room retired an update receipt. Check the saved value before restoring this update."}})),a.phase==="refused"&&a.code==="too-large"&&!/^page(\.[0-9]+)?$/.test(e)&&document.dispatchEvent(new CustomEvent("clay:live-notice",{detail:{name:e,code:"op-too-large",message:"That change was too large to share, so it was undone."}})),a.phase==="left"&&a.code==="no-store"&&/^page(\.[0-9]+)?$/.test(e)&&document.dispatchEvent(new CustomEvent("clay:live-notice",{detail:{name:e,code:"unknown-store",message:`The room has no "${e}" store, so the page it holds is not the one this tab is editing.`}}))}),t.onRebase(a=>{ct(i),t.handle.status.mode==="file"&&["undone","refused","decided"].includes(a.cause)&&(i.leftAt=null)}),t.ephemeral||t.onLocal(()=>ve.changed()),t.onLocal(a=>{!i.staged&&dt()&&E?.local(e,a,t.mark)}),t.handle.on("change",()=>{!t.ephemeral&&t.handle.status.mode==="fast"&&ve.changed()}),n||(E?.storeOpened(e),xt()),i}function cr(e){let t=R.get(e);if(t)return t.store.handle;let r=Ce().get(e);if(!r)throw new Error(`clay.live: this page has no <script type="application/json" merge="${e}" clay="live"> tag`);let o=r.element.textContent,n;try{n=Re(o)}catch(m){throw new SyntaxError(`clay.live("${e}"): the tag's JSON does not parse: ${m.message}`)}let i=Ct({name:e,value:n,ephemeral:r.ephemeral}),a=r.element.getAttribute("live-format")==="lines"?"lines":o.includes(`
9
+ `)?"pretty":"line";return ur(e,i,{layout:a,leftAt:Ut(r.element)}).store.handle}function as(e,{value:t,represented:r=null,signal:o=null}={}){let n=R.get(e);if(n&&!n.staged)throw new Error(`clay.live("${e}"): the store is open in a room`);let i=n??ur(e,Ct({name:e,value:t,ephemeral:!1}),{staged:{represented:r,signal:o}});return{handle:i.store.handle,isPending:()=>!!i.staged&&i.store.pending.length>0,flush:(a={})=>vo(i,a),dispose(){i.staged&&R.get(e)===i&&R.delete(e)},close(){R.get(e)===i&&R.delete(e)}}}async function vo(e,{timeoutMs:t=1e4}={}){let r=e.staged;if(!r||!e.store.pending.length)return{ok:!0};if(r.conflict)return{ok:!1,code:r.conflict};let o=r.represented?.etag||null,n=Ot();if(o&&n&&o!==n)return{ok:!1,code:"stale-document"};o&&!n&&fn(o);let i=await xo({timeoutMs:t});return i.ok?{ok:!0}:{ok:!1,code:r.conflict??i.code??null}}function wo(e){e.staged&&(e.staged=null,e.tagless=!0,E?.storeOpened(e.store.name),xt())}un((e,{forSave:t,requestRefresh:r})=>{if(!R.size)return;let o=Ce(e,{warn:!1});for(let n of R.values()){if(n.store.ephemeral)continue;let i=o.get(n.store.name);if(!i&&(n.staged||n.tagless)){let m=e.querySelector("article[data-page]");if(!m)continue;let q=m.ownerDocument.createElement("script");q.setAttribute("type","application/json"),q.setAttribute("merge",n.store.name),q.setAttribute("clay","live"),m.parentNode.insertBefore(q,m),i={name:n.store.name,ephemeral:!1,element:q}}if(!i)continue;if(t&&(n.recovery||n.historicalRefreshPending)){let m=n.historicalRefreshPending;m&&r&&E?.release(n.store.name,{read:!0});let q=m?"save-history-refresh-required":"save-history-pending",g=m?`clay.live("${n.store.name}"): the earlier save happened, but the current value must load before newer edits can be saved. Your edits are still in this tab.`:`clay.live("${n.store.name}"): a save ended without an answer, so the saved value must be checked before this one is sent. Your edits are still in this tab.`;throw console.warn(`clay.live("${n.store.name}"): ${g}`),m||document.dispatchEvent(new CustomEvent("clay:live-notice",{detail:{name:n.store.name,code:q,message:g}})),Object.assign(new Error(g),{code:q})}let a=t&&n.store.handle.status.mode==="file"?Jt(n)?.[1]:null;if(a){i.element.textContent=a.text;for(let[m,q]of[["live-at",a.at],["live-by",a.by]])q===null?i.element.removeAttribute(m):i.element.setAttribute(m,q);continue}let d=ho(n);if(i.element.textContent=d,n.store.handle.status.mode==="fast"&&E)i.element.setAttribute("live-at",Nt(E.status.epoch,E.status.seq,V(n.store.authoritative))),i.element.removeAttribute("live-by");else{let m=n.store.pending.length>0||n.leftAt&&!n.leftAt.disk,q=St===null&&n.leftAt&&!n.leftAt.disk;if(t&&m&&(q||St&&!Vt)){let C="This host must update its live data protocol before this save can be sent. Your edits are still in this tab.";throw console.warn(`clay.live("${n.store.name}"): ${C}`),document.dispatchEvent(new CustomEvent("clay:live-notice",{detail:{name:n.store.name,code:"provenance-unsupported",message:C}})),E?.refresh(),Object.assign(new Error(C),{code:"provenance-unsupported"})}let g=Kr(n,t);g?(i.element.setAttribute("live-at",g.at),i.element.setAttribute("live-by",g.by)):(i.element.removeAttribute("live-at"),i.element.removeAttribute("live-by"))}}});document.addEventListener("clay:snapshot-ready",e=>{if(e.detail?.forSave!==!0||!R.size)return;let t=e.detail.captureId??null,r=Ce(e.detail.documentElement,{warn:!1}),o=new Map;for(let n of R.values()){if(n.store.ephemeral)continue;let i=r.get(n.store.name);if(!i)continue;let a=n.store.handle.status.mode==="fast"&&E?"fast":"file",d=a==="fast"?{epoch:E.status.epoch,seq:E.status.seq}:null,m=a==="file"?Ut(i.element):null,q=it(i.element.getAttribute("live-by")),g=a==="file"?Jt(n):null,C=n.store.pendingEntries().map(O=>O.id),F=g?g[1].ids.filter(O=>C.includes(O)):a==="file"?C:[],P=a==="file"&&q?.v===2?q.capture:null,_=F.length?g?g[0]:P?JSON.stringify(P):`anonymous:${++Yr}`:null,U=g?g[1].mark:n.store.mark;o.set(n.store.name,{mode:a,mark:U,canonical:Kt(i.element.textContent),at:d,lineage:m,by:i.element.getAttribute("live-by"),key:_,maybeLanded:!!g,ids:F}),m&&!m.disk&&n.leftAt&&(n.leftAt={...n.leftAt,ancestors:m.ancestors}),P&&P[0]===Zn&&(Bt=Math.max(Bt,P[1])),_&&(n.captureOps.set(_,{capture:P,ids:F,ended:!1,mark:U,text:i.element.textContent,at:i.element.getAttribute("live-at"),by:i.element.getAttribute("live-by")}),Qn(n)),n.framesSince=!1,a==="fast"&&Xt&&ve.flushing&&Pe?.landed(n.store.name,d)}Se!==null&&Se!==Ie&&tn(Ke(Se),!1),t!==null&&(Le.set(t,o),Se=t)});document.addEventListener("clay:save-conflict",e=>{ar(e.detail?.hadTimeout===!0,e.detail?.captureId)});for(let e of["clay:save-error","clay:save-offline"])document.addEventListener(e,t=>{let r=t.detail?.status,o=t.detail?.code,n=o==="page-converting"||o==="page-capacity";ar(o==="save-already-applied"||t.detail?.hadTimeout===!0||t.detail?.sent!==!1&&!n&&!(r>=400&&r<500),t.detail?.captureId)});function fr(e,t){if(!t||typeof e!="string")return;let r=Ce(kt(e),{warn:!1});for(let[o,n]of t){let i=R.get(o);if(!i)continue;let a=r.get(o),d=i.store.handle.status.mode;if(!a||Kt(a.element.textContent)!==n.canonical){n.mode==="file"&&(E?.roomBound(o)&&jt(i,n.mark),d==="fast"&&E?.release(o),ct(i));continue}if(n.mode==="fast"){n.at&&Pe?.landed(o,n.at);continue}d==="fast"?(jt(i,n.mark),Pe?.fileFrame(new Map([[o,{text:a.element.textContent,at:ot(a.element.getAttribute("live-at")),seq:null}]])),E?.release(o),E?.refresh()):i.framesSince?(!i.leftAt||i.leftAt.disk||E?.roomBound(o))&&jt(i,n.mark):(i.store.confirm(n.mark),i.leftAt=n.lineage&&a.element.getAttribute("live-by")===n.by?n.lineage:{disk:!0},wo(i)),ct(i)}}function bo(e,t,r){let o=Ce(kt(r),{warn:!1}),n=new Map,i=new Map;for(let[a,d]of t){if(d.qualifiedIds=null,d.mode!=="file"||d.key===null)continue;let m=R.get(a);if(!m)continue;let q=o.get(a);if(!q||Kt(q.element.textContent)!==d.canonical)continue;let g=m.captureOps.get(d.key);if(!g||q.element.getAttribute("live-at")!==g.at||q.element.getAttribute("live-by")!==d.by)continue;let C=new Set(m.store.pendingEntries().map(_=>_.id)),F=new Set(g.ids),P=d.ids.filter(_=>C.has(_)&&F.has(_));P.length&&(d.qualifiedIds=P,n.set(a,P),i.set(a,d.canonical))}Ee={captureId:e,qualified:n,saved:i,html:r}}gn(({captureId:e,html:t})=>{if(e==null)return;let r=Le.get(e);r&&(Ie=e,Se===e&&(Se=null),bo(e,r,t))});mn(({captureId:e,result:t,attempts:r,sent:o})=>{if(e==null||t?.ok)return;let n=Le.get(e);if(!n)return;let i=[...n.keys()].map(m=>R.get(m)).find(m=>m?.staged);if(i&&t.code==="page-nothing-to-write"){i.store.confirm(i.store.mark),Ke(e),qt(),ct(i);return}i&&t.code==="page-lineage-stale"&&(i.staged.conflict="conflict"),Ke(e);let a=co(t,o),d=a?to(e):null;qt(),tn(n,a,d?new Set(d.targets.map(m=>m.name)):null),d&&ro(d,{result:t,attempts:r,startedAt:Date.now()})});var Wt=null;function us(e){Wt=e}function qo(e,t){if(!Wt)return;let r=an(e);if(!r)return;let o=null;try{o=kt(t).querySelector("article[data-page]")?.innerHTML??null}catch{o=null}let n=Ot();Promise.resolve().then(()=>Wt({capture:String(e),state:r,article:o,etag:n})).catch(()=>{})}function So(e,t){let r=t?.captureId;if(r==null)return;qo(r,e);let o=Le.get(r);o&&(Ke(r),qt(),rr(r),fr(e,o))}hn(So);function cs(e){let t=Se??Ie,r=t===null?null:Ke(t);qt(),rr(t),fr(e,r)}function fs(){return Ee}function Ao(e,t=null){if(typeof e!="string"||!e)return;let r=Ce(kt(e),{warn:!1});if(!r.size)return;if(Pe){let n=new Map;for(let[i,a]of r)a.ephemeral||n.set(i,{text:a.element.textContent,at:ot(a.element.getAttribute("live-at")),seq:Number.isInteger(t)?t:null});Pe.fileFrame(n)}let o=Ce(document,{warn:!1});for(let[n,i]of r){let a=i.element.textContent,d=R.get(n),m=i.element.getAttribute("live-at"),q=i.element.getAttribute("live-by"),g=o.get(n)?.element;if(d&&!d.store.ephemeral&&d.store.handle.status.mode==="file"&&m!==null&&q===null&&(d.withheld||ut(n).length)){d.withheld=!0;continue}let C=[];if(d&&d.store.handle.status.mode==="file"){let F=Ut(i.element),P=F&&!F.disk&&(!E?.status.epoch||F.epoch===E.status.epoch);if(P?C=E?.captured(n,F,it(q))??[]:F?.disk&&(C=E?.captured(n,ot(m),null)??[]),F&&!F.disk)for(let[_,U]of d.captureOps)U.capture&&st(F.ancestors,...U.capture)&&(C.push(...U.ids),d.captureOps.delete(_));d.leftAt=P||F?.disk?F:null}if(g&&(!d||d.store.handle.status.mode==="file")&&(m===null?g.removeAttribute("live-at"):g.getAttribute("live-at")!==m&&g.setAttribute("live-at",m),q===null?g.removeAttribute("live-by"):g.getAttribute("live-by")!==q&&g.setAttribute("live-by",q)),d&&!d.store.ephemeral){if(d.staged)continue;d.store.handle.status.mode==="file"&&yo(d,a,"remote",C);continue}g&&g.textContent!==a&&(g.textContent=a)}}document.addEventListener("clay:sync-applied",e=>Ao(e.detail?.html,e.detail?.seq));document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&He&&dt()&&ve.flush()});window.addEventListener("pagehide",()=>{if(Xt=!0,!He||!dt())return;let e=Se??Ie,t=ve.flushing&&e!==null?Le.get(e):null;if(t)for(let[r,o]of t)o.mode==="fast"&&o.at&&Pe?.landed(r,o.at);ve.flush()});window.addEventListener("pageshow",()=>{Xt=!1});function ds(e){return R.get(e)?.store||null}function ps(e,t){let r=R.get(e);r&&r.store===t&&!r.staged&&R.delete(e)}function hs(){return[...R.values()].map(e=>e.store)}function gs(){return E}function ms(e){ve.within(e)}function xo({timeoutMs:e=1e4}={}){let t=new Map;for(let[o,n]of R)n.store.ephemeral||t.set(o,n.store.handle.status.mode==="fast"?n.last??0:null);let r=()=>[...t].every(([o,n])=>{let i=R.get(o);return i?n===null||i.store.handle.status.mode!=="fast"?i.store.pending.length===0:(i.landed??0)>=n:!0});return r()?Promise.resolve({ok:!0}):new Promise(o=>{let n=d=>{clearTimeout(a),Dt.delete(i),o(d)},i=()=>{r()&&n({ok:!0})},a=setTimeout(()=>n({ok:!1,code:"timeout"}),e);Dt.add(i),He&&(!E||E.isWriter())&&ve.soon()})}var ys=cr;export{zr as a,ir as b,ss as c,is as d,ls as e,Ce as f,go as g,cr as h,as as i,us as j,cs as k,fs as l,Ao as m,ds as n,ps as o,hs as p,gs as q,ms as r,xo as s,ys as t};