@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
@@ -1,9 +1,9 @@
1
1
  // GENERATED — do not edit. Vendored from sapjs/dist/sap-core.min.js via sapjs
2
2
  // `npm run copy-to-clayjs`. Edit the sapjs source and re-run.
3
- var SapCoreBundle=(()=>{var st=Object.defineProperty;var Ce=Object.getOwnPropertyDescriptor;var $e=Object.getOwnPropertyNames;var Pe=Object.prototype.hasOwnProperty;var Me=(t,e)=>{for(var r in e)st(t,r,{get:e[r],enumerable:!0})},Oe=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of $e(e))!Pe.call(t,o)&&o!==r&&st(t,o,{get:()=>e[o],enumerable:!(n=Ce(e,o))||n.enumerable});return t};var Ie=t=>Oe(st({},"__esModule",{value:!0}),t);var Sn={};Me(Sn,{FULL_SAPJS:()=>U,Sap:()=>q,default:()=>vn,mount:()=>An,mountAll:()=>_e,needsFullSapjs:()=>St,runtime:()=>En});function Nt(t){let e=!1,r=new Set,n=[];function o(a){a&&(n.push(a),n.length>8&&n.shift())}function u(a,m){o(m),!a._broken&&(r.add(a),!e&&(e=!0,queueMicrotask(i)))}function i(){e=!1;let a=[...r];r.clear();for(let m of a)d(m)}function d(a,m=!1){if(!(a._broken||a.halted)){if(a._passes=(a._passes||0)+1,a._passes>50){a._broken=!0,a._breakerRing=n.slice(),t(a,{breaker:!0});return}a._resetArmed||(a._resetArmed=!0,setTimeout(()=>{a._passes=0,a._resetArmed=!1},0)),t(a,m?{full:!0}:{})}}function l(a,m){o(m),d(a,!0)}function c(a){a._broken=!1,a._passes=0}return{schedule:u,runNow:l,rearm:c,ring:n}}var at={E01:{slug:"foreign-dialect",behavior:"HALT"},E02:{slug:"moustaches-in-text",behavior:"HALT"},E04:{slug:"duplicate-declaration",behavior:"HALT"},E05:{slug:"reserved-name",behavior:"HALT"},E06:{slug:"global-html-name",behavior:"HALT"},E07:{slug:"calc-cycle",behavior:"ERR"},E08:{slug:"expression-syntax",behavior:"HALT"},E10:{slug:"orphan-item",behavior:"HALT"},E12:{slug:"unknown-state-key",behavior:"ERR"},E15:{slug:"write-to-undeclared-key",behavior:"ERR"},E16:{slug:"write-to-computed-field",behavior:"ERR"},E17:{slug:"unresolvable-action-target",behavior:"HALT"},E18:{slug:"paint-on-form-control",behavior:"HALT"},E20:{slug:"bind-on-non-control",behavior:"HALT"},E22:{slug:"format-type",behavior:"ERR"},E24:{slug:"runtime-expression-throw",behavior:"ERR"},E26:{slug:"circuit-breaker",behavior:"HALT"},E30:{slug:"attr-on-bound-control",behavior:"HALT"},E31:{slug:"password-without-transient",behavior:"HALT"},E32:{slug:"file-bind",behavior:"HALT"},E33:{slug:"dialog-state-open",behavior:"HALT"},E34:{slug:"transient-persist-collision",behavior:"HALT"},E35:{slug:"presence-state-misuse",behavior:"HALT"},E40:{slug:"each-not-array",behavior:"ERR"},E41:{slug:"each-bad-key",behavior:"ERR"},E42:{slug:"each-template",behavior:"ERR"},E43:{slug:"bind-in-each-row",behavior:"ERR"},E50:{slug:"needs-full-sapjs",behavior:"HALT"},W03:{slug:"unknown-colon-attribute",behavior:"WARN"},W04:{slug:"expression-in-when",behavior:"WARN"},W30:{slug:"nonzero-mount-writes",behavior:"WARN"},W31:{slug:"detail-dialog-saved-open",behavior:"WARN"}},O=["disabled","readonly","required","checked","selected","multiple","open","inert","autofocus","novalidate","hidden"],ut=new Set(["title","style","hidden","lang","dir","translate","class","id","nonce","autofocus","tabindex","contenteditable","spellcheck","draggable","role","slot","part","name","value","type","itemscope","itemtype","itemid","itemprop","itemref"]),Tt=new Set(["sap","scope","items","item","template","bind","calc","text","show","attr","set","trigger","move","sort","detail","each","effect","invalid","confirm","transient","default","persist","sortable","editmode"]);function De(t){if(!t||t.nodeType!==1)return"?";if(t.id)return`${t.tagName.toLowerCase()}#${t.id}`;let e=[],r=t,n=0;for(;r&&r.nodeType===1&&n<4;){let o=r.tagName.toLowerCase();if(r.hasAttribute("sap"))o+="[sap]";else if(r.parentElement){let u=0,i=0;for(let d=r.parentElement.firstElementChild;d;d=d.nextElementSibling)d.tagName===r.tagName&&(u++,d===r&&(i=u));u>1&&(o+=`:nth-of-type(${i})`)}if(e.unshift(o),r.hasAttribute("sap"))break;r=r.parentElement,n++}return e.join(" > ")}var Y=class{constructor(e){this.appName=e,this.errors=[],this.warnings=[],this.halted=!1,this.haltReason=null}block(e,r,n={}){let o=(at[e]||{}).slug||"error",u={code:e,slug:o,el:De(r),attr:n.attr||null,expr:n.expr||null,key:n.key||null,problem:n.problem||"",didYouMean:n.didYouMean||null,fix:n.fix||null,phase:n.phase||"runtime"},i=[`
4
- `+(e[0]==="W"?"sap \u26A0 ":"sap \u2717 ")+e+" "+o];return i.push(` at ${u.el}${u.attr?` \u2014 ${u.attr}="${u.expr??""}"`:""}`),u.problem&&i.push(` problem: ${u.problem}`),u.didYouMean&&i.push(` did you mean: ${u.didYouMean}`),u.fix&&i.push(` fix: ${u.fix}`),(e[0]==="W"?console.warn:console.error)(i.join(`
5
- `)),u}error(e,r,n={}){let o=this.block(e,r,n);return this.errors.push(o),o}warn(e,r,n={}){let o=this.block(e,r,n);return this.warnings.push(o),o}report(){return{ok:this.errors.length===0&&!this.halted,app:this.appName,halted:this.halted,haltReason:this.haltReason,errors:this.errors.slice(),warnings:this.warnings.slice()}}};function P(t,e){t&&t.getAttribute("sap-error")!==e&&t.setAttribute("sap-error",e)}function Lt(t){t&&t.hasAttribute("sap-error")&&t.removeAttribute("sap-error")}function ct(t,e){let r=null,n=3;for(let o of e){let u=Be(t,o);u<n&&(n=u,r=o)}return r}function Be(t,e){let r=t.length,n=e.length,o=Array.from({length:r+1},(u,i)=>[i,...new Array(n).fill(0)]);for(let u=0;u<=n;u++)o[0][u]=u;for(let u=1;u<=r;u++)for(let i=1;i<=n;i++)o[u][i]=Math.min(o[u-1][i]+1,o[u][i-1]+1,o[u-1][i-1]+(t[u-1]===e[i-1]?0:1));return o[r][n]}var Fe=new Set(O),We={readonly:"readOnly",novalidate:"noValidate"},ze=0,_t=new WeakMap;function Rt(t,e="sap"){let r=t.getAttribute("data-id");if(r)return r;if(t.id)return t.id;let n=_t.get(t);return n||(n=`${e}-${(ze++).toString(36)}`,_t.set(t,n)),n}function Ct(t){let e=[];for(let r=t.firstElementChild;r;r=r.nextElementSibling)r.hasAttribute("item")&&!r.hasAttribute("template")&&!r.hasAttribute("cms-template")&&e.push(r);return e}function lt(t,e){if(!t||!e)return null;let r=[...t.querySelectorAll(`template[items="${e}"]`)].find(o=>o.closest("[sap]")===t),n=r&&r.content.firstElementChild;return n&&n.hasAttribute("item")?n:null}function $t(t){for(let e=t.firstElementChild;e;e=e.nextElementSibling)if(e.hasAttribute("item")&&e.hasAttribute("template"))return e;return lt(t.closest("[sap]"),t.getAttribute("items"))}function G(t){let e=[];if(!t)return e;for(let r of t.trim().split(/\s+/)){if(!r)continue;let n=r,o,u=n.indexOf("=");u>=0&&(o=n.slice(u+1),n=n.slice(0,u));let i=n.split(":"),d=i[0],l="string",c=!1;for(let g of i.slice(1))g==="num"?l="num":g==="bool"?l="bool":g==="presence"?l="presence":g==="transient"&&(c=!0);let a=d,m=a.startsWith("data-")&&a.length>5?a.slice(5).replace(/-([a-z])/g,(g,A)=>A.toUpperCase()):a;e.push({name:m,attr:a,type:l,default:o,transient:c})}return e}function X(t,e){if(e==="num"){if(t==null||t==="")return 0;let r=Number(t);return Number.isNaN(r)?0:r}return e==="bool"?t==="true"||t===""||t==="1":t??""}function Pt(t,e){return e==="bool"?t?"true":"false":t==null?"":String(t)}function ft(t,e){return Fe.has(e)&&typeof t[We[e]||e]=="boolean"}function Mt(t,e){return e.type==="presence"||e.type!=="num"&&ft(t,e.attr||e.name)}function dt(t){return t.default!=null?t.default:t.type==="num"?"0":t.type==="bool"?"false":""}function Ot(t,e){let r=e.attr||e.name,n=t._sapTransient||(t._sapTransient={});if(!(e.name in n)){let o=t.getAttribute(r);o==null&&(o=dt(e)),n[e.name]=X(o,e.type)}return t.hasAttribute(r)&&t.removeAttribute(r),n[e.name]}function S(t){if(typeof t=="number")return t;if(t==null||t==="")return 0;let e=Number(typeof t=="string"?t.replace(/[$,%\s]/g,""):t);return Number.isNaN(e)?0:e}function K(t,e){return Array.isArray(t)?e==null?t:t.map(r=>typeof e=="function"?e(r):r?.[e]):[]}function pt(t,e){return K(t,e).reduce((r,n)=>r+S(n),0)}function It(t,e){return Array.isArray(t)?e==null?t.length:t.reduce((r,n)=>r+(e(n)?1:0),0):0}function Dt(t,e){let r=K(t,e);return r.length?pt(t,e)/r.length:0}function Bt(t,e){let r=K(t,e).filter(n=>n!=null&&n!=="");return r.length?r.every(n=>typeof n=="number"||!Number.isNaN(Number(n)))?Math.min(...r.map(Number)):r.reduce((n,o)=>String(n)<=String(o)?n:o):0}function Ft(t,e){let r=K(t,e).filter(n=>n!=null&&n!=="");return r.length?r.every(n=>typeof n=="number"||!Number.isNaN(Number(n)))?Math.max(...r.map(Number)):r.reduce((n,o)=>String(n)>=String(o)?n:o):0}function Wt(t,e,r){let n=S(t)===1?e:r??e+"s";return`${t} ${n}`}function zt(t,e){let r=new Date(t),n=new Date(e);return Number.isNaN(+r)||Number.isNaN(+n)?0:Math.round((n-r)/864e5)}function T(t){return typeof t=="number"?t:Number(t)}var I={usd:t=>"$"+T(t).toLocaleString("en-US",{maximumFractionDigits:0}),usd2:t=>"$"+T(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}),pct:t=>Math.round(T(t))+"%",pct1:t=>T(t).toFixed(1)+"%",int:t=>Math.round(T(t)).toLocaleString("en-US"),num:t=>T(t).toLocaleString("en-US"),num2:t=>T(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}),compact:t=>T(t).toLocaleString("en-US",{notation:"compact"}),date:t=>{let e=new Date(t);return Number.isNaN(+e)?String(t):e.toLocaleDateString("en-US")},clock:t=>{let e=T(t),r=Math.floor(e/100),n=r%10,o=Math.floor(r/10)%60;return`${Math.floor(r/600)}:${String(o).padStart(2,"0")}.${n}`}},He=new Set(["usd","usd2","pct","pct1","int","num","num2","compact","clock"]);function Ht(t,e){if(!t)return e==null?"":String(e);let r=I[t];if(typeof r!="function"){let n=new Error(`unknown format "${t}"`);throw n.sapCode="E22",n}if(He.has(t)){let n=typeof e=="number"?e:Number(e);if(!Number.isFinite(n)){let o=new Error(`format "${t}" received ${typeof e=="string"?`"${e}"`:e}`);throw o.sapCode="E22",o}}return r(e)}var je=["state","item","el","root","fmt","num","sum","count","avg","min","max","plural","days"],J=new Map,jt=/\bstate\.([a-z][a-z0-9_]*)/g,Ut=/\bitem\.([a-z][a-z0-9_]*)/g;function Ue(t){let e=new Set,r=new Set,n;for(jt.lastIndex=0;n=jt.exec(t);)e.add(n[1]);for(Ut.lastIndex=0;n=Ut.exec(t);)r.add(n[1]);return{state:e,item:r}}function N(t,e=!1){let r=(e?"!":"")+t,n=J.get(r);if(n)return n;J.size>512&&J.clear();try{let o=e?`"use strict";
6
- ${t}`:`"use strict"; return (${t});`;n={fn:new Function(...je,o),src:t,statement:e,deps:Ue(t),error:null}}catch(o){n={fn:null,src:t,statement:e,deps:{state:new Set,item:new Set},error:o}}return J.set(r,n),n}function qt(t,e,r,n,o){if(t.error)throw t.error;return t.fn(e,r,n,o,I,S,pt,It,Dt,Bt,Ft,Wt,zt)}var j={},H=null,Yt=!0,Z=!1;function Gt(){j={}}function Xt(t){let e=Z;return H?Jt(H.takeRecords()):Yt&&qe(),Z=!!H&&t.getRootNode()===document,e}function Kt(t){Z=t}function qe(){if(typeof document>"u"||typeof MutationObserver!="function"){Yt=!1;return}H=new MutationObserver(Jt),H.observe(document,{attributes:!0,childList:!0,subtree:!0})}function Jt(t){for(let e of t)if(e.type==="attributes")e.target._sapPlan&&(e.target._sapPlan=null);else for(let r of e.addedNodes)r.nodeType===1&&Qt(r)}function Qt(t){t._sapPlan&&(t._sapPlan=null);for(let e=t.firstElementChild;e;e=e.nextElementSibling)Qt(e)}function tt(t){if(!Z)return Vt(t);let e=t._sapPlan;return e&&e.gen===j?e:t._sapPlan=Vt(t)}function Vt(t){let e={gen:j,inert:t.tagName==="TEMPLATE",template:!1,item:!1,scope:!1,items:!1,detail:!1,each:!1,boundary:null,bind:null,transient:!1,decls:null,calcs:null,paints:null,effects:null,invalids:null};for(let r of t.attributes){let n=r.name,o=r.value,u=n.indexOf(":");if(u<0){switch(n){case"sap-ignore":e.inert=!0;break;case"cms-template":e.inert=!0;break;case"template":e.inert=!0,e.template=!0;break;case"item":e.item=!0;break;case"scope":e.scope=!0;break;case"items":e.items=!0;break;case"detail":e.detail=!0;break;case"each":e.each=!0;break;case"bind":e.bind=o;break;case"transient":e.transient=!0;break;case"state":e.decls=G(o);break;case"text":(e.paints||(e.paints=[])).push({kind:"text",fmt:null,entry:N(o)});break;case"show":(e.paints||(e.paints=[])).push({kind:"show",entry:N(o)});break;case"effect":(e.effects||(e.effects=[])).push({entry:N(o,!0)});break;case"invalid":(e.invalids||(e.invalids=[])).push({entry:N(o)});break}continue}let i=n.slice(0,u),d=n.slice(u+1);switch(i){case"calc":(e.calcs||(e.calcs=[])).push({name:d,entry:N(o)});break;case"text":(e.paints||(e.paints=[])).push({kind:"text",fmt:d,entry:N(o)});break;case"attr":(e.paints||(e.paints=[])).push({kind:"attr",arg:d,entry:N(o)});break;case"class":(e.paints||(e.paints=[])).push({kind:"class",arg:d,entry:N(o)});break;case"css":(e.paints||(e.paints=[])).push({kind:"css",arg:d,entry:N(o)});break;case"show-when":case"option":(e.paints||(e.paints=[])).push({kind:"when",match:"show",field:d,values:o.split("|")});break;case"hide-when":(e.paints||(e.paints=[])).push({kind:"when",match:"hide",field:d,values:o.split("|")});break;case"option-not":(e.paints||(e.paints=[])).push({kind:"when",match:"show-not",field:d,values:o.split("|")});break}}return e.boundary=e.scope?"scope":e.items?"items":e.detail?"detail":e.each?"each":null,Ye(e)?Ve():e}var Q=null;function Ve(){return(!Q||Q.gen!==j)&&(Q=Object.freeze({gen:j,inert:!1,template:!1,item:!1,scope:!1,items:!1,detail:!1,each:!1,boundary:null,bind:null,transient:!1,decls:null,calcs:null,paints:null,effects:null,invalids:null})),Q}function Ye(t){return!t.inert&&!t.item&&t.boundary===null&&t.bind===null&&!t.transient&&!t.decls&&!t.calcs&&!t.paints&&!t.effects&&!t.invalids}function Zt(t){return(t.getAttribute("type")||"text").toLowerCase()}function D(t){let e=t.tagName;if(e==="INPUT"){let r=Zt(t);r==="checkbox"||r==="radio"?t.checked?t.setAttribute("checked",""):t.removeAttribute("checked"):t.setAttribute("value",t.value);return}if(e==="TEXTAREA"){t.setAttribute("data-value",t.value);return}if(e==="SELECT"){let r=t.options;for(let n=0;n<r.length;n++)r[n].selected?r[n].setAttribute("selected",""):r[n].removeAttribute("selected")}}function te(t,e=t){let r=t.tagName;if(r==="INPUT"){let n=Zt(t);n==="checkbox"||n==="radio"?e.checked?t.hasAttribute("checked")||t.setAttribute("checked",""):t.removeAttribute("checked"):e.value!==(t.getAttribute("value")??"")&&t.setAttribute("value",e.value);return}if(r==="TEXTAREA"){let n=e.value.startsWith(`
3
+ var SapCoreBundle=(()=>{var ft=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var qe=Object.getOwnPropertyNames;var Ve=Object.prototype.hasOwnProperty;var Ye=(t,e)=>{for(var r in e)ft(t,r,{get:e[r],enumerable:!0})},Ge=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of qe(e))!Ve.call(t,o)&&o!==r&&ft(t,o,{get:()=>e[o],enumerable:!(n=Ue(e,o))||n.enumerable});return t};var Xe=t=>Ge(ft({},"__esModule",{value:!0}),t);var Bn={};Ye(Bn,{FULL_SAPJS:()=>G,Sap:()=>X,default:()=>In,mount:()=>Mn,mountAll:()=>je,needsFullSapjs:()=>Lt,runtime:()=>On});function Ct(t){let e=!1,r=new Set,n=[];function o(u){u&&(n.push(u),n.length>8&&n.shift())}function a(u,d){if(o(d),u._broken){if(d==="mutation")return;c(u)}r.add(u),!e&&(e=!0,queueMicrotask(i))}function i(){e=!1;let u=[...r];r.clear();for(let d of u)f(d)}function f(u,d=!1){if(!(u._broken||u.halted)){if(u._passes=(u._passes||0)+1,u._passes>50){u._broken=!0,u._breakerRing=n.slice(),t(u,{breaker:!0});return}u._resetArmed||(u._resetArmed=!0,setTimeout(()=>{u._passes=0,u._resetArmed=!1},0)),t(u,d?{full:!0}:{})}}function l(u,d){o(d),u._broken&&c(u),f(u,!0)}function c(u){u._broken=!1,u._passes=0}return{schedule:a,runNow:l,rearm:c,ring:n}}var dt={E01:{slug:"foreign-dialect",behavior:"HALT"},E02:{slug:"moustaches-in-text",behavior:"HALT"},E04:{slug:"duplicate-declaration",behavior:"HALT"},E05:{slug:"reserved-name",behavior:"HALT"},E06:{slug:"global-html-name",behavior:"HALT"},E07:{slug:"calc-cycle",behavior:"ERR"},E08:{slug:"expression-syntax",behavior:"HALT"},E10:{slug:"orphan-item",behavior:"HALT"},E12:{slug:"unknown-state-key",behavior:"ERR"},E15:{slug:"write-to-undeclared-key",behavior:"ERR"},E16:{slug:"write-to-computed-field",behavior:"ERR"},E17:{slug:"unresolvable-action-target",behavior:"HALT"},E18:{slug:"paint-on-form-control",behavior:"HALT"},E20:{slug:"bind-on-non-control",behavior:"HALT"},E22:{slug:"format-type",behavior:"ERR"},E24:{slug:"runtime-expression-throw",behavior:"ERR"},E26:{slug:"circuit-breaker",behavior:"HALT"},E30:{slug:"attr-on-bound-control",behavior:"HALT"},E31:{slug:"password-without-transient",behavior:"HALT"},E32:{slug:"file-bind",behavior:"HALT"},E33:{slug:"dialog-state-open",behavior:"HALT"},E34:{slug:"transient-persist-collision",behavior:"HALT"},E35:{slug:"presence-state-misuse",behavior:"HALT"},E40:{slug:"each-not-array",behavior:"ERR"},E41:{slug:"each-bad-key",behavior:"ERR"},E42:{slug:"each-template",behavior:"ERR"},E43:{slug:"bind-in-each-row",behavior:"ERR"},E50:{slug:"needs-full-sapjs",behavior:"HALT"},W03:{slug:"unknown-colon-attribute",behavior:"WARN"},W04:{slug:"expression-in-when",behavior:"WARN"},W30:{slug:"nonzero-mount-writes",behavior:"WARN"},W31:{slug:"detail-dialog-saved-open",behavior:"WARN"}},O=["disabled","readonly","required","checked","selected","multiple","open","inert","autofocus","novalidate","hidden"],pt=new Set(["title","style","hidden","lang","dir","translate","class","id","nonce","autofocus","tabindex","contenteditable","spellcheck","draggable","role","slot","part","name","value","type","itemscope","itemtype","itemid","itemprop","itemref"]),$t=new Set(["sap","scope","items","item","template","bind","calc","text","show","attr","set","trigger","move","sort","detail","each","effect","invalid","confirm","transient","default","persist","sortable","editmode"]);function Ke(t){if(!t||t.nodeType!==1)return"?";if(t.id)return`${t.tagName.toLowerCase()}#${t.id}`;let e=[],r=t,n=0;for(;r&&r.nodeType===1&&n<4;){let o=r.tagName.toLowerCase();if(r.hasAttribute("sap"))o+="[sap]";else if(r.parentElement){let a=0,i=0;for(let f=r.parentElement.firstElementChild;f;f=f.nextElementSibling)f.tagName===r.tagName&&(a++,f===r&&(i=a));a>1&&(o+=`:nth-of-type(${i})`)}if(e.unshift(o),r.hasAttribute("sap"))break;r=r.parentElement,n++}return e.join(" > ")}var J=class{constructor(e){this.appName=e,this.errors=[],this.warnings=[],this.halted=!1,this.haltReason=null}block(e,r,n={}){let o=(dt[e]||{}).slug||"error",a={code:e,slug:o,el:Ke(r),attr:n.attr||null,expr:n.expr||null,key:n.key||null,problem:n.problem||"",didYouMean:n.didYouMean||null,fix:n.fix||null,phase:n.phase||"runtime"},i=[`
4
+ `+(e[0]==="W"?"sap \u26A0 ":"sap \u2717 ")+e+" "+o];return i.push(` at ${a.el}${a.attr?` \u2014 ${a.attr}="${a.expr??""}"`:""}`),a.problem&&i.push(` problem: ${a.problem}`),a.didYouMean&&i.push(` did you mean: ${a.didYouMean}`),a.fix&&i.push(` fix: ${a.fix}`),(e[0]==="W"?console.warn:console.error)(i.join(`
5
+ `)),a}error(e,r,n={}){let o=this.block(e,r,n);return this.errors.push(o),o}warn(e,r,n={}){let o=this.block(e,r,n);return this.warnings.push(o),o}report(){return{ok:this.errors.length===0&&!this.halted,app:this.appName,halted:this.halted,haltReason:this.haltReason,errors:this.errors.slice(),warnings:this.warnings.slice()}}};function P(t,e){t&&t.getAttribute("sap-error")!==e&&t.setAttribute("sap-error",e)}function Pt(t){t&&t.hasAttribute("sap-error")&&t.removeAttribute("sap-error")}function mt(t,e){let r=null,n=3;for(let o of e){let a=Je(t,o);a<n&&(n=a,r=o)}return r}function Je(t,e){let r=t.length,n=e.length,o=Array.from({length:r+1},(a,i)=>[i,...new Array(n).fill(0)]);for(let a=0;a<=n;a++)o[0][a]=a;for(let a=1;a<=r;a++)for(let i=1;i<=n;i++)o[a][i]=Math.min(o[a-1][i]+1,o[a][i-1]+1,o[a-1][i-1]+(t[a-1]===e[i-1]?0:1));return o[r][n]}var Qe=new Set(O),Ze={readonly:"readOnly",novalidate:"noValidate"},tn=0,Mt=new WeakMap;function Ot(t,e="sap"){let r=t.getAttribute("data-id");if(r)return r;if(t.id)return t.id;let n=Mt.get(t);return n||(n=`${e}-${(tn++).toString(36)}`,Mt.set(t,n)),n}function Dt(t){let e=[];for(let r=t.firstElementChild;r;r=r.nextElementSibling)r.hasAttribute("item")&&!r.hasAttribute("template")&&!r.hasAttribute("cms-template")&&e.push(r);return e}function ht(t,e){if(!t||!e)return null;let r=[...t.querySelectorAll(`template[items="${e}"]`)].find(o=>o.closest("[sap]")===t),n=r&&r.content.firstElementChild;return n&&n.hasAttribute("item")?n:null}function It(t){for(let e=t.firstElementChild;e;e=e.nextElementSibling)if(e.hasAttribute("item")&&e.hasAttribute("template"))return e;return ht(t.closest("[sap]"),t.getAttribute("items"))}function Q(t){let e=[];if(!t)return e;for(let r of t.trim().split(/\s+/)){if(!r)continue;let n=r,o,a=n.indexOf("=");a>=0&&(o=n.slice(a+1),n=n.slice(0,a));let i=n.split(":"),f=i[0],l="string",c=!1;for(let b of i.slice(1))b==="num"?l="num":b==="bool"?l="bool":b==="presence"?l="presence":b==="transient"&&(c=!0);let u=f,d=u.startsWith("data-")&&u.length>5?u.slice(5).replace(/-([a-z])/g,(b,A)=>A.toUpperCase()):u;e.push({name:d,attr:u,type:l,default:o,transient:c})}return e}function Z(t,e){if(e==="num"){if(t==null||t==="")return 0;let r=Number(t);return Number.isNaN(r)?0:r}return e==="bool"?t==="true"||t===""||t==="1":t??""}function Bt(t,e){return e==="bool"?t?"true":"false":t==null?"":String(t)}function bt(t,e){return Qe.has(e)&&typeof t[Ze[e]||e]=="boolean"}function Wt(t,e){return e.type==="presence"||e.type!=="num"&&bt(t,e.attr||e.name)}function gt(t){return t.default!=null?t.default:t.type==="num"?"0":t.type==="bool"?"false":""}function Ft(t,e){let r=e.attr||e.name,n=t._sapTransient||(t._sapTransient={});if(!(e.name in n)){let o=t.getAttribute(r);o==null&&(o=gt(e)),n[e.name]=Z(o,e.type)}return t.hasAttribute(r)&&t.removeAttribute(r),n[e.name]}function T(t){if(typeof t=="number")return t;if(t==null||t==="")return 0;let e=Number(typeof t=="string"?t.replace(/[$,%\s]/g,""):t);return Number.isNaN(e)?0:e}function tt(t,e){return Array.isArray(t)?e==null?t:t.map(r=>typeof e=="function"?e(r):r?.[e]):[]}function yt(t,e){return tt(t,e).reduce((r,n)=>r+T(n),0)}function Ht(t,e){return Array.isArray(t)?e==null?t.length:t.reduce((r,n)=>r+(e(n)?1:0),0):0}function jt(t,e){let r=tt(t,e);return r.length?yt(t,e)/r.length:0}function zt(t,e){let r=tt(t,e).filter(n=>n!=null&&n!=="");return r.length?r.every(n=>typeof n=="number"||!Number.isNaN(Number(n)))?Math.min(...r.map(Number)):r.reduce((n,o)=>String(n)<=String(o)?n:o):0}function Ut(t,e){let r=tt(t,e).filter(n=>n!=null&&n!=="");return r.length?r.every(n=>typeof n=="number"||!Number.isNaN(Number(n)))?Math.max(...r.map(Number)):r.reduce((n,o)=>String(n)>=String(o)?n:o):0}function qt(t,e,r){let n=T(t)===1?e:r??e+"s";return`${t} ${n}`}function Vt(t,e){let r=new Date(t),n=new Date(e);return Number.isNaN(+r)||Number.isNaN(+n)?0:Math.round((n-r)/864e5)}function _(t){return typeof t=="number"?t:Number(t)}var D={usd:t=>"$"+_(t).toLocaleString("en-US",{maximumFractionDigits:0}),usd2:t=>"$"+_(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}),pct:t=>Math.round(_(t))+"%",pct1:t=>_(t).toFixed(1)+"%",int:t=>Math.round(_(t)).toLocaleString("en-US"),num:t=>_(t).toLocaleString("en-US"),num2:t=>_(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}),compact:t=>_(t).toLocaleString("en-US",{notation:"compact"}),date:t=>{let e=new Date(t);return Number.isNaN(+e)?String(t):e.toLocaleDateString("en-US")},clock:t=>{let e=_(t),r=Math.floor(e/100),n=r%10,o=Math.floor(r/10)%60;return`${Math.floor(r/600)}:${String(o).padStart(2,"0")}.${n}`}},en=new Set(["usd","usd2","pct","pct1","int","num","num2","compact","clock"]);function Yt(t,e){if(!t)return e==null?"":String(e);let r=D[t];if(typeof r!="function"){let n=new Error(`unknown format "${t}"`);throw n.sapCode="E22",n}if(en.has(t)){let n=typeof e=="number"?e:Number(e);if(!Number.isFinite(n)){let o=new Error(`format "${t}" received ${typeof e=="string"?`"${e}"`:e}`);throw o.sapCode="E22",o}}return r(e)}var nn=["state","item","el","root","fmt","num","sum","count","avg","min","max","plural","days"],et=new Map,Gt=/\bstate\.([a-z][a-z0-9_]*)/g,Xt=/\bitem\.([a-z][a-z0-9_]*)/g;function rn(t){let e=new Set,r=new Set,n;for(Gt.lastIndex=0;n=Gt.exec(t);)e.add(n[1]);for(Xt.lastIndex=0;n=Xt.exec(t);)r.add(n[1]);return{state:e,item:r}}function L(t,e=!1){let r=(e?"!":"")+t,n=et.get(r);if(n)return n;et.size>512&&et.clear();try{let o=e?`"use strict";
6
+ ${t}`:`"use strict"; return (${t});`;n={fn:new Function(...nn,o),src:t,statement:e,deps:rn(t),error:null}}catch(o){n={fn:null,src:t,statement:e,deps:{state:new Set,item:new Set},error:o}}return et.set(r,n),n}function Kt(t,e,r,n,o){if(t.error)throw t.error;return t.fn(e,r,n,o,D,T,yt,Ht,jt,zt,Ut,qt,Vt)}var q={},U=null,Qt=!0,rt=!1;function Zt(){q={}}function te(t){let e=rt;return U?ne(U.takeRecords()):Qt&&on(),rt=!!U&&t.getRootNode()===document,e}function ee(t){rt=t}function on(){if(typeof document>"u"||typeof MutationObserver!="function"){Qt=!1;return}U=new MutationObserver(ne),U.observe(document,{attributes:!0,childList:!0,subtree:!0})}function ne(t){for(let e of t)if(e.type==="attributes")e.target._sapPlan&&(e.target._sapPlan=null);else for(let r of e.addedNodes)r.nodeType===1&&re(r)}function re(t){t._sapPlan&&(t._sapPlan=null);for(let e=t.firstElementChild;e;e=e.nextElementSibling)re(e)}function ot(t){if(!rt)return Jt(t);let e=t._sapPlan;return e&&e.gen===q?e:t._sapPlan=Jt(t)}function Jt(t){let e={gen:q,inert:t.tagName==="TEMPLATE",template:!1,item:!1,scope:!1,items:!1,detail:!1,each:!1,boundary:null,bind:null,transient:!1,decls:null,calcs:null,paints:null,effects:null,invalids:null};for(let r of t.attributes){let n=r.name,o=r.value,a=n.indexOf(":");if(a<0){switch(n){case"sap-ignore":e.inert=!0;break;case"cms-template":e.inert=!0;break;case"template":e.inert=!0,e.template=!0;break;case"item":e.item=!0;break;case"scope":e.scope=!0;break;case"items":e.items=!0;break;case"detail":e.detail=!0;break;case"each":e.each=!0;break;case"bind":e.bind=o;break;case"transient":e.transient=!0;break;case"state":e.decls=Q(o);break;case"text":(e.paints||(e.paints=[])).push({kind:"text",fmt:null,entry:L(o)});break;case"show":(e.paints||(e.paints=[])).push({kind:"show",entry:L(o)});break;case"effect":(e.effects||(e.effects=[])).push({entry:L(o,!0)});break;case"invalid":(e.invalids||(e.invalids=[])).push({entry:L(o)});break}continue}let i=n.slice(0,a),f=n.slice(a+1);switch(i){case"calc":(e.calcs||(e.calcs=[])).push({name:f,entry:L(o)});break;case"text":(e.paints||(e.paints=[])).push({kind:"text",fmt:f,entry:L(o)});break;case"attr":(e.paints||(e.paints=[])).push({kind:"attr",arg:f,entry:L(o)});break;case"class":(e.paints||(e.paints=[])).push({kind:"class",arg:f,entry:L(o)});break;case"css":(e.paints||(e.paints=[])).push({kind:"css",arg:f,entry:L(o)});break;case"show-when":case"option":(e.paints||(e.paints=[])).push({kind:"when",match:"show",field:f,values:o.split("|")});break;case"hide-when":(e.paints||(e.paints=[])).push({kind:"when",match:"hide",field:f,values:o.split("|")});break;case"option-not":(e.paints||(e.paints=[])).push({kind:"when",match:"show-not",field:f,values:o.split("|")});break}}return e.boundary=e.scope?"scope":e.items?"items":e.detail?"detail":e.each?"each":null,an(e)?sn():e}var nt=null;function sn(){return(!nt||nt.gen!==q)&&(nt=Object.freeze({gen:q,inert:!1,template:!1,item:!1,scope:!1,items:!1,detail:!1,each:!1,boundary:null,bind:null,transient:!1,decls:null,calcs:null,paints:null,effects:null,invalids:null})),nt}function an(t){return!t.inert&&!t.item&&t.boundary===null&&t.bind===null&&!t.transient&&!t.decls&&!t.calcs&&!t.paints&&!t.effects&&!t.invalids}var M=new WeakMap,I=null,V=!1;function ie(){M=new WeakMap}function oe(t){for(let e of t){if(e.type==="attributes"){M.delete(e.target);continue}let r=e.target.nodeType===1?e.target:e.target.parentElement;for(let n=r;n;n=n.parentElement)M.delete(n);for(let n of e.addedNodes||[])if(n.nodeType===1){M.delete(n);for(let o of n.querySelectorAll("*"))M.delete(o)}}}function se(t){let e=V;return!I&&typeof MutationObserver=="function"&&(I=new MutationObserver(oe),I.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})),I&&oe(I.takeRecords()),V=!!I&&t.getRootNode()===document,e}function ae(t){V=t}function ue(t){let e=M.get(t);return e||M.set(t,e={attrs:new Map,hasText:!1,text:""}),e}function ce(t,e){if(!V)return t.getAttribute(e);let r=ue(t);return r.attrs.has(e)||r.attrs.set(e,t.getAttribute(e)),r.attrs.get(e)}function le(t){if(!V)return t.textContent;let e=ue(t);return e.hasText||(e.text=t.textContent,e.hasText=!0),e.text}function fe(t){return(t.getAttribute("type")||"text").toLowerCase()}function B(t){let e=t.tagName;if(e==="INPUT"){let r=fe(t);r==="checkbox"||r==="radio"?t.checked?t.setAttribute("checked",""):t.removeAttribute("checked"):t.setAttribute("value",t.value);return}if(e==="TEXTAREA"){t.setAttribute("data-value",t.value);return}if(e==="SELECT"){let r=t.options;for(let n=0;n<r.length;n++)r[n].selected?r[n].setAttribute("selected",""):r[n].removeAttribute("selected")}}function de(t,e=t){let r=t.tagName;if(r==="INPUT"){let n=fe(t);n==="checkbox"||n==="radio"?e.checked?t.hasAttribute("checked")||t.setAttribute("checked",""):t.removeAttribute("checked"):e.value!==(t.getAttribute("value")??"")&&t.setAttribute("value",e.value);return}if(r==="TEXTAREA"){let n=e.value.startsWith(`
7
7
  `)?`
8
- `+e.value:e.value;t.textContent!==n&&(t.textContent=n),t.removeAttribute("data-value");return}if(r==="SELECT"){let n=t.options,o=e.options;for(let u=0;u<n.length;u++)o[u]&&o[u].selected?n[u].hasAttribute("selected")||n[u].setAttribute("selected",""):n[u].removeAttribute("selected")}}function et(t){t.tagName!=="TEXTAREA"||!t.hasAttribute("data-value")||t!==t.ownerDocument.activeElement&&(t.textContent=t.getAttribute("data-value"),t.removeAttribute("data-value"))}function w(t){if(typeof window>"u")return null;let e=window.clay,r=window.hyperclay;return t==="consent"?e?.confirm||r?.consent||null:e?.[t]||r?.[t]||null}function ee(){let t=w("visitorDrafts");return!!(t&&typeof t.restored=="function"&&t.restored()?.restored)}var mt=["clay:mutation-ready","hyperclay:mutation-ready"],Ge=["clay:sync-applied","hyperclay:livesync-applied"],Xe=["clay:ready","hyperclay:ready"],Ke=["clay:route"];function B(t,e,r){let n=null,o=u=>{n!==null&&n!==u.type||(n=u.type,queueMicrotask(()=>{n=null}),r(u))};for(let u of e)t.addEventListener(u,o);return()=>{for(let u of e)t.removeEventListener(u,o)}}function ne(t){let e=typeof window<"u"&&window.clay&&window.clay.ready;e&&typeof e.then=="function"?e.then(()=>t(),()=>t()):t()}function nt(t){let e=w("region");return!e||typeof e.resolveRegionPolicy!="function"||typeof e.skipForPolicy!="function"?!1:e.skipForPolicy(e.resolveRegionPolicy(t),void 0,["no-save","freeze"])}function re(t,e){if(typeof e!="function")throw new Error("Sap.batch(label, fn): fn must be a function");let r=w("undo");r&&r.flush&&r.flush();let n=e();if(n&&typeof n.then=="function")throw new Error("Sap.batch fn must be synchronous (it returned a promise)");return r&&r.commitCaptured&&r.commitCaptured(t),n}function oe(t){if(typeof window>"u"||typeof document>"u")return;let e=()=>{let c=!1;for(let a of t.apps())a.root.isConnected?t.runNow(a,"platform"):c=!0;c&&t.pruneDisconnected(),t.remountIfPresent()},r=w("derived"),n=r&&typeof r.register=="function"?r.register(e):null,o=typeof n=="function"?null:B(document,Ge,e),u=B(document,Ke,e),i=!1,d=()=>{},l=()=>{if(i)return!0;let c=w("undo");if(!c||typeof c.on!="function")return!1;let a=c.on("undo",e);return typeof a!="function"?!1:typeof c.on("redo",e)!="function"?(a(),!1):(i=!0,d(),!0)};if(!l()){let c=B(document,mt,l),a=B(document,Xe,l);d=()=>{c(),a()};let m=w("ready");m&&typeof m.then=="function"&&m.then(l,()=>{})}return()=>{typeof n=="function"&&n(),o&&o(),u(),d()}}function ht(t){let e=t.tagName;if(e==="INPUT"){let r=(t.getAttribute("type")||"text").toLowerCase();return r==="checkbox"?"checkbox":r==="radio"?"radio":r==="number"||r==="range"?"number":r==="hidden"?"hidden":"text"}return e==="TEXTAREA"?"text":e==="SELECT"?t.multiple?"select-multiple":"select-one":"leaf"}function Je(t){if(t.validity&&t.validity.badInput)return t.hasAttribute("value")?Number(t.getAttribute("value"))||0:t._sapLastGood??0;if(t.value==="")return 0;let e=Number(t.value);return Number.isNaN(e)?t._sapLastGood??0:(t._sapLastGood=e,e)}function se(t,e){switch(e){case"checkbox":return t.checked;case"radio":return t.checked?t.value:void 0;case"number":return Je(t);case"select-one":return t.value;case"select-multiple":return[...t.selectedOptions].map(r=>r.value);case"hidden":case"text":return t.value;case"leaf":return t.textContent;default:return t.value}}function Qe(t,e,r){switch(e){case"checkbox":t.checked=!!r;break;case"radio":t.checked=String(t.value)===String(r);break;case"number":case"text":case"hidden":t.value=r==null?"":String(r);break;case"select-one":t.value=r==null?"":String(r);break;case"select-multiple":{let n=new Set((Array.isArray(r)?r:[r]).map(String));for(let o of t.options)o.selected=n.has(o.value);break}case"leaf":t.textContent=r==null?"":String(r);break;default:t.value=r==null?"":String(r)}}function ie(t){if(t.hasAttribute("transient")){t.removeAttribute("value"),t.removeAttribute("checked"),t.removeAttribute("data-value");return}nt(t)||D(t)}function Ze(t){t.dispatchEvent(new Event("input",{bubbles:!0})),t.dispatchEvent(new Event("change",{bubbles:!0}))}function ae(t,e){return se(t,e)}function ue(t){let e=ht(t);return{el:t,kind:e,read(){return se(t,e)},write(r,n={}){Qe(t,e,r),n.noMirror||ie(t),n.silent||Ze(t)},mirror(){ie(t)}}}var _=null,ot=!1,F=null;function ce(t){let e=null;return{kind:"hub",subscribe(r){let n=t.onAnyChange({debounce:0,require:"observed"},r);typeof n=="function"&&(e=n)},suppress(r){t.pause();try{return r()}finally{t.resume()}},teardown(){if(e){try{e()}catch{}e=null}}}}function tn(){let t=null;return{kind:"native",subscribe(e){t=new MutationObserver(n=>e(en(n)));let r=typeof document<"u"&&document.body||typeof document<"u"&&document.documentElement;r&&t.observe(r,{childList:!0,subtree:!0,attributes:!0,characterData:!0})},suppress(e){let r=w("undo");r&&r.pause&&r.pause();try{return e()}finally{t&&t.takeRecords(),r&&r.resume&&r.resume()}},teardown(){t&&(t.disconnect(),t=null)}}}function en(t){let e=[];for(let r of t)if(r.type==="attributes"){let n=r.target;n&&n.nodeType===1&&!rt(n)&&e.push({type:"attribute",element:n})}else if(r.type==="characterData"){let n=r.target&&r.target.parentElement;n&&!rt(n)&&e.push({type:"characterData",element:n})}else if(r.type==="childList"){for(let n of r.addedNodes)if(!(n.nodeType!==1||rt(n))&&(e.push({type:"add",element:n}),n.querySelectorAll))for(let o of n.querySelectorAll("*"))rt(o)||e.push({type:"add",element:o});for(let n of r.removedNodes)n.nodeType===1&&e.push({type:"remove",element:n,parent:r.target})}return e}function rt(t){return!!(t.closest&&t.closest("[sap-ignore],[template],[cms-template]"))}function nn(t,e){t.pruneDisconnected();let r=new Set,n=!1;for(let o of e){let u=o.type==="remove"?o.parent:o.element,i=u&&t.appFor(u);i&&r.add(i),o.type==="add"&&o.element&&o.element.nodeType===1&&o.element.hasAttribute&&o.element.hasAttribute("sap")&&!(t.isRegistered&&t.isRegistered(o.element))&&(n=!0)}n&&t.remountIfPresent();for(let o of r)o.root.isConnected&&t.schedule(o,"mutation")}function le(t){if(_)return _.suppress(t);let e=w("undo");if(e&&e.pause&&e.resume){e.pause();try{return t()}finally{e.resume()}}return t()}function bt(t,e){ot=!0,_=t,t.subscribe(r=>nn(e,r))}function gt(t){if(ot||typeof window>"u"||typeof document>"u")return;let e=w("Mutation");if(e&&typeof e.onAnyChange=="function"){bt(ce(e),t);return}typeof MutationObserver=="function"&&(bt(tn(),t),F=B(document,mt,function(){let n=w("Mutation");n&&(F(),F=null,_&&_.teardown(),ot=!1,bt(ce(n),t))}))}function yt(){if(_)try{_.teardown()}catch{}F&&typeof document<"u"&&F(),_=null,ot=!1,F=null}var rn=new Set(O),R=[],de={},pe={};function me(t){R.includes(t)||(R.push(t),t.boundary&&Object.assign(de,t.boundary),t.paintKinds&&Object.assign(pe,t.paintKinds))}function it(t,e={}){if(e.breaker){t.diag.error("E26",t.root,{problem:"recompute loop halted after 50 passes; recent triggers: "+(t._breakerRing||[]).join(", ")}),P(t.root,"loop");return}e.full&&Gt();let r=Xt(t.root);try{le(()=>on(t,e))}finally{Kt(r)}t._viewsChanged&&(t._viewsChanged=!1,t.root.dispatchEvent(new CustomEvent("sap:views-updated",{bubbles:!0})))}function on(t,e){let r=t.root,n={},o=[],u=[],i=new Set;t.diag.errors=[];let d={root:n,state:n,item:null,ownerEl:r,projection:!1};function l(s,f){let h=f.attr||f.name,p=s.getAttribute(h);return p==null&&(p=dt(f),u.push({el:s,name:f.name,attr:h,value:Pt(X(p,f.type),f.type)})),X(p,f.type)}function c(s,f,h){let p=f.decls;if(p)for(let b of p){if(b.transient){h[b.name]=Ot(s,b);continue}if(Mt(s,b)){h[b.name]=s.hasAttribute(b.attr);continue}h[b.name]=l(s,b)}}function a(s,f,h){let p=f.bind,b=h.item||h.state,$=ht(s);$==="radio"?(p in b||(b[p]=""),s.checked&&(b[p]=s.value)):b[p]=ae(s,$),f.transient&&(s.removeAttribute("value"),s.removeAttribute("checked"))}function m(s,f,h){if(f.paints)for(let p of f.paints)p.kind==="when"&&i.add(p.field),o.push({def:p,el:s,ctx:h});for(let p of R)p.collect&&p.collect(v,s,f,h)}function g(s,f,h){Object.defineProperty(s,"$key",{value:Rt(f,"row"),enumerable:!1}),Object.defineProperty(s,"$index",{value:h,enumerable:!1}),Object.defineProperty(s,"$el",{value:f,enumerable:!1})}function A(s,f,h){let p=tt(s);c(s,p,f),s._sapScope=f,!h.projection&&p.bind!=null&&a(s,p,h),m(s,p,h),p.items?z(s,f,h):E(s,f,h)}function E(s,f,h){for(let p=s.firstElementChild;p;p=p.nextElementSibling)x(p,f,h)}function x(s,f,h){let p=tt(s);if(!p.inert){if(p.boundary){p.boundary==="scope"?k(s,f,h):p.boundary==="items"?(m(s,p,h),z(s,f,h)):de[p.boundary](v,s,p,f,h);return}!h.projection&&!h.view&&p.bind!=null&&a(s,p,h),m(s,p,h);for(let b=s.firstElementChild;b;b=b.nextElementSibling)x(b,f,h)}}function k(s,f,h){let p=s.getAttribute("scope"),b={};f[p]=b;let $={root:h.root,state:b,item:null,ownerEl:s,projection:h.projection};A(s,b,$)}function z(s,f,h){let p=s.getAttribute("items"),b=[];f[p]=b,s._sapList=b;let $=0;for(let L=s.firstElementChild;L;L=L.nextElementSibling){let kt=tt(L);if(!kt.item||kt.template||L.hasAttribute("cms-template"))continue;let V={};g(V,L,$);let Re={root:h.root,state:h.state,item:V,ownerEl:L,projection:h.projection};A(L,V,Re),b.push(V),$++}}let v={app:t,root:r,rootObj:n,paints:o,stats:{calcs:0,lists:0},resolveDefault:l,collectEl:m,walkScope:E};for(let s of R)s.begin&&s.begin(v);if(A(r,n,d),t.halted)return;for(let s of R)s.afterIntake&&s.afterIntake(v);if(u.length&&i.size)for(let s of u)i.has(s.attr)&&s.el.getAttribute(s.attr)==null&&s.el.setAttribute(s.attr,s.value);for(let s of R)s.compute&&s.compute(v);let M=0;for(let s of R)s.reconcile&&(M+=s.reconcile(v));let C=0,y=M;for(let s of o){let f=an(s,t);s.ctx.view?y+=f:C+=f}for(let s of R)s.afterPaint&&s.afterPaint(v);t._state=n,t._stats={fields:Object.keys(n).filter(s=>typeof n[s]!="function").length,calcs:v.stats.calcs,paints:o.length,lists:v.stats.lists,writes:C,viewWrites:y},t._viewsChanged=y>0,t._lastPass={trigger:e.trigger||"refresh",writes:C},t._debug&&console.log(`sap pass \xB7 trigger: ${t._lastPass.trigger} \xB7 writes ${C}/${o.length}`)}function sn(t){return t.kind==="text"?t.fmt?"text:"+t.fmt:"text":t.kind==="attr"?"attr:"+t.arg:t.kind==="class"?"class:"+t.arg:t.kind==="css"?"css:"+t.arg:t.kind==="when"?(t.match==="hide"?"hide-when:":t.match==="show-not"?"option-not:":"show-when:")+t.field:t.kind}function wt(t,e,r,n){let o=t;for(;o&&o.nodeType===1;){if(o.hasAttribute&&o.hasAttribute(e)){let u=r.includes(o.getAttribute(e));if(n?!u:u)return!0}o=o.parentElement}return!1}function an(t,e){let r=t.def,n=t.el,o=pe[r.kind];if(o)return o(t,e);if(r.kind==="when")return fe(r,n,null);try{let u=qt(r.entry,t.ctx.state,t.ctx.item,n,t.ctx.root),i=fe(r,n,u);return Lt(n),i}catch(u){return e.diag.error(u.sapCode==="E22"?"E22":"E24",n,{attr:sn(r),expr:r.entry&&r.entry.src,problem:String(u.message)}),P(n,u.sapCode||"E24"),0}}function fe(t,e,r){switch(t.kind){case"text":{let n=t.fmt!=null?Ht(t.fmt,r):r==null?"":String(r);return e.textContent!==n?(e.textContent=n,1):0}case"show":{let n=!r;return e.hidden!==n?(e.hidden=n,1):0}case"when":{let n=w("optionVisibility");if(n&&n._started)return e._sapWhen&&e.hidden?(e.hidden=!1,e._sapWhen=!1,1):0;let o;t.match==="hide"?o=!wt(e,t.field,t.values,!1):t.match==="show-not"?o=wt(e,t.field,t.values,!0):o=wt(e,t.field,t.values,!1),e._sapWhen=!0;let u=!o;return e.hidden!==u?(e.hidden=u,1):0}case"attr":{let n=t.arg;if((n==="checked"||n==="selected")&&typeof e[n]=="boolean"&&!e.hasAttribute("bind")&&!e.closest("select[bind]")){let u=0;return e[n]!==!!r&&(e[n]=!!r,u=1),!!r!==e.hasAttribute(n)&&(r?e.setAttribute(n,""):e.removeAttribute(n),u=1),u}if(rn.has(n)){let u=e.hasAttribute(n);return r&&!u?(e.setAttribute(n,""),1):!r&&u?(e.removeAttribute(n),1):0}let o=typeof r=="boolean"?String(r):r==null?"":String(r);return e.getAttribute(n)!==o?(e.setAttribute(n,o),1):0}case"class":{let n=!!r;return e.classList.contains(t.arg)!==n?(e.classList.toggle(t.arg,n),1):0}case"css":{let n=r==null?"":String(r);return e.style.getPropertyValue("--"+t.arg)!==n?(e.style.setProperty("--"+t.arg,n),1):0}default:return 0}}var un=new Set(O),he=new Set(["calc","text","attr","class","css","set","move","sort","option","option-not","show-when","hide-when","editmode"]),cn=new Set(["show-when","hide-when","option","option-not"]),ln=/\b(?:state|item|root)\.|===|!==|&&|\|\||[()]|^\s*!/,be=new Set(["sap","scope","items","item","template","bind","show","effect","invalid","detail","state","transient","confirm","default","persist","sortable","trigger-add","trigger-remove","trigger-reset","sap-ignore","sap-error","no-save","no-watch","no-undo","no-trigger-autosave","freeze","mutations-ignore","save-remove","save-ignore","save-freeze"]),Et=[];function ge(t){Et.includes(t)||Et.push(t)}function fn(t){return t.tagName==="INPUT"||t.tagName==="SELECT"||t.tagName==="TEXTAREA"}function At(t){return t.hasAttribute("bind")}function dn(t,e){e(t);for(let n=t.firstElementChild;n;n=n.nextElementSibling)r(n);function r(n){if(!n.hasAttribute("sap-ignore")){if(n.tagName==="TEMPLATE"){if(n.hasAttribute("items"))for(let o=n.content.firstElementChild;o;o=o.nextElementSibling)r(o);return}e(n);for(let o=n.firstElementChild;o;o=o.nextElementSibling)r(o)}}}function ye(t,e){let r=!1,n=(i,d,l)=>{e.error(i,d,l),r=!0},o=t.ownerDocument.createTreeWalker(t,4),u;for(;u=o.nextNode();)if(/\{\{.*\}\}/.test(u.nodeValue||"")){n("E02",u.parentElement||t,{problem:"moustaches in text content are not a Sap feature",fix:'move the expression onto the element: text="state.x"'});break}return dn(t,i=>{let d=new Set;for(let c of Et)c(i,n,a=>d.add(a));let l=i.closest&&i.closest("[detail]");for(let c of[...i.attributes]){let a=c.name;if(d.has(a))continue;if(a.includes(":")){let g=a.slice(0,a.indexOf(":"));if(he.has(g)){if(cn.has(g)&&ln.test(c.value)){let A=a.slice(a.indexOf(":")+1);e.warn("W04",i,{attr:a,expr:c.value,problem:`${g}: compares the "${A}" attribute against a literal value, not a JS expression`,fix:`use show="${c.value}" for an expression, or a literal like ${g}:${A}="overview"`})}}else{let A=ct(g,[...he]);e.warn("W03",i,{attr:a,problem:`unknown "${g}:" attribute`,didYouMean:A?`${A}:`:null})}}else if(!be.has(a)&&!ut.has(a)&&!un.has(a)&&!/^(data-|aria-|on)/.test(a)&&!(a in i)){let g=ct(a,[...be]);g&&e.warn("W03",i,{attr:a,problem:`unknown "${a}" attribute`,didYouMean:g})}a==="attr:hidden"&&e.warn("W03",i,{attr:a,problem:"attr:hidden paints the wrong attribute",fix:'use show="expr"'});let m=At(i)||a==="attr:selected"&&i.tagName==="OPTION"&&!!i.closest("select[bind]");(a==="attr:value"||a==="attr:checked"||a==="attr:selected")&&m&&n("E30",i,{attr:a,problem:"attr: on a bound control collides with persist ownership",fix:"remove it; bind owns this attribute"}),a==="effect"&&At(i)&&/\b(value|checked)\s*=[^=]/.test(c.value)&&n("E30",i,{attr:a,expr:c.value,problem:"effect writes value/checked on a bound control (writes a stale value with no synthetic event)",fix:"write through onclick + Sap(this) instead"}),(a==="text"||a.startsWith("text:")||a==="show")&&fn(i)&&(a==="show"||n("E18",i,{attr:a,problem:"paint belongs on output elements, not form controls",fix:"move the paint to an <output> or <span>"}))}if(i.hasAttribute("state")){let c=G(i.getAttribute("state")),a=new Set;for(let m of c){m.name.includes("-")&&n("E08",i,{attr:"state",problem:`field "${m.name}" is not a valid identifier (the hyphen parses as subtraction)`,fix:`rename to ${m.name.replace(/-/g,"")}`}),a.has(m.name)&&n("E04",i,{attr:"state",problem:`field "${m.name}" is declared twice in one scope`}),a.add(m.name),Tt.has(m.attr)&&n("E05",i,{attr:"state",problem:`"${m.name}" is a reserved Sap word`}),ut.has(m.attr)&&n("E06",i,{attr:"state",problem:`"${m.name}" is a global HTML attribute name; pick another field name`}),m.name==="open"&&i.tagName==="DIALOG"&&n("E33",i,{attr:"state",problem:"dialog open is transient",fix:"use showModal() \u2014 declare state= only on <details> or popovers"});let g=ft(i,m.attr);g&&(m.attr==="checked"||m.attr==="selected")&&n("E35",i,{attr:"state",problem:`"${m.attr}" on a form control is the control's own state, not a declared field`,fix:'bind the control instead, e.g. <input type="checkbox" bind="done">'}),g&&m.type==="num"&&n("E35",i,{attr:"state",problem:`"${m.attr}" is an HTML boolean attribute; it cannot hold a number`,fix:`declare it bare: state="${m.attr}"`}),m.transient&&(g||m.type==="presence")&&n("E35",i,{attr:"state",problem:`"${m.name}" is carried by attribute presence, which transient would strip`,fix:"declare a separate name:bool:transient field and paint the attribute from it"})}}if(At(i)){if(i.hasAttribute("-"),i.tagName==="INPUT"){let c=(i.getAttribute("type")||"text").toLowerCase();c==="file"&&n("E32",i,{attr:"bind",problem:"files never serialize into an HTML file",fix:"use no-save + effect instead of bind"}),c==="password"&&!i.hasAttribute("transient")&&n("E31",i,{attr:"bind",problem:"a password must never serialize into a world-readable file",fix:"add transient to the password input"})}else if(i.tagName!=="SELECT"&&i.tagName!=="TEXTAREA"){let c=i.getAttribute("contenteditable");!(c!=null&&c!=="false")&&i.children.length>0&&n("E20",i,{attr:"bind",problem:"bind on a container element is not a control; a write would overwrite its children",fix:"bind a control (input/select/textarea), a contenteditable, or an empty text leaf"})}}if(i.hasAttribute("transient")&&i.hasAttribute("persist")&&n("E34",i,{problem:"transient and persist are opposite: persist forces the live value into the saved bytes, leaking exactly what transient drops",fix:"remove one \u2014 transient to keep it out of the file, or persist to save it"}),i.tagName==="DIALOG"&&i.hasAttribute("detail")&&!(i.parentElement&&i.parentElement.closest('[clay~="freeze"], [freeze], [save-freeze]'))&&e.warn("W31",i,{attr:"detail",problem:"a detail dialog writes open when it opens, and that attribute would be saved into the file",fix:'wrap the dialog in an element with clay="freeze" (not editor-ui, which removes it from the file), and make its key field transient'}),i.hasAttribute("item")&&!i.hasAttribute("template")&&i.parentNode&&i.parentNode.nodeType===1){let c=i.parentElement;(!c||!c.hasAttribute("items"))&&n("E10",i,{problem:"an [item] must be a direct child of an [items] list",fix:'wrap it in a container with items="name"'})}if(i.hasAttribute("items")&&l&&n("E17",i,{attr:"items",problem:"nested items inside a detail panel is a v1 mount error (nested collections ship in v1.1)"}),i.hasAttribute("items")){let c=t.querySelector(`[trigger-add="${i.getAttribute("items")}"]`);!$t(i)&&!lt(t,i.getAttribute("items"))&&Ct(i).length===0&&c&&n("E17",i,{attr:"items",problem:`trigger-add targets items="${i.getAttribute("items")}" but it has no [item template] to clone`})}}),r&&(e.halted=!0,e.haltReason=e.errors[0]?e.errors[0].code:"halt",P(t,e.haltReason)),!r}var we="sap-styles",Ae="[item][template]{display:none!important}[hidden]{display:none!important}[sap-error]{outline:2px solid #e5484d;outline-offset:1px}",xt=new WeakSet;function pn(t){if(xt.has(t))return;let e=t.defaultView,r=e&&e.CSSStyleSheet;if(r&&"adoptedStyleSheets"in t)try{let n=new r;n.replaceSync(Ae),t.adoptedStyleSheets=[...t.adoptedStyleSheets,n],xt.add(t);return}catch{}if(!t.getElementById(we)){let n=t.createElement("style");n.id=we,n.textContent=Ae,(t.head||t.documentElement).appendChild(n)}xt.add(t)}var mn=0;function Ee(){return typeof performance<"u"&&performance.now?performance.now():0}function vt(t){let e=t.id||t.getAttribute("sap")||`app-${mn++}`,r=new Y(e),n={root:t,name:e,diag:r,_state:null,_stats:null,_lastPass:null,_passes:0,_broken:!1,_mountMs:0,_mountWrites:0};if(!ye(t,r))return n.halted=!0,n;pn(t.ownerDocument);for(let i of t.querySelectorAll("textarea[data-value]"))et(i);let u=Ee();return it(n,{trigger:"mount",full:!0}),n._mountMs=Ee()-u,n._mountWrites=n._stats?n._stats.writes:0,n._mountWrites>0&&!ee()&&!w("derived")&&r.warn("W30",t,{problem:`${n._mountWrites} paint(s) ran at mount; the saved file was out of sync with its declared state`,fix:"re-save once so the file mounts clean (a settled file writes nothing)"}),n}var xe=/^(set:|move:|sort:|trigger-add$|trigger-remove$|trigger-reset$)/;function hn(t){return`${t.tagName.toLowerCase()}[sap]`}function bn(t){let e=0;for(let r of t.querySelectorAll("*"))for(let n of r.attributes)if(xe.test(n.name)){e++;break}for(let r of t.attributes)if(xe.test(r.name)){e++;break}return e}function ve(t){function e(d){let l=d._stats||{},c=d.root;return{root:hn(c),fields:l.fields||0,calcs:l.calcs||0,paints:l.paints||0,actions:bn(c),lists:(c.hasAttribute("items")?1:0)+c.querySelectorAll("[items]").length,rows:c.querySelectorAll("[item]:not([template])").length,warnings:d.diag.warnings.length,errors:d.diag.errors.length,mountWrites:d._mountWrites||0,ms:Math.round((d._mountMs||0)*10)/10,passes:d._passes||0,lastPass:d._lastPass||null,ok:d.diag.errors.length===0&&!d.halted}}function r(){let d=t.apps().map(e);return{ok:d.every(l=>l.ok),apps:d}}function n(d){let l=e(d);return l.ok?`sap \u2713 ${l.root} \xB7 fields ${l.fields} \xB7 calcs ${l.calcs} \xB7 paints ${l.paints} \xB7 actions ${l.actions} \xB7 lists ${l.lists} \xB7 rows ${l.rows} \xB7 warnings ${l.warnings} \xB7 mount writes ${l.mountWrites} \xB7 ${l.ms}ms`:`sap \u2717 ${l.root} \xB7 errors ${l.errors} \xB7 warnings ${l.warnings} \xB7 ${l.ms}ms`}function o(){for(let d of t.apps()){let l=n(d);d.diag.errors.length||d.halted?console.error(l):console.log(l)}}function u(){let d=[],l=[];for(let c of t.apps())d.push(...c.diag.errors),l.push(...c.diag.warnings);return{ok:d.length===0,errors:d,warnings:l,counts:{errors:d.length,warnings:l.length}}}function i(d){let l=d===void 0?!0:!!d;for(let c of t.apps())c._debug=l;return console.log(`sap debug ${l?"on":"off"} \u2014 per-pass headers will ${l?"":"no longer "}log`),l}return{status:r,report:u,debug:i,greenLine:n,printGreenLines:o,REGISTRY:at}}var Se="0.6.0";function ke({createAccessor:t,installInput:e,debugExtras:r}){let n=new Map,o=[],u=Nt(it);function i(s){let f=s;for(;f;){if(f.nodeType===1&&f.hasAttribute&&f.hasAttribute("sap"))return n.get(f)||null;f=f.parentNode&&f.parentNode.host?f.parentNode.host:f.parentElement}return null}function d(){for(let s=o.length-1;s>=0;s--){let f=o[s];f.root.isConnected||(n.delete(f.root),o.splice(s,1))}}function l(s,f){if(s.moveBefore)try{s.moveBefore(f,null);return}catch{}s.appendChild(f)}function c(s,f){let h=f.parentElement;if(h){if(h.moveBefore)try{h.moveBefore(s,f);return}catch{}h.insertBefore(s,f)}}let a={apps:()=>o.slice(),appFor:i,isRegistered:s=>n.has(s),pruneDisconnected:d,schedule:(s,f)=>u.schedule(s,f),runNow:(s,f)=>u.runNow(s,f),moveInto:l,placeBefore:c,remountIfPresent:()=>M()},m=t(a),g=ve(a),A=r?r(a,g):{},E=!1,x=!1,k=null;function z(){E||(E=!0,e(a,m,document),k=oe(a))}function v(){let s=w("derived");s&&typeof s.mounted=="function"&&s.mounted()}function M(s=document){if(x)return[];z(),gt(a);let f=s.querySelectorAll("[sap]"),h=[];for(let p of f){if(n.has(p))continue;let b=vt(p);n.set(p,b),o.push(b),h.push(b)}for(let p of h){let b=g.greenLine(p);p.diag.errors.length||p.halted?console.error(b):console.log(b)}return v(),h}function C(s){if(x)return null;if(z(),gt(a),!s)return M();let f=typeof s=="string"?document.querySelector(s):s;if(!f)return null;if(n.has(f))return n.get(f);let h=vt(f);n.set(f,h),o.push(h);let p=g.greenLine(h);return h.diag.errors.length||h.halted?console.error(p):console.log(p),h}let y=m.Sap;return y.version=Se,y.refresh=function(){for(let f of o)f.root.isConnected&&u.runNow(f,"refresh")},y.batch=re,y.status=g.status,y.report=g.report,y.why=A.why,y.debug=g.debug,y.doctor=A.doctor,y.greenLine=g.greenLine,y.formats=I,y.serializeControlToAttributes=D,y.finalizeControlForSave=te,y.rehydrateControlFromAttributes=et,y.mount=C,y.config=function(f={}){return f.formats&&Object.assign(I,f.formats),y},y._registry=n,y._reset=function(){n.clear(),o.length=0,yt()},y.unmount=function(){x=!0,n.clear(),o.length=0,yt(),typeof k=="function"&&k()},{Sap:y,mountAll:M,mount:C,runtime:a}}function Ne(t){if(typeof document>"u")return;let e=()=>ne(()=>t());document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e):e()}function Te(t){let e=[];function r(l){let c=l.target;if(!c||c.nodeType!==1)return;let a=t.appFor(c);if(a){c.hasAttribute("persist")&&!nt(c)&&D(c);for(let m of e)if(m(c,a))return;t.schedule(a,l.type+" "+(c.id||c.tagName.toLowerCase()))}}function n(l){let c=l.target,a=t.appFor(c);a&&setTimeout(()=>{c.querySelectorAll("[bind]").forEach(m=>{m.dispatchEvent(new Event("input",{bubbles:!0})),m.dispatchEvent(new Event("change",{bubbles:!0}))}),t.schedule(a,"reset")},0)}function o(l){let c=t.appFor(l.target);c&&t.schedule(c,"toggle")}function u(l){let c=l.detail||{};for(let a of[c.from,c.to,l.target]){if(!a||a.nodeType!==1)continue;let m=t.appFor(a);m&&t.schedule(m,"sorted")}}function i(l){if(l.key!=="ArrowUp"&&l.key!=="ArrowDown")return;let c=l.target;if(!c||c.nodeType!==1||c.tagName!=="INPUT"||!c.hasAttribute("bind")||!c.hasAttribute("step"))return;let a=(c.getAttribute("type")||"text").toLowerCase();if(a!=="text"&&a!=="tel"&&a!=="search"||!t.appFor(c))return;l.preventDefault();let g=S(c.getAttribute("step"))||1,A=l.key==="ArrowUp"?1:-1,E=S(c.value)+g*(l.shiftKey?10:1)*A,x=c.getAttribute("min"),k=c.getAttribute("max");x!==null&&x!==""&&E<S(x)&&(E=S(x)),k!==null&&k!==""&&E>S(k)&&(E=S(k)),ue(c).write(String(Number(E.toFixed(2))))}function d(l=document){l.addEventListener("reset",n),l.addEventListener("toggle",o,!0),l.addEventListener("input",r),l.addEventListener("change",r),l.addEventListener("clay:sorted",u),l.addEventListener("keydown",i)}return{install:d,addRouter:l=>e.push(l)}}var U="https://clayjs.com/v1/sap.js",gn=/^(calc|set|move|sort):/,yn=new Set(["each","detail","effect","invalid","confirm","trigger-add","trigger-remove","trigger-reset"]);function St(t){return gn.test(t)||yn.has(t)}ge((t,e)=>{for(let r of t.attributes)St(r.name)&&e("E50",t,{attr:r.name,expr:r.value,problem:`${r.name} is full sapjs; the sapjs core only paints declared state`,fix:`load ${U}; the markup stays as it is`})});function W(t,e,r){t.app.diag.error("E50",e,{attr:r,problem:`${r} is full sapjs; the sapjs core only paints declared state`,fix:`load ${U}; the markup stays as it is`}),P(e,"E50"),t.app.halted=!0}me({name:"core-only",collect(t,e,r){r.calcs&&W(t,e,"calc:"+r.calcs[0].name),r.effects&&W(t,e,"effect"),r.invalids&&W(t,e,"invalid");for(let n of e.attributes)St(n.name)&&(n.name.startsWith("calc:")&&r.calcs||n.name==="effect"&&r.effects||n.name==="invalid"&&r.invalids||W(t,e,n.name))},boundary:{each(t,e){W(t,e,"each")},detail(t,e){W(t,e,"detail")}}});function wn(){return{Sap:function(){throw new Error(`Sap(el) is full sapjs; load ${U}`)}}}var Le=t=>()=>(console.warn(`Sap.${t} is full sapjs; load ${U}`),null),{Sap:q,mountAll:_e,mount:An,runtime:En}=ke({createAccessor:wn,debugExtras:()=>({why:Le("why"),doctor:Le("doctor")}),installInput(t,e,r){Te(t).install(r)}});q.core=!0;var xn=typeof window<"u"&&window.Sap&&!window.Sap.core;xn?q.unmount():Ne(_e);typeof window<"u"&&!window.Sap&&(window.Sap=q);var vn=q;return Ie(Sn);})();
8
+ `+e.value:e.value;t.textContent!==n&&(t.textContent=n),t.removeAttribute("data-value");return}if(r==="SELECT"){let n=t.options,o=e.options;for(let a=0;a<n.length;a++)o[a]&&o[a].selected?n[a].hasAttribute("selected")||n[a].setAttribute("selected",""):n[a].removeAttribute("selected")}}function it(t){t.tagName!=="TEXTAREA"||!t.hasAttribute("data-value")||t!==t.ownerDocument.activeElement&&(t.textContent=t.getAttribute("data-value"),t.removeAttribute("data-value"))}function E(t){if(typeof window>"u")return null;let e=window.clay,r=window.hyperclay;return t==="consent"?e?.confirm||r?.consent||null:e?.[t]||r?.[t]||null}function pe(){let t=E("visitorDrafts");return!!(t&&typeof t.restored=="function"&&t.restored()?.restored)}var wt=["clay:mutation-ready","hyperclay:mutation-ready"],un=["clay:sync-applied","hyperclay:livesync-applied"],cn=["clay:ready","hyperclay:ready"],ln=["clay:route"],fn=["clay:modechange"];function Y(t,e,r){let n=null,o=a=>{n!==null&&n!==a.type||(n=a.type,queueMicrotask(()=>{n=null}),r(a))};for(let a of e)t.addEventListener(a,o);return()=>{for(let a of e)t.removeEventListener(a,o)}}function me(t){let e=typeof window<"u"&&window.clay&&window.clay.ready;e&&typeof e.then=="function"?e.then(()=>t(),()=>t()):t()}function st(t){let e=E("region");return!e||typeof e.resolveRegionPolicy!="function"||typeof e.skipForPolicy!="function"?!1:e.skipForPolicy(e.resolveRegionPolicy(t),void 0,["no-save","freeze"])}function he(){return typeof window>"u"?null:window.clay?.modeLifecycle||null}function at(t,{transient:e=!1}={}){if(e)return!0;let r=he();return typeof r?.canWrite!="function"||E("region")?.resolveRegionPolicy?.(t)?.persist==="none"?!0:r.canWrite()}function be(t,e){if(typeof e!="function")throw new Error("Sap.batch(label, fn): fn must be a function");let r=E("undo");r&&r.flush&&r.flush();let n=e();if(n&&typeof n.then=="function")throw new Error("Sap.batch fn must be synchronous (it returned a promise)");return r&&r.commitCaptured&&r.commitCaptured(t),n}function ge(t){if(typeof window>"u"||typeof document>"u")return;let e=()=>{let b=!1;for(let A of t.apps())A.root.isConnected?t.runNow(A,"platform"):b=!0;b&&t.pruneDisconnected(),t.remountIfPresent()},r=E("derived"),n=r&&typeof r.register=="function"?r.register(e):null,o=typeof n=="function"?null:Y(document,un,e),a=Y(document,ln,e),i=null,f=!1,l=()=>{let b=i;i=null,b&&(b[2](),b[3]())},c=()=>{if(f)return!1;let b=E("undo"),A=he()?.state?.generation;if(i&&i[0]===b&&i[1]===A)return!0;if(l(),!b||typeof b.on!="function")return!1;let v=b.on("undo",e);if(typeof v!="function")return!1;let S=b.on("redo",e);return typeof S!="function"?(v(),!1):(i=[b,A,v,S],!0)};c();let u=[wt,cn,fn].map(b=>Y(document,b,c)),d=E("ready");return d&&typeof d.then=="function"&&d.then(c,()=>{}),()=>{f=!0,typeof n=="function"&&n(),o&&o(),a();for(let b of u)b();l()}}function At(t){let e=t.tagName;if(e==="INPUT"){let r=(t.getAttribute("type")||"text").toLowerCase();return r==="checkbox"?"checkbox":r==="radio"?"radio":r==="number"||r==="range"?"number":r==="hidden"?"hidden":"text"}return e==="TEXTAREA"?"text":e==="SELECT"?t.multiple?"select-multiple":"select-one":"leaf"}function dn(t){if(t.validity&&t.validity.badInput)return t.hasAttribute("value")?Number(t.getAttribute("value"))||0:t._sapLastGood??0;if(t.value==="")return 0;let e=Number(t.value);return Number.isNaN(e)?t._sapLastGood??0:(t._sapLastGood=e,e)}function we(t,e){switch(e){case"checkbox":return t.checked;case"radio":return t.checked?t.value:void 0;case"number":return dn(t);case"select-one":return t.value;case"select-multiple":return[...t.selectedOptions].map(r=>r.value);case"hidden":case"text":return t.value;case"leaf":return t.textContent;default:return t.value}}function pn(t,e,r){switch(e){case"checkbox":t.checked=!!r;break;case"radio":t.checked=String(t.value)===String(r);break;case"number":case"text":case"hidden":t.value=r==null?"":String(r);break;case"select-one":t.value=r==null?"":String(r);break;case"select-multiple":{let n=new Set((Array.isArray(r)?r:[r]).map(String));for(let o of t.options)o.selected=n.has(o.value);break}case"leaf":t.textContent=r==null?"":String(r);break;default:t.value=r==null?"":String(r)}}function ye(t){if(t.hasAttribute("transient")){t.removeAttribute("value"),t.removeAttribute("checked"),t.removeAttribute("data-value");return}st(t)||B(t)}function mn(t){t.dispatchEvent(new Event("input",{bubbles:!0})),t.dispatchEvent(new Event("change",{bubbles:!0}))}function Ae(t,e){return we(t,e)}function Ee(t){let e=At(t);return{el:t,kind:e,read(){return we(t,e)},write(r,n={}){pn(t,e,r),n.noMirror||ye(t),n.silent||mn(t)},mirror(){ye(t)}}}var C=null,ct=!1,W=null;function xe(t){let e=null;return{kind:"hub",subscribe(r){let n=t.onAnyChange({debounce:0,require:"observed"},r);typeof n=="function"&&(e=n)},suppress(r){t.pause();try{return r()}finally{t.resume()}},teardown(){if(e){try{e()}catch{}e=null}}}}function hn(){let t=null;return{kind:"native",subscribe(e){t=new MutationObserver(n=>e(bn(n)));let r=typeof document<"u"&&document.body||typeof document<"u"&&document.documentElement;r&&t.observe(r,{childList:!0,subtree:!0,attributes:!0,characterData:!0})},suppress(e){let r=E("undo");r&&r.pause&&r.pause();try{return e()}finally{t&&t.takeRecords(),r&&r.resume&&r.resume()}},teardown(){t&&(t.disconnect(),t=null)}}}function bn(t){let e=[];for(let r of t)if(r.type==="attributes"){let n=r.target;n&&n.nodeType===1&&!ut(n)&&e.push({type:"attribute",element:n})}else if(r.type==="characterData"){let n=r.target&&r.target.parentElement;n&&!ut(n)&&e.push({type:"characterData",element:n})}else if(r.type==="childList"){for(let n of r.addedNodes)if(!(n.nodeType!==1||ut(n))&&(e.push({type:"add",element:n}),n.querySelectorAll))for(let o of n.querySelectorAll("*"))ut(o)||e.push({type:"add",element:o});for(let n of r.removedNodes)n.nodeType===1&&e.push({type:"remove",element:n,parent:r.target})}return e}function ut(t){return!!(t.closest&&t.closest("[sap-ignore],[template],[cms-template]"))}function gn(t,e){t.pruneDisconnected();let r=new Set,n=!1;for(let o of e){let a=o.type==="remove"?o.parent:o.element,i=a&&t.appFor(a);i&&r.add(i),o.type==="add"&&o.element&&o.element.nodeType===1&&o.element.hasAttribute&&o.element.hasAttribute("sap")&&!(t.isRegistered&&t.isRegistered(o.element))&&(n=!0)}n&&t.remountIfPresent();for(let o of r)o.root.isConnected&&t.schedule(o,"mutation")}function ve(t){if(C)return C.suppress(t);let e=E("undo");if(e&&e.pause&&e.resume){e.pause();try{return t()}finally{e.resume()}}return t()}function Et(t,e){ct=!0,C=t,t.subscribe(r=>gn(e,r))}function xt(t){if(ct||typeof window>"u"||typeof document>"u")return;let e=E("Mutation");if(e&&typeof e.onAnyChange=="function"){Et(xe(e),t);return}typeof MutationObserver=="function"&&(Et(hn(),t),W=Y(document,wt,function(){let n=E("Mutation");n&&(W(),W=null,C&&C.teardown(),ct=!1,Et(xe(n),t))}))}function vt(){if(C)try{C.teardown()}catch{}W&&typeof document<"u"&&W(),C=null,ct=!1,W=null}var yn=new Set(O),$=[],ke={},Te={};function Ne(t){$.includes(t)||($.push(t),t.boundary&&Object.assign(ke,t.boundary),t.paintKinds&&Object.assign(Te,t.paintKinds))}function lt(t,e={}){if(e.breaker){t.diag.error("E26",t.root,{problem:"recompute loop halted after 50 passes; recent triggers: "+(t._breakerRing||[]).join(", ")}),P(t.root,"loop");return}e.full&&(Zt(),ie());let r=te(t.root);try{ve(()=>wn(t,e))}finally{ee(r)}t._viewsChanged&&(t._viewsChanged=!1,t.root.dispatchEvent(new CustomEvent("sap:views-updated",{bubbles:!0})))}function wn(t,e){let r=t.root,n={},o=[],a=[],i=new Set;t.diag.errors=[];let f={root:n,state:n,item:null,ownerEl:r,projection:!1};function l(s,p,m=!1){let h=p.attr||p.name,y=m?ce(s,h):s.getAttribute(h);return y==null&&(y=gt(p),a.push({el:s,name:p.name,attr:h,value:Bt(Z(y,p.type),p.type)})),Z(y,p.type)}function c(s,p,m,h){let y=p.decls;if(!y)return;let R=!!h.item&&!h.projection&&!h.view;for(let x of y){if(x.transient){m[x.name]=Ft(s,x);continue}if(Wt(s,x)){m[x.name]=s.hasAttribute(x.attr);continue}m[x.name]=l(s,x,R)}}function u(s,p,m){let h=p.bind,y=m.item||m.state,R=At(s);R==="radio"?(h in y||(y[h]=""),s.checked&&(y[h]=s.value)):R==="leaf"&&m.item&&!m.projection&&!m.view?y[h]=le(s):y[h]=Ae(s,R),p.transient&&(s.removeAttribute("value"),s.removeAttribute("checked"))}function d(s,p,m){if(p.paints)for(let h of p.paints)h.kind==="when"&&i.add(h.field),o.push({def:h,el:s,ctx:m});for(let h of $)h.collect&&h.collect(k,s,p,m)}function b(s,p,m){Object.defineProperty(s,"$key",{value:Ot(p,"row"),enumerable:!1}),Object.defineProperty(s,"$index",{value:m,enumerable:!1}),Object.defineProperty(s,"$el",{value:p,enumerable:!1})}function A(s,p,m){let h=ot(s);c(s,h,p,m),s._sapScope=p,!m.projection&&h.bind!=null&&u(s,h,m),d(s,h,m),h.items?H(s,p,m):v(s,p,m)}function v(s,p,m){for(let h=s.firstElementChild;h;h=h.nextElementSibling)S(h,p,m)}function S(s,p,m){let h=ot(s);if(!h.inert){if(h.boundary){h.boundary==="scope"?N(s,p,m):h.boundary==="items"?(d(s,h,m),H(s,p,m)):ke[h.boundary](k,s,h,p,m);return}!m.projection&&!m.view&&h.bind!=null&&u(s,h,m),d(s,h,m);for(let y=s.firstElementChild;y;y=y.nextElementSibling)S(y,p,m)}}function N(s,p,m){let h=s.getAttribute("scope"),y={};p[h]=y;let R={root:m.root,state:y,item:null,ownerEl:s,projection:m.projection};A(s,y,R)}function H(s,p,m){let h=s.getAttribute("items"),y=[];p[h]=y,s._sapList=y;let R=0;for(let x=s.firstElementChild;x;x=x.nextElementSibling){let _t=ot(x);if(!_t.item||_t.template||x.hasAttribute("cms-template"))continue;let K={};b(K,x,R);let ze={root:m.root,state:m.state,item:K,ownerEl:x,projection:m.projection};A(x,K,ze),y.push(K),R++}}let k={app:t,root:r,rootObj:n,paints:o,stats:{calcs:0,lists:0},resolveDefault:l,collectEl:d,walkScope:v};for(let s of $)s.begin&&s.begin(k);let j=e.cacheReads===!1?null:se(r);try{A(r,n,f)}finally{e.cacheReads!==!1&&ae(j)}if(t.halted)return;for(let s of $)s.afterIntake&&s.afterIntake(k);if(a.length&&i.size)for(let s of a)i.has(s.attr)&&s.el.getAttribute(s.attr)==null&&s.el.setAttribute(s.attr,s.value);for(let s of $)s.compute&&s.compute(k);let z=0;for(let s of $)s.reconcile&&(z+=s.reconcile(k));let w=0,g=z;for(let s of o){let p=En(s,t);s.ctx.view?g+=p:w+=p}for(let s of $)s.afterPaint&&s.afterPaint(k);t._state=n,t._stats={fields:Object.keys(n).filter(s=>typeof n[s]!="function").length,calcs:k.stats.calcs,paints:o.length,lists:k.stats.lists,writes:w,viewWrites:g},t._viewsChanged=g>0,t._lastPass={trigger:e.trigger||"refresh",writes:w},t._debug&&console.log(`sap pass \xB7 trigger: ${t._lastPass.trigger} \xB7 writes ${w}/${o.length}`)}function An(t){return t.kind==="text"?t.fmt?"text:"+t.fmt:"text":t.kind==="attr"?"attr:"+t.arg:t.kind==="class"?"class:"+t.arg:t.kind==="css"?"css:"+t.arg:t.kind==="when"?(t.match==="hide"?"hide-when:":t.match==="show-not"?"option-not:":"show-when:")+t.field:t.kind}function St(t,e,r,n){let o=t;for(;o&&o.nodeType===1;){if(o.hasAttribute&&o.hasAttribute(e)){let a=r.includes(o.getAttribute(e));if(n?!a:a)return!0}o=o.parentElement}return!1}function En(t,e){let r=t.def,n=t.el,o=Te[r.kind];if(o)return o(t,e);if(r.kind==="when")return Se(r,n,null);try{let a=Kt(r.entry,t.ctx.state,t.ctx.item,n,t.ctx.root),i=Se(r,n,a);return Pt(n),i}catch(a){return e.diag.error(a.sapCode==="E22"?"E22":"E24",n,{attr:An(r),expr:r.entry&&r.entry.src,problem:String(a.message)}),P(n,a.sapCode||"E24"),0}}function Se(t,e,r){switch(t.kind){case"text":{let n=t.fmt!=null?Yt(t.fmt,r):r==null?"":String(r);return e.textContent!==n?(e.textContent=n,1):0}case"show":{let n=!r;return e.hidden!==n?(e.hidden=n,1):0}case"when":{let n=E("optionVisibility");if(n&&n._started)return e._sapWhen&&e.hidden?(e.hidden=!1,e._sapWhen=!1,1):0;let o;t.match==="hide"?o=!St(e,t.field,t.values,!1):t.match==="show-not"?o=St(e,t.field,t.values,!0):o=St(e,t.field,t.values,!1),e._sapWhen=!0;let a=!o;return e.hidden!==a?(e.hidden=a,1):0}case"attr":{let n=t.arg;if((n==="checked"||n==="selected")&&typeof e[n]=="boolean"&&!e.hasAttribute("bind")&&!e.closest("select[bind]")){let a=0;return e[n]!==!!r&&(e[n]=!!r,a=1),!!r!==e.hasAttribute(n)&&(r?e.setAttribute(n,""):e.removeAttribute(n),a=1),a}if(yn.has(n)){let a=e.hasAttribute(n);return r&&!a?(e.setAttribute(n,""),1):!r&&a?(e.removeAttribute(n),1):0}let o=typeof r=="boolean"?String(r):r==null?"":String(r);return e.getAttribute(n)!==o?(e.setAttribute(n,o),1):0}case"class":{let n=!!r;return e.classList.contains(t.arg)!==n?(e.classList.toggle(t.arg,n),1):0}case"css":{let n=r==null?"":String(r);return e.style.getPropertyValue("--"+t.arg)!==n?(e.style.setProperty("--"+t.arg,n),1):0}default:return 0}}var xn=new Set(O),Re=new Set(["calc","text","attr","class","css","set","move","sort","option","option-not","show-when","hide-when","editmode","viewmode"]),vn=new Set(["show-when","hide-when","option","option-not"]),Sn=/\b(?:state|item|root)\.|===|!==|&&|\|\||[()]|^\s*!/,Le=new Set(["sap","scope","items","item","template","bind","show","effect","invalid","detail","state","transient","confirm","default","persist","sortable","trigger-add","trigger-remove","trigger-reset","sap-ignore","sap-error","no-save","no-watch","no-undo","no-trigger-autosave","freeze","mutations-ignore","save-remove","save-ignore","save-freeze"]),Tt=[];function _e(t){Tt.includes(t)||Tt.push(t)}function kn(t){return t.tagName==="INPUT"||t.tagName==="SELECT"||t.tagName==="TEXTAREA"}function kt(t){return t.hasAttribute("bind")}function Tn(t,e){e(t);for(let n=t.firstElementChild;n;n=n.nextElementSibling)r(n);function r(n){if(!n.hasAttribute("sap-ignore")){if(n.tagName==="TEMPLATE"){if(n.hasAttribute("items"))for(let o=n.content.firstElementChild;o;o=o.nextElementSibling)r(o);return}e(n);for(let o=n.firstElementChild;o;o=o.nextElementSibling)r(o)}}}function Ce(t,e){let r=!1,n=(i,f,l)=>{e.error(i,f,l),r=!0},o=t.ownerDocument.createTreeWalker(t,4),a;for(;a=o.nextNode();)if(/\{\{.*\}\}/.test(a.nodeValue||"")){n("E02",a.parentElement||t,{problem:"moustaches in text content are not a Sap feature",fix:'move the expression onto the element: text="state.x"'});break}return Tn(t,i=>{let f=new Set;for(let c of Tt)c(i,n,u=>f.add(u));let l=i.closest&&i.closest("[detail]");for(let c of[...i.attributes]){let u=c.name;if(f.has(u))continue;if(u.includes(":")){let b=u.slice(0,u.indexOf(":"));if(Re.has(b)){if(vn.has(b)&&Sn.test(c.value)){let A=u.slice(u.indexOf(":")+1);e.warn("W04",i,{attr:u,expr:c.value,problem:`${b}: compares the "${A}" attribute against a literal value, not a JS expression`,fix:`use show="${c.value}" for an expression, or a literal like ${b}:${A}="overview"`})}}else{let A=mt(b,[...Re]);e.warn("W03",i,{attr:u,problem:`unknown "${b}:" attribute`,didYouMean:A?`${A}:`:null})}}else if(!Le.has(u)&&!pt.has(u)&&!xn.has(u)&&!/^(data-|aria-|on)/.test(u)&&!(u in i)){let b=mt(u,[...Le]);b&&e.warn("W03",i,{attr:u,problem:`unknown "${u}" attribute`,didYouMean:b})}u==="attr:hidden"&&e.warn("W03",i,{attr:u,problem:"attr:hidden paints the wrong attribute",fix:'use show="expr"'});let d=kt(i)||u==="attr:selected"&&i.tagName==="OPTION"&&!!i.closest("select[bind]");(u==="attr:value"||u==="attr:checked"||u==="attr:selected")&&d&&n("E30",i,{attr:u,problem:"attr: on a bound control collides with persist ownership",fix:"remove it; bind owns this attribute"}),u==="effect"&&kt(i)&&/\b(value|checked)\s*=[^=]/.test(c.value)&&n("E30",i,{attr:u,expr:c.value,problem:"effect writes value/checked on a bound control (writes a stale value with no synthetic event)",fix:"write through onclick + Sap(this) instead"}),(u==="text"||u.startsWith("text:")||u==="show")&&kn(i)&&(u==="show"||n("E18",i,{attr:u,problem:"paint belongs on output elements, not form controls",fix:"move the paint to an <output> or <span>"}))}if(i.hasAttribute("state")){let c=Q(i.getAttribute("state")),u=new Set;for(let d of c){d.name.includes("-")&&n("E08",i,{attr:"state",problem:`field "${d.name}" is not a valid identifier (the hyphen parses as subtraction)`,fix:`rename to ${d.name.replace(/-/g,"")}`}),u.has(d.name)&&n("E04",i,{attr:"state",problem:`field "${d.name}" is declared twice in one scope`}),u.add(d.name),$t.has(d.attr)&&n("E05",i,{attr:"state",problem:`"${d.name}" is a reserved Sap word`}),pt.has(d.attr)&&n("E06",i,{attr:"state",problem:`"${d.name}" is a global HTML attribute name; pick another field name`}),d.name==="open"&&i.tagName==="DIALOG"&&n("E33",i,{attr:"state",problem:"dialog open is transient",fix:"use showModal() \u2014 declare state= only on <details> or popovers"});let b=bt(i,d.attr);b&&(d.attr==="checked"||d.attr==="selected")&&n("E35",i,{attr:"state",problem:`"${d.attr}" on a form control is the control's own state, not a declared field`,fix:'bind the control instead, e.g. <input type="checkbox" bind="done">'}),b&&d.type==="num"&&n("E35",i,{attr:"state",problem:`"${d.attr}" is an HTML boolean attribute; it cannot hold a number`,fix:`declare it bare: state="${d.attr}"`}),d.transient&&(b||d.type==="presence")&&n("E35",i,{attr:"state",problem:`"${d.name}" is carried by attribute presence, which transient would strip`,fix:"declare a separate name:bool:transient field and paint the attribute from it"})}}if(kt(i)){if(i.hasAttribute("-"),i.tagName==="INPUT"){let c=(i.getAttribute("type")||"text").toLowerCase();c==="file"&&n("E32",i,{attr:"bind",problem:"files never serialize into an HTML file",fix:"use no-save + effect instead of bind"}),c==="password"&&!i.hasAttribute("transient")&&n("E31",i,{attr:"bind",problem:"a password must never serialize into a world-readable file",fix:"add transient to the password input"})}else if(i.tagName!=="SELECT"&&i.tagName!=="TEXTAREA"){let c=i.getAttribute("contenteditable");!(c!=null&&c!=="false")&&i.children.length>0&&n("E20",i,{attr:"bind",problem:"bind on a container element is not a control; a write would overwrite its children",fix:"bind a control (input/select/textarea), a contenteditable, or an empty text leaf"})}}if(i.hasAttribute("transient")&&i.hasAttribute("persist")&&n("E34",i,{problem:"transient and persist are opposite: persist forces the live value into the saved bytes, leaking exactly what transient drops",fix:"remove one \u2014 transient to keep it out of the file, or persist to save it"}),i.tagName==="DIALOG"&&i.hasAttribute("detail")&&!(i.parentElement&&i.parentElement.closest('[clay~="freeze"], [freeze], [save-freeze]'))&&e.warn("W31",i,{attr:"detail",problem:"a detail dialog writes open when it opens, and that attribute would be saved into the file",fix:'wrap the dialog in an element with clay="freeze" (not editor-ui, which removes it from the file), and make its key field transient'}),i.hasAttribute("item")&&!i.hasAttribute("template")&&i.parentNode&&i.parentNode.nodeType===1){let c=i.parentElement;(!c||!c.hasAttribute("items"))&&n("E10",i,{problem:"an [item] must be a direct child of an [items] list",fix:'wrap it in a container with items="name"'})}if(i.hasAttribute("items")&&l&&n("E17",i,{attr:"items",problem:"nested items inside a detail panel is a v1 mount error (nested collections ship in v1.1)"}),i.hasAttribute("items")){let c=t.querySelector(`[trigger-add="${i.getAttribute("items")}"]`);!It(i)&&!ht(t,i.getAttribute("items"))&&Dt(i).length===0&&c&&n("E17",i,{attr:"items",problem:`trigger-add targets items="${i.getAttribute("items")}" but it has no [item template] to clone`})}}),r&&(e.halted=!0,e.haltReason=e.errors[0]?e.errors[0].code:"halt",P(t,e.haltReason)),!r}var $e="sap-styles",Pe="[item][template]{display:none!important}[hidden]{display:none!important}[sap-error]{outline:2px solid #e5484d;outline-offset:1px}",Nt=new WeakSet;function Nn(t){if(Nt.has(t))return;let e=t.defaultView,r=e&&e.CSSStyleSheet;if(r&&"adoptedStyleSheets"in t)try{let n=new r;n.replaceSync(Pe),t.adoptedStyleSheets=[...t.adoptedStyleSheets,n],Nt.add(t);return}catch{}if(!t.getElementById($e)){let n=t.createElement("style");n.id=$e,n.textContent=Pe,(t.head||t.documentElement).appendChild(n)}Nt.add(t)}var Rn=0;function Me(){return typeof performance<"u"&&performance.now?performance.now():0}function Rt(t){let e=t.id||t.getAttribute("sap")||`app-${Rn++}`,r=new J(e),n={root:t,name:e,diag:r,_state:null,_stats:null,_lastPass:null,_passes:0,_broken:!1,_mountMs:0,_mountWrites:0};if(!Ce(t,r))return n.halted=!0,n;Nn(t.ownerDocument);for(let i of t.querySelectorAll("textarea[data-value]"))it(i);let a=Me();return lt(n,{trigger:"mount",full:!0}),n._mountMs=Me()-a,n._mountWrites=n._stats?n._stats.writes:0,n._mountWrites>0&&!pe()&&!E("derived")&&r.warn("W30",t,{problem:`${n._mountWrites} paint(s) ran at mount; the saved file was out of sync with its declared state`,fix:"re-save once so the file mounts clean (a settled file writes nothing)"}),n}var Oe=/^(set:|move:|sort:|trigger-add$|trigger-remove$|trigger-reset$)/;function Ln(t){return`${t.tagName.toLowerCase()}[sap]`}function _n(t){let e=0;for(let r of t.querySelectorAll("*"))for(let n of r.attributes)if(Oe.test(n.name)){e++;break}for(let r of t.attributes)if(Oe.test(r.name)){e++;break}return e}function De(t){function e(f){let l=f._stats||{},c=f.root;return{root:Ln(c),fields:l.fields||0,calcs:l.calcs||0,paints:l.paints||0,actions:_n(c),lists:(c.hasAttribute("items")?1:0)+c.querySelectorAll("[items]").length,rows:c.querySelectorAll("[item]:not([template])").length,warnings:f.diag.warnings.length,errors:f.diag.errors.length,mountWrites:f._mountWrites||0,ms:Math.round((f._mountMs||0)*10)/10,passes:f._passes||0,lastPass:f._lastPass||null,ok:f.diag.errors.length===0&&!f.halted}}function r(){let f=t.apps().map(e);return{ok:f.every(l=>l.ok),apps:f}}function n(f){let l=e(f);return l.ok?`sap \u2713 ${l.root} \xB7 fields ${l.fields} \xB7 calcs ${l.calcs} \xB7 paints ${l.paints} \xB7 actions ${l.actions} \xB7 lists ${l.lists} \xB7 rows ${l.rows} \xB7 warnings ${l.warnings} \xB7 mount writes ${l.mountWrites} \xB7 ${l.ms}ms`:`sap \u2717 ${l.root} \xB7 errors ${l.errors} \xB7 warnings ${l.warnings} \xB7 ${l.ms}ms`}function o(){for(let f of t.apps()){let l=n(f);f.diag.errors.length||f.halted?console.error(l):console.log(l)}}function a(){let f=[],l=[];for(let c of t.apps())f.push(...c.diag.errors),l.push(...c.diag.warnings);return{ok:f.length===0,errors:f,warnings:l,counts:{errors:f.length,warnings:l.length}}}function i(f){let l=f===void 0?!0:!!f;for(let c of t.apps())c._debug=l;return console.log(`sap debug ${l?"on":"off"} \u2014 per-pass headers will ${l?"":"no longer "}log`),l}return{status:r,report:a,debug:i,greenLine:n,printGreenLines:o,REGISTRY:dt}}var Ie="0.6.0";function Be({createAccessor:t,installInput:e,debugExtras:r}){let n=new Map,o=[],a=Ct(lt);function i(g){let s=g;for(;s;){if(s.nodeType===1&&s.hasAttribute&&s.hasAttribute("sap"))return n.get(s)||null;s=s.parentNode&&s.parentNode.host?s.parentNode.host:s.parentElement}return null}function f(){for(let g=o.length-1;g>=0;g--){let s=o[g];s.root.isConnected||(n.delete(s.root),o.splice(g,1))}}function l(g,s){if(g.moveBefore)try{g.moveBefore(s,null);return}catch{}g.appendChild(s)}function c(g,s){let p=s.parentElement;if(p){if(p.moveBefore)try{p.moveBefore(g,s);return}catch{}p.insertBefore(g,s)}}let u={apps:()=>o.slice(),appFor:i,isRegistered:g=>n.has(g),pruneDisconnected:f,schedule:(g,s)=>a.schedule(g,s),runNow:(g,s)=>a.runNow(g,s),moveInto:l,placeBefore:c,remountIfPresent:()=>j()},d=t(u),b=De(u),A=r?r(u,b):{},v=!1,S=!1,N=null;function H(){v||(v=!0,e(u,d,document),N=ge(u))}function k(){let g=E("derived");g&&typeof g.mounted=="function"&&g.mounted()}function j(g=document){if(S)return[];H(),xt(u);let s=g.querySelectorAll("[sap]"),p=[];for(let m of s){if(n.has(m))continue;let h=Rt(m);n.set(m,h),o.push(h),p.push(h)}for(let m of p){let h=b.greenLine(m);m.diag.errors.length||m.halted?console.error(h):console.log(h)}return k(),p}function z(g){if(S)return null;if(H(),xt(u),!g)return j();let s=typeof g=="string"?document.querySelector(g):g;if(!s)return null;if(n.has(s))return n.get(s);let p=Rt(s);n.set(s,p),o.push(p);let m=b.greenLine(p);return p.diag.errors.length||p.halted?console.error(m):console.log(m),p}let w=d.Sap;return w.version=Ie,w.refresh=function(){for(let s of o)s.root.isConnected&&a.runNow(s,"refresh")},w.batch=be,w.status=b.status,w.report=b.report,w.why=A.why,w.debug=b.debug,w.doctor=A.doctor,w.greenLine=b.greenLine,w.formats=D,w.serializeControlToAttributes=B,w.finalizeControlForSave=de,w.rehydrateControlFromAttributes=it,w.mount=z,w.config=function(s={}){return s.formats&&Object.assign(D,s.formats),w},w._registry=n,w._reset=function(){n.clear(),o.length=0,vt()},w.unmount=function(){S=!0,n.clear(),o.length=0,vt(),typeof N=="function"&&N()},{Sap:w,mountAll:j,mount:z,runtime:u}}function We(t){if(typeof document>"u")return;let e=()=>me(()=>t());document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e):e()}function Fe(t){let e=[];function r(l){let c=l.target;if(!c||c.nodeType!==1)return;let u=t.appFor(c);if(u){c.hasAttribute("persist")&&!st(c)&&at(c)&&B(c);for(let d of e)if(d(c,u))return;t.schedule(u,l.type+" "+(c.id||c.tagName.toLowerCase()))}}function n(l){let c=l.target,u=t.appFor(c);u&&[...c.querySelectorAll("[bind]")].every(d=>at(d))&&setTimeout(()=>{c.querySelectorAll("[bind]").forEach(d=>{d.dispatchEvent(new Event("input",{bubbles:!0})),d.dispatchEvent(new Event("change",{bubbles:!0}))}),t.schedule(u,"reset")},0)}function o(l){let c=t.appFor(l.target);c&&t.schedule(c,"toggle")}function a(l){let c=l.detail||{};for(let u of[c.from,c.to,l.target]){if(!u||u.nodeType!==1)continue;let d=t.appFor(u);d&&t.schedule(d,"sorted")}}function i(l){if(l.key!=="ArrowUp"&&l.key!=="ArrowDown")return;let c=l.target;if(!c||c.nodeType!==1||c.tagName!=="INPUT"||!c.hasAttribute("bind")||!c.hasAttribute("step"))return;let u=(c.getAttribute("type")||"text").toLowerCase();if(u!=="text"&&u!=="tel"&&u!=="search"||!t.appFor(c)||!at(c))return;l.preventDefault();let b=T(c.getAttribute("step"))||1,A=l.key==="ArrowUp"?1:-1,v=T(c.value)+b*(l.shiftKey?10:1)*A,S=c.getAttribute("min"),N=c.getAttribute("max");S!==null&&S!==""&&v<T(S)&&(v=T(S)),N!==null&&N!==""&&v>T(N)&&(v=T(N)),Ee(c).write(String(Number(v.toFixed(2))))}function f(l=document){l.addEventListener("reset",n),l.addEventListener("toggle",o,!0),l.addEventListener("input",r),l.addEventListener("change",r),l.addEventListener("clay:sorted",a),l.addEventListener("keydown",i)}return{install:f,addRouter:l=>e.push(l)}}var G="https://clayjs.com/v1/sap.js",Cn=/^(calc|set|move|sort):/,$n=new Set(["each","detail","effect","invalid","confirm","trigger-add","trigger-remove","trigger-reset"]);function Lt(t){return Cn.test(t)||$n.has(t)}_e((t,e)=>{for(let r of t.attributes)Lt(r.name)&&e("E50",t,{attr:r.name,expr:r.value,problem:`${r.name} is full sapjs; the sapjs core only paints declared state`,fix:`load ${G}; the markup stays as it is`})});function F(t,e,r){t.app.diag.error("E50",e,{attr:r,problem:`${r} is full sapjs; the sapjs core only paints declared state`,fix:`load ${G}; the markup stays as it is`}),P(e,"E50"),t.app.halted=!0}Ne({name:"core-only",collect(t,e,r){r.calcs&&F(t,e,"calc:"+r.calcs[0].name),r.effects&&F(t,e,"effect"),r.invalids&&F(t,e,"invalid");for(let n of e.attributes)Lt(n.name)&&(n.name.startsWith("calc:")&&r.calcs||n.name==="effect"&&r.effects||n.name==="invalid"&&r.invalids||F(t,e,n.name))},boundary:{each(t,e){F(t,e,"each")},detail(t,e){F(t,e,"detail")}}});function Pn(){return{Sap:function(){throw new Error(`Sap(el) is full sapjs; load ${G}`)}}}var He=t=>()=>(console.warn(`Sap.${t} is full sapjs; load ${G}`),null),{Sap:X,mountAll:je,mount:Mn,runtime:On}=Be({createAccessor:Pn,debugExtras:()=>({why:He("why"),doctor:He("doctor")}),installInput(t,e,r){Fe(t).install(r)}});X.core=!0;var Dn=typeof window<"u"&&window.Sap&&!window.Sap.core;Dn?X.unmount():We(je);typeof window<"u"&&!window.Sap&&(window.Sap=X);var In=X;return Xe(Bn);})();
9
9
  export default SapCoreBundle.default;
@@ -27,13 +27,17 @@ function inert(el) {
27
27
  }
28
28
 
29
29
  // The [sap] root an element is painted under, or null when it sits outside every
30
- // app or inside a subtree the engine never reads.
31
- export function appOf(el) {
30
+ // app or inside a subtree the engine never reads. A subtree just removed from the
31
+ // page has no ancestors left to ask; `host`, the element it was removed from,
32
+ // continues the walk, so the answer matches the one it had while attached.
33
+ export function appOf(el, host = null) {
34
+ let top = null;
32
35
  for (let cur = el; cur && cur.nodeType === 1; cur = cur.parentElement) {
33
36
  if (inert(cur)) return null;
34
37
  if (cur.hasAttribute("sap")) return cur;
38
+ top = cur;
35
39
  }
36
- return null;
40
+ return host && top && !top.isConnected ? appOf(host) : null;
37
41
  }
38
42
 
39
43
  function declares(el, name) {
@@ -52,13 +56,13 @@ function paintsHidden(el) {
52
56
  }
53
57
 
54
58
  // True when a sapjs paint writes attribute `name` on `el`.
55
- export function ownsAttr(el, name) {
59
+ export function ownsAttr(el, name, host = null) {
56
60
  if (!el || el.nodeType !== 1 || !name) return false;
57
- if (name === BEACON) return !!appOf(el);
61
+ if (name === BEACON) return !!appOf(el, host);
58
62
  if (NEVER.has(name)) return false;
59
63
  if (FORM_STATE.has(name) && recordOwnsFormState(el)) return false;
60
- if (name === "hidden") return paintsHidden(el) && !!appOf(el);
61
- return el.hasAttribute("attr:" + name) && !declares(el, name) && !!appOf(el);
64
+ if (name === "hidden") return paintsHidden(el) && !!appOf(el, host);
65
+ return el.hasAttribute("attr:" + name) && !declares(el, name) && !!appOf(el, host);
62
66
  }
63
67
 
64
68
  // Everything a paint writes on `el`: whole attributes, class tokens, --custom