@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.
- package/README.md +4 -5
- package/THIRD-PARTY-NOTICES.md +16 -0
- package/compat/highlight-11.9.0.min.js +1213 -0
- package/compat/highlight-LICENSE +29 -0
- package/compat/journal-assets.lock.json +22 -0
- package/compat/overtype-2.6.1.min.js +116 -0
- package/compat/overtype-LICENSE +21 -0
- package/dist/all.js +90 -0
- package/dist/clay-dom.js +84 -0
- package/dist/clay-events.js +103 -0
- package/dist/clay-internals.js +85 -0
- package/dist/clay-options.js +93 -0
- package/dist/clay-router.js +98 -0
- package/dist/clay-ui.js +95 -0
- package/dist/clay-utils.js +84 -0
- package/dist/clay.js +146 -0
- package/dist/clay.standalone.js +83090 -58706
- package/dist/m/attrs/add-from-T5LJXFFI.js +1 -0
- package/dist/m/attrs/onaftersave-OKSWEJQF.js +1 -0
- package/dist/m/attrs/refetch-on-save-NWPPXOCZ.js +1 -0
- package/dist/m/attrs/save-freeze-FUP4Q4X3.js +1 -0
- package/dist/m/c-2AZDZWCK.js +1 -0
- package/dist/m/c-2JL6E75N.js +1 -0
- package/dist/m/c-2M73252O.js +1 -0
- package/dist/m/c-2SPVQSHC.js +1 -0
- package/dist/m/c-33HUYEDI.js +1 -0
- package/dist/m/c-33JJ6CBX.js +2 -0
- package/dist/m/c-35NBGMZB.js +1 -0
- package/dist/m/c-3GJ4SDE2.js +1 -0
- package/dist/m/c-3IQRECYS.js +1 -0
- package/dist/m/c-3OWDMNJR.js +2 -0
- package/dist/m/c-46XYM55L.js +1 -0
- package/dist/m/c-4B6H4G5V.js +1 -0
- package/dist/m/c-4DRMS4QG.js +9 -0
- package/dist/m/c-4FFHZM32.js +1 -0
- package/dist/m/c-4JZDZFF6.js +1 -0
- package/dist/m/c-4L3BTFRK.js +1 -0
- package/dist/m/c-4Q2XTQ2N.js +2 -0
- package/dist/m/c-4WKFKEKF.js +1 -0
- package/dist/m/c-4YSCRICO.js +1 -0
- package/dist/m/c-54RCDCBU.js +1 -0
- package/dist/m/c-5M4YEKCX.js +4 -0
- package/dist/m/c-5R4PTRG2.js +1 -0
- package/dist/m/c-5V3MOVJT.js +1 -0
- package/dist/m/c-5VYOWDTI.js +1 -0
- package/dist/m/c-5Y6TNX5W.js +34 -0
- package/dist/m/c-5YIHJ3TJ.js +1 -0
- package/dist/m/c-66O32MV3.js +28 -0
- package/dist/m/c-6HMB24EV.js +1 -0
- package/dist/m/c-7DJDKPGL.js +1 -0
- package/dist/m/c-7O6AFR65.js +1 -0
- package/dist/m/c-7SWMYKAI.js +1 -0
- package/dist/m/c-7VGZ7RU5.js +1 -0
- package/dist/m/c-A7LS5UZW.js +1 -0
- package/dist/m/c-ANQTJ3B5.js +2 -0
- package/dist/m/c-AQLFEATB.js +1 -0
- package/dist/m/c-AYVOREBE.js +1 -0
- package/dist/m/c-B2ZXPOS3.js +3 -0
- package/dist/m/c-BBVGTQG7.js +1 -0
- package/dist/m/c-BMIZKMPV.js +1 -0
- package/dist/m/c-BTDI4Y23.js +1 -0
- package/dist/m/c-BWFVSBDF.js +1 -0
- package/dist/m/c-BYTKL6UX.js +1 -0
- package/dist/m/c-CFHW5AMY.js +6 -0
- package/dist/m/c-CJZSLMVQ.js +1 -0
- package/dist/m/c-CYWLPPUS.js +1 -0
- package/dist/m/c-CZUSOB7V.js +1 -0
- package/dist/m/c-DBE6ORSI.js +1 -0
- package/dist/m/c-DCFSEJZG.js +1 -0
- package/dist/m/c-DNZ5IFM6.js +1 -0
- package/dist/m/c-EDHUR4MX.js +1 -0
- package/dist/m/c-EJTGYSLN.js +1 -0
- package/dist/m/c-EY6UOM54.js +1 -0
- package/dist/m/c-F3CKJTJS.js +1 -0
- package/dist/m/c-F7Y6FLPY.js +1 -0
- package/dist/m/c-FA4DZVTC.js +1 -0
- package/dist/m/c-FILLTJA7.js +1 -0
- package/dist/m/c-G2BUZITR.js +1 -0
- package/dist/m/c-GB3JTV6E.js +1 -0
- package/dist/m/c-GBGWXTX4.js +1 -0
- package/dist/m/c-GHBCCVG4.js +1 -0
- package/dist/m/c-GJAEGGXY.js +1 -0
- package/dist/m/c-GOWBDM6J.js +1 -0
- package/dist/m/c-GQ6F6IDK.js +1 -0
- package/dist/m/c-H4LG442Q.js +1 -0
- package/dist/m/c-HA6INT6J.js +1 -0
- package/dist/m/c-HPURYVZS.js +2 -0
- package/dist/m/c-HRDCD3WN.js +67 -0
- package/dist/m/c-HT33EQRN.js +1 -0
- package/dist/m/c-HVYXIS72.js +1 -0
- package/dist/m/c-IB52R237.js +1 -0
- package/dist/m/c-IJUK2GPW.js +1 -0
- package/dist/m/c-IKWNE4R4.js +1 -0
- package/dist/m/c-IU3IYEU6.js +1 -0
- package/dist/m/c-IZ2EBRAJ.js +1 -0
- package/dist/m/c-J7CA54IP.js +1 -0
- package/dist/m/c-JAX2667S.js +6 -0
- package/dist/m/c-KI7M4AY3.js +1 -0
- package/dist/m/c-KIPQJX4B.js +1 -0
- package/dist/m/c-KKWLDOPM.js +1 -0
- package/dist/m/c-KR4UW4KW.js +1 -0
- package/dist/m/c-KY3VJGUA.js +8 -0
- package/dist/m/c-L4WQSC27.js +1 -0
- package/dist/m/c-LFPHCXY3.js +1 -0
- package/dist/m/c-LR4CGEPT.js +91 -0
- package/dist/m/c-LRPUO2MX.js +1 -0
- package/dist/m/c-LTGMXXKO.js +1 -0
- package/dist/m/c-LXENEBV7.js +1 -0
- package/dist/m/c-LZJPNR2W.js +1 -0
- package/dist/m/c-MMUIUUZG.js +2 -0
- package/dist/m/c-MTQHWQC3.js +1 -0
- package/dist/m/c-N326R2JD.js +1 -0
- package/dist/m/c-N7JPUPGC.js +1 -0
- package/dist/m/c-NMJRXKPC.js +8 -0
- package/dist/m/c-NRPJEVJS.js +1 -0
- package/dist/m/c-NUHP2XDB.js +1 -0
- package/dist/m/c-NZMNXVF6.js +1 -0
- package/dist/m/c-OCSZ4QGN.js +1 -0
- package/dist/m/c-OIBUTDXI.js +1 -0
- package/dist/m/c-OIDRZKAF.js +1 -0
- package/dist/m/c-OYTFP5QN.js +1 -0
- package/dist/m/c-P7KNDG34.js +1 -0
- package/dist/m/c-PPOSCAQD.js +1 -0
- package/dist/m/c-PQ5LK6QE.js +993 -0
- package/dist/m/c-PZ4XEPUP.js +2 -0
- package/dist/m/c-QHIWXHRO.js +1 -0
- package/dist/m/c-QHWJ5ZIJ.js +1 -0
- package/dist/m/c-QIX5BJYN.js +1 -0
- package/dist/m/c-QNKREOL6.js +1 -0
- package/dist/m/c-QQHEX6HA.js +1 -0
- package/dist/m/c-R7RMANJI.js +9 -0
- package/dist/m/c-RI4NT75Y.js +1 -0
- package/dist/m/c-RM7J7BV2.js +1 -0
- package/dist/m/c-RUJKSUQW.js +1 -0
- package/dist/m/c-RVMWGXEJ.js +1 -0
- package/dist/m/c-S7H2DRCB.js +1 -0
- package/dist/m/c-S7LK4KUE.js +1 -0
- package/dist/m/c-SGCCC4FW.js +25 -0
- package/dist/m/c-SGIA4IEQ.js +188 -0
- package/dist/m/c-SWRJFCNN.js +1 -0
- package/dist/m/c-T4VO4OCB.js +1 -0
- package/dist/m/c-TCCA5BZN.js +2 -0
- package/dist/m/c-TQEMVJCS.js +1 -0
- package/dist/m/c-TQZ2JYHD.js +1 -0
- package/dist/m/c-TR6RMDQ7.js +3 -0
- package/dist/m/c-TRS6TM6O.js +1 -0
- package/dist/m/c-UGHH4MB3.js +1 -0
- package/dist/m/c-UKHTLWUW.js +1 -0
- package/dist/m/c-UL2YUY52.js +1 -0
- package/dist/m/c-UNN7LWCT.js +1 -0
- package/dist/m/c-UXBMRDZB.js +235 -0
- package/dist/m/c-V7PZZRG7.js +1 -0
- package/dist/m/c-VAK7SG37.js +1 -0
- package/dist/m/c-VDSS4K3Z.js +1 -0
- package/dist/m/c-VFX45IZQ.js +1 -0
- package/dist/m/c-VHNSBD2M.js +1 -0
- package/dist/m/c-VKEDWYDF.js +1 -0
- package/dist/m/c-VL52ADDR.js +1 -0
- package/dist/m/c-WN5AY3OZ.js +1 -0
- package/dist/m/c-WNYBLIOZ.js +1 -0
- package/dist/m/c-WRBKEJD4.js +1 -0
- package/dist/m/c-WWDBYXLK.js +1 -0
- package/dist/m/c-WYFDLITL.js +1 -0
- package/dist/m/c-XN6MBKI6.js +67 -0
- package/dist/m/c-XNNW2CWK.js +1 -0
- package/dist/m/c-XPELB6E5.js +1 -0
- package/dist/m/c-XQXZAO7N.js +1 -0
- package/dist/m/c-Y6USGTS5.js +5 -0
- package/dist/m/c-YDH7Q3NY.js +1 -0
- package/dist/m/c-YG2NJYS6.js +135 -0
- package/dist/m/c-Z36J63PP.js +1 -0
- package/dist/m/c-Z4VRC7GU.js +7 -0
- package/dist/m/c-Z6K52OLP.js +19 -0
- package/dist/m/c-ZDY2MDAA.js +21 -0
- package/dist/m/c-ZE46QDIH.js +1 -0
- package/dist/m/c-ZUCOKOHT.js +1 -0
- package/dist/m/core/admin-attrs-VGNLAUDK.js +1 -0
- package/dist/m/core/autosave-E4PEFPZ6.js +1 -0
- package/dist/m/core/conflict-notice-VQ6Y64PH.js +1 -0
- package/dist/m/core/draft-mode-WSQAT67S.js +1 -0
- package/dist/m/core/host-permission-XN3K2IW3.js +1 -0
- package/dist/m/core/is-edit-mode-JXHDVGUL.js +1 -0
- package/dist/m/core/persist-HKHA66IY.js +3 -0
- package/dist/m/core/recovery-TBBSICE2.js +1 -0
- package/dist/m/core/save-WUCHTQBE.js +1 -0
- package/dist/m/core/save-core-FJVHT5M3.js +1 -0
- package/dist/m/core/snapshot-F3SWDZMM.js +1 -0
- package/dist/m/core/unsaved-warning-STKBHE6G.js +1 -0
- package/dist/m/dom/all-APS5ZSKP.js +1 -0
- package/dist/m/dom/dom-helpers-L7OSR6S4.js +1 -0
- package/dist/m/events/index-23DPTUT4.js +1 -0
- package/dist/m/internals/index-WOVAP3RU.js +1 -0
- package/dist/m/lib/cache-bust-CGWT6ZJI.js +1 -0
- package/dist/m/lib/region-policy-SB2AWVG5.js +1 -0
- package/dist/m/loader-HXX6YNH5.js +1 -0
- package/dist/m/manifest-F22DEDAC.js +1 -0
- package/dist/m/manifest-edit-C3C7376B.js +1 -0
- package/dist/m/manifest.json +3491 -0
- package/dist/m/options/options-2LH76JQ3.js +1 -0
- package/dist/m/page/editor-XUTB2HB2.js +189 -0
- package/dist/m/plugins/ai-edit-ZQ4CGWIP.js +6 -0
- package/dist/m/plugins/bind-text-NX46N5UV.js +1 -0
- package/dist/m/plugins/cms-HP3LSTPN.js +2293 -0
- package/dist/m/plugins/demo-ZIBFAA3R.js +1 -0
- package/dist/m/plugins/derive-UAAA4V4S.js +1 -0
- package/dist/m/plugins/indicator-PV4YW2ID.js +1 -0
- package/dist/m/plugins/live-NUTTXSBS.js +1 -0
- package/dist/m/plugins/menu-HCKO3DSP.js +138 -0
- package/dist/m/plugins/message-LQ6EDH4V.js +1 -0
- package/dist/m/plugins/page-KSUH7G6J.js +2 -0
- package/dist/m/plugins/page-view-W73OW7WI.js +1 -0
- package/dist/m/plugins/people-AJJ32YCG.js +1 -0
- package/dist/m/plugins/quickcrop-QNY3PKLD.js +26 -0
- package/dist/m/plugins/quickcrop-QNY3PKLD.js.LEGAL.txt +7 -0
- package/dist/m/plugins/richclay-RC3L2F6X.js +517 -0
- package/dist/m/plugins/richclay-RC3L2F6X.js.LEGAL.txt +1 -0
- package/dist/m/plugins/sortable-YRMQX3ZU.js +1 -0
- package/dist/m/plugins/source-KHK5UUSK.js +1 -0
- package/dist/m/plugins/undo-OF2L3CXU.js +1 -0
- package/dist/m/plugins/unsent-HJFLQJ2O.js +1 -0
- package/dist/m/plugins/upgrade-ZNYODP5Y.js +1 -0
- package/dist/m/plugins/upload-XSGNILUY.js +1 -0
- package/dist/m/plugins/visitor-drafts-XK5GW55Q.js +21 -0
- package/dist/m/plugins/visitor-drafts-owner-KSSH75EV.js +1 -0
- package/dist/m/plugins/wire-ZWVWKF76.js +1 -0
- package/dist/m/reader-core-ILWLXVMP.js +68 -0
- package/dist/m/route/route-KOCZSEGN.js +1 -0
- package/dist/m/sync/live-sync-4AUVXVJU.js +1 -0
- package/dist/m/ui/index-EVHKMKBL.js +1 -0
- package/dist/m/utils/index-4TJCVLT7.js +1 -0
- package/dist/m/vendor/Sortable.vendor-A755ITLN.js +3 -0
- package/dist/m/vendor/Sortable.vendor-A755ITLN.js.LEGAL.txt +1 -0
- package/dist/m/vendor/sap-core.vendor-A7BMUYZT.js +6 -0
- package/dist/offline-manifest.json +3800 -0
- package/dist/page/themes/light-1.css +406 -0
- package/dist/server/core.cjs +23662 -22860
- package/dist/server/offline-runtime.cjs +4954 -0
- package/dist/server/offline-runtime.mjs +4923 -0
- package/dist/server/rooms.mjs +9 -0
- package/docs/guide.md +1078 -669
- package/entries/all.js +2 -0
- package/entries/clay-data.js +1 -1
- package/entries/clay-dom.js +2 -0
- package/entries/clay-events.js +2 -0
- package/entries/clay-internals.js +2 -0
- package/entries/clay-options.js +2 -0
- package/entries/clay-router.js +2 -0
- package/entries/clay-ui.js +2 -0
- package/entries/clay-utils.js +2 -0
- package/entries/clay.js +2 -0
- package/entries/sap.js +6 -6
- package/fonts/ibm-plex-mono-LICENSE +93 -0
- package/fonts/ibm-plex-mono-latin-300-normal.woff2 +0 -0
- package/fonts/ibm-plex-mono-latin-400-italic.woff2 +0 -0
- package/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
- package/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
- package/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
- package/fonts/ibm-plex-sans-LICENSE +93 -0
- package/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
- package/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
- package/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
- package/fonts/ibm-plex.css +71 -0
- package/fonts/inter-LICENSE +93 -0
- package/fonts/inter-cyrillic-ext-wght-normal.woff2 +0 -0
- package/fonts/inter-cyrillic-wght-normal.woff2 +0 -0
- package/fonts/inter-greek-ext-wght-normal.woff2 +0 -0
- package/fonts/inter-greek-wght-normal.woff2 +0 -0
- package/fonts/inter-latin-ext-wght-normal.woff2 +0 -0
- package/fonts/inter-latin-wght-normal.woff2 +0 -0
- package/fonts/inter-vietnamese-wght-normal.woff2 +0 -0
- package/fonts/inter.css +62 -0
- package/fonts/newsreader-LICENSE +93 -0
- package/fonts/newsreader-latin-ext-opsz-normal.woff2 +0 -0
- package/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
- package/fonts/newsreader-vietnamese-opsz-normal.woff2 +0 -0
- package/fonts/newsreader.css +26 -0
- package/fonts/work-sans-LICENSE +93 -0
- package/fonts/work-sans-latin-wght-normal.woff2 +0 -0
- package/fonts/work-sans.css +8 -0
- package/package.json +20 -3
- package/packed-contract.json +1 -0
- package/src/attrs/add-from.js +27 -4
- package/src/attrs/save-freeze.js +7 -52
- package/src/core/admin-attrs.js +119 -12
- package/src/core/admin-contenteditable.js +12 -10
- package/src/core/admin-inputs.js +14 -15
- package/src/core/admin-onclick.js +2 -0
- package/src/core/autosave.js +74 -21
- package/src/core/conflict-download.js +22 -0
- package/src/core/conflict-notice-ui.js +1173 -0
- package/src/core/conflict-notice.js +140 -697
- package/src/core/edit-mode.js +147 -14
- package/src/core/etag.js +30 -12
- package/src/core/host-meta.js +72 -8
- package/src/core/host-permission.js +29 -0
- package/src/core/is-edit-mode.js +145 -12
- package/src/core/mode-key.js +125 -0
- package/src/core/mode-lifecycle.js +544 -0
- package/src/core/mode-receipt.js +30 -0
- package/src/core/mode-refusal.js +13 -0
- package/src/core/mode-resources.js +52 -0
- package/src/core/mode-support.js +82 -0
- package/src/core/mode-switch.js +259 -0
- package/src/core/mode-transition.js +112 -0
- package/src/core/page-data-write.js +305 -0
- package/src/core/page-data.js +26 -227
- package/src/core/page-format-wire.js +4 -0
- package/src/core/page-format.js +58 -0
- package/src/core/persist.js +37 -9
- package/src/core/preserve-authored.js +114 -0
- package/src/core/recovery.js +772 -0
- package/src/core/runtime-url.js +105 -0
- package/src/core/save-core.js +109 -12
- package/src/core/save-replace.js +72 -0
- package/src/core/save-size-notice.js +134 -0
- package/src/core/save-size.js +140 -0
- package/src/core/save.js +805 -118
- package/src/core/snapshot.js +121 -11
- package/src/core/source-map.js +157 -9
- package/src/core/unsaved-warning.js +14 -4
- package/src/core/upgrade-run.js +408 -0
- package/src/core/version.js +18 -0
- package/src/lib/assets.js +30 -0
- package/src/lib/autosave-debug-gate.js +50 -0
- package/src/lib/autosave-scheduler.js +141 -0
- package/src/lib/boot-imports.js +8 -0
- package/src/lib/derived.js +3 -1
- package/src/lib/dirty-gate.js +15 -0
- package/src/lib/doc-storage.js +33 -0
- package/src/lib/effect.js +9 -4
- package/src/lib/mutation.js +4 -2
- package/src/lib/offline-runtime.js +226 -0
- package/src/lib/preload.js +48 -0
- package/src/lib/root-attrs.js +1 -1
- package/src/lib/trash.js +18 -0
- package/src/lib/undo/capture-move.js +152 -0
- package/src/live/local-channel.js +61 -0
- package/src/live/local-lane.js +60 -9
- package/src/live/server-lane.js +6 -3
- package/src/loader-logic.js +76 -15
- package/src/loader.js +218 -30
- package/src/page/adopt-boot.js +76 -22
- package/src/page/adopt.js +25 -4
- package/src/page/awareness.js +230 -0
- package/src/page/blocks.js +79 -5
- package/src/page/blocksel.js +20 -4
- package/src/page/board-face.js +13 -0
- package/src/page/board-panel.js +5 -17
- package/src/page/board-style.js +2 -13
- package/src/page/board-view.js +1 -11
- package/src/page/board-views.js +17 -0
- package/src/page/board.js +2 -2
- package/src/page/boot-pack.js +26 -0
- package/src/page/boot.js +237 -0
- package/src/page/checklist.js +1 -1
- package/src/page/chrome.js +411 -61
- package/src/page/csv-import.js +17 -2
- package/src/page/document-title-dom.js +40 -0
- package/src/page/document-title-runtime.js +76 -0
- package/src/page/document-title.js +9 -0
- package/src/page/drag.js +48 -13
- package/src/page/drop.js +2 -1
- package/src/page/editor.js +330 -86
- package/src/page/feature-loader.js +72 -0
- package/src/page/features/board.js +12 -0
- package/src/page/features/code.js +13 -0
- package/src/page/features/media.js +290 -0
- package/src/page/features/registry.js +23 -0
- package/src/page/features/table.js +383 -0
- package/src/page/{tool-view.js → features/tool.js} +33 -2
- package/src/page/format-codec.js +215 -0
- package/src/page/format-gate.js +179 -0
- package/src/page/format-level.js +157 -0
- package/src/page/highlight-slot.js +23 -0
- package/src/page/highlight.js +30 -16
- package/src/page/history-intent.js +78 -0
- package/src/page/inline.js +18 -25
- package/src/page/items.js +52 -11
- package/src/page/link.js +1 -0
- package/src/page/markdown.js +86 -1
- package/src/page/media-views.js +3 -0
- package/src/page/media.js +33 -245
- package/src/page/outline-cache.js +11 -0
- package/src/page/placeholder.js +27 -7
- package/src/page/projection.js +196 -50
- package/src/page/reader-patch.js +306 -0
- package/src/page/recover.js +1 -1
- package/src/page/rich/page-tool.js +1 -4
- package/src/page/runtime-owner.js +27 -0
- package/src/page/save-projection.js +7 -4
- package/src/page/schema.js +14 -0
- package/src/page/table-rect-key.js +3 -0
- package/src/page/table-select.js +4 -3
- package/src/page/table-style.js +1 -1
- package/src/page/table-views.js +3 -0
- package/src/page/table.js +8 -293
- package/src/page/themes/light-1.css +139 -2
- package/src/page/themes/light-1.source.css +269 -0
- package/src/page/tool-capability.js +3 -0
- package/src/page/tool-views.js +3 -0
- package/src/page/view.js +390 -107
- package/src/page/ybind/awareness.js +172 -0
- package/src/page/ybind/binding.js +9 -1
- package/src/page/ybind/bridge.js +50 -47
- package/src/page/ybind/decode.js +52 -19
- package/src/page/ybind/doc.js +27 -2
- package/src/page/ybind/group.js +12 -3
- package/src/page/ybind/index.js +2 -0
- package/src/page/ybind/lineage.js +71 -0
- package/src/page/ybind/marks.js +25 -1
- package/src/page/ybind/migrate.js +48 -13
- package/src/page/ybind/moves.js +32 -21
- package/src/page/ybind/positions.js +50 -0
- package/src/page/ybind/provider.js +84 -22
- package/src/page/ybind/recovery-proof.js +191 -0
- package/src/page/ybind/recovery-replay.js +130 -0
- package/src/page/ybind/tokens.js +15 -6
- package/src/page/ybind/walk.js +10 -3
- package/src/page/ybind/writer.js +48 -4
- package/src/plugins/ai-edit.js +167 -32
- package/src/plugins/bind-text.js +218 -0
- package/src/plugins/cms.js +93 -0
- package/src/plugins/indicator.js +57 -5
- package/src/plugins/live.js +282 -34
- package/src/plugins/menu/claygoo.svg.js +1 -0
- package/src/plugins/menu/seo-head.js +323 -0
- package/src/plugins/menu/seo.js +849 -0
- package/src/plugins/menu.js +425 -0
- package/src/plugins/page-view.js +131 -0
- package/src/plugins/page.js +1022 -275
- package/src/plugins/people.js +158 -31
- package/src/plugins/richclay.js +119 -9
- package/src/plugins/sortable.js +370 -60
- package/src/plugins/source.js +189 -366
- package/src/plugins/undo.js +289 -19
- package/src/plugins/unsent.js +132 -0
- package/src/plugins/upgrade-run.js +1 -0
- package/src/plugins/upgrade.js +210 -0
- package/src/plugins/upload-task.js +571 -0
- package/src/plugins/upload-ui.js +265 -0
- package/src/plugins/upload.js +34 -153
- package/src/plugins/visitor-drafts/inert.js +32 -0
- package/src/plugins/visitor-drafts/owner-chip.js +3 -0
- package/src/plugins/visitor-drafts/prompt.js +2 -2
- package/src/plugins/visitor-drafts-owner.js +85 -0
- package/src/plugins/visitor-drafts.js +31 -42
- package/src/plugins/wire.js +82 -1
- package/src/reader-core.js +26 -0
- package/src/recovery/conflicts.js +287 -0
- package/src/recovery/identity.js +154 -0
- package/src/recovery/store.js +792 -0
- package/src/recovery/undo.js +257 -0
- package/src/server/checkpoint/index.js +68 -4
- package/src/server/offline-runtime/index.js +214 -0
- package/src/server/rooms/index.js +2 -1
- package/src/server/rooms/live-data-rooms.js +2 -2
- package/src/server/rooms/page-admission.js +33 -0
- package/src/server/rooms/page-lineage.js +56 -0
- package/src/server/rooms/page-rebase.js +11 -5
- package/src/server/rooms/page-state.js +2 -0
- package/src/server/rooms/page-write-admission.js +9 -3
- package/src/source/session.js +705 -0
- package/src/sync/conflict-revert.js +5 -4
- package/src/sync/conflicts-edit.js +119 -0
- package/src/sync/conflicts-facade.js +49 -0
- package/src/sync/conflicts.js +99 -1
- package/src/sync/editing-marker.js +37 -6
- package/src/sync/editing-sender.js +8 -1
- package/src/sync/live-sync-edit.js +63 -0
- package/src/sync/live-sync.js +364 -119
- package/src/sync/local-presence.js +187 -0
- package/src/sync/merge-declarations.js +10 -0
- package/src/sync/merge-engine.js +12 -0
- package/src/sync/presence-store.js +412 -0
- package/src/sync/presence-target.js +243 -0
- package/src/sync/presence.js +72 -41
- package/src/sync/saved-handoff.js +200 -0
- package/src/sync/saved-stream.js +535 -0
- package/src/sync/version-guard.js +92 -0
- package/src/sync/wire-profile.js +81 -0
- package/src/ui/bevel-controls.js +2 -8
- package/src/ui/page-scheme.js +7 -0
- package/src/ui/skins/cms.js +1 -1
- package/src/ui/theme-config.js +150 -0
- package/src/ui/theme.js +6 -138
- package/src/ui/toast-lazy.js +11 -0
- package/src/vendor/LICENSES-optional.md +253 -0
- package/src/vendor/highlight.vendor.js +3 -0
- package/src/vendor/hljs-bash.vendor.js +2 -0
- package/src/vendor/hljs-css.vendor.js +2 -0
- package/src/vendor/hljs-javascript.vendor.js +2 -0
- package/src/vendor/hljs-json.vendor.js +2 -0
- package/src/vendor/hljs-python.vendor.js +2 -0
- package/src/vendor/hljs-xml.vendor.js +2 -0
- package/src/vendor/hyper-html-api-data.vendor.js +1 -1
- package/src/vendor/hyper-html-api-upgrade.vendor.js +5 -0
- package/src/vendor/hyper-morph-identity.vendor.js +2 -0
- package/src/vendor/hyper-morph-json.vendor.js +3 -0
- package/src/vendor/hyper-morph.vendor.js +6 -6
- package/src/vendor/hyper-undo.vendor.js +1 -1
- package/src/vendor/hypercms.vendor.js +169 -84
- package/src/vendor/marked.vendor.js +68 -0
- package/src/vendor/overtype.vendor.js +994 -0
- package/src/vendor/richclay.vendor.js +17 -17
- package/src/vendor/sap-core.vendor.js +5 -5
- 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
|
|
4
|
-
`+(e[0]==="W"?"sap \u26A0 ":"sap \u2717 ")+e+" "+o];return i.push(` at ${
|
|
5
|
-
`)),
|
|
6
|
-
${t}`:`"use strict"; return (${t});`;n={fn:new Function(...
|
|
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
|
-
|
|
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
|