@panphora/clayjs 1.15.1 → 1.16.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 (506) 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 +83090 -58706
  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-NWPPXOCZ.js +1 -0
  21. package/dist/m/attrs/save-freeze-FUP4Q4X3.js +1 -0
  22. package/dist/m/c-2AZDZWCK.js +1 -0
  23. package/dist/m/c-2JL6E75N.js +1 -0
  24. package/dist/m/c-2M73252O.js +1 -0
  25. package/dist/m/c-2SPVQSHC.js +1 -0
  26. package/dist/m/c-33HUYEDI.js +1 -0
  27. package/dist/m/c-33JJ6CBX.js +2 -0
  28. package/dist/m/c-35NBGMZB.js +1 -0
  29. package/dist/m/c-3GJ4SDE2.js +1 -0
  30. package/dist/m/c-3IQRECYS.js +1 -0
  31. package/dist/m/c-3OWDMNJR.js +2 -0
  32. package/dist/m/c-46XYM55L.js +1 -0
  33. package/dist/m/c-4B6H4G5V.js +1 -0
  34. package/dist/m/c-4DRMS4QG.js +9 -0
  35. package/dist/m/c-4FFHZM32.js +1 -0
  36. package/dist/m/c-4JZDZFF6.js +1 -0
  37. package/dist/m/c-4L3BTFRK.js +1 -0
  38. package/dist/m/c-4Q2XTQ2N.js +2 -0
  39. package/dist/m/c-4WKFKEKF.js +1 -0
  40. package/dist/m/c-4YSCRICO.js +1 -0
  41. package/dist/m/c-54RCDCBU.js +1 -0
  42. package/dist/m/c-5M4YEKCX.js +4 -0
  43. package/dist/m/c-5R4PTRG2.js +1 -0
  44. package/dist/m/c-5V3MOVJT.js +1 -0
  45. package/dist/m/c-5VYOWDTI.js +1 -0
  46. package/dist/m/c-5Y6TNX5W.js +34 -0
  47. package/dist/m/c-5YIHJ3TJ.js +1 -0
  48. package/dist/m/c-66O32MV3.js +28 -0
  49. package/dist/m/c-6HMB24EV.js +1 -0
  50. package/dist/m/c-7DJDKPGL.js +1 -0
  51. package/dist/m/c-7O6AFR65.js +1 -0
  52. package/dist/m/c-7SWMYKAI.js +1 -0
  53. package/dist/m/c-7VGZ7RU5.js +1 -0
  54. package/dist/m/c-A7LS5UZW.js +1 -0
  55. package/dist/m/c-ANQTJ3B5.js +2 -0
  56. package/dist/m/c-AQLFEATB.js +1 -0
  57. package/dist/m/c-AYVOREBE.js +1 -0
  58. package/dist/m/c-B2ZXPOS3.js +3 -0
  59. package/dist/m/c-BBVGTQG7.js +1 -0
  60. package/dist/m/c-BMIZKMPV.js +1 -0
  61. package/dist/m/c-BTDI4Y23.js +1 -0
  62. package/dist/m/c-BWFVSBDF.js +1 -0
  63. package/dist/m/c-BYTKL6UX.js +1 -0
  64. package/dist/m/c-CFHW5AMY.js +6 -0
  65. package/dist/m/c-CJZSLMVQ.js +1 -0
  66. package/dist/m/c-CYWLPPUS.js +1 -0
  67. package/dist/m/c-CZUSOB7V.js +1 -0
  68. package/dist/m/c-DBE6ORSI.js +1 -0
  69. package/dist/m/c-DCFSEJZG.js +1 -0
  70. package/dist/m/c-DNZ5IFM6.js +1 -0
  71. package/dist/m/c-EDHUR4MX.js +1 -0
  72. package/dist/m/c-EJTGYSLN.js +1 -0
  73. package/dist/m/c-EY6UOM54.js +1 -0
  74. package/dist/m/c-F3CKJTJS.js +1 -0
  75. package/dist/m/c-F7Y6FLPY.js +1 -0
  76. package/dist/m/c-FA4DZVTC.js +1 -0
  77. package/dist/m/c-FILLTJA7.js +1 -0
  78. package/dist/m/c-G2BUZITR.js +1 -0
  79. package/dist/m/c-GB3JTV6E.js +1 -0
  80. package/dist/m/c-GBGWXTX4.js +1 -0
  81. package/dist/m/c-GHBCCVG4.js +1 -0
  82. package/dist/m/c-GJAEGGXY.js +1 -0
  83. package/dist/m/c-GOWBDM6J.js +1 -0
  84. package/dist/m/c-GQ6F6IDK.js +1 -0
  85. package/dist/m/c-H4LG442Q.js +1 -0
  86. package/dist/m/c-HA6INT6J.js +1 -0
  87. package/dist/m/c-HPURYVZS.js +2 -0
  88. package/dist/m/c-HRDCD3WN.js +67 -0
  89. package/dist/m/c-HT33EQRN.js +1 -0
  90. package/dist/m/c-HVYXIS72.js +1 -0
  91. package/dist/m/c-IB52R237.js +1 -0
  92. package/dist/m/c-IJUK2GPW.js +1 -0
  93. package/dist/m/c-IKWNE4R4.js +1 -0
  94. package/dist/m/c-IU3IYEU6.js +1 -0
  95. package/dist/m/c-IZ2EBRAJ.js +1 -0
  96. package/dist/m/c-J7CA54IP.js +1 -0
  97. package/dist/m/c-JAX2667S.js +6 -0
  98. package/dist/m/c-KI7M4AY3.js +1 -0
  99. package/dist/m/c-KIPQJX4B.js +1 -0
  100. package/dist/m/c-KKWLDOPM.js +1 -0
  101. package/dist/m/c-KR4UW4KW.js +1 -0
  102. package/dist/m/c-KY3VJGUA.js +8 -0
  103. package/dist/m/c-L4WQSC27.js +1 -0
  104. package/dist/m/c-LFPHCXY3.js +1 -0
  105. package/dist/m/c-LR4CGEPT.js +91 -0
  106. package/dist/m/c-LRPUO2MX.js +1 -0
  107. package/dist/m/c-LTGMXXKO.js +1 -0
  108. package/dist/m/c-LXENEBV7.js +1 -0
  109. package/dist/m/c-LZJPNR2W.js +1 -0
  110. package/dist/m/c-MMUIUUZG.js +2 -0
  111. package/dist/m/c-MTQHWQC3.js +1 -0
  112. package/dist/m/c-N326R2JD.js +1 -0
  113. package/dist/m/c-N7JPUPGC.js +1 -0
  114. package/dist/m/c-NMJRXKPC.js +8 -0
  115. package/dist/m/c-NRPJEVJS.js +1 -0
  116. package/dist/m/c-NUHP2XDB.js +1 -0
  117. package/dist/m/c-NZMNXVF6.js +1 -0
  118. package/dist/m/c-OCSZ4QGN.js +1 -0
  119. package/dist/m/c-OIBUTDXI.js +1 -0
  120. package/dist/m/c-OIDRZKAF.js +1 -0
  121. package/dist/m/c-OYTFP5QN.js +1 -0
  122. package/dist/m/c-P7KNDG34.js +1 -0
  123. package/dist/m/c-PPOSCAQD.js +1 -0
  124. package/dist/m/c-PQ5LK6QE.js +993 -0
  125. package/dist/m/c-PZ4XEPUP.js +2 -0
  126. package/dist/m/c-QHIWXHRO.js +1 -0
  127. package/dist/m/c-QHWJ5ZIJ.js +1 -0
  128. package/dist/m/c-QIX5BJYN.js +1 -0
  129. package/dist/m/c-QNKREOL6.js +1 -0
  130. package/dist/m/c-QQHEX6HA.js +1 -0
  131. package/dist/m/c-R7RMANJI.js +9 -0
  132. package/dist/m/c-RI4NT75Y.js +1 -0
  133. package/dist/m/c-RM7J7BV2.js +1 -0
  134. package/dist/m/c-RUJKSUQW.js +1 -0
  135. package/dist/m/c-RVMWGXEJ.js +1 -0
  136. package/dist/m/c-S7H2DRCB.js +1 -0
  137. package/dist/m/c-S7LK4KUE.js +1 -0
  138. package/dist/m/c-SGCCC4FW.js +25 -0
  139. package/dist/m/c-SGIA4IEQ.js +188 -0
  140. package/dist/m/c-SWRJFCNN.js +1 -0
  141. package/dist/m/c-T4VO4OCB.js +1 -0
  142. package/dist/m/c-TCCA5BZN.js +2 -0
  143. package/dist/m/c-TQEMVJCS.js +1 -0
  144. package/dist/m/c-TQZ2JYHD.js +1 -0
  145. package/dist/m/c-TR6RMDQ7.js +3 -0
  146. package/dist/m/c-TRS6TM6O.js +1 -0
  147. package/dist/m/c-UGHH4MB3.js +1 -0
  148. package/dist/m/c-UKHTLWUW.js +1 -0
  149. package/dist/m/c-UL2YUY52.js +1 -0
  150. package/dist/m/c-UNN7LWCT.js +1 -0
  151. package/dist/m/c-UXBMRDZB.js +235 -0
  152. package/dist/m/c-V7PZZRG7.js +1 -0
  153. package/dist/m/c-VAK7SG37.js +1 -0
  154. package/dist/m/c-VDSS4K3Z.js +1 -0
  155. package/dist/m/c-VFX45IZQ.js +1 -0
  156. package/dist/m/c-VHNSBD2M.js +1 -0
  157. package/dist/m/c-VKEDWYDF.js +1 -0
  158. package/dist/m/c-VL52ADDR.js +1 -0
  159. package/dist/m/c-WN5AY3OZ.js +1 -0
  160. package/dist/m/c-WNYBLIOZ.js +1 -0
  161. package/dist/m/c-WRBKEJD4.js +1 -0
  162. package/dist/m/c-WWDBYXLK.js +1 -0
  163. package/dist/m/c-WYFDLITL.js +1 -0
  164. package/dist/m/c-XN6MBKI6.js +67 -0
  165. package/dist/m/c-XNNW2CWK.js +1 -0
  166. package/dist/m/c-XPELB6E5.js +1 -0
  167. package/dist/m/c-XQXZAO7N.js +1 -0
  168. package/dist/m/c-Y6USGTS5.js +5 -0
  169. package/dist/m/c-YDH7Q3NY.js +1 -0
  170. package/dist/m/c-YG2NJYS6.js +135 -0
  171. package/dist/m/c-Z36J63PP.js +1 -0
  172. package/dist/m/c-Z4VRC7GU.js +7 -0
  173. package/dist/m/c-Z6K52OLP.js +19 -0
  174. package/dist/m/c-ZDY2MDAA.js +21 -0
  175. package/dist/m/c-ZE46QDIH.js +1 -0
  176. package/dist/m/c-ZUCOKOHT.js +1 -0
  177. package/dist/m/core/admin-attrs-VGNLAUDK.js +1 -0
  178. package/dist/m/core/autosave-E4PEFPZ6.js +1 -0
  179. package/dist/m/core/conflict-notice-VQ6Y64PH.js +1 -0
  180. package/dist/m/core/draft-mode-WSQAT67S.js +1 -0
  181. package/dist/m/core/host-permission-XN3K2IW3.js +1 -0
  182. package/dist/m/core/is-edit-mode-JXHDVGUL.js +1 -0
  183. package/dist/m/core/persist-HKHA66IY.js +3 -0
  184. package/dist/m/core/recovery-TBBSICE2.js +1 -0
  185. package/dist/m/core/save-WUCHTQBE.js +1 -0
  186. package/dist/m/core/save-core-FJVHT5M3.js +1 -0
  187. package/dist/m/core/snapshot-F3SWDZMM.js +1 -0
  188. package/dist/m/core/unsaved-warning-STKBHE6G.js +1 -0
  189. package/dist/m/dom/all-APS5ZSKP.js +1 -0
  190. package/dist/m/dom/dom-helpers-L7OSR6S4.js +1 -0
  191. package/dist/m/events/index-23DPTUT4.js +1 -0
  192. package/dist/m/internals/index-WOVAP3RU.js +1 -0
  193. package/dist/m/lib/cache-bust-CGWT6ZJI.js +1 -0
  194. package/dist/m/lib/region-policy-SB2AWVG5.js +1 -0
  195. package/dist/m/loader-HXX6YNH5.js +1 -0
  196. package/dist/m/manifest-F22DEDAC.js +1 -0
  197. package/dist/m/manifest-edit-C3C7376B.js +1 -0
  198. package/dist/m/manifest.json +3491 -0
  199. package/dist/m/options/options-2LH76JQ3.js +1 -0
  200. package/dist/m/page/editor-XUTB2HB2.js +189 -0
  201. package/dist/m/plugins/ai-edit-ZQ4CGWIP.js +6 -0
  202. package/dist/m/plugins/bind-text-NX46N5UV.js +1 -0
  203. package/dist/m/plugins/cms-HP3LSTPN.js +2293 -0
  204. package/dist/m/plugins/demo-ZIBFAA3R.js +1 -0
  205. package/dist/m/plugins/derive-UAAA4V4S.js +1 -0
  206. package/dist/m/plugins/indicator-PV4YW2ID.js +1 -0
  207. package/dist/m/plugins/live-NUTTXSBS.js +1 -0
  208. package/dist/m/plugins/menu-HCKO3DSP.js +138 -0
  209. package/dist/m/plugins/message-LQ6EDH4V.js +1 -0
  210. package/dist/m/plugins/page-KSUH7G6J.js +2 -0
  211. package/dist/m/plugins/page-view-W73OW7WI.js +1 -0
  212. package/dist/m/plugins/people-AJJ32YCG.js +1 -0
  213. package/dist/m/plugins/quickcrop-QNY3PKLD.js +26 -0
  214. package/dist/m/plugins/quickcrop-QNY3PKLD.js.LEGAL.txt +7 -0
  215. package/dist/m/plugins/richclay-RC3L2F6X.js +517 -0
  216. package/dist/m/plugins/richclay-RC3L2F6X.js.LEGAL.txt +1 -0
  217. package/dist/m/plugins/sortable-YRMQX3ZU.js +1 -0
  218. package/dist/m/plugins/source-KHK5UUSK.js +1 -0
  219. package/dist/m/plugins/undo-OF2L3CXU.js +1 -0
  220. package/dist/m/plugins/unsent-HJFLQJ2O.js +1 -0
  221. package/dist/m/plugins/upgrade-ZNYODP5Y.js +1 -0
  222. package/dist/m/plugins/upload-XSGNILUY.js +1 -0
  223. package/dist/m/plugins/visitor-drafts-XK5GW55Q.js +21 -0
  224. package/dist/m/plugins/visitor-drafts-owner-KSSH75EV.js +1 -0
  225. package/dist/m/plugins/wire-ZWVWKF76.js +1 -0
  226. package/dist/m/reader-core-ILWLXVMP.js +68 -0
  227. package/dist/m/route/route-KOCZSEGN.js +1 -0
  228. package/dist/m/sync/live-sync-4AUVXVJU.js +1 -0
  229. package/dist/m/ui/index-EVHKMKBL.js +1 -0
  230. package/dist/m/utils/index-4TJCVLT7.js +1 -0
  231. package/dist/m/vendor/Sortable.vendor-A755ITLN.js +3 -0
  232. package/dist/m/vendor/Sortable.vendor-A755ITLN.js.LEGAL.txt +1 -0
  233. package/dist/m/vendor/sap-core.vendor-A7BMUYZT.js +6 -0
  234. package/dist/offline-manifest.json +3800 -0
  235. package/dist/page/themes/light-1.css +406 -0
  236. package/dist/server/core.cjs +23662 -22860
  237. package/dist/server/offline-runtime.cjs +4954 -0
  238. package/dist/server/offline-runtime.mjs +4923 -0
  239. package/dist/server/rooms.mjs +9 -0
  240. package/docs/guide.md +1078 -669
  241. package/entries/all.js +2 -0
  242. package/entries/clay-data.js +1 -1
  243. package/entries/clay-dom.js +2 -0
  244. package/entries/clay-events.js +2 -0
  245. package/entries/clay-internals.js +2 -0
  246. package/entries/clay-options.js +2 -0
  247. package/entries/clay-router.js +2 -0
  248. package/entries/clay-ui.js +2 -0
  249. package/entries/clay-utils.js +2 -0
  250. package/entries/clay.js +2 -0
  251. package/entries/sap.js +6 -6
  252. package/fonts/ibm-plex-mono-LICENSE +93 -0
  253. package/fonts/ibm-plex-mono-latin-300-normal.woff2 +0 -0
  254. package/fonts/ibm-plex-mono-latin-400-italic.woff2 +0 -0
  255. package/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
  256. package/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
  257. package/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
  258. package/fonts/ibm-plex-sans-LICENSE +93 -0
  259. package/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
  260. package/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
  261. package/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
  262. package/fonts/ibm-plex.css +71 -0
  263. package/fonts/inter-LICENSE +93 -0
  264. package/fonts/inter-cyrillic-ext-wght-normal.woff2 +0 -0
  265. package/fonts/inter-cyrillic-wght-normal.woff2 +0 -0
  266. package/fonts/inter-greek-ext-wght-normal.woff2 +0 -0
  267. package/fonts/inter-greek-wght-normal.woff2 +0 -0
  268. package/fonts/inter-latin-ext-wght-normal.woff2 +0 -0
  269. package/fonts/inter-latin-wght-normal.woff2 +0 -0
  270. package/fonts/inter-vietnamese-wght-normal.woff2 +0 -0
  271. package/fonts/inter.css +62 -0
  272. package/fonts/newsreader-LICENSE +93 -0
  273. package/fonts/newsreader-latin-ext-opsz-normal.woff2 +0 -0
  274. package/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
  275. package/fonts/newsreader-vietnamese-opsz-normal.woff2 +0 -0
  276. package/fonts/newsreader.css +26 -0
  277. package/fonts/work-sans-LICENSE +93 -0
  278. package/fonts/work-sans-latin-wght-normal.woff2 +0 -0
  279. package/fonts/work-sans.css +8 -0
  280. package/package.json +20 -3
  281. package/packed-contract.json +1 -0
  282. package/src/attrs/add-from.js +27 -4
  283. package/src/attrs/save-freeze.js +7 -52
  284. package/src/core/admin-attrs.js +119 -12
  285. package/src/core/admin-contenteditable.js +12 -10
  286. package/src/core/admin-inputs.js +14 -15
  287. package/src/core/admin-onclick.js +2 -0
  288. package/src/core/autosave.js +74 -21
  289. package/src/core/conflict-download.js +22 -0
  290. package/src/core/conflict-notice-ui.js +1173 -0
  291. package/src/core/conflict-notice.js +140 -697
  292. package/src/core/edit-mode.js +147 -14
  293. package/src/core/etag.js +30 -12
  294. package/src/core/host-meta.js +72 -8
  295. package/src/core/host-permission.js +29 -0
  296. package/src/core/is-edit-mode.js +145 -12
  297. package/src/core/mode-key.js +125 -0
  298. package/src/core/mode-lifecycle.js +544 -0
  299. package/src/core/mode-receipt.js +30 -0
  300. package/src/core/mode-refusal.js +13 -0
  301. package/src/core/mode-resources.js +52 -0
  302. package/src/core/mode-support.js +82 -0
  303. package/src/core/mode-switch.js +259 -0
  304. package/src/core/mode-transition.js +112 -0
  305. package/src/core/page-data-write.js +305 -0
  306. package/src/core/page-data.js +26 -227
  307. package/src/core/page-format-wire.js +4 -0
  308. package/src/core/page-format.js +58 -0
  309. package/src/core/persist.js +37 -9
  310. package/src/core/preserve-authored.js +114 -0
  311. package/src/core/recovery.js +772 -0
  312. package/src/core/runtime-url.js +105 -0
  313. package/src/core/save-core.js +109 -12
  314. package/src/core/save-replace.js +72 -0
  315. package/src/core/save-size-notice.js +134 -0
  316. package/src/core/save-size.js +140 -0
  317. package/src/core/save.js +805 -118
  318. package/src/core/snapshot.js +121 -11
  319. package/src/core/source-map.js +157 -9
  320. package/src/core/unsaved-warning.js +14 -4
  321. package/src/core/upgrade-run.js +408 -0
  322. package/src/core/version.js +18 -0
  323. package/src/lib/assets.js +30 -0
  324. package/src/lib/autosave-debug-gate.js +50 -0
  325. package/src/lib/autosave-scheduler.js +141 -0
  326. package/src/lib/boot-imports.js +8 -0
  327. package/src/lib/derived.js +3 -1
  328. package/src/lib/dirty-gate.js +15 -0
  329. package/src/lib/doc-storage.js +33 -0
  330. package/src/lib/effect.js +9 -4
  331. package/src/lib/mutation.js +4 -2
  332. package/src/lib/offline-runtime.js +226 -0
  333. package/src/lib/preload.js +48 -0
  334. package/src/lib/root-attrs.js +1 -1
  335. package/src/lib/trash.js +18 -0
  336. package/src/lib/undo/capture-move.js +152 -0
  337. package/src/live/local-channel.js +61 -0
  338. package/src/live/local-lane.js +60 -9
  339. package/src/live/server-lane.js +6 -3
  340. package/src/loader-logic.js +76 -15
  341. package/src/loader.js +218 -30
  342. package/src/page/adopt-boot.js +76 -22
  343. package/src/page/adopt.js +25 -4
  344. package/src/page/awareness.js +230 -0
  345. package/src/page/blocks.js +79 -5
  346. package/src/page/blocksel.js +20 -4
  347. package/src/page/board-face.js +13 -0
  348. package/src/page/board-panel.js +5 -17
  349. package/src/page/board-style.js +2 -13
  350. package/src/page/board-view.js +1 -11
  351. package/src/page/board-views.js +17 -0
  352. package/src/page/board.js +2 -2
  353. package/src/page/boot-pack.js +26 -0
  354. package/src/page/boot.js +237 -0
  355. package/src/page/checklist.js +1 -1
  356. package/src/page/chrome.js +411 -61
  357. package/src/page/csv-import.js +17 -2
  358. package/src/page/document-title-dom.js +40 -0
  359. package/src/page/document-title-runtime.js +76 -0
  360. package/src/page/document-title.js +9 -0
  361. package/src/page/drag.js +48 -13
  362. package/src/page/drop.js +2 -1
  363. package/src/page/editor.js +330 -86
  364. package/src/page/feature-loader.js +72 -0
  365. package/src/page/features/board.js +12 -0
  366. package/src/page/features/code.js +13 -0
  367. package/src/page/features/media.js +290 -0
  368. package/src/page/features/registry.js +23 -0
  369. package/src/page/features/table.js +383 -0
  370. package/src/page/{tool-view.js → features/tool.js} +33 -2
  371. package/src/page/format-codec.js +215 -0
  372. package/src/page/format-gate.js +179 -0
  373. package/src/page/format-level.js +157 -0
  374. package/src/page/highlight-slot.js +23 -0
  375. package/src/page/highlight.js +30 -16
  376. package/src/page/history-intent.js +78 -0
  377. package/src/page/inline.js +18 -25
  378. package/src/page/items.js +52 -11
  379. package/src/page/link.js +1 -0
  380. package/src/page/markdown.js +86 -1
  381. package/src/page/media-views.js +3 -0
  382. package/src/page/media.js +33 -245
  383. package/src/page/outline-cache.js +11 -0
  384. package/src/page/placeholder.js +27 -7
  385. package/src/page/projection.js +196 -50
  386. package/src/page/reader-patch.js +306 -0
  387. package/src/page/recover.js +1 -1
  388. package/src/page/rich/page-tool.js +1 -4
  389. package/src/page/runtime-owner.js +27 -0
  390. package/src/page/save-projection.js +7 -4
  391. package/src/page/schema.js +14 -0
  392. package/src/page/table-rect-key.js +3 -0
  393. package/src/page/table-select.js +4 -3
  394. package/src/page/table-style.js +1 -1
  395. package/src/page/table-views.js +3 -0
  396. package/src/page/table.js +8 -293
  397. package/src/page/themes/light-1.css +139 -2
  398. package/src/page/themes/light-1.source.css +269 -0
  399. package/src/page/tool-capability.js +3 -0
  400. package/src/page/tool-views.js +3 -0
  401. package/src/page/view.js +390 -107
  402. package/src/page/ybind/awareness.js +172 -0
  403. package/src/page/ybind/binding.js +9 -1
  404. package/src/page/ybind/bridge.js +50 -47
  405. package/src/page/ybind/decode.js +52 -19
  406. package/src/page/ybind/doc.js +27 -2
  407. package/src/page/ybind/group.js +12 -3
  408. package/src/page/ybind/index.js +2 -0
  409. package/src/page/ybind/lineage.js +71 -0
  410. package/src/page/ybind/marks.js +25 -1
  411. package/src/page/ybind/migrate.js +48 -13
  412. package/src/page/ybind/moves.js +32 -21
  413. package/src/page/ybind/positions.js +50 -0
  414. package/src/page/ybind/provider.js +84 -22
  415. package/src/page/ybind/recovery-proof.js +191 -0
  416. package/src/page/ybind/recovery-replay.js +130 -0
  417. package/src/page/ybind/tokens.js +15 -6
  418. package/src/page/ybind/walk.js +10 -3
  419. package/src/page/ybind/writer.js +48 -4
  420. package/src/plugins/ai-edit.js +167 -32
  421. package/src/plugins/bind-text.js +218 -0
  422. package/src/plugins/cms.js +93 -0
  423. package/src/plugins/indicator.js +57 -5
  424. package/src/plugins/live.js +282 -34
  425. package/src/plugins/menu/claygoo.svg.js +1 -0
  426. package/src/plugins/menu/seo-head.js +323 -0
  427. package/src/plugins/menu/seo.js +849 -0
  428. package/src/plugins/menu.js +425 -0
  429. package/src/plugins/page-view.js +131 -0
  430. package/src/plugins/page.js +1022 -275
  431. package/src/plugins/people.js +158 -31
  432. package/src/plugins/richclay.js +119 -9
  433. package/src/plugins/sortable.js +370 -60
  434. package/src/plugins/source.js +189 -366
  435. package/src/plugins/undo.js +289 -19
  436. package/src/plugins/unsent.js +132 -0
  437. package/src/plugins/upgrade-run.js +1 -0
  438. package/src/plugins/upgrade.js +210 -0
  439. package/src/plugins/upload-task.js +571 -0
  440. package/src/plugins/upload-ui.js +265 -0
  441. package/src/plugins/upload.js +34 -153
  442. package/src/plugins/visitor-drafts/inert.js +32 -0
  443. package/src/plugins/visitor-drafts/owner-chip.js +3 -0
  444. package/src/plugins/visitor-drafts/prompt.js +2 -2
  445. package/src/plugins/visitor-drafts-owner.js +85 -0
  446. package/src/plugins/visitor-drafts.js +31 -42
  447. package/src/plugins/wire.js +82 -1
  448. package/src/reader-core.js +26 -0
  449. package/src/recovery/conflicts.js +287 -0
  450. package/src/recovery/identity.js +154 -0
  451. package/src/recovery/store.js +792 -0
  452. package/src/recovery/undo.js +257 -0
  453. package/src/server/checkpoint/index.js +68 -4
  454. package/src/server/offline-runtime/index.js +214 -0
  455. package/src/server/rooms/index.js +2 -1
  456. package/src/server/rooms/live-data-rooms.js +2 -2
  457. package/src/server/rooms/page-admission.js +33 -0
  458. package/src/server/rooms/page-lineage.js +56 -0
  459. package/src/server/rooms/page-rebase.js +11 -5
  460. package/src/server/rooms/page-state.js +2 -0
  461. package/src/server/rooms/page-write-admission.js +9 -3
  462. package/src/source/session.js +705 -0
  463. package/src/sync/conflict-revert.js +5 -4
  464. package/src/sync/conflicts-edit.js +119 -0
  465. package/src/sync/conflicts-facade.js +49 -0
  466. package/src/sync/conflicts.js +99 -1
  467. package/src/sync/editing-marker.js +37 -6
  468. package/src/sync/editing-sender.js +8 -1
  469. package/src/sync/live-sync-edit.js +63 -0
  470. package/src/sync/live-sync.js +364 -119
  471. package/src/sync/local-presence.js +187 -0
  472. package/src/sync/merge-declarations.js +10 -0
  473. package/src/sync/merge-engine.js +12 -0
  474. package/src/sync/presence-store.js +412 -0
  475. package/src/sync/presence-target.js +243 -0
  476. package/src/sync/presence.js +72 -41
  477. package/src/sync/saved-handoff.js +200 -0
  478. package/src/sync/saved-stream.js +535 -0
  479. package/src/sync/version-guard.js +92 -0
  480. package/src/sync/wire-profile.js +81 -0
  481. package/src/ui/bevel-controls.js +2 -8
  482. package/src/ui/page-scheme.js +7 -0
  483. package/src/ui/skins/cms.js +1 -1
  484. package/src/ui/theme-config.js +150 -0
  485. package/src/ui/theme.js +6 -138
  486. package/src/ui/toast-lazy.js +11 -0
  487. package/src/vendor/LICENSES-optional.md +253 -0
  488. package/src/vendor/highlight.vendor.js +3 -0
  489. package/src/vendor/hljs-bash.vendor.js +2 -0
  490. package/src/vendor/hljs-css.vendor.js +2 -0
  491. package/src/vendor/hljs-javascript.vendor.js +2 -0
  492. package/src/vendor/hljs-json.vendor.js +2 -0
  493. package/src/vendor/hljs-python.vendor.js +2 -0
  494. package/src/vendor/hljs-xml.vendor.js +2 -0
  495. package/src/vendor/hyper-html-api-data.vendor.js +1 -1
  496. package/src/vendor/hyper-html-api-upgrade.vendor.js +5 -0
  497. package/src/vendor/hyper-morph-identity.vendor.js +2 -0
  498. package/src/vendor/hyper-morph-json.vendor.js +3 -0
  499. package/src/vendor/hyper-morph.vendor.js +6 -6
  500. package/src/vendor/hyper-undo.vendor.js +1 -1
  501. package/src/vendor/hypercms.vendor.js +169 -84
  502. package/src/vendor/marked.vendor.js +68 -0
  503. package/src/vendor/overtype.vendor.js +994 -0
  504. package/src/vendor/richclay.vendor.js +17 -17
  505. package/src/vendor/sap-core.vendor.js +5 -5
  506. package/src/vendor/sap-ownership.vendor.js +11 -7
@@ -0,0 +1 @@
1
+ import{c as m}from"../c-7SWMYKAI.js";import{a as f}from"../c-HT33EQRN.js";import"../c-IJUK2GPW.js";import"../c-GHBCCVG4.js";import"../c-HA6INT6J.js";import"../c-DCFSEJZG.js";import"../c-WRBKEJD4.js";import"../c-VHNSBD2M.js";var w="option-visibility",y=[{prefix:"option-not",kind:"show-not"},{prefix:"option",kind:"show"},{prefix:"show-when",kind:"show"},{prefix:"hide-when",kind:"hide"}];function x(t,e){let n=null;for(let o of y)if(t.startsWith(o.prefix+":")){n=o;break}if(!n)return null;let r=t.slice(n.prefix.length+1),i=e,s=i.split("|");return{name:r,rawValue:i,values:s,kind:n.kind,prefix:n.prefix,negated:n.kind==="show-not"}}var h={debug:!1,_started:!1,_unsubscribe:null,log(...t){this.debug&&console.log("[OptionVisibility]",...t)},findOptionAttributes(){let t=new Map;try{let e=document.evaluate('//*[@*[starts-with(name(), "option:") or starts-with(name(), "option-not:") or starts-with(name(), "show-when:") or starts-with(name(), "hide-when:")]]',document.documentElement,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);for(let n=0;n<e.snapshotLength;n++){let r=e.snapshotItem(n);for(let i of r.attributes){let s=x(i.name,i.value);if(!s)continue;let o=`${s.prefix}:${s.name}=${s.rawValue}`;t.has(o)||t.set(o,s)}}}catch(e){this.log("XPath error, falling back to empty",e)}return[...t.values()]},generateCSS(t){return t.length?t.map(e=>{let{name:n,rawValue:r,values:i}=e,s=e.kind||(e.negated?"show-not":"show"),o=e.prefix||(s==="show-not"?"option-not":s==="hide"?"hide-when":"option"),a=CSS.escape(n),b=CSS.escape(r),u=`[${CSS.escape(o)}\\:${a}="${b}"]`,S=i.map(c=>`[${a}="${CSS.escape(c)}"]`),g=i.map(c=>`[${a}="${CSS.escape(c)}"] *`),p=[...S,...g].join(",");if(s==="hide")return`${u}:is(${p}){display:none!important}`;let l;if(s==="show-not"){let c=i.map($=>`[${a}="${CSS.escape($)}"]`).join(","),d=`[${a}]:not(${c})`;l=`${d},${d} *`}else l=p;return`${u}:not(:is(${l})){display:none!important}`}).join(""):""},update(){try{let t=this.findOptionAttributes(),e=this.generateCSS(t);m(w,e,n=>{n.setAttribute("clay","no-watch")}),this.log(`Generated ${t.length} rules`)}catch(t){console.error("[OptionVisibility] Error generating rules:",t)}},start(){if(!this._started){if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",()=>this.start(),{once:!0});return}this._started=!0,this.update(),this._unsubscribe=f.onAnyChange({debounce:200,selectorFilter:t=>[...t.attributes].some(e=>e.name.startsWith("option:")||e.name.startsWith("option-not:")||e.name.startsWith("show-when:")||e.name.startsWith("hide-when:")),omitChangeDetails:!0,require:"observed",pausable:!1},()=>this.update()),this.log("Started")}},stop(){if(!this._started)return;this._started=!1,this._unsubscribe&&(this._unsubscribe(),this._unsubscribe=null);let t=document.querySelector(`style[data-name="${w}"]`);t&&t.remove(),this.log("Stopped")}};window.clay.optionVisibility=h;var O=h;function _(){h.start()}_();export{O as default,_ as init,x as parseOptionAttribute};
@@ -0,0 +1,189 @@
1
+ import{a as C,b as ze,d as Ee}from"../c-IB52R237.js";import{b as Pe}from"../c-33HUYEDI.js";import{c as Ce,e as K}from"../c-IKWNE4R4.js";import"../c-XNNW2CWK.js";import{N as le,P as se,ca as de,da as ce,ga as he,ia as me,ja as be,ka as fe,la as ve,ma as xe,na as ke,oa as we,sa as ye}from"../c-KY3VJGUA.js";import"../c-Y6USGTS5.js";import"../c-EDHUR4MX.js";import{d as ue}from"../c-54RCDCBU.js";import{A as B,G as ge,b as ae,c as T,h as te,l as oe,s as re,v as pe,w as ne,x as ie}from"../c-TR6RMDQ7.js";import{B as Z,E as Y,I as J,K as Q,N as ee,a as q,b as v,d as y,e as S,f as D,g as A,h as X,i as G,m}from"../c-66O32MV3.js";import{a as O,b as Se,c as $}from"../c-BMIZKMPV.js";import{a as Ae}from"../c-BYTKL6UX.js";import"../c-4L3BTFRK.js";import"../c-5V3MOVJT.js";import{b as I}from"../c-OYTFP5QN.js";import"../c-7SWMYKAI.js";import"../c-UGHH4MB3.js";import"../c-HT33EQRN.js";import"../c-IJUK2GPW.js";import"../c-GHBCCVG4.js";import"../c-HA6INT6J.js";import"../c-DCFSEJZG.js";import"../c-WRBKEJD4.js";import"../c-VHNSBD2M.js";var{Decoration:De,DecorationSet:je}=y,_e="Type / for blocks",Ue="Untitled";function We(e){let a=!1,t=null;return e.forEach((o,r)=>{a||o.type!==m.nodes.heading||o.attrs.level!==1||(o.attrs.parent??null)!==null||(a=!0,o.content.size||(t=De.node(r,r+o.nodeSize,{class:"page-title-placeholder","data-placeholder":Ue})))}),t}function Me(e=_e){return new v.Plugin({props:{decorations(a){let t=[],o=We(a.doc);o&&t.push(o);let{selection:r}=a;if(r.empty){let p=r.$from;if(p.depth===1){let n=p.parent;if(n.type===m.nodes.paragraph&&!n.content.size){let g=p.before(1);t.push(De.node(g,g+n.nodeSize,{class:"page-placeholder","data-placeholder":e}))}}}return t.length?je.create(a.doc,t):null}}})}var{Plugin:Be}=v,{Decoration:He,DecorationSet:qe}=y;function R(e,a){let t=null;return e.state.doc.forEach((o,r)=>{o.attrs.id===a&&o.type===m.nodes.list_item&&o.attrs.kind==="check"&&(t={node:o,pos:r})}),t}function V(e,a,t,o){let r=R(e,a);r&&e.dispatch(B(e.state.tr.setNodeMarkup(r.pos,null,{...r.node.attrs,[t]:o||null})))}function N(e,a,t,o){let r=e.createElement("button");return r.type="button",r.className="page-check-chip",r.dataset.check=o,r.textContent=a,r.setAttribute("aria-label",t),r}function Xe(e,a,t){let o=t.ownerDocument,r=R(e,a)?.node.attrs.owner||"",p=o.createElement("span");p.className="page-check-popup page-check-owner",p.contentEditable="false";let n=C(o,"span","page-board-owners"),g=C(o,"span","page-board-people",{role:"group","aria-label":"Owner"}),c=C(o,"input","page-board-owner-input",{type:"text","aria-label":"Owner name",placeholder:"Or type a name\u2026"});c.value=r;let x=s=>V(e,a,"owner",s),b=(s,f,l,i)=>{let h=C(o,"button",`page-board-person${s?"":" is-none"}`,{type:"button","aria-pressed":String(i),"data-check":l});return s?h.append(ze(o,s),C(o,"span",null,{},s)):h.textContent=f,h.addEventListener("click",()=>x(s)),h},w=s=>{let f=c.value.trim().toLowerCase(),l=(s||[]).filter(i=>!f||f===r.toLowerCase()||i.name.toLowerCase().includes(f));g.replaceChildren(...l.map(i=>b(i.name,i.name,"owner-option",i.name===r)),b(null,"No owner","clear-owner",!r))};c.addEventListener("keydown",s=>{s.key==="Enter"&&(s.preventDefault(),x(c.value.trim())),s.key==="Escape"&&(s.preventDefault(),p.remove(),t.focus()),s.stopPropagation()}),n.append(g,c),p.append(n),t.after(p),c.focus();let k=[];w(k),c.addEventListener("input",()=>w(k));let z=globalThis.clay?.people?.available;z&&Promise.resolve().then(()=>z()).then(s=>{p.isConnected&&(k=s||[],w(k))}).catch(()=>{})}function Ge(e,a,t){let o=t.ownerDocument,r=o.createElement("span");r.className="page-check-popup",r.contentEditable="false";let p=o.createElement("input");p.type="date",p.setAttribute("aria-label","Due date"),p.value=R(e,a)?.node.attrs.due||"",p.addEventListener("change",()=>V(e,a,"due",p.value)),p.addEventListener("keydown",g=>g.stopPropagation());let n=N(o,"Clear","Clear due date","clear-date");n.addEventListener("click",()=>V(e,a,"due",null)),r.append(p,n),t.after(r),p.focus()}function Ze(e,a){let t=e.dom.ownerDocument,o=t.createElement("span");o.className="page-check-controls",o.contentEditable="false",o.dataset.empty=String(!a.attrs.owner&&!a.attrs.due);let r=N(t,a.attrs.owner||"Assign",a.attrs.owner?`Owner: ${a.attrs.owner}`:"Assign owner","owner"),p=a.attrs.due?new Date(`${a.attrs.due}T00:00:00Z`).toLocaleDateString("en-US",{month:"short",day:"numeric",timeZone:"UTC"}):"Date",n=N(t,p,a.attrs.due?`Due ${p}`:"Set due date","date");return r.addEventListener("click",()=>Xe(e,a.attrs.id,r)),n.addEventListener("click",()=>Ge(e,a.attrs.id,n)),o.append(r,n),o}function Ye(e,a){let t=e.state.selection.$head;if(t.depth!==1||t.parent.type!==m.nodes.list_item||t.parent.attrs.kind!=="check")return!1;let o=t.parent.attrs.id,p=[...e.dom.querySelectorAll(".page-check-controls")].find(n=>n.dataset.item===o)?.querySelector(`[data-check="${a}"]`);return p?(p.focus(),!0):!1}var Fe=new Be({props:{handleKeyDown(e,a){if(!(a.metaKey||a.ctrlKey)||!a.shiftKey||a.altKey)return!1;let t=a.key.toLowerCase()==="o"?"owner":a.key.toLowerCase()==="d"?"date":null;return t?Ye(e,t):!1}}});function Le(){return new Be({props:{decorations(e){let a=[];return e.doc.forEach((t,o)=>{t.type!==m.nodes.list_item||t.attrs.kind!=="check"||a.push(He.widget(o+t.nodeSize-1,r=>{let p=Ze(r,t);return p.dataset.item=t.attrs.id,p},{key:`${t.attrs.id}:${t.attrs.owner}:${t.attrs.due}`,side:1,stopEvent:()=>!0,ignoreSelection:!0}))}),qe.create(e.doc,a)}}})}var Te="page-editor-style",Je=[1,2,3,4,5,6,7,8],Qe=`
2
+ --page-bg: #F7F6F2; --page-ink: #23221F; --page-ink-soft: #6B6862; --page-ink-faint: #9B968C;
3
+ --page-rule: rgba(35, 34, 31, 0.10); --page-accent: #2F5E9E; --page-link: #164583; --page-selection: rgba(88, 120, 170, 0.20);
4
+ --page-check-border: rgba(35, 34, 31, 0.35); --page-check-fill: #23221F; --page-check-ink: #F7F6F2;
5
+ --page-callout-bg: rgba(35, 34, 31, 0.04); --page-code-bg: rgba(35, 34, 31, 0.05);
6
+ --page-code-token-keyword: #8A3B6E; --page-code-token-constant: #1F5A8A; --page-code-token-string: #3E6A28; --page-code-token-string-expression: #3E6A28; --page-code-token-comment: #8B877E; --page-code-token-function: #5E4596; --page-code-token-parameter: #8A5A1E; --page-code-token-punctuation: var(--page-ink-soft); --page-code-token-link: var(--page-link);
7
+ --page-chrome-ink-rest: rgba(35, 34, 31, 0.20); --page-chrome-ink-moved: rgba(35, 34, 31, 0.34);
8
+ --page-chrome-bg-rest: rgba(35, 34, 31, 0.02); --page-chrome-bg-moved: rgba(35, 34, 31, 0.04);
9
+ --page-chrome-line-rest: rgba(35, 34, 31, 0.06); --page-chrome-line-moved: rgba(35, 34, 31, 0.11);
10
+ --page-pop-bg: #FBFAF7; --page-pop-ink: #23221F; --page-pop-muted: #6B6862; --page-pop-line: rgba(35, 34, 31, 0.10);
11
+ --page-pop-shadow: 0 1px 2px rgba(35, 34, 31, 0.05), 0 8px 24px rgba(35, 34, 31, 0.08); --page-pop-hover: rgba(35, 34, 31, 0.06);
12
+ --page-scrim: rgba(35, 34, 31, 0.12);
13
+ --page-danger: #9E3B2F; --page-block-selected: rgba(88, 120, 170, 0.12);`,Oe=`
14
+ --page-bg: #1A1A18; --page-ink: #E7E4DC; --page-ink-soft: #A3A098; --page-ink-faint: #75726B;
15
+ --page-rule: rgba(231, 228, 220, 0.10); --page-accent: #8DB0E6; --page-link: #8DB0E6; --page-selection: rgba(120, 155, 210, 0.28);
16
+ --page-check-border: rgba(231, 228, 220, 0.35); --page-check-fill: #E7E4DC; --page-check-ink: #1A1A18;
17
+ --page-callout-bg: rgba(231, 228, 220, 0.05); --page-code-bg: rgba(231, 228, 220, 0.06);
18
+ --page-code-token-keyword: #D9A0C8; --page-code-token-constant: #8DB0E6; --page-code-token-string: #A9C98B; --page-code-token-string-expression: #A9C98B; --page-code-token-comment: #75726B; --page-code-token-function: #BBA6E6; --page-code-token-parameter: #E0B47A; --page-code-token-punctuation: var(--page-ink-soft); --page-code-token-link: var(--page-link);
19
+ --page-chrome-ink-rest: rgba(231, 228, 220, 0.18); --page-chrome-ink-moved: rgba(231, 228, 220, 0.30);
20
+ --page-chrome-bg-rest: rgba(231, 228, 220, 0.02); --page-chrome-bg-moved: rgba(231, 228, 220, 0.04);
21
+ --page-chrome-line-rest: rgba(231, 228, 220, 0.06); --page-chrome-line-moved: rgba(231, 228, 220, 0.11);
22
+ --page-pop-bg: #222220; --page-pop-ink: #E7E4DC; --page-pop-muted: #A3A098; --page-pop-line: rgba(231, 228, 220, 0.10);
23
+ --page-pop-shadow: 0 1px 2px rgba(10, 10, 9, 0.3), 0 10px 28px rgba(10, 10, 9, 0.35); --page-pop-hover: rgba(231, 228, 220, 0.07);
24
+ --page-scrim: rgba(10, 10, 9, 0.35);
25
+ --page-danger: #E08A7A; --page-block-selected: rgba(120, 155, 210, 0.18);
26
+ --chart-1: #8DB0E6; --chart-2: #D9A0C8; --chart-3: #A9C98B; --chart-4: #BBA6E6; --chart-5: #E0B47A; --chart-6: #A3A098;`,ea=`
27
+ @layer page {
28
+ :where(article[data-page], .page-shell) {${Qe}
29
+ --chart-1: #2F5E9E; --chart-2: #164583; --chart-3: #5B5953; --chart-4: #8A3B6E; --chart-5: #3E6A28; --chart-6: #8A5A1E;
30
+ --page-ink-strong: var(--page-ink); --page-caret: var(--page-accent);
31
+ --page-font: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; --page-font-display: var(--page-font); --page-font-heading: var(--page-font);
32
+ --page-font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
33
+ --page-font-size: 17px; --page-line-height: 1.65; --page-measure: 680px; --page-pad-top: 72px;
34
+ --page-h1-size: 34px; --page-h1-weight: 600; --page-h1-tracking: -0.01em; --page-h1-line: 1.2;
35
+ --page-h2-size: 21px; --page-h2-weight: 600; --page-h3-size: 17px; --page-h3-weight: 600;
36
+ --page-block-gap: 0.35em; --page-indent: 1.6em;
37
+ --page-marker: var(--page-ink-soft); --page-bullet-size: 0.36em; --page-check-size: 16px; --page-check-radius: 4px; --page-done-ink: var(--page-ink-faint);
38
+ --page-toggle-ink: var(--page-ink-soft); --page-callout-line: transparent; --page-code-ink: var(--page-ink);
39
+ --page-chrome-shadow-rest: none; --page-chrome-shadow-moved: none; --page-chrome-radius: 7px; --page-plus-size: 24px; --page-fade: 240ms;
40
+ --page-pop-radius: 10px; --page-bar-bg: var(--page-pop-bg); --page-bar-ink: var(--page-pop-ink);
41
+ }
42
+ @media (prefers-color-scheme: dark) { :where(:root:not([data-theme="light"]) :is(article[data-page], .page-shell)) {${Oe} } }
43
+ :where(:root[data-theme="dark"] :is(article[data-page], .page-shell)) {${Oe} }
44
+
45
+ .page-shell { position: relative; background: var(--page-bg); color: var(--page-ink); font-family: var(--page-font); font-size: var(--page-font-size); line-height: var(--page-line-height); padding: 0 16px; }
46
+ .page-editor { max-width: var(--page-measure); margin: 0 auto; padding: var(--page-pad-top) 0 30vh; outline: none; white-space: pre-wrap; overflow-wrap: break-word; caret-color: var(--page-caret); }
47
+ :where(article[data-page], .page-editor) ::selection { background: var(--page-selection); }
48
+ :where(article[data-page], .page-editor) > * { margin: var(--page-block-gap) 0; margin-inline-start: calc(var(--page-depth, 0) * var(--page-indent)); }
49
+ :where(article[data-page], .page-editor) > h1 { font-family: var(--page-font-display); font-size: var(--page-h1-size); font-weight: var(--page-h1-weight); letter-spacing: var(--page-h1-tracking); line-height: var(--page-h1-line); color: var(--page-ink-strong); margin-block: 0 0.6em; }
50
+ :where(article[data-page], .page-editor) > h2 { font-family: var(--page-font-heading); font-size: var(--page-h2-size); font-weight: var(--page-h2-weight); color: var(--page-ink-strong); line-height: 1.35; margin-block-start: 1.4em; }
51
+ :where(article[data-page], .page-editor) > h3 { font-family: var(--page-font-heading); font-size: var(--page-h3-size); font-weight: var(--page-h3-weight); color: var(--page-ink-strong); margin-block-start: 1.2em; }
52
+ :where(article[data-page], .page-editor) a { color: var(--page-link, var(--page-accent)); }
53
+ :where(article[data-page], .page-editor) code { font-family: var(--page-font-mono); font-size: 0.88em; background: var(--page-code-bg); color: var(--page-code-ink); border-radius: 4px; padding: 0.1em 0.3em; }
54
+ :where(article[data-page], .page-editor) pre { font-family: var(--page-font-mono); font-size: 0.88em; background: var(--page-code-bg); color: var(--page-code-ink); border-radius: 8px; padding: 12px 14px; }
55
+ :where(article[data-page], .page-editor) pre code { background: none; padding: 0; font-size: inherit; }
56
+ :where(article[data-page], .page-editor) pre { position: relative; padding-top: 32px; white-space: pre-wrap; overflow-wrap: anywhere; }
57
+ :where(article[data-page], .page-editor) pre[data-lang] { white-space: pre; overflow-wrap: normal; }
58
+ :where(article[data-page], .page-editor) pre[data-lang] > code { display: block; overflow-x: auto; }
59
+ .page-code-lang { position: absolute; top: 5px; inset-inline-end: 6px; max-width: 120px; height: 24px; padding: 0 4px; border: 0; border-radius: 5px; background: none; color: var(--page-ink-faint); font: 12px/1 var(--page-font); opacity: 0; cursor: pointer; transition: opacity var(--page-fade); }
60
+ .page-editor pre:hover .page-code-lang, .page-editor pre:focus-within .page-code-lang, .page-code-lang:focus-visible, .page-editor pre[data-lang] .page-code-lang { opacity: 1; }
61
+ .page-code-lang:hover, .page-code-lang:focus-visible { background: var(--page-pop-hover); color: var(--page-ink-soft); }
62
+ :where(article[data-page], .page-editor) .page-callout { background: var(--page-callout-bg); border: 1px solid var(--page-callout-line); border-radius: 8px; padding: 10px 14px; }
63
+ :where(article[data-page], .page-editor) hr { border: 0; border-top: 1px solid var(--page-rule); margin-block: 1.2em; }
64
+ :where(article[data-page], .page-editor) .page-hidden { display: none; }
65
+ :where(article[data-page], .page-editor) .page-li { position: relative; --li-indent: 0; padding-inline-start: calc((var(--li-indent) + 1) * var(--page-indent)); }
66
+ ${Je.map(e=>`:where(article[data-page], .page-editor) .page-li[data-indent="${e}"] { --li-indent: ${e}; }`).join(`
67
+ `)}
68
+ :where(article[data-page], .page-editor) .page-li::before { position: absolute; inset-inline-start: calc(var(--li-indent) * var(--page-indent)); width: var(--page-indent); text-align: center; color: var(--page-marker); content: "\\2022"; }
69
+ :where(article[data-page], .page-editor) .page-li[data-kind="bullet"]::before { content: ""; box-sizing: border-box; width: var(--page-bullet-size); height: var(--page-bullet-size); top: calc((1em * var(--page-line-height) - var(--page-bullet-size)) / 2); inset-inline-start: calc(var(--li-indent) * var(--page-indent) + (var(--page-indent) - var(--page-bullet-size)) / 2); border-radius: 50%; background: currentColor; }
70
+ :where(article[data-page], .page-editor) .page-li[data-kind="ordered"]::before { content: attr(data-marker); font-variant-numeric: tabular-nums; }
71
+ :where(article[data-page], .page-editor) .page-li[data-kind="check"]::before { content: ""; box-sizing: border-box; width: var(--page-check-size); height: var(--page-check-size); top: calc((1em * var(--page-line-height) - var(--page-check-size)) / 2); inset-inline-start: calc(var(--li-indent) * var(--page-indent) + (var(--page-indent) - var(--page-check-size)) / 2); border: 1px solid var(--page-check-border); border-radius: var(--page-check-radius); cursor: pointer; }
72
+ :where(article[data-page], .page-editor) .page-li[data-kind="check"][data-checked="true"]::before { background: var(--page-check-fill); border-color: var(--page-check-fill); }
73
+ :where(article[data-page], .page-editor) .page-li[data-kind="check"][data-checked="true"]::after { content: ""; position: absolute; width: var(--page-check-size); height: var(--page-check-size); top: calc((1em * var(--page-line-height) - var(--page-check-size)) / 2); inset-inline-start: calc(var(--li-indent) * var(--page-indent) + (var(--page-indent) - var(--page-check-size)) / 2); background: var(--page-check-ink); -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.8 8.4l2.9 2.9 5.5-6.4' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 72% no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.8 8.4l2.9 2.9 5.5-6.4' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 72% no-repeat; pointer-events: none; }
74
+ :where(article[data-page], .page-editor) .page-li[data-kind="check"][data-checked="true"] { color: var(--page-done-ink); text-decoration: line-through; }
75
+ :where(article[data-page], .page-editor) .page-toggle { position: relative; padding-inline-start: var(--page-indent); }
76
+ .page-editor .page-toggle-button { position: absolute; inset-inline-start: 0; top: 0; width: var(--page-indent); height: calc(1em * var(--page-line-height)); display: grid; place-items: center; border: 0; padding: 0; background: none; color: var(--page-toggle-ink); font: inherit; line-height: 1; cursor: pointer; transition: transform var(--page-fade); }
77
+ .page-editor .page-toggle-button::before { content: "\\25B8"; font-size: 1.4em; }
78
+ .page-editor .page-toggle[aria-expanded="true"] > .page-toggle-button { transform: rotate(90deg); }
79
+
80
+ .page-dock, .page-plus { color: var(--page-chrome-ink-rest); background: var(--page-chrome-bg-rest); border: 1px solid var(--page-chrome-line-rest); box-shadow: var(--page-chrome-shadow-rest); border-radius: var(--page-chrome-radius); transition: color var(--page-fade), background-color var(--page-fade), border-color var(--page-fade), box-shadow var(--page-fade); }
81
+ .page-shell.is-moved .page-dock, .page-shell.is-moved .page-plus { color: var(--page-chrome-ink-moved); background: var(--page-chrome-bg-moved); border-color: var(--page-chrome-line-moved); box-shadow: var(--page-chrome-shadow-moved); }
82
+ .page-dock { position: sticky; top: 12px; z-index: 3; display: flex; align-items: center; gap: 2px; width: max-content; margin: 12px auto 0; padding: 3px; }
83
+ /* One formatting bar at a time: the selection bar covers what the fixed bar offers. Hidden, not removed, so the page does not shift under the selection. */
84
+ .page-shell:has(.page-bubble:not([hidden])) .page-dock { visibility: hidden; }
85
+ .page-dock, .page-shell.is-moved .page-dock { background: var(--page-pop-bg); }
86
+ .page-dock + .page-editor { padding-top: max(16px, calc(var(--page-pad-top) - 48px)); }
87
+ .page-tool { display: inline-flex; align-items: center; justify-content: center; min-width: 28px; height: 28px; padding: 0 6px; border: 0; border-radius: 5px; background: none; color: inherit; font: 500 13px/1 var(--page-font); cursor: pointer; }
88
+ .page-tool:hover, .page-tool[aria-pressed="true"] { background: var(--page-pop-hover); }
89
+ .page-tool-turn { gap: 4px; padding: 0 8px; }
90
+ /* The phone's fourth control: everything the narrow bar folds away. */
91
+ .page-tool-more { display: none; }
92
+ .page-tool-sep { width: 1px; height: 16px; margin: 0 3px; background: currentColor; opacity: 0.5; }
93
+ .page-safe-probe { position: fixed; left: 0; bottom: 0; width: 0; height: 0; padding-bottom: env(safe-area-inset-bottom); visibility: hidden; pointer-events: none; }
94
+ .page-plus { position: absolute; z-index: 2; top: calc(var(--page-plus-top, 0px) - var(--page-plus-size) / 2); left: calc(var(--page-plus-left, 0px) - var(--page-plus-size) - 12px); width: var(--page-plus-size); height: var(--page-plus-size); display: grid; place-items: center; padding: 0; cursor: pointer; }
95
+ .page-plus[aria-expanded="true"] { color: var(--page-chrome-ink-moved); background: var(--page-chrome-bg-moved); }
96
+ .page-grip { position: absolute; z-index: 2; top: calc(var(--page-plus-top, 0px) - var(--page-grip-size, var(--page-plus-size)) / 2); left: calc(var(--page-plus-left, 0px) - var(--page-plus-size) - 12px - var(--page-grip-size, var(--page-plus-size)) - 2px); width: var(--page-grip-size, var(--page-plus-size)); height: var(--page-grip-size, var(--page-plus-size)); display: grid; place-items: center; padding: 0; border: 0; border-radius: var(--page-chrome-radius); background: none; color: var(--page-chrome-ink-moved); opacity: 0; cursor: grab; touch-action: none; transition: opacity var(--page-fade); }
97
+ .page-shell.is-moved .page-grip, .page-grip.is-on, .page-grip:focus-visible, .page-grip[aria-expanded="true"] { opacity: 1; }
98
+ .page-bubble, .page-menu { position: absolute; z-index: 4; background: var(--page-pop-bg); color: var(--page-pop-ink); border: 1px solid var(--page-pop-line); box-shadow: var(--page-pop-shadow); border-radius: var(--page-pop-radius); }
99
+ .page-bubble { display: flex; gap: 1px; padding: 3px; left: var(--page-pop-x, 0px); top: var(--page-pop-y, 0px); transform: translate(-50%, calc(-100% - 8px)); }
100
+ .page-menu { left: var(--page-pop-x, 0px); top: var(--page-pop-y, 0px); width: 260px; max-height: 340px; overflow-y: auto; padding: 6px; font-size: 14px; }
101
+ .page-menu-title { padding: 4px 10px 6px; color: var(--page-pop-muted); font-size: 12px; }
102
+ .page-menu-item { display: flex; align-items: center; gap: 10px; width: 100%; min-height: 34px; padding: 4px 10px; border: 0; border-radius: 7px; background: none; color: inherit; font: inherit; text-align: start; cursor: pointer; }
103
+ .page-menu-item[aria-selected="true"], .page-menu-item.is-active, .page-menu-item:hover { background: var(--page-pop-hover); }
104
+ .page-menu-icon { display: grid; place-items: center; width: 24px; height: 24px; border: 1px solid var(--page-pop-line); border-radius: 6px; color: var(--page-pop-muted); font-size: 12px; flex: none; }
105
+ .page-menu-hint { margin-inline-start: auto; color: var(--page-pop-muted); font-size: 12px; }
106
+ .page-menu-text { display: flex; flex-direction: column; min-width: 0; }
107
+ .page-menu-desc { color: var(--page-pop-muted); font-size: 12px; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
108
+ .page-menu-empty { padding: 8px 10px; color: var(--page-pop-muted); font-size: 13px; }
109
+ .page-shell.is-dragging, .page-shell.is-dragging .page-grip { cursor: grabbing; }
110
+ .page-shell[data-drop="none"] { cursor: no-drop; }
111
+ .page-drop { position: absolute; z-index: 3; left: var(--page-drop-x, 0px); top: var(--page-drop-y, 0px); width: var(--page-drop-w, 0px); height: 2px; margin-top: -1px; border-radius: 1px; background: var(--page-drop, var(--page-accent)); pointer-events: none; }
112
+ .page-shell.is-dragging .page-block-selected { opacity: 0.45; }
113
+ .page-editor.ProseMirror-hideselection { caret-color: transparent; }
114
+ .page-editor.ProseMirror-hideselection *::selection { background: transparent; }
115
+ .page-editor .page-block-selected { background: var(--page-block-selected, rgba(88, 120, 170, 0.12)); box-shadow: -6px 0 0 var(--page-block-selected, rgba(88, 120, 170, 0.12)), 6px 0 0 var(--page-block-selected, rgba(88, 120, 170, 0.12)); border-radius: 4px; }
116
+ .page-editor .page-link-pending { background: var(--page-selection); }
117
+ .page-link { position: absolute; z-index: 4; left: var(--page-pop-x, 0px); top: var(--page-pop-y, 0px); display: flex; align-items: center; gap: 2px; padding: 4px; max-width: min(420px, calc(100% - 32px)); background: var(--page-pop-bg); color: var(--page-pop-ink); border: 1px solid var(--page-pop-line); box-shadow: var(--page-pop-shadow); border-radius: var(--page-pop-radius); font-size: 14px; }
118
+ .page-link-input { flex: 1; min-width: 220px; height: 30px; padding: 0 8px; border: 0; border-radius: 6px; background: var(--page-pop-hover); color: inherit; font: inherit; outline: none; }
119
+ .page-link-input[aria-invalid="true"] { box-shadow: inset 0 0 0 1px var(--page-danger, #9E3B2F); }
120
+ .page-link-url { max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 0 8px; color: var(--page-pop-muted); text-decoration: none; }
121
+ .page-link-btn { display: inline-grid; place-items: center; min-width: 30px; height: 30px; padding: 0 6px; border: 0; border-radius: 6px; background: none; color: inherit; font: inherit; cursor: pointer; }
122
+ .page-link-btn:hover { background: var(--page-pop-hover); }
123
+ .page-live { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
124
+ .ProseMirror-focused .page-placeholder::before { content: attr(data-placeholder); float: left; height: 0; color: var(--page-ink-faint); pointer-events: none; }
125
+ .page-editor .page-title-placeholder::before { content: attr(data-placeholder); float: left; height: 0; color: var(--page-ink-faint); pointer-events: none; }
126
+ .page-csv-error { margin: 8px 0; color: var(--page-danger); font-size: 14px; }
127
+ .page-editor .page-table { max-width: 100%; min-width: 0; border: 1px solid var(--page-rule); border-radius: 8px; }
128
+ .page-editor .page-chart { position: relative; max-width: 100%; min-width: 0; margin-inline: 0; color: var(--page-ink); }
129
+ .page-chart-plot svg { display: block; width: 100%; height: auto; color: var(--chart-text, var(--page-ink-soft)); font: 12px var(--page-font); }
130
+ .page-chart figcaption { color: var(--page-ink-soft); font-size: 0.88em; text-align: center; }
131
+ .page-chart-settings { display: block; margin: 8px auto 0; padding: 4px 10px; border: 1px solid var(--page-rule); border-radius: 6px; background: var(--page-pop-bg); color: var(--page-ink); font: inherit; cursor: pointer; }
132
+ .page-chart-title-input { display: block; width: min(100%, 24em); box-sizing: border-box; margin: 6px auto; padding: 4px 8px; border: 1px solid var(--page-rule); border-radius: 6px; background: var(--page-pop-bg); color: var(--page-ink); font: inherit; }
133
+ .page-table-scroll { max-width: 100%; overflow-x: auto; }
134
+ .page-table table { border-collapse: collapse; min-width: max-content; width: 100%; table-layout: auto; }
135
+ .page-table th, .page-table td { min-width: 120px; padding: 6px 10px; border-inline-end: 1px solid var(--page-rule); border-block-end: 1px solid var(--page-rule); text-align: start; white-space: pre-wrap; }
136
+ .page-table th { background: var(--page-code-bg); color: var(--page-ink-soft); font-weight: 600; }
137
+ .page-table th[data-kind="number"], .page-table td[data-kind="number"] { text-align: end; }
138
+ .page-table th[aria-sort="ascending"] button::after { content: " \u2191"; }
139
+ .page-table th[aria-sort="descending"] button::after { content: " \u2193"; }
140
+ .page-table th button, .page-table-row-menu, .page-check-chip { border: 0; border-radius: 5px; background: none; color: inherit; font: inherit; cursor: pointer; }
141
+ .page-table th button:hover, .page-table-row-menu:hover, .page-check-chip:hover { background: var(--page-pop-hover); }
142
+ .page-table-row-menu { opacity: 0; font-size: 12px; color: var(--page-ink-soft); }
143
+ .page-table tr:hover .page-table-row-menu, .page-table tr:focus-within .page-table-row-menu, .page-table-row-menu:focus-visible { opacity: 1; }
144
+ .page-check-controls { display: inline-flex; gap: 4px; margin-inline-start: 8px; color: var(--page-ink-soft); font-size: 0.78em; text-decoration: none; }
145
+ .page-check-controls[data-empty="true"] { opacity: 0; }
146
+ .page-li:hover .page-check-controls, .page-li:focus-within .page-check-controls { opacity: 1; }
147
+ .page-check-popup { display: inline-flex; gap: 4px; padding: 4px; background: var(--page-pop-bg); color: var(--page-pop-ink); border: 1px solid var(--page-pop-line); border-radius: var(--page-pop-radius); box-shadow: var(--page-pop-shadow); }
148
+ .page-check-popup input { font: inherit; color: inherit; background: var(--page-pop-bg); border: 1px solid var(--page-pop-line); }
149
+ .page-check-popup.page-check-owner { display: inline-block; width: min(280px, 80vw); padding: 8px 0; vertical-align: top; }
150
+ .page-board-owners { display: flex; flex-direction: column; gap: 6px; min-width: 0; padding-inline: 8px; }
151
+ .page-board-people { display: flex; flex-wrap: wrap; gap: 4px; }
152
+ .page-board-person { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px 0 4px; border: 1px solid var(--page-rule); border-radius: 14px; background: var(--page-pop-bg); color: var(--page-pop-ink); font: inherit; font-size: 13px; cursor: pointer; transition: background-color var(--page-fade), border-color var(--page-fade); }
153
+ .page-board-person.is-none { padding-inline-start: 10px; color: var(--page-pop-muted); }
154
+ .page-board-person:hover { background: var(--page-pop-hover); }
155
+ .page-board-person[aria-pressed="true"] { border-color: var(--page-accent); background: var(--page-selection); color: var(--page-pop-ink); }
156
+ .page-board-owner-input { width: 100%; height: 32px; box-sizing: border-box; padding: 0 8px; border: 1px solid var(--page-pop-line); border-radius: 7px; background: var(--page-pop-bg); color: var(--page-pop-ink); font: inherit; font-size: 14px; }
157
+ .page-board-owner-input::placeholder { color: var(--page-ink-faint); }
158
+ .page-board-face { flex: none; display: inline-grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; background: var(--page-code-bg); box-shadow: inset 0 0 0 1px var(--page-rule); color: var(--page-ink-soft); font-size: 10.5px; font-weight: 600; line-height: 1; }
159
+ .page-scrim { display: none; }
160
+ .page-shell [hidden] { display: none !important; }
161
+ @media (max-width: 560px) {
162
+ /* One fixed bar over the visual viewport, with the four controls a phone keeps.
163
+ The bubble and the desktop-only tools stand down so nothing is doubled. */
164
+ .page-dock { display: flex; position: fixed; left: 0; top: 8px; width: 204px; min-width: 204px; box-sizing: border-box; align-items: center; justify-content: center; gap: 4px; margin: 0; padding: 8px; z-index: 3; }
165
+ .page-tool-desk { display: none; }
166
+ .page-dock .page-tool-more { display: inline-flex; }
167
+ .page-dock .page-tool { min-width: 44px; height: 44px; }
168
+ .page-shell:has(.page-bubble:not([hidden])) .page-dock { visibility: visible; }
169
+ .page-dock + .page-editor { padding-bottom: calc(72px + env(safe-area-inset-bottom)); }
170
+ .page-plus { position: fixed; top: auto; left: 16px; bottom: calc(16px + env(safe-area-inset-bottom)); width: 44px; height: 44px; border-radius: 22px; }
171
+ .page-grip { position: fixed; top: auto; left: 68px; bottom: calc(16px + var(--page-grip-lift, 0px) + env(safe-area-inset-bottom)); width: 44px; height: 44px; border-radius: 22px; opacity: 1; color: var(--page-chrome-ink-rest); background: var(--page-chrome-bg-rest); border: 1px solid var(--page-chrome-line-rest); }
172
+ .page-bubble { display: none; }
173
+ .page-scrim { display: block; position: fixed; inset: 0; z-index: 4; background: var(--page-scrim); }
174
+ .page-menu { position: fixed; left: 0; top: 0; width: var(--page-pop-width, min(280px, calc(100vw - 16px))); max-height: min(70vh, var(--page-pop-max, 70vh)); overflow-y: auto; transform: translate(var(--page-pop-x, 0px), var(--page-pop-y, 0px)); z-index: 5; }
175
+ .page-menu-item { min-height: 48px; font-size: 16px; }
176
+ .page-link { position: fixed; left: 0; right: 0; top: auto; bottom: 0; max-width: none; padding: 8px 16px calc(8px + env(safe-area-inset-bottom)); border-radius: 0; border-width: 1px 0 0; }
177
+ .page-link-input { min-width: 0; height: 44px; font-size: 16px; }
178
+ .page-link-btn, .page-upload-btn { min-width: 44px; height: 44px; }
179
+ .page-image-frame { width: 100% !important; }
180
+ .page-image-handle { display: none; }
181
+ .page-table th button, .page-table-row-menu, .page-check-chip, .page-check-popup button, .page-menu-item { min-height: 44px; }
182
+ .page-board-owner-input { font-size: 16px; height: 44px; }
183
+ .page-board-person { height: 44px; border-radius: 22px; }
184
+ }
185
+ @media (prefers-reduced-motion: reduce) {
186
+ .page-dock, .page-plus, .page-grip, .page-toggle-button, .page-image-handle, .page-upload-bar > span, .page-board-person { transition: none; }
187
+ }
188
+ }
189
+ `,aa=(e,a)=>(a&&a(e.tr.replaceSelectionWith(m.nodes.hard_break.create()).scrollIntoView()),!0),ta=({history:e=!0,undo:a,redo:t}={})=>({"Mod-z":e?S.undo:()=>(a?.(),!0),"Shift-Mod-z":e?S.redo:()=>(t?.(),!0),"Mod-y":e?S.redo:()=>(t?.(),!0),"Shift-Enter":aa,"Mod-b":A.toggleMark(m.marks.strong),"Mod-i":A.toggleMark(m.marks.em)}),oa=(e,a,t)=>fe(null,t)?!1:X.undoInputRule(e,a&&(o=>a(B(o)))),ra={Backspace:A.chainCommands(oa,ke),"Mod-e":A.toggleMark(m.marks.code),"Mod-Shift-s":A.toggleMark(m.marks.strike)},pa=(e,a)=>globalThis.clay?.upload?.(e,a)??Promise.resolve({ok:!1,code:"unavailable",msg:"File uploads are not available in this editor"}),$e=new WeakMap,F=new v.PluginKey("lazyViews"),j=class{constructor(a,t){this.node=a,this.type=a.type,this.registry=t;let{dom:o,contentDOM:r}=q.DOMSerializer.renderSpec(document,a.type.spec.toDOM(a));this.dom=o,this.contentDOM=r??null}update(a){return a.type===this.type&&!this.registry.has(a.type.name)}};function na(){return new v.Plugin({key:F,state:{init:()=>y.DecorationSet.empty,apply(e){let a=e.getMeta(F);if(!a)return y.DecorationSet.empty;let t=[];return e.doc.forEach((o,r)=>{a.types.includes(o.type.name)&&t.push(y.Decoration.node(r,r+o.nodeSize,{},{lazyView:t.length+1}))}),y.DecorationSet.create(e.doc,t)}},props:{decorations:e=>F.getState(e)}})}function ia({view:e,upload:a,toolHost:t,board:o=null,undo:r=null,redo:p=null,revise:n=null,highlight:g},c,x){let b=x.createFeature({view:e,upload:a,toolHost:t,board:o,undo:r,redo:p,revise:n,highlight:g}),w=$e.get(e),k=()=>{if(b.css&&I(`page-feature-${c}`,b.css,`page-feature-${c}`,["editor-ui"]),!b.nodeViews)return;let s=Object.keys(b.nodeViews);for(let f of s)w.set(f,b.nodeViews[f]);e.dispatch(e.state.tr.setMeta(F,{types:s}).setMeta("addToHistory",!1))},z=()=>{e.isDestroyed||(e.composing?setTimeout(z,25):k())};return e.composing?e.dom.addEventListener("compositionend",()=>setTimeout(z,25),{once:!0}):k(),b}function ga(e){return new v.Plugin({view(a){let t=new Set,o=()=>{for(let p of t)e.has(p)&&t.delete(p);a.state.doc.forEach(p=>{let n=Se(p.type.name);!n||e.has(n)||t.has(n)||e.ensure(n).catch(()=>{t.add(n)})})},r=a.state.doc;return o(),{update(){a.state.doc!==r&&(r=a.state.doc,o())}}}})}function la({load:e=()=>Promise.reject(new Error("page: this editor has no command module")),context:a=()=>({}),reportError:t}={}){let o=new Map,r=new Set,p=null,n=null,g=!0,c=!1,x=0,b=l=>{let i=o.get(l);return i||(i=Promise.resolve(e(l)),o.set(l,i),i.catch(()=>{o.get(l)===i&&o.delete(l)})),i},w=()=>(n??=K({load:b,install:(l,i)=>i.createFeature(a(p)),reportError:t??((l,i)=>console.error(`clayjs: the ${i} command failed to load`,l))}),n),k=()=>{let l=x,i=p.state.selection;return{revision:l,selection:i,valid:()=>g&&!c&&!p.isDestroyed&&x===l&&p.state.selection.eq(i)}};function z(l,i){l.doc!==i.doc&&(x+=1);for(let h of r)h.lease.valid()||(r.delete(h),h.controller.abort({ok:!1,code:"stale-target"}))}async function s(l,i){if(!g||c||!p||p.isDestroyed)return{ok:!1,code:"not-editing"};let h={lease:k(),controller:new AbortController};r.add(h);try{let u=await w().ensure(l,{signal:h.controller.signal});return u?h.lease.valid()?await u.run(i):{ok:!1,code:"stale-target"}:{ok:!1,code:"not-editing"}}catch(u){return h.controller.signal.aborted?h.controller.signal.reason:{ok:!1,code:"unavailable",error:u}}finally{r.delete(h)}}function f(){if(g){g=!1;for(let l of r)l.controller.abort({ok:!1,code:"not-editing"});r.clear(),n?.dispose(),n=null}}return{attach(l){p=l},observe:z,run:s,enter(){c||(g=!0)},leave:f,dispose(){f(),c=!0,g=!1,o.clear()}}}var _=new WeakMap;function sa(e){return new v.Plugin({view:()=>({update:(a,t)=>e.observe(a.state,t)})})}function qa(e,a,t){let o=e?_.get(e):null;return o?Object.hasOwn($,a)?o.run(a,t):Promise.resolve({ok:!1,code:"unknown-command"}):Promise.resolve({ok:!1,code:"not-editing"})}function da(e){return new v.Plugin({view(a){let t=e?()=>e.tablesChanged():()=>Ae.get(a)?.tablesChanged?.(),o=a.state.doc;return{update(r){r.state.doc!==o&&(o=r.state.doc,t())}}}})}function ca({upload:e=pa,highlight:a,history:t=!0,undo:o,redo:r,onAiTool:p=null,toolHost:n=null,features:g=null,commandHost:c=null}={}){return[ie(),ye({onAiTool:p}),we(),da(n),ae(),se(),ge(),ve(),xe(),Me(),Ce(),D.keymap(ra),de,Fe,D.keymap(ne),D.keymap(ta({history:t,undo:o,redo:r})),D.keymap(A.baseKeymap),te(),ee(),ce(),be(),Ee(),Le(),he({upload:e}),re(),ue({upload:e,features:g}),Pe(),pe(),le(),t?S.history():null,G.gapCursor(),na(),g?ga(g):null,c?sa(c):null].filter(Boolean)}function ua(e,a={}){let t=e&&Object.keys(e).length?e:{[Y()]:{t:"paragraph",pos:Z(),c:""}},o=a.doc??Q(m,t);return v.EditorState.create({doc:o,plugins:ca(a)})}function Xa(e){!e||e.isDestroyed||e.updateState(e.state)}function Ga(e,a){if(!e||e.isDestroyed)return!1;let t=a===!0;e.setProps({editable:()=>t});let o=_.get(e);return t?o?.enter():o?.leave(),t}function ha(e,a){let t=a.target.closest?.('.page-li[data-kind="check"]');if(!t||!e.dom.contains(t))return!1;let o=t.getBoundingClientRect(),r=parseFloat(getComputedStyle(t).paddingInlineStart)||0,p=getComputedStyle(t).direction==="rtl"?o.right-a.clientX:a.clientX-o.left;if(p<0||p>r)return!1;let n=e.posAtDOM(t,0)-1,g=e.state.doc.nodeAt(n);return g?(a.preventDefault(),e.dispatch(e.state.tr.setNodeMarkup(n,null,{...g.attrs,checked:!g.attrs.checked})),!0):!1}function Za(e,{blocks:a=null,onChange:t=null,upload:o,highlight:r,doc:p,dispatch:n,history:g=!0,undo:c,redo:x,editable:b=!0,toolHost:w=null,onAiTool:k=null,reviseTool:z=null,board:s=null,features:f=null}={}){let l=e.ownerDocument;I(Te,ea,Te,["editor-ui"]);let i=l.createElement("div");i.className="page-shell",i.setAttribute("clay","editor-ui"),i.setAttribute("sap-ignore",""),e.appendChild(i);let h=!1,u=null,U=f??K({load:d=>O[d].load(),install:(d,E)=>ia({view:u,upload:o,toolHost:w,board:s,undo:c,redo:x,revise:z,highlight:r},d,E)}),M=la({load:d=>$[d].load(),context:d=>({view:d,upload:o})}),L=new Map,W={chart:(d,E,P)=>new me(d,E,P)};for(let d of Object.values(O))for(let E of d.views??d.types)W[E]=(P,Ie,Ve,Ne,Re)=>{let H=L.get(P.type.name);return H?H(P,Ie,Ve,Ne,Re):new j(P,L)};u=new y.EditorView(i,{state:ua(a,{upload:o,highlight:r,doc:p,history:g,undo:c,redo:x,onAiTool:k,toolHost:w,features:U,commandHost:M}),attributes:{class:"page-editor"},editable:()=>b,nodeViews:W,handleDOMEvents:{mousedown:ha,dragstart(d,E){let P=d.state.selection;return P instanceof v.NodeSelection||P instanceof oe?(E.preventDefault(),!0):!1}},dispatchTransaction(d){if(n){n(d);return}h&&d.docChanged&&!d.getMeta(T)&&S.closeHistory(d),d.docChanged&&(h=!!d.getMeta(T));let E=u.state.doc;u.updateState(u.state.apply(d)),t&&u.state.doc!==E&&t(J(u.state.doc))}}),$e.set(u,L),M.attach(u),_.set(u,M);let Ke=u.destroy.bind(u);return u.destroy=()=>{M.dispose(),U.dispose(),Ke()},u}export{ea as PAGE_EDITOR_CSS,Za as createPageEditor,ia as installPageFeature,F as lazyViewsKey,na as lazyViewsPlugin,ca as pagePlugins,ua as pageState,Xa as refreshMountedView,qa as runPageCommand,Ga as setEditorActive};
@@ -0,0 +1,6 @@
1
+ import{c as Ce}from"../c-4B6H4G5V.js";import{e as Fe,g as N,h as De,j as ae,l as ve,n as Ee,p as $e,q as d}from"../c-OIBUTDXI.js";import{a as I}from"../c-4JZDZFF6.js";import{b as W,c as ye,d as re,e as b,f as Ne}from"../c-VAK7SG37.js";import{b as _e}from"../c-T4VO4OCB.js";import{a as le,b as Pe}from"../c-FILLTJA7.js";import{b as p}from"../c-NUHP2XDB.js";import"../c-QIX5BJYN.js";import{a as Ie}from"../c-VKEDWYDF.js";import{m as Be,n as se}from"../c-CJZSLMVQ.js";import"../c-GQ6F6IDK.js";import"../c-2SPVQSHC.js";import"../c-5VYOWDTI.js";import"../c-7VGZ7RU5.js";import"../c-4YSCRICO.js";import"../c-WYFDLITL.js";import"../c-UGHH4MB3.js";import{a as xe}from"../c-HT33EQRN.js";import"../c-B2ZXPOS3.js";import"../c-TQEMVJCS.js";import"../c-3IQRECYS.js";import"../c-AYVOREBE.js";import"../c-IJUK2GPW.js";import{n as He}from"../c-7O6AFR65.js";import"../c-P7KNDG34.js";import"../c-CYWLPPUS.js";import"../c-N7JPUPGC.js";import"../c-35NBGMZB.js";import"../c-XQXZAO7N.js";import"../c-S7LK4KUE.js";import"../c-GHBCCVG4.js";import"../c-HA6INT6J.js";import{h as J,o as ke}from"../c-DCFSEJZG.js";import"../c-WRBKEJD4.js";import"../c-VHNSBD2M.js";var Ve="ai-edit",ct="h1,h2,h3,h4,h5,h6,p,figure",ut="p,h1,h2,h3,h4,h5,h6,li,dt,dd,blockquote,pre,figcaption,td,th",ft="section,article,aside,header,footer,nav,main,div,ul,ol,dl,table,figure,form",Ue="script,style,template,textarea,input,select,button,iframe,svg,math",pt=900*1024,ht="This section is too large for AI editing; select a smaller part.",mt="The save did not finish; the edit is still on the page.",gt=0,a=null,r,g,c,y,E,m,w,v,T,D,$,B,M,F={},h=null,O=null,H=null,de=!1,ie=new WeakMap,ge=new Set,f=null,U=null,x=null,_,P,ue=null,C=null,z=null,L=null,Z=null,fe=[],q=null,Le=0;function Ye(e){ie.delete(e),ge.delete(e)}function Ae(e,t){if(!t){Ye(e);return}ie.set(e,t),ge.add(e)}var Je="clay-ai-edit",We="AI editing is turned off. Turn it on from the app\u2019s menu.";async function Xe(){let t=(await Ce.helpers()).find(n=>n.name===Ve);return t&&(t.state==="ready"||t.state==="unavailable")?t.state:null}function bt(){xe.pause()}function Me(){xe.resume()}function ce(e){if(!(e instanceof Element))return null;let t=e.closest("[data-edit-id]");if(!t)return null;let n=e.closest(ct);return n&&t.contains(n)?n:t}function wt(e){if(e===document.body)return"document";let t=e.getAttribute("data-edit-id");if(t)return t;let n=e.closest("[data-edit-id]");return n?n.getAttribute("data-edit-id")+" \u203A "+e.tagName.toLowerCase():e.id?"#"+e.id:e.tagName.toLowerCase()}function be(){let e=window.getSelection();return!e||e.rangeCount===0||e.isCollapsed?null:e.getRangeAt(0)}function Qe(e){let t=e.commonAncestorContainer;if(t.nodeType!==1&&(t=t.parentElement),!t||!document.body.contains(t))return null;if(t===document.body)return document.body;if(t.closest("[data-clay-ai-edit]")||t.closest(J)||t.closest(Ue))return null;if(t.closest("[data-edit-id]"))return ce(t);let n=t.closest(ut)||t.closest(ft);return n&&n!==document.body?n:null}function Ze(e,t){if(!e||!t||!t.contains(e.commonAncestorContainer))return;let n=e.toString();if(!n.trim())return;let i=document.createRange();i.selectNodeContents(t),i.setEnd(e.startContainer,e.startOffset);let o=i.toString().length;return{text:n,start:o,end:o+n.length}}function pe(e){let t=be();if(t){if(e===document.body){let n=t.toString();return n.trim()?{text:n,start:void 0,end:void 0}:void 0}return Ze(t,e)}}function et(){let e=document.body.cloneNode(!0);return e.querySelectorAll(J).forEach(t=>t.remove()),e.outerHTML}function xt(e,t,n){let{HyperMorph:i}=le();return i.morph(e,t,{morphStyle:"outerHTML",restoreFocus:!0,scripts:n})}function he(e,t,{rewind:n=!1}={}){let{HyperMorph:i,mergeTagRecognizers:o}=le(),s=n?{merge:!1,handle:!1}:{mergeBase:e.snapshot,mergeTags:o,handle:!1};e.docMode?(typeof t=="string"&&(t=new DOMParser().parseFromString(t,"text/html").body),i.morph(document.body,t,{morphStyle:"outerHTML",restoreFocus:!0,scripts:s,callbacks:{beforeNodeRemoved:l=>!(l.nodeType===1&&l.matches(J))}})):xt(e.el,t,s),_e()}function yt(e,t){let n=e.search(new RegExp("<"+t+"(\\s|>)","i"));if(n===-1)return null;let i=e.slice(n).replace(/\s*`{1,3}\s*$/,"");if(t.toLowerCase()==="body")return new DOMParser().parseFromString(i,"text/html").body;let o=document.createElement("template");o.innerHTML=i;let s=o.content.firstElementChild;return!s||s.tagName.toLowerCase()!==t.toLowerCase()?null:s}function vt(e,t,n){let i=e===document.body,o=[...t.matchAll(/(?<![\w\u00C0-\u024F.@\/:-])@([\w.-]*[/.][\w./-]*)/g)].map(u=>u[1].replace(/\.+$/,"")).filter(u=>u!=="page").filter(u=>/[/.]/.test(u)),s=i?et():e.outerHTML,l={id:"req-"+Date.now().toString(36)+"-"+ ++gt,editId:wt(e),tag:e.tagName.toLowerCase(),elementHTML:s,comment:t,contextRefs:o};return n&&(l.quote=n.text,Number.isInteger(n.start)&&(l.selection={start:n.start,end:n.end})),!i&&/(?<![\w\u00C0-\u024F.@\/:-])@page(?![\w\/-]|\.\w)/.test(t)&&(l.page=!0),{id:l.id,el:e,docMode:i,tag:l.tag,reassertId:i?null:e.getAttribute("data-edit-id"),snapshot:s,payload:l,state:"requesting",paused:!1,handle:null,finalCandidate:null}}async function Et(e,t,n){if(a=vt(e,t,n),new Blob([JSON.stringify(a.payload)]).size>pt){a=null,me(ht,"warn");return}if(Ae(e,t),$t(),a.paused=!0,bt(),O={},te("working"),R("Sending\u2026"),a.payload.page&&await window.clay.save(),!a)return;let i=Ce.send(a.payload,{helper:Ve,onStatus:({text:s})=>{a?.handle===i&&R(s)}});a.handle=i;let o=await i.done;!a||a.handle!==i||(await Pe(),!(!a||a.handle!==i)&&(o.state==="done"?Rt(o.result||{}):o.state==="cancelled"?Q("HTML Clay stopped this edit."):Q(o.error||"the helper reported an error")))}var Ct=/^(on|hx-on|x-|@|:|v-on:|v-bind:|data-on[-:])/,St=new Set(["iframe","frame","object","embed","base","link"]);function Tt(e){let t=e.replace(/[\t\n\r]/g,"").replace(/^[\u0000- ]+/,"").toLowerCase();return t.startsWith("javascript:")||t.startsWith("vbscript:")}function Lt(e){let t=(e.getAttribute("type")||"").trim().toLowerCase();return!t||/javascript|ecmascript/.test(t)||["module","importmap","speculationrules"].includes(t)}function Se(e){return[...e.attributes].map(t=>t.name.toLowerCase()+"="+t.value).sort().join(" ")}function Ke(e){let t=new Map,n=i=>t.set(i,(t.get(i)||0)+1);for(let i of[e,...e.querySelectorAll("*")]){let o=i.tagName.toLowerCase();o==="script"?Lt(i)&&n("script "+Se(i)+"|"+i.textContent.trim()):(St.has(o)||o==="meta"&&i.hasAttribute("http-equiv")||(o==="animate"||o==="set")&&/href/i.test(i.getAttribute("attributeName")||""))&&n(o+" "+Se(i));for(let s of i.attributes){let l=s.name.toLowerCase();Ct.test(l)?n(o+" "+l+"="+s.value.trim()):l==="srcdoc"?n(o+" srcdoc="+s.value):Tt(s.value)&&n(o+" "+l+"="+s.value)}}return t}function At(e,t,n){let i=n?new DOMParser().parseFromString(t,"text/html").body:(()=>{let s=document.createElement("template");return s.innerHTML=t,s.content.firstElementChild})(),o=i?Ke(i):new Map;for(let[s,l]of Ke(e))if(l>(o.get(s)||0))return!0;return!1}var Mt="The reply adds a script or event handler, so it was not applied. AI editing changes content, not code.";function Rt(e){if(!a||a.state!=="requesting")return;a.state="deciding";let t=[],n=yt(e.html||"",a.tag);if(!n){Q(`reply is not a single <${a.tag}> element`);return}if(!a.docMode){let i=document.createElement("template");i.innerHTML=e.html||"",i.content.children.length>1&&t.push("reply had extra root elements \u2014 kept the first")}if(a.reassertId&&n.setAttribute("data-edit-id",a.reassertId),At(n,a.snapshot,a.docMode)){Q(Mt);return}Be(),a.held=!0,a.finalCandidate=n;try{he(a,n)}catch(i){Q("the reply could not be applied: "+(i?.message||i));return}S(),Ye(a.el),te("ready"),R(Ot(t,e.model),t.length?"warn":"")}function Ot(e,t){let n=["Edit ready.",...e.map(i=>"\u26A0 "+i)];return t&&n.push(`(${t})`),n.join(" ")}function Q(e){a&&(oe(),te("error"),R(e,"warn"))}function oe(){let e=a;if(a=null,!!e)try{(e.state==="requesting"||e.state==="deciding")&&le()&&he(e,e.snapshot,{rewind:!0})}finally{e.paused&&Me(),e.held&&se(),S()}}async function tt(){let e=a;if(!e)return;a=null;let t=e.docMode?et():e.el.outerHTML;try{he(e,e.snapshot,{rewind:!0})}finally{e.paused&&Me(),e.held&&se({replay:!1})}he(e,t),S(),te("saving"),R("Saving\u2026");let n=O,i=await window.clay.save();if(n===O){if(i&&i.ok===!1){te("error"),R(i.msg||mt,"warn");return}R(i&&i.msg||"Saved",i&&i.msgType==="error"?"warn":""),Dt()}}function nt(){a?.handle?.cancel(),oe(),V()}var qe=["z-index:99999","padding:0","display:inline-grid","place-items:center","line-height:1",`box-shadow:${re}`];function K(e,t,n){return e.setAttribute(t,n),e}function Ht(){let{signal:e}=Z;q=document.createElement("style"),q.setAttribute("clay",Fe),q.textContent=`
2
+ [editmode\\:contenteditable][contenteditable]:focus {
3
+ outline: 1px solid #4a4a6a; outline-offset: 4px; border-radius: 2px;
4
+ }
5
+ ::highlight(clay-ai-edit) { background-color: ${b["brass-soft"]} !important; }
6
+ `,document.head.appendChild(q);let t=`color-scheme:${I()}`;g=K(ae("div",["box-sizing:content-box","position:fixed","z-index:99998","pointer-events:none",`border:2px solid ${b.brass}`,"border-radius:0",t]),"data-clay-ai-edit","ring"),d(g,!1),r=K(ve("div",["position:fixed","z-index:99999","width:min(28rem, calc(100vw - 32px))","padding:12px","border-radius:12px",`box-shadow:${re}`,`font:13px/1.5 ${W}`,t]),"data-clay-ai-edit","panel"),d(r,!1),r.setAttribute("role","dialog"),r.setAttribute("aria-label","AI edit");let n=(u,A)=>K(u,"data-clay-ai-edit-part",A);E=n(ae("div",["position:absolute","width:12px","height:12px","pointer-events:none",`background:${b.surface}`,`border-left:1px solid ${b["line-2"]}`,`border-top:1px solid ${b["line-2"]}`]),"pointer"),d(E,!1),c=n($e("textarea",{rules:["flex:1","min-width:0","min-height:40px","max-height:9.5em","resize:none","overflow-y:auto","padding:8px 12px",`font:15px/1.45 ${W}`]}),"input"),c.rows=1,c.placeholder="Describe the change",c.setAttribute("aria-label","Describe the change"),c.title="Enter sends \xB7 Shift+Enter adds a line \xB7 @fable or @codex picks another agent \xB7 @file.ext adds context",y=n(Ee("div",["display:block","margin-top:0",`color:${b.muted}`,`font:12.5px/1.5 ${ye}`]),"status"),y.setAttribute("role","status"),y.setAttribute("aria-live","polite"),F.send=n(N("Send",{variant:"primary",extra:["min-height:40px","flex:none"]}),"send"),d(F.send,!0,"inline-flex");let i=ae("div",["display:flex","align-items:flex-start","gap:8px"]);i.append(c,F.send),r.append(E,i,y),v=K(ve("div",["position:fixed","left:50%","bottom:16px","transform:translateX(-50%)","z-index:99999","width:min(35rem, calc(100vw - 32px))","padding:8px 10px","border-radius:12px","gap:8px","align-items:center",`box-shadow:${re}`,`font:13px/1.5 ${W}`,t]),"data-clay-ai-edit","status-bar"),d(v,!1,"flex"),T=n(Ee("div",["display:block","flex:1","min-width:0","overflow:hidden","text-overflow:ellipsis","white-space:nowrap",`color:${b.muted}`,`font:12.5px/1.5 ${ye}`]),"bar-status"),T.setAttribute("role","status"),T.setAttribute("aria-live","polite"),D=n(N("Stop",{extra:["flex:none"]}),"bar-stop"),$=n(N("Keep",{variant:"primary",extra:["flex:none"]}),"bar-keep"),B=n(N("Revert",{variant:"quiet",extra:["flex:none"]}),"bar-revert"),M=n(De(Ne.toastClose,{label:"Dismiss error"}),"bar-close"),M.pin({flex:"none"});for(let u of[D,$,B,M])d(u,!1,"inline-flex");v.append(T,D,$,B,M),m=K(N("AI",{small:!0,extra:["position:fixed","width:26px","height:26px",`font:600 11px/1 ${W}`,...qe,t]}),"data-clay-ai-edit","chip"),m.title="Comment on this (\u2318J)",d(m,!1,"inline-grid"),w=K(N("AI",{extra:["position:fixed","width:40px","height:40px",`font:600 14px/1 ${W}`,...qe,t]}),"data-clay-ai-edit","bubble"),w.title="Comment on the whole page",Te(),document.body.append(g,r,v,m,w),G(),F.send.addEventListener("click",Ge),D.addEventListener("click",nt),$.addEventListener("click",tt),B.addEventListener("click",()=>{oe(),V()}),M.addEventListener("click",()=>{h==="error"&&V()}),c.addEventListener("keydown",u=>{u.key==="Enter"&&!u.shiftKey&&(u.preventDefault(),F.send.hidden||Ge())}),c.addEventListener("input",ee),m.addEventListener("mousedown",u=>u.preventDefault()),m.addEventListener("click",()=>{let u=U,A=P;j(),u&&!a&&!h&&ne(u,A||pe(u))}),w.addEventListener("click",()=>{if(!(a||h)){if(!r.hidden&&f===document.body){c.value.trim()?c.focus():X();return}ne(document.body,pe(document.body))}}),window.addEventListener("scroll",()=>{S(),j()},{passive:!0,signal:e}),window.addEventListener("resize",()=>{Te(),r&&!r.hidden&&ee(),S()},{passive:!0,signal:e});let o=()=>{Te(),S()};document.addEventListener("hcms:open",()=>{o(),setTimeout(o,350)},{signal:e}),document.addEventListener("hcms:close",()=>{o(),setTimeout(o,350)},{signal:e});let s=new MutationObserver(u=>{G();let A=k=>[...k].some(Y=>Y.nodeType===1&&Y.hasAttribute("data-hcms-toggle-host"));u.some(k=>A(k.addedNodes)||A(k.removedNodes))&&o()});s.observe(document.body,{childList:!0}),fe.push(s);let l=new MutationObserver(()=>{f&&!f.isConnected&&rt()});l.observe(document.body,{childList:!0,subtree:!0}),fe.push(l)}function it(){f?.isConnected&&S()}function ee(){p(c,"height","auto"),c.value&&p(c,"height",c.scrollHeight+2+"px"),it()}function G(){let e=w?.ownerDocument;if(!e)return;let t=!h&&L==="ready"&&!!e.querySelector("[data-edit-id]");d(w,t,"inline-grid")}function kt(e){!e||typeof window.Highlight!="function"||!window.CSS?.highlights||window.CSS.highlights.set(Je,new window.Highlight(e))}function we(){window.CSS?.highlights?.delete(Je)}function ot(){let e=L==="ready";c.disabled=!e,e?y.textContent===We&&me(""):me(We,"warn"),d(F.send,e,"inline-flex"),G()}function It(){Xe().then(e=>{r&&(L=e||"unavailable",!r.hidden&&!a?ot():G())}).catch(()=>{})}function Te(){if(!w)return;let e=document.querySelector("[data-hcms-toggle-host]"),t=e&&e.getBoundingClientRect(),n=!!t&&t.width>0&&t.height>0;w.pin({right:n?`${Math.round((document.documentElement.clientWidth||window.innerWidth)-t.left+8)}px`:"16px",bottom:n?`${Math.round((document.documentElement.clientHeight||window.innerHeight)-t.bottom)}px`:"16px"})}function Nt(e){clearTimeout(x),x=null,U=e,P=void 0;let t=e.getBoundingClientRect();m.pin({left:Math.min(t.right+8,window.innerWidth-34)+"px",top:Math.max(8,t.top)+"px","color-scheme":I()}),d(m,!0,"inline-grid")}function j(){clearTimeout(x),x=null,d(m,!1,"inline-grid"),U=null,P=void 0}function ze(){m.hidden||x||(x=setTimeout(j,400))}function Ft(){if(a||h||!r.hidden||L!=="ready"||at())return;let e=be(),t=e&&Qe(e),n=t&&Ze(e,t);if(!n){P&&j();return}let i=typeof e.getClientRects=="function"?e.getClientRects():[],o=i.length?i[i.length-1]:t.getBoundingClientRect();clearTimeout(x),x=null,U=t,P=n,m.pin({left:Math.min(o.right+6,window.innerWidth-34)+"px",top:Math.max(8,o.top+o.height/2-13)+"px","color-scheme":I()}),d(m,!0,"inline-grid")}function me(e,t){p(y,"margin-top",e?"8px":"0"),y.textContent=e||"",t==="warn"?y.setAttribute("data-tone","warn"):y.removeAttribute("data-tone"),p(y,"color",t==="warn"?b.ox:b.muted),it()}function R(e,t){T.textContent=e||"",t==="warn"?T.setAttribute("data-tone","warn"):T.removeAttribute("data-tone"),p(T,"color",t==="warn"?b.ox:b.muted)}function te(e){clearTimeout(H),H=null;let t=!!h,n=document.activeElement;h=e;let i={working:[D],ready:[$,B],error:[M],saving:[]}[e]||[],o=[D,$,B,M];for(let l of o)d(l,i.includes(l),"inline-flex");j(),p(v,"color-scheme",I()),d(v,!0,"flex"),G(),S();let s=i[0];s&&(!t||o.includes(n)&&!i.includes(n))&&s.focus({preventScroll:!0})}function Dt(){clearTimeout(H);let e=O;H=setTimeout(()=>{e&&e===O&&V()},1500)}function V(e){e!==void 0&&e!==O||(clearTimeout(H),H=null,O=null,r.hidden||Re(),h=null,d(v,!1,"flex"),R(""),f=null,C=null,z=null,_=void 0,we(),d(r,!1),c.value="",d(g,!1),d(E,!1),G())}function S(){if(!f)return;if(!f.isConnected){rt();return}if(f===document.body){if(d(g,!1),d(E,!1),r.hidden)return;let k=w.getBoundingClientRect(),Y=r.offsetWidth||480;p(r,"left",Math.max(16,Math.min((k.right||window.innerWidth-16)-Y,window.innerWidth-Y-16))+"px"),p(r,"top",Math.max(16,(k.top||window.innerHeight-56)-(r.offsetHeight||120)-12)+"px");return}let e=f.getBoundingClientRect();if(d(g,!!h||!_||!!a),p(g,"left",e.left-5+"px"),p(g,"top",e.top-5+"px"),p(g,"width",e.width+6+"px"),p(g,"height",e.height+6+"px"),r.hidden)return;let t=C&&C.startContainer.isConnected&&typeof C.getBoundingClientRect=="function"?C.getBoundingClientRect():null,n=t&&(t.width||t.height)?t:e,i=r.offsetWidth||480,o=Math.max(16,Math.min(n.left,window.innerWidth-i-16)),s=n.bottom+10,l=r.offsetHeight||120;s+l>window.innerHeight-16&&(s=Math.max(16,n.top-l-10)),p(r,"left",o+"px"),p(r,"top",s+"px");let u=s>=n.bottom,A=Math.max(14,Math.min(n.left+10-o,i-28));d(E,!0),p(E,"left",A+"px"),p(E,"top",u?"-7px":l-6+"px"),p(E,"transform",u?"rotate(45deg)":"rotate(225deg)")}function ne(e,t){!r.hidden&&f&&f!==e&&Re();let n=t?be():null,i=document.activeElement;z=i&&i!==document.body&&!r.contains(i)?i:null,f=e,C=n?n.cloneRange():null,j(),p(r,"color-scheme",I()),p(g,"color-scheme",I()),d(r,!0),_=t;let o=t?t.text.trim().length>400?t.text.trim().slice(0,400)+"\u2026":t.text.trim():"";r.dataset.quote=o,me(""),c.value=ie.get(e)||"",kt(C),ot(),S(),ee(),c.focus(),It()}function Re(){f&&Ae(f,c.value)}function X(){a&&(a.handle?.cancel(),oe());let e=z,t=r.contains(document.activeElement);Re(),f=null,C=null,z=null,_=void 0,we(),d(r,!1),d(g,!1),c.value="",ee(),t&&e&&e.isConnected&&e.focus({preventScroll:!0})}function $t(){C=null,z=null,_=void 0,we(),d(r,!1),c.value="",ee(),S()}function rt(){let e=a;e&&(e.handle?.cancel(),oe()),V()}function Ge(){let e=c.value.trim();!e||!f||a||L!=="ready"||Et(f,e,_)}var Bt=/Mac|iPhone|iPad/.test(navigator.platform||navigator.userAgent||"");function Pt(e){return!(Bt?e.metaKey&&!e.ctrlKey:e.ctrlKey&&!e.metaKey)||e.shiftKey||e.altKey||e.repeat||e.isComposing?!1:e.code==="KeyJ"||(e.key||"").toLowerCase()==="j"}function at(){let e=document.activeElement;return!e||e===document.body?!1:r&&r.contains(e)?!r.hidden:e.matches("input,textarea,select")}var _t='[data-clay-modal], dialog[open], [aria-modal="true"]',Wt='input,textarea,select,[contenteditable=""],[contenteditable="true"]';function Kt(e){if(e.defaultPrevented||document.querySelector(_t))return!1;let t=document.activeElement;return!t||t===document.body||r.contains(t)||v.contains(t)?!0:t.isContentEditable===!0?!1:!t.matches(Wt)}function qt(){let{signal:e}=Z;document.addEventListener("pointerdown",n=>{de=r.contains(n.target)},{capture:!0,signal:e}),document.addEventListener("click",n=>{let i=de;if(de=!1,i||r.contains(n.target)||v.contains(n.target)||m.contains(n.target)||w.contains(n.target)||a||h)return;let o=n.target.closest?.("[data-edit-id]"),s=o?ce(n.target):null;if(o&&s===o){let l=!r.hidden&&o===f;r.hidden||X(),l||ne(o,pe(o))}else r.hidden||X()},{signal:e});let t=0;document.addEventListener("mousemove",n=>{let i=Date.now();if(i-t<80)return;if(t=i,a||h||!r.hidden){ze();return}if(L!=="ready"||P)return;if(m.contains(n.target)){clearTimeout(x),x=null;return}let o=ce(n.target);o?Nt(o):ze()},{signal:e}),document.addEventListener("keydown",n=>{if(Pt(n)){if(h||a||at())return;f&&!f.isConnected&&X();let i=be(),o=i?Qe(i):null;if(!o){let s=window.getSelection(),l=s&&s.anchorNode;l&&l.nodeType!==1&&(l=l.parentElement),o=l&&ce(l)||U}if(!o)return;n.preventDefault(),ne(o,pe(o));return}if(n.key==="Escape"&&Kt(n)){if(h==="working"){nt();return}if(h==="ready"){tt();return}if(h==="error"){V();return}h||r.hidden||X()}},{signal:e}),document.addEventListener("selectionchange",()=>{clearTimeout(ue),ue=setTimeout(Ft,150)},{signal:e})}async function st(){let e=++Le;return L=await Xe(),e===Le}function lt(){!L||r||(Z=new AbortController,Ht(),qt())}async function Oe(){!He()||r||await st()&&lt()}function je(e){return e instanceof Element&&e.ownerDocument===document&&document.body.contains(e)&&!e.closest("[data-clay-ai-edit]")&&!e.closest(J)&&!e.closest(ke)&&!e.closest(Ue)}async function zt(e,{prompt:t}={}){return!je(e)||(await Oe(),await new Promise(n=>setTimeout(n,0)),!r||a||h||!je(e))?!1:!r.hidden&&f===e?(c.focus(),!0):(typeof t=="string"&&!ie.has(e)&&Ae(e,t),ne(e,null),!0)}function Gt(){Le++;let e=a;a=null;try{e?.handle?.cancel(),e&&(e.paused&&Me(),e.held&&se())}catch{}clearTimeout(ue),ue=null,clearTimeout(x),x=null,clearTimeout(H),H=null,we(),Z?.abort(),Z=null;for(let t of fe)t.disconnect();fe=[];for(let t of[q,g,r,v,m,w])t?.remove();q=g=r=c=y=E=v=T=null,D=$=B=M=m=w=null,F={},h=null,O=null,f=null,C=null,z=null,_=void 0,U=null,P=void 0,de=!1,L=null,ie=new WeakMap,ge.clear()}function on(){return{id:"clay:ai-edit",order:950,prepare(e={}){let t=e.initial===!0;return{ready:t?dt:st(),enable(){t||lt()},quiesce(){let n=r&&!r.hidden&&c.value.trim()!==""||[...ge].some(o=>o.isConnected),i=[];if(a&&i.push(a.id),h==="saving"&&i.push("save"),n&&i.push("prompt"),!!i.length)throw Object.assign(new Error("clay.aiEdit: an edit here is still unresolved"),{code:"pending-input",pending:i})},resume(){},dispose(){Gt()}}}}}var dt=null;Ie(()=>{dt=Oe().then(()=>{},()=>{})});var rn={init:Oe,open:zt};export{rn as aiEdit,on as aiEditParticipant,on as modeParticipant};
@@ -0,0 +1 @@
1
+ import"../c-VHNSBD2M.js";function W(o,f,a){let l=r=>{let c=0,e=Math.min(o.length,r.length);for(;c<e&&o[c]===r[c];)c++;let d=0;for(;d<e-c&&o[o.length-1-d]===r[r.length-1-d];)d++;return{start:c,end:o.length-d,text:r.slice(c,r.length-d)}},s=l(f),i=l(a);return s.end<=i.start?o.slice(0,s.start)+s.text+o.slice(s.end,i.start)+i.text+o.slice(i.end):i.end<=s.start?o.slice(0,i.start)+i.text+o.slice(i.end,s.start)+s.text+o.slice(s.end):null}function O(o,f,a){let l=0,s=Math.min(o.length,f.length);for(;l<s&&o[l]===f[l];)l++;if(a<=l)return a;let i=0;for(;i<s-l&&o[o.length-1-i]===f[f.length-1-i];)i++;return a>=o.length-i?f.length-(o.length-a):f.length-i}function j(o,{onWrite:f,onShow:a,onConflict:l,onGone:s}={}){let i={characterData:!0,childList:!0,subtree:!0},r=o,c=()=>r,e=null,d=!1,p=new MutationObserver(()=>{p.takeRecords(),e&&!e.composing&&e.code.textContent!==e.seen&&x(e.code.textContent)}),T=()=>window.clay?.modeLifecycle?.canWrite?.()!==!1,v=()=>!!(e&&e.code.isConnected&&e.code.textContent===c().value);function C(n){let t=e.code.firstChild;t&&t.nodeType===3&&!t.nextSibling?t.data=n:e.code.textContent=n,p.takeRecords(),e.seen=n,f?.(e.code)}function y(n){let t=c(),u=t.value,[k,g]=[O(u,n,t.selectionStart),O(u,n,t.selectionEnd)];t.value=n,document.activeElement===t&&t.setSelectionRange(k,g),e.seen=n,a?.()}function x(n){let t=c().value,u=e.seen,k=t===u?n:W(u,t,n);return k==null?(l?.(t,{key:e.key,base:u,remote:n}),y(n),{ok:!1,code:"conflict"}):(k!==n&&C(k),y(k),{ok:!0})}function E(){let n=e.resolve?e.resolve():null;return n?(e.code=n,p.disconnect(),p.observe(e.code,i),!0):(s?.(c().value,{key:e.key,base:e.seen}),p.disconnect(),e=null,!1)}function m(n=!1){if(!e)return{ok:!0};if(e.composing)return{ok:!1,code:"composition"};if(!n&&!T())return{ok:!1,code:"busy"};if(!e.code.isConnected&&!E())return{ok:!1,code:"gone"};let t=e.code.textContent;if(t!==e.seen)return x(t);let u=c().value;return u!==e.seen&&C(u),{ok:!0}}function h(){if(!e)return{ok:!0};if(e.composing)return{ok:!1,code:"composition"};let n=m();return n.ok?v()?{ok:!0}:{ok:!1,code:"conflict"}:n}function B(n,t={}){if(d)return{ok:!1,code:"disposed"};let u=t.key;if(e&&e.key===u)return e.resolve=t.resolve,e.code!==n||!e.code.isConnected?E()?m():{ok:!1,code:"gone"}:{ok:!0};let k=h();if(!k.ok&&e)return k;p.disconnect(),e={key:u,code:n,seen:n.textContent,composing:!1,resolve:t.resolve},p.observe(n,i);let g=c();return g.value=e.seen,g.setSelectionRange(0,0),a?.(),{ok:!0}}function D(){let n=h();return!n.ok&&e?n:(p.disconnect(),e=null,{ok:!0})}function I(){return d?{ok:!0}:e?.composing?{ok:!1,code:"composition"}:e&&!v()?{ok:!1,code:"pending-input"}:(d=!0,p.disconnect(),M(),e=null,{ok:!0})}function V(n){d||!n||n===r||(M(),r=n,S())}function L(){m()}function w(){e&&(e.composing=!0)}function R(){e&&(e.composing=!1,m(!0))}function S(){r.addEventListener("input",L),r.addEventListener("compositionstart",w),r.addEventListener("compositionend",R)}function M(){r.removeEventListener("input",L),r.removeEventListener("compositionstart",w),r.removeEventListener("compositionend",R)}return S(),{open:B,close:D,flush:h,dispose:I,current:()=>e&&e.code,attach:V,composing:()=>!!(e&&e.composing)}}export{j as bindText,O as mapCaret,W as spliceMerge};