@vireo-ai/trellis-ui 0.1.53 → 0.1.55
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 +23 -1
- package/package.json +23 -23
- package/packages/client/src/components/keybinding/styles.css +18 -2
- package/packages/client/src/components/link/styles.css +42 -0
- package/packages/client/src/components/tooltip/styles.css +3 -8
- package/packages/client/src/styles/components.css +2 -0
- package/packages/client/src/styles/generated/theme-fonts.css +1 -1
- package/packages/client/src/styles/generated/theme-palette.css +5 -1
- package/packages/client/src/styles/generated/theme-runtime.css +425 -6
- package/packages/client/src/styles/generated-sources.css +1 -1
- package/packages/client/src/styles/layout-participation.css +17 -0
- package/packages/client/src/styles/recipes/intent.css +3 -3
- package/packages/client/types/assets/bridge.d.ts +2 -1
- package/packages/client/types/capabilities/sortable.d.ts +2 -2
- package/packages/client/types/component-api.d.ts +1 -1
- package/packages/client/types/components/box/contract.d.ts +19 -19
- package/packages/client/types/components/button/contract.d.ts +1 -1
- package/packages/client/types/components/checkbox/machine.d.ts +0 -3
- package/packages/client/types/components/common.d.ts +23 -2
- package/packages/client/types/components/container/contract.d.ts +11 -11
- package/packages/client/types/components/file-upload/contract.d.ts +1 -1
- package/packages/client/types/components/file-upload/machine.d.ts +10 -12
- package/packages/client/types/components/flex/contract.d.ts +9 -9
- package/packages/client/types/components/frame/contract.d.ts +27 -26
- package/packages/client/types/components/grid/contract.d.ts +9 -9
- package/packages/client/types/components/heading/contract.d.ts +2 -2
- package/packages/client/types/components/input/contract.d.ts +1 -1
- package/packages/client/types/components/keybinding/contract.d.ts +5 -2
- package/packages/client/types/components/layout.d.ts +303 -149
- package/packages/client/types/components/link/contract.d.ts +30 -0
- package/packages/client/types/components/link/index.d.ts +2 -0
- package/packages/client/types/components/menu/contract.d.ts +17 -4
- package/packages/client/types/components/panels/contract.d.ts +1 -1
- package/packages/client/types/components/panels/machine.d.ts +17 -10
- package/packages/client/types/components/runtime.d.ts +1 -1
- package/packages/client/types/components/section/contract.d.ts +9 -9
- package/packages/client/types/components/select/contract.d.ts +1 -1
- package/packages/client/types/components/select/machine.d.ts +8 -7
- package/packages/client/types/components/stack/contract.d.ts +9 -9
- package/packages/client/types/components/switch/machine.d.ts +1 -5
- package/packages/client/types/components/text/contract.d.ts +4 -4
- package/packages/client/types/components/toast/index.d.ts +0 -2
- package/packages/client/types/components/toast/machine.d.ts +6 -5
- package/packages/client/types/components/virtualizer/cursor.d.ts +1 -1
- package/packages/client/types/components/virtualizer/index.d.ts +1 -1
- package/packages/client/types/core.d.ts +2 -2
- package/packages/client/types/directives/sortable.d.ts +2 -1
- package/packages/client/types/motion/owned.d.ts +5 -3
- package/packages/client/types/runtime/alpine-data.d.ts +3 -1
- package/packages/client/types/runtime/cursor-data-source.d.ts +14 -19
- package/packages/client/types/runtime/drag-and-drop/index.d.ts +2 -2
- package/packages/client/types/runtime/drag-and-drop/sortable/contract.d.ts +12 -12
- package/packages/client/types/runtime/drag-and-drop/sortable/feedback.d.ts +3 -3
- package/packages/client/types/runtime/drag-and-drop/sortable/index.d.ts +2 -2
- package/packages/client/types/runtime/drag-and-drop/sortable/placement.d.ts +7 -7
- package/packages/client/types/runtime/drag-and-drop/sortable/registry.d.ts +9 -5
- package/packages/client/types/runtime/engine/request.d.ts +29 -5
- package/packages/client/types/runtime/engine/stream.d.ts +6 -2
- package/packages/client/types/runtime/index.d.ts +4 -4
- package/packages/client/types/runtime/manifest.d.ts +31 -8
- package/packages/client/types/runtime/scroll-lock.d.ts +2 -3
- package/packages/client/types/runtime/theme.d.ts +2 -2
- package/packages/client/types/runtime/ui.d.ts +3 -3
- package/packages/client/types/runtime/virtualizer-fragment.d.ts +1 -1
- package/packages/client/types/runtime/virtualizer.d.ts +1 -1
- package/packages/client/types/utils/dom.d.ts +3 -3
- package/packages/client/types/utils/index.d.ts +2 -2
- package/packages/client/types/utils/object.d.ts +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +873 -1099
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +874 -815
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/alpine-data-Dvc_bXq6.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/alpine-data-Dvc_bXq6.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/alpine-machine-CE2UN4Qu.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/alpine-machine-CE2UN4Qu.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/anchored-popover-BwQbt4V2.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/anchored-popover-BwQbt4V2.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/bridge-DMrvM3JE.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/bridge-DMrvM3JE.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cally-B-msaaMx.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cally-B-msaaMx.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-C3q5Xzv2.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-C3q5Xzv2.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-ByUbMIHF.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-ByUbMIHF.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-shortcut-CGpfLNL-.js → capability-shortcut-BwvEqEbL.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-shortcut-CGpfLNL-.js.map → capability-shortcut-BwvEqEbL.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bh6pkITu.js +5 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bh6pkITu.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{alpine-data-CytyCyfk.js → cleanup-manager-D9QiZF_Q.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cleanup-manager-D9QiZF_Q.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{codecs-Cb1ns_47.js → codecs-CQ7olTJL.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{codecs-Cb1ns_47.js.map → codecs-CQ7olTJL.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{collection-navigation-CfTZUJrL.js → collection-navigation-BbxUBQFs.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{collection-navigation-CfTZUJrL.js.map → collection-navigation-BbxUBQFs.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-De1R7Xh6.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-De1R7Xh6.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controlled-open-Hy4-OT-6.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-crMEr9_l.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-crMEr9_l.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-DOHj5fa1.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-DOHj5fa1.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-FA9FLGtB.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-FA9FLGtB.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dismissable-layer-BROE-Ln2.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dom-DiTFTWeR.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dom-DiTFTWeR.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/element-adapter-native-data-key-DrqJDAVH.js +6 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/element-adapter-native-data-key-DrqJDAVH.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B41qiwNq.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B41qiwNq.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B7n4iFyw.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B7n4iFyw.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BCTWp6Xu.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BCTWp6Xu.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BLduYCHm.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BqEMECZx.js.map → entry.generated-BLduYCHm.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BeNK2EFl.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BSbzZ3xh.js.map → entry.generated-BeNK2EFl.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BmVGptdJ.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BmVGptdJ.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BnqcHAaF.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BnqcHAaF.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Bq2KAnfO.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Bq2KAnfO.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C3cRWutN.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C3cRWutN.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C3y5qBcc.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C3y5qBcc.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CC6pQ0nu.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CC6pQ0nu.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CGasYxmV.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CGasYxmV.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CvL196IN.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CvL196IN.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CyynUmGS.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CyynUmGS.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-DXDHgDsN.js → entry.generated-D8iA1e6i.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D8iA1e6i.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DDJEGHq-.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DDJEGHq-.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DScbsE6-.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DScbsE6-.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-AFRarPro.js → entry.generated-DVOBR4CK.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-AFRarPro.js.map → entry.generated-DVOBR4CK.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Dcm3s3ey.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Dcm3s3ey.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DjKX5KuB.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DjKX5KuB.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-QspMEPHx.js → entry.generated-O0hEhk-2.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-QspMEPHx.js.map → entry.generated-O0hEhk-2.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-R1BlPlZW.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-R1BlPlZW.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-iMJrYzAB.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-iMJrYzAB.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-n_t4T8XC.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-n_t4T8XC.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C-lyYGbo.js → entry.generated-oJwO9fIY.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C-lyYGbo.js.map → entry.generated-oJwO9fIY.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-ollD3I52.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-ollD3I52.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/flip-XeJ05afl.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/flip-XeJ05afl.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-BE3g0swK.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-DtaPVNl5.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{form-control-DjbUb602.js → form-control-DL1Hkox3.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{form-control-DjbUb602.js.map → form-control-DL1Hkox3.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{fragment-Bl3Rq38L.js → fragment-9OT0mn7F.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{fragment-Bl3Rq38L.js.map → fragment-9OT0mn7F.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-CNnHDbyo.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-CNnHDbyo.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{merge-bindings-C8ewA_FD.js → merge-bindings-BtqW3UgP.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{merge-bindings-C8ewA_FD.js.map → merge-bindings-BtqW3UgP.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/morph-Cq3V_23_.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-CbwLBhMt.js +3 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-CbwLBhMt.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/object-SRW-YaCA.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/object-SRW-YaCA.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/pdd-BG5sXFGF.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/pdd-BG5sXFGF.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/props-change-2xfsIAEN.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/scroll-lock-C5dQtr4Y.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/scroll-lock-C5dQtr4Y.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/semantic-observer-CIoriWtV.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{semantic-observer-CdRbZHir.js.map → semantic-observer-CIoriWtV.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{styles-CpTCQjY5.js → styles-C9PrQrca.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{styles-CpTCQjY5.js.map → styles-C9PrQrca.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/styles-CX2j92ex.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{styles-TfvwVPGw.js.map → styles-CX2j92ex.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CGwc8KXJ.js +4 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CGwc8KXJ.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +480 -419
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +11 -9
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +11 -9
- package/packages/client/types/motion/registry.d.ts +0 -13
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/alpine-data-CytyCyfk.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/alpine-machine-BTDXpEr6.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/alpine-machine-BTDXpEr6.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/anchored-popover-BXEMsLrA.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/anchored-popover-BXEMsLrA.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/bridge-B4S_D6hV.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/bridge-B4S_D6hV.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cally-Z6G-rzr-.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cally-Z6G-rzr-.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-CrezWE-8.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-CrezWE-8.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-Bga8TngJ.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-Bga8TngJ.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-C65CbsZn.js +0 -3
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-C65CbsZn.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-Dfj6NCjU.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-Dfj6NCjU.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-xDNH-xzt.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-xDNH-xzt.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-D14VdwFn.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-D14VdwFn.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-DvHNTjt1.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-DvHNTjt1.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dom-qAeVl7dc.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dom-qAeVl7dc.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/drag-and-drop-DHq3udf7.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/drag-and-drop-DHq3udf7.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/element-adapter-native-data-key-CW8suC9A.js +0 -6
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/element-adapter-native-data-key-CW8suC9A.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-2QEJDMe-.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-2QEJDMe-.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BB7wWQfT.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BB7wWQfT.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BSbzZ3xh.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BqEMECZx.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C07Tn0r-.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C07Tn0r-.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C2gP0OfV.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C2gP0OfV.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CRj4-Ef1.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CRj4-Ef1.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CSDZ4U92.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CSDZ4U92.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CirM6w9Q.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CirM6w9Q.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D07X7NjA.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D07X7NjA.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DVIdOrvh.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DVIdOrvh.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D_FlEfdN.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D_FlEfdN.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DrmfusOi.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DrmfusOi.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DwYIFLsE.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DwYIFLsE.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-bEl9RRQt.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-bEl9RRQt.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-gxr2-89M.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-gxr2-89M.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-prmw8aRc.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-prmw8aRc.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-wEt8LYAv.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-wEt8LYAv.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xAXkL86X.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xAXkL86X.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-CXnPh3K6.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-CXnPh3K6.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-CwzLpL1f.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-CwzLpL1f.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-DXDHgDsN.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-Dolv_r3b.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-Dolv_r3b.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-Dqut4h89.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-Dqut4h89.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-ke2fZiWo.js +0 -3
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-ke2fZiWo.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/scroll-lock-DOw7dmi1.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/scroll-lock-DOw7dmi1.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/semantic-observer-CdRbZHir.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/styles-TfvwVPGw.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-FNYDCNh6.js +0 -4
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-FNYDCNh6.js.map +0 -1
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-D14VdwFn.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-D14VdwFn.js","names":[],"sources":["../../../../../../../../client/src/runtime/confirm.ts","../../../../../../../../client/src/runtime/manifest.ts","../../../../../../../../client/src/runtime/theme.ts","../../../../../../../../client/src/directives/layout.ts","../../../../../../../../client/src/directives/request.ts","../../../../../../../../client/src/directives/transition.ts","../../../../../../../../client/src/runtime/morph-engine.ts","../../../../../../../../client/src/core.ts"],"sourcesContent":["type SubmitterElement = HTMLButtonElement | HTMLInputElement;\n\ntype ConfirmProceed = () => void;\ntype ConfirmCancel = () => void;\n\ntype ConfirmEventDetail = {\n form: HTMLFormElement;\n message: string;\n submitter: SubmitterElement | null;\n triggeringEvent: SubmitEvent;\n proceed: ConfirmProceed;\n cancel: ConfirmCancel;\n};\n\ntype ConfirmRuntimeOptions = {\n root?: Document;\n};\n\nconst DEFAULT_CONFIRM_MESSAGE = 'Are you sure?';\n\nlet removeSubmitListener: (() => void) | null = null;\nconst bypassedForms = new WeakSet<HTMLFormElement>();\n\nconst isSubmitterElement = (value: unknown): value is SubmitterElement => (\n value instanceof HTMLButtonElement || value instanceof HTMLInputElement\n);\n\nconst confirmMessageFor = ({form, submitter}: {\n form: HTMLFormElement;\n submitter: SubmitterElement | null;\n}): string | null => {\n const submitterMessage = submitter?.dataset.uiConfirm;\n if (submitterMessage !== undefined) return submitterMessage || DEFAULT_CONFIRM_MESSAGE;\n\n const formMessage = form.dataset.uiConfirm;\n if (formMessage !== undefined) return formMessage || DEFAULT_CONFIRM_MESSAGE;\n\n return null;\n};\n\nconst queueConfirmedSubmit = ({form, submitter}: {\n form: HTMLFormElement;\n submitter: SubmitterElement | null;\n}): void => {\n // Chromium can retain the form's submission guard through the current microtask checkpoint.\n window.setTimeout(() => {\n if (!form.isConnected || (submitter && submitter.form !== form)) return;\n\n bypassedForms.add(form);\n try {\n form.requestSubmit(submitter ?? undefined);\n } finally {\n bypassedForms.delete(form);\n }\n }, 0);\n};\n\nconst handleSubmit = (event: SubmitEvent): void => {\n const form = event.target;\n if (!(form instanceof HTMLFormElement)) return;\n\n if (bypassedForms.has(form)) {\n bypassedForms.delete(form);\n return;\n }\n\n const submitter = isSubmitterElement(event.submitter) ? event.submitter : null;\n const message = confirmMessageFor({form, submitter});\n if (message === null) return;\n\n event.preventDefault();\n\n let settled = false;\n const proceed = (): void => {\n if (settled) return;\n settled = true;\n queueConfirmedSubmit({form, submitter});\n };\n const cancel = (): void => {\n settled = true;\n };\n const confirmEvent = new CustomEvent<ConfirmEventDetail>('ui:confirm', {\n bubbles: true,\n cancelable: true,\n detail: {\n form,\n message,\n submitter,\n triggeringEvent: event,\n proceed,\n cancel,\n },\n });\n\n form.dispatchEvent(confirmEvent);\n if (confirmEvent.defaultPrevented) return;\n\n if (window.confirm(message)) {\n proceed();\n } else {\n cancel();\n }\n};\n\nconst registerConfirm = ({root = document}: ConfirmRuntimeOptions = {}): void => {\n if (removeSubmitListener) return;\n\n root.addEventListener('submit', handleSubmit as EventListener, {capture: true});\n removeSubmitListener = (): void => root.removeEventListener('submit', handleSubmit as EventListener, {capture: true});\n};\n\nconst unregisterConfirm = (): void => {\n removeSubmitListener?.();\n removeSubmitListener = null;\n};\n\nexport {registerConfirm, unregisterConfirm};\nexport type {ConfirmCancel, ConfirmEventDetail, ConfirmProceed, ConfirmRuntimeOptions};\n","import type {CodecFn} from './codecs';\n\ntype PropKind = 'string' | 'number' | 'boolean' | 'enum' | 'json';\n\ntype ManifestProp = {\n type: PropKind;\n default?: unknown;\n values?: readonly string[];\n description?: string;\n initialOnly?: boolean;\n};\n\ntype ManifestPart = {\n selector: string;\n description: string;\n};\n\ntype ManifestToken = {\n name: string;\n description: string;\n};\n\ntype ManifestAcceptedEvent = {\n description: string;\n detail?: Record<string, string>;\n};\n\ntype ComponentManifestMeta = {\n group?: string;\n};\n\ntype ComponentManifest = {\n name: string;\n title: string;\n description: string;\n meta?: ComponentManifestMeta;\n props?: Record<string, ManifestProp>;\n propSchema?: Record<string, CodecFn<unknown>>;\n slots?: Record<string, string>;\n events?: Record<string, string>;\n acceptedEvents?: Record<string, ManifestAcceptedEvent>;\n parts?: Record<string, ManifestPart>;\n tokens?: readonly ManifestToken[];\n};\n\ntype ManifestPropDetails = Pick<ManifestProp, 'description'> & {\n name?: string;\n initialOnly?: boolean;\n};\n\ntype SchemaPropDetails<T extends Record<string, CodecFn<unknown>>> = {\n [K in keyof T]?: ManifestPropDetails;\n};\n\ntype DefineManifestOptions<T extends ComponentManifest> = {\n manifest: T;\n};\n\ntype PropsFromSchemaOptions<T extends Record<string, CodecFn<unknown>>> = {\n schema: T;\n details: SchemaPropDetails<T>;\n};\n\nconst toSnake = (value: string): string => value.replace(/([A-Z])/g, '_$1').toLowerCase();\n\nconst defineManifest = <const T extends ComponentManifest>({manifest}: DefineManifestOptions<T>): Readonly<T> => Object.freeze(manifest);\n\nconst propsFromSchema = <const T extends Record<string, CodecFn<unknown>>>({\n schema,\n details,\n}: PropsFromSchemaOptions<T>): Record<string, ManifestProp> => Object.fromEntries(\n Object.entries(schema).map(([schemaKey, codec]) => {\n const propDetails = details[schemaKey as keyof T] ?? {};\n const meta = codec.meta;\n const prop: ManifestProp = {\n type: meta.type,\n default: meta.default,\n };\n\n if (meta.values) prop.values = meta.values;\n if (propDetails.description) prop.description = propDetails.description;\n if (propDetails.initialOnly) prop.initialOnly = true;\n\n return [propDetails.name ?? toSnake(schemaKey), prop];\n }),\n );\n\nexport {defineManifest, propsFromSchema};\nexport type {\n ComponentManifest,\n DefineManifestOptions,\n ManifestPart,\n ManifestProp,\n ManifestPropDetails,\n ManifestAcceptedEvent,\n ComponentManifestMeta,\n ManifestToken,\n PropsFromSchemaOptions,\n PropKind,\n SchemaPropDetails,\n};\n","import type {Alpine as AlpineType} from 'alpinejs';\n\nconst THEME_VALUES = ['light', 'dark', 'system'] as const;\ntype ThemeMode = typeof THEME_VALUES[number];\ntype ResolvedThemeMode = Exclude<ThemeMode, 'system'>;\n\ntype ThemeChangeDetail = {\n mode: ThemeMode;\n resolved: ResolvedThemeMode;\n dark: boolean;\n on: boolean;\n};\n\ntype ThemeStore = {\n mode: ThemeMode;\n resolved: ResolvedThemeMode;\n dark: boolean;\n on: boolean;\n set: (mode: ThemeMode) => void;\n toggle: () => void;\n};\n\nconst isThemeMode = (value: unknown): value is ThemeMode => (\n typeof value === 'string' && THEME_VALUES.includes(value as ThemeMode)\n);\n\nconst normalizeThemeMode = (value: unknown): ThemeMode => (\n isThemeMode(value) ? value : 'system'\n);\n\nconst storageKey = (): string => (\n document.documentElement.dataset.themeStorageKey || 'trellis-ui-theme'\n);\n\nconst fallbackMode = (): ThemeMode => normalizeThemeMode(document.documentElement.dataset.theme);\n\nconst storedMode = (): ThemeMode => {\n try {\n return normalizeThemeMode(window.localStorage.getItem(storageKey()) || fallbackMode());\n } catch {\n return fallbackMode();\n }\n};\n\nconst persistMode = (mode: ThemeMode): void => {\n try {\n window.localStorage.setItem(storageKey(), mode);\n } catch {\n // Keep theme controls usable in private or restricted browsing contexts.\n }\n};\n\nconst prefersDark = (): boolean => (\n window.matchMedia('(prefers-color-scheme: dark)').matches\n);\n\nconst resolveDark = (mode: ThemeMode): boolean => (\n mode === 'dark' || (mode === 'system' && prefersDark())\n);\n\nconst applyThemeMode = (mode: ThemeMode): ThemeChangeDetail => {\n const dark = resolveDark(mode);\n const resolved: ResolvedThemeMode = dark ? 'dark' : 'light';\n const root = document.documentElement;\n\n root.classList.toggle('dark', dark);\n root.dataset.theme = mode;\n root.dataset.resolvedTheme = resolved;\n root.dispatchEvent(new CustomEvent<ThemeChangeDetail>('ui:theme-change', {\n detail: {mode, resolved, dark, on: dark},\n bubbles: true,\n }));\n\n return {mode, resolved, dark, on: dark};\n};\n\nconst createThemeStore = (): ThemeStore => {\n const initial = applyThemeMode(storedMode());\n\n return {\n mode: initial.mode,\n resolved: initial.resolved,\n dark: initial.dark,\n on: initial.on,\n set(mode: ThemeMode): void {\n const nextMode = normalizeThemeMode(mode);\n persistMode(nextMode);\n const next = applyThemeMode(nextMode);\n this.mode = next.mode;\n this.resolved = next.resolved;\n this.dark = next.dark;\n this.on = next.on;\n },\n toggle(): void {\n this.set(this.dark ? 'light' : 'dark');\n },\n };\n};\n\nconst registerThemeStore = (AlpineInstance: AlpineType): void => {\n if (typeof AlpineInstance.store !== 'function') return;\n\n const existingStore = AlpineInstance.store('theme') as ThemeStore | undefined;\n const store = existingStore ?? createThemeStore();\n\n AlpineInstance.store('theme', store);\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {\n if (store.mode !== 'system') return;\n const next = applyThemeMode('system');\n store.mode = next.mode;\n store.resolved = next.resolved;\n store.dark = next.dark;\n store.on = next.on;\n });\n};\n\nexport {\n applyThemeMode,\n createThemeStore,\n registerThemeStore,\n type ResolvedThemeMode,\n type ThemeChangeDetail,\n type ThemeStore,\n type ThemeMode,\n};\n","import type Alpine from 'alpinejs';\nimport {\n markLayoutParticipant,\n MOTION_KEY_ATTR,\n MOTION_LAYOUT_ATTR,\n} from '@client/runtime/layout-participant';\nimport {declareMorphAttributes} from '@client/runtime/morph';\n\ntype LayoutDirectiveValue = string | {\n id?: string;\n key?: string;\n};\n\nconst readExpression = <T>(expression: string | undefined, utilities: Alpine.DirectiveUtilities): T | undefined => {\n if (!expression || typeof utilities.evaluate !== 'function') return undefined;\n return utilities.evaluate(expression) as T;\n};\n\nconst layoutOptions = (value: LayoutDirectiveValue | undefined): {key?: string} => {\n if (typeof value === 'string') return {key: value};\n if (typeof value === 'object' && value) {\n const key = value.key ?? value.id;\n return key ? {key} : {};\n }\n return {};\n};\n\nconst registerLayoutDirective = (Alpine: Alpine.Alpine): void => {\n Alpine.directive('ui-layout', (el, {expression}, utilities) => {\n if (!(el instanceof Element)) return;\n\n const value = readExpression<LayoutDirectiveValue>(expression, utilities);\n const cleanup = markLayoutParticipant(el, layoutOptions(value));\n declareMorphAttributes(el, MOTION_KEY_ATTR, MOTION_LAYOUT_ATTR);\n\n utilities.cleanup?.(() => {\n cleanup();\n });\n });\n};\n\nexport {registerLayoutDirective};\n","import type Alpine from 'alpinejs';\nimport {registerRequestRuntime, requestWithAlpine, type RequestOptions} from '@client/runtime/engine/request';\nimport {\n navigateWithAlpine,\n prepareNativeFragmentNavigation,\n registerNavigationRuntime,\n type NavigationOptions,\n} from '@client/runtime/engine/navigation';\nimport {isRecord, warn} from '../utils';\n\ntype RequestDirectiveContext = Pick<Alpine.DirectiveData, 'expression'>;\ntype RequestDirectiveOptions = NavigationOptions & Record<string, unknown>;\ntype AnchorClick = {\n destination: URL;\n type: 'enhance' | 'native-fragment';\n};\n\nconst REQUEST_ROOT_SELECTOR = '[x-ui-request], [x-ui-request\\\\.navigate]';\nconst OPTION_KEYS = new Set(['data', 'extra', 'headers', 'history', 'method']);\nconst CLICK_MODIFIER_KEYS: Array<keyof MouseEvent> = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'];\nconst nativeFormSubmissions = new WeakSet<HTMLFormElement>();\n\nconst readOptions = (\n el: Element,\n {expression}: RequestDirectiveContext,\n utilities: Alpine.DirectiveUtilities,\n): RequestDirectiveOptions | null => {\n if (!expression?.trim()) return {};\n\n const evaluated = utilities.Alpine.evaluate(el, expression);\n if (!isRecord(evaluated)) {\n warn('x-ui-request: expression must evaluate to an object');\n return null;\n }\n\n Object.keys(evaluated).forEach((key) => {\n if (!OPTION_KEYS.has(key)) warn('x-ui-request: unknown option key', key);\n });\n\n return evaluated as RequestDirectiveOptions;\n};\n\nconst submitterFrom = (event: SubmitEvent): HTMLElement | null => (\n event.submitter instanceof HTMLElement ? event.submitter : null\n);\n\nconst shouldEnhanceFormSubmit = (form: HTMLFormElement, event: SubmitEvent, submitter: HTMLElement | null): boolean => {\n if (event.defaultPrevented) return false;\n if ((submitter?.getAttribute('formmethod') || form.getAttribute('method'))?.toLowerCase() === 'dialog') return false;\n if (form.getAttribute('target')) return false;\n if (submitter?.getAttribute('formtarget')) return false;\n\n if (!form.noValidate && !form.checkValidity()) {\n form.reportValidity();\n return false;\n }\n\n return true;\n};\n\nconst samePageHashOnly = (url: URL): boolean => (\n url.hash !== ''\n && url.origin === window.location.origin\n && url.pathname === window.location.pathname\n && url.search === window.location.search\n);\n\nconst anchorClickFrom = (anchor: HTMLAnchorElement, event: MouseEvent, navigate: boolean): AnchorClick | null => {\n if (event.defaultPrevented) return null;\n if (event.button !== 0) return null;\n if (navigate && CLICK_MODIFIER_KEYS.some((key) => event[key])) return null;\n if (anchor.hasAttribute('download')) return null;\n if (anchor.getAttribute('target')) return null;\n\n const destination = new URL(anchor.href, document.baseURI);\n if (destination.origin !== window.location.origin) return null;\n if (samePageHashOnly(destination)) {\n return navigate ? {destination, type: 'native-fragment'} : null;\n }\n return {destination, type: 'enhance'};\n};\n\nconst registerFormDirective = (\n AlpineInstance: Alpine.Alpine,\n form: HTMLFormElement,\n directive: RequestDirectiveContext,\n utilities: Alpine.DirectiveUtilities,\n behavior: {navigate: boolean},\n): void => {\n const onSubmit = (event: SubmitEvent): void => {\n if (nativeFormSubmissions.delete(form)) return;\n const submitter = submitterFrom(event);\n if (!shouldEnhanceFormSubmit(form, event, submitter)) return;\n\n const options = readOptions(form, directive, utilities);\n if (!options) return;\n\n event.preventDefault();\n if (behavior.navigate) {\n navigateWithAlpine(AlpineInstance, form.action, form, {\n ...options,\n source: form,\n submitter,\n });\n return;\n }\n void requestWithAlpine(AlpineInstance, undefined, {\n ...options,\n source: form,\n submitter,\n }).then((result) => {\n if (result.type !== 'unavailable') return;\n nativeFormSubmissions.add(form);\n form.requestSubmit(submitter ?? undefined);\n }).catch((error: unknown) => warn('x-ui-request: request failed', error));\n };\n\n form.addEventListener('submit', onSubmit);\n utilities.cleanup?.(() => form.removeEventListener('submit', onSubmit));\n};\n\nconst registerAnchorDirective = (\n AlpineInstance: Alpine.Alpine,\n anchor: HTMLAnchorElement,\n directive: RequestDirectiveContext,\n utilities: Alpine.DirectiveUtilities,\n behavior: {navigate: boolean},\n): void => {\n const onClick = (event: MouseEvent): void => {\n const click = anchorClickFrom(anchor, event, behavior.navigate);\n if (!click) return;\n if (click.type === 'native-fragment') {\n prepareNativeFragmentNavigation(click.destination);\n return;\n }\n\n const options = readOptions(anchor, directive, utilities);\n if (!options) return;\n\n event.preventDefault();\n if (behavior.navigate) {\n navigateWithAlpine(AlpineInstance, click.destination, anchor, options);\n return;\n }\n void requestWithAlpine(AlpineInstance, anchor.href, {\n ...options,\n method: options.method ?? 'GET',\n source: anchor,\n }).then((result) => {\n if (result.type === 'unavailable') window.location.assign(anchor.href);\n }).catch((error: unknown) => warn('x-ui-request: request failed', error));\n };\n\n anchor.addEventListener('click', onClick);\n utilities.cleanup?.(() => anchor.removeEventListener('click', onClick));\n};\n\nconst registerRequestDirective = (AlpineInstance: Alpine.Alpine): void => {\n AlpineInstance.addRootSelector(() => REQUEST_ROOT_SELECTOR);\n registerRequestRuntime(AlpineInstance);\n registerNavigationRuntime(AlpineInstance);\n\n AlpineInstance.directive('ui-request', (el, {expression, modifiers}, utilities) => {\n const directive = {expression};\n\n if (el instanceof HTMLFormElement) {\n registerFormDirective(AlpineInstance, el, directive, utilities, {\n navigate: modifiers.includes('navigate'),\n });\n return;\n }\n\n if (el instanceof HTMLAnchorElement) {\n registerAnchorDirective(AlpineInstance, el, directive, utilities, {\n navigate: modifiers.includes('navigate'),\n });\n return;\n }\n\n warn('x-ui-request: directive only supports forms and anchors', el);\n });\n};\n\nexport {registerRequestDirective};\n","import type Alpine from 'alpinejs';\nimport {\n findAlpineMachineOwner,\n type AlpineMachineOwner,\n} from '@client/runtime/alpine-machine';\nimport type {TransitionContext} from '@client/runtime/transition-coordinator';\nimport {warn} from '@client/utils';\n\ntype TransitionEvaluator = ReturnType<Alpine.DirectiveUtilities['evaluateLater']>;\n\nconst evaluateTransition = <TProps, TData, TElement>(\n evaluator: TransitionEvaluator,\n transition: TransitionContext<TProps, TData, TElement>,\n): unknown => {\n let synchronous = true;\n let completedSynchronously = false;\n let result: unknown;\n let resolve!: (value: unknown) => void;\n const pending = new Promise<unknown>((resolvePromise) => {\n resolve = resolvePromise;\n });\n\n evaluator((value) => {\n if (synchronous) {\n completedSynchronously = true;\n result = value;\n return;\n }\n resolve(value);\n }, {scope: {$transition: transition}});\n synchronous = false;\n\n return completedSynchronously ? result : pending;\n};\n\nconst registerTransitionDirective = (AlpineInstance: Alpine.Alpine): void => {\n AlpineInstance.directive(\n 'ui-transition',\n AlpineInstance.skipDuringClone((el, {value: name, expression}, utilities) => {\n if (!name) {\n warn('x-ui-transition requires a transition name', el);\n return;\n }\n\n const owner = findAlpineMachineOwner(AlpineInstance, el);\n if (!owner) {\n warn(`x-ui-transition:${name} requires an owning Trellis machine`, el);\n return;\n }\n\n const evaluator = expression?.trim() ? utilities.evaluateLater(expression) : null;\n const unregister = owner.onTransition(name, (transition) => (\n evaluator ? evaluateTransition(evaluator, transition) : undefined\n ), el as Parameters<AlpineMachineOwner['onTransition']>[2]);\n utilities.cleanup(unregister);\n }),\n );\n};\n\nexport {registerTransitionDirective};\n","import type Alpine from 'alpinejs';\n\n// This engine adapts behavior and matching ideas from Alpine Morph, Morphlex, Idiomorph, and Datastar.\n// See THIRD_PARTY_NOTICES.md for provenance and license notices.\n\ntype Skip = () => void;\ntype ChildrenOnly = () => void;\ntype SkipChildren = () => void;\ntype SkipUntil = (predicate: (node: Node) => boolean) => void;\ntype UpdatingHook = (\n from: Node,\n to: Node,\n childrenOnly: ChildrenOnly,\n skip: Skip,\n skipChildren: SkipChildren,\n skipUntil: SkipUntil,\n) => void;\ntype SkippableNodeHook = (node: Node, skip: Skip) => void;\ntype PruningPolicy = 'after-root-hook' | 'before-descendant-hook';\n\ntype MorphOptions = {\n key?: (element: Element) => unknown;\n lookahead?: boolean;\n updating?: UpdatingHook;\n updated?: (from: Node, to: Node) => void;\n removing?: SkippableNodeHook;\n removed?: (node: Node) => void;\n adding?: SkippableNodeHook;\n added?: (node: Node) => void;\n};\n\ntype MorphAlpine = Omit<Alpine.Alpine, 'cloneNode' | 'closestDataStack'> & {\n cloneNode(from: Element, to: Element): void;\n closestDataStack(node: Node): unknown;\n morph(from: Element, toHtml: Element | string, options?: MorphOptions): Element;\n morphBetween(\n startMarker: Comment,\n endMarker: Comment,\n toHtml: Element | string,\n options?: MorphOptions,\n ): void;\n};\n\ntype AlpineNode = Node & {\n _x_bindings?: {id?: string};\n _x_dataStack?: unknown;\n _x_currentIfEl?: AlpineNode;\n _x_lastRenderedEl?: AlpineNode;\n _x_lookup?: Map<unknown, AlpineNode>;\n _x_teleport?: AlpineNode;\n _x_transitioning?: unknown;\n _x_isShown?: boolean;\n};\n\ntype Parent = Node & {\n children: Iterable<Element>;\n firstChild: ChildNode | null;\n insertBefore(node: Node, before: Node | null): Node;\n};\n\nconst noop = (): void => {};\nlet alpineInstance: MorphAlpine | undefined;\n\nclass Block {\n constructor(\n readonly startComment: Comment,\n readonly endComment: Comment,\n ) {}\n\n get children(): Element[] {\n const children: Element[] = [];\n let node = this.startComment.nextSibling;\n while (node && node !== this.endComment) {\n if (node instanceof Element) children.push(node);\n node = node.nextSibling;\n }\n return children;\n }\n\n get firstChild(): ChildNode | null {\n const first = this.startComment.nextSibling;\n return first === this.endComment ? null : first;\n }\n\n appendChild(node: Node): Node {\n this.endComment.before(node);\n return node;\n }\n\n insertBefore(node: Node, reference: Node | null): Node {\n ((reference ?? this.endComment) as ChildNode).before(node);\n return node;\n }\n\n nextNode(reference: Node): ChildNode | null {\n const next = reference.nextSibling;\n return next === this.endComment ? null : next;\n }\n}\n\nconst nextSibling = (parent: Parent | Block, node: Node): ChildNode | null => (\n parent instanceof Block ? parent.nextNode(node) : node.nextSibling\n);\n\nconst createElement = (html: string): Element => {\n const template = document.createElement('template');\n template.innerHTML = html;\n const element = template.content.firstElementChild;\n if (!element) throw new Error('Morph HTML must contain a root element.');\n return element;\n};\n\nconst setIncomingAttribute = (target: Element, incoming: Attr): void => {\n if (incoming.namespaceURI) {\n target.setAttributeNodeNS(incoming.cloneNode() as Attr);\n } else if (incoming.name.includes('@')) {\n target.setAttributeNode(incoming.cloneNode() as Attr);\n } else {\n target.setAttribute(incoming.name, incoming.value);\n }\n};\n\nconst shouldSkip = (hook: SkippableNodeHook, node: Node): boolean => {\n let skip = false;\n hook(node, () => { skip = true; });\n return skip;\n};\n\nconst isConditionalStart = (node: Node | null): boolean => (\n node?.nodeType === Node.COMMENT_NODE && node.textContent === '[if BLOCK]><![endif]'\n);\n\nconst isConditionalEnd = (node: Node | null): boolean => (\n node?.nodeType === Node.COMMENT_NODE && node.textContent === '[if ENDBLOCK]><![endif]'\n);\n\nconst conditionalEnd = (parent: Parent | Block, start: Node): Comment => {\n let depth = 0;\n let node: Node | null = start;\n while ((node = nextSibling(parent, node))) {\n if (isConditionalStart(node)) depth += 1;\n else if (isConditionalEnd(node) && depth > 0) depth -= 1;\n else if (isConditionalEnd(node)) return node as Comment;\n }\n throw new Error('Unclosed conditional morph block.');\n};\n\ntype OwnedRange = {\n start: AlpineNode;\n end: AlpineNode;\n};\n\nconst ownedRange = (start: AlpineNode): OwnedRange => {\n let end = start;\n if (start._x_lastRenderedEl) end = start._x_lastRenderedEl;\n else if (start._x_currentIfEl) end = ownedRange(start._x_currentIfEl).end;\n else if (start._x_lookup?.size) {\n const owned = new Set(start._x_lookup.values());\n let sibling = start.nextSibling as AlpineNode | null;\n while (sibling && owned.has(sibling)) {\n end = ownedRange(sibling).end;\n sibling = end.nextSibling as AlpineNode | null;\n }\n }\n return {start, end};\n};\n\nconst afterOwnedRange = (parent: Parent | Block, range: OwnedRange): AlpineNode | null => (\n nextSibling(parent, range.end) as AlpineNode | null\n);\n\nconst isServerEqual = (from: AlpineNode, to: AlpineNode): boolean => {\n if (from.nodeType !== to.nodeType || from.nodeName !== to.nodeName) return false;\n if (from.nodeType === Node.TEXT_NODE || from.nodeType === Node.COMMENT_NODE) {\n return from.nodeValue === to.nodeValue;\n }\n if (from instanceof HTMLTemplateElement && to instanceof HTMLTemplateElement) {\n const fromTemplate = from as HTMLTemplateElement & AlpineNode;\n const toTemplate = to as HTMLTemplateElement & AlpineNode;\n if (fromTemplate._x_teleport) {\n const incomingTeleport = toTemplate._x_teleport ?? to.content.firstElementChild;\n return Boolean(incomingTeleport && isServerEqual(fromTemplate._x_teleport, incomingTeleport as AlpineNode));\n }\n return from.isEqualNode(to);\n }\n if (from instanceof Element && to instanceof Element) {\n if (from.attributes.length !== to.attributes.length) return false;\n for (const {name, value} of from.attributes) {\n if (to.getAttribute(name) !== value) return false;\n }\n }\n\n let fromChild = from.firstChild as AlpineNode | null;\n let toChild = to.firstChild as AlpineNode | null;\n while (fromChild && toChild) {\n if (!isServerEqual(fromChild, toChild)) return false;\n fromChild = ownedRange(fromChild).end.nextSibling as AlpineNode | null;\n toChild = toChild.nextSibling as AlpineNode | null;\n }\n return fromChild === null && toChild === null;\n};\n\nconst moveOwnedRangeBefore = (parent: Parent | Block, range: OwnedRange, before: Node | null): void => {\n if (range.start === before || afterOwnedRange(parent, range) === before) return;\n let node: Node | null = range.start;\n while (node) {\n const next: ChildNode | null = node.nextSibling;\n parent.insertBefore(node, before);\n if (node === range.end) break;\n node = next;\n }\n};\n\nconst seedDynamicId = (to: AlpineNode, from: AlpineNode | null): void => {\n const id = from?._x_bindings?.id;\n if (!id || !(to instanceof Element)) return;\n to.setAttribute('id', id);\n (to as HTMLElement).id = id;\n};\n\nconst buildDescendantCorrespondence = (\n fromElements: Element[],\n toElements: Element[],\n getKey: (node: Node | null) => unknown,\n): WeakMap<Node, symbol> => {\n const correspondence = new WeakMap<Node, symbol>();\n const fromDirectKeys = fromElements.map(getKey).filter(Boolean);\n const toDirectKeys = toElements.map(getKey).filter(Boolean);\n const directKeysReordered = fromDirectKeys.length >= 2\n && fromDirectKeys.length === toDirectKeys.length\n && new Set(fromDirectKeys).size === fromDirectKeys.length\n && fromDirectKeys.some((key, index) => key !== toDirectKeys[index])\n && fromDirectKeys.every((key) => toDirectKeys.includes(key));\n if (!directKeysReordered) return correspondence;\n\n const idCounts = (elements: Element[]): Map<string, number> => {\n const counts = new Map<string, number>();\n const count = (element: Element): void => {\n if (element.id) counts.set(element.id, (counts.get(element.id) ?? 0) + 1);\n };\n for (const element of elements) {\n count(element);\n element.querySelectorAll('[id]').forEach(count);\n }\n return counts;\n };\n const fromIdCounts = idCounts(fromElements);\n const toIdCounts = idCounts(toElements);\n const tokens = new Map<string, symbol>();\n for (const [id, count] of fromIdCounts) {\n if (count === 1 && toIdCounts.get(id) === 1) tokens.set(id, Symbol(id));\n }\n\n const indexDescendant = (element: Element): void => {\n if (getKey(element)) return;\n for (const descendant of element.querySelectorAll('[id]')) {\n const token = tokens.get(descendant.id);\n if (!token) continue;\n correspondence.set(element, token);\n return;\n }\n };\n fromElements.forEach(indexDescendant);\n toElements.forEach(indexDescendant);\n return correspondence;\n};\n\nconst createContext = (options: MorphOptions = {}) => {\n const context = {\n key: options.key ?? ((element: Element) => element.getAttribute('key')),\n lookahead: options.lookahead ?? false,\n updating: options.updating ?? noop,\n updated: options.updated ?? noop,\n removing: options.removing ?? noop,\n removed: options.removed ?? noop,\n adding: options.adding ?? noop,\n added: options.added ?? noop,\n skipUntilCondition: null as ((node: Node) => boolean) | null,\n };\n\n const getKey = (node: Node | null): unknown => (\n node instanceof Element ? context.key(node) : null\n );\n\n const requiresReplacement = (from: Node, to: Node): boolean => (\n from.nodeType !== to.nodeType\n || from.nodeName !== to.nodeName\n || getKey(from) !== getKey(to)\n || (from instanceof Element\n && to instanceof Element\n && from.getAttribute('x-data') !== to.getAttribute('x-data'))\n );\n\n const insertNodeBefore = (\n parent: Parent | Block,\n source: Node,\n before: Node | null,\n ): {inserted: false; node: null} | {inserted: true; node: AlpineNode} => {\n if (shouldSkip(context.adding, source)) return {inserted: false, node: null};\n const clone = source.cloneNode(true);\n parent.insertBefore(clone, before);\n context.added(clone);\n return {inserted: true, node: clone as AlpineNode};\n };\n\n const removeNode = (node: Node): boolean => {\n if (shouldSkip(context.removing, node)) return false;\n node.parentNode?.removeChild(node);\n context.removed(node);\n return true;\n };\n\n const removeOwnedRange = (range: OwnedRange): boolean => {\n if (shouldSkip(context.removing, range.start)) return false;\n range.start.parentNode?.removeChild(range.start);\n context.removed(range.start);\n return true;\n };\n\n const replaceNode = (from: Node, to: Node): boolean => {\n if (shouldSkip(context.removing, from)) return false;\n const clone = to.cloneNode(true);\n if (shouldSkip(context.adding, clone)) return false;\n from.parentNode?.replaceChild(clone, from);\n context.removed(from);\n context.added(clone);\n return true;\n };\n\n const patchAttributes = (from: AlpineNode & Element, to: Element): boolean => {\n if (from._x_transitioning) return false;\n if ((from._x_isShown && !(to as AlpineNode)._x_isShown)\n || (!from._x_isShown && (to as AlpineNode)._x_isShown)) return false;\n\n let changed = false;\n const existing = Array.from(from.attributes);\n for (let index = existing.length - 1; index >= 0; index -= 1) {\n const name = existing[index]!.name;\n if (to.hasAttribute(name)) continue;\n if (name === 'open' && from instanceof HTMLDialogElement && from.open) from.close();\n else from.removeAttribute(name);\n changed = true;\n }\n const incoming = Array.from(to.attributes);\n for (let index = incoming.length - 1; index >= 0; index -= 1) {\n const attribute = incoming[index]!;\n const {name, value} = attribute;\n if (from.getAttribute(name) === value) continue;\n setIncomingAttribute(from, attribute);\n changed = true;\n }\n return changed;\n };\n\n let patchChildren: (from: Parent | Block, to: Parent | Block) => boolean;\n\n const patchNode = (from: AlpineNode, to: AlpineNode, pruning: PruningPolicy): boolean => {\n if (from instanceof Element && from.hasAttribute('data-ui-ignore-morph')) return false;\n if (requiresReplacement(from, to)) return replaceNode(from, to);\n if (pruning === 'before-descendant-hook'\n && from.nodeType !== Node.COMMENT_NODE\n && isServerEqual(from, to)) return false;\n\n let childrenOnly = false;\n let skipChildren = false;\n let skip = false;\n const skipUntil = (predicate: (node: Node) => boolean): void => {\n context.skipUntilCondition = predicate;\n };\n context.updating(\n from,\n to,\n () => { childrenOnly = true; },\n () => { skip = true; },\n () => { skipChildren = true; },\n skipUntil,\n );\n if (skip) return false;\n\n // Descendants that are server-identical are opaque. The root is checked only\n // after its hook has had the opportunity to mutate the incoming tree.\n if (isServerEqual(from, to)) return false;\n\n let changed = false;\n if (from.nodeType === Node.ELEMENT_NODE && alpineInstance) {\n alpineInstance.cloneNode(from as Element, to as Element);\n if (from._x_teleport && to._x_teleport) {\n changed = patch(from._x_teleport, to._x_teleport) || changed;\n }\n }\n\n if (to.nodeType === Node.TEXT_NODE || to.nodeType === Node.COMMENT_NODE) {\n if (from.nodeValue === to.nodeValue) return false;\n from.nodeValue = to.nodeValue;\n context.updated(from, to);\n return true;\n }\n\n if (!childrenOnly) changed = patchAttributes(from as AlpineNode & Element, to as Element) || changed;\n if (!skipChildren) changed = patchChildren(from as unknown as Parent, to as unknown as Parent) || changed;\n if (changed) context.updated(from, to);\n return changed;\n };\n\n const patch = (from: AlpineNode, to: AlpineNode): boolean => (\n patchNode(from, to, 'before-descendant-hook')\n );\n const patchRoot = (from: AlpineNode, to: AlpineNode): boolean => (\n patchNode(from, to, 'after-root-hook')\n );\n\n patchChildren = (from: Parent | Block, to: Parent | Block): boolean => {\n const fromElements = Array.from(from.children);\n const toElements = Array.from(to.children);\n const correspondence = buildDescendantCorrespondence(fromElements, toElements, getKey);\n\n const childKey = (node: Node | null): unknown => (\n node ? getKey(node) || correspondence.get(node) : null\n );\n const keyed = new Map<unknown, AlpineNode>();\n for (const element of fromElements) {\n const key = childKey(element);\n if (key) keyed.set(key, element as AlpineNode);\n }\n\n let changed = false;\n let currentFrom = from.firstChild as AlpineNode | null;\n let currentTo = to.firstChild as AlpineNode | null;\n\n incoming: while (currentTo) {\n seedDynamicId(currentTo, currentFrom);\n\n if (context.skipUntilCondition) {\n const fromDone = !currentFrom || context.skipUntilCondition(currentFrom);\n const toDone = context.skipUntilCondition(currentTo);\n if (fromDone && toDone) context.skipUntilCondition = null;\n else {\n if (!fromDone && currentFrom) currentFrom = afterOwnedRange(from, ownedRange(currentFrom));\n if (!toDone) currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue;\n }\n }\n\n if (!currentFrom) {\n const addition = insertNodeBefore(from, currentTo, null);\n changed = addition.inserted || changed;\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue;\n }\n\n if (isConditionalStart(currentFrom) && isConditionalStart(currentTo)) {\n const fromEnd = conditionalEnd(from, currentFrom);\n const toEnd = conditionalEnd(to, currentTo);\n changed = patchChildren(new Block(currentFrom as Comment, fromEnd), new Block(currentTo as Comment, toEnd)) || changed;\n currentFrom = nextSibling(from, fromEnd) as AlpineNode | null;\n currentTo = nextSibling(to, toEnd) as AlpineNode | null;\n continue;\n } else {\n if (context.lookahead\n && currentFrom instanceof Element\n && !currentFrom.isEqualNode(currentTo)) {\n let lookahead = nextSibling(to, currentTo) as AlpineNode | null;\n while (lookahead) {\n if (lookahead instanceof Element && currentFrom.isEqualNode(lookahead)) {\n const addition = insertNodeBefore(from, currentTo, currentFrom);\n if (!addition.inserted) {\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue incoming;\n }\n currentFrom = addition.node;\n changed = true;\n break;\n }\n lookahead = nextSibling(to, lookahead) as AlpineNode | null;\n }\n }\n\n const toKey = childKey(currentTo);\n const fromKey = childKey(currentFrom);\n if (toKey !== fromKey) {\n const keyedMatch = toKey ? keyed.get(toKey) : undefined;\n if (keyedMatch) {\n moveOwnedRangeBefore(from, ownedRange(keyedMatch), currentFrom);\n currentFrom = keyedMatch;\n changed = true;\n } else if (toKey || fromKey) {\n const addition = insertNodeBefore(from, currentTo, currentFrom);\n if (!addition.inserted) {\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n continue;\n }\n currentFrom = addition.node;\n changed = true;\n }\n }\n\n const afterFrom = afterOwnedRange(from, ownedRange(currentFrom));\n changed = patch(currentFrom, currentTo) || changed;\n currentFrom = afterFrom;\n }\n\n currentTo = nextSibling(to, currentTo) as AlpineNode | null;\n }\n\n while (currentFrom) {\n const range = ownedRange(currentFrom);\n const after = afterOwnedRange(from, range);\n changed = (range.end === range.start ? removeNode(currentFrom) : removeOwnedRange(range)) || changed;\n currentFrom = after;\n }\n return changed;\n };\n\n return {patchChildren, patchRoot};\n};\n\nconst morph = (from: Element, toHtml: Element | string, options: MorphOptions = {}): Element => {\n const to = (typeof toHtml === 'string' ? createElement(toHtml) : toHtml) as AlpineNode & Element;\n const source = from as AlpineNode & Element;\n if (alpineInstance?.closestDataStack && !source._x_dataStack) {\n to._x_dataStack = alpineInstance.closestDataStack(source);\n if (to._x_dataStack) alpineInstance.cloneNode(source, to);\n }\n createContext(options).patchRoot(source, to);\n return from;\n};\n\nconst morphBetween = (\n startMarker: Comment,\n endMarker: Comment,\n toHtml: Element | string,\n options: MorphOptions = {},\n): void => {\n const fromContainer = startMarker.parentNode as AlpineNode & Parent;\n const toContainer = typeof toHtml === 'string'\n ? (() => {\n const container = document.createElement('div');\n container.insertAdjacentHTML('beforeend', toHtml);\n return container;\n })()\n : toHtml;\n const toStart = document.createComment('[morph-start]');\n const toEnd = document.createComment('[morph-end]');\n toContainer.insertBefore(toStart, toContainer.firstChild);\n toContainer.appendChild(toEnd);\n if (alpineInstance?.closestDataStack) {\n (toContainer as AlpineNode)._x_dataStack = alpineInstance.closestDataStack(fromContainer);\n if ((toContainer as AlpineNode)._x_dataStack) alpineInstance.cloneNode(fromContainer as unknown as Element, toContainer);\n }\n createContext(options).patchChildren(\n new Block(startMarker, endMarker),\n new Block(toStart, toEnd),\n );\n};\n\nconst trellisMorph = (AlpineInstance: Alpine.Alpine): void => {\n const instance = AlpineInstance as MorphAlpine;\n alpineInstance = instance;\n instance.morph = morph;\n instance.morphBetween = morphBetween;\n};\n\nexport {morph, morphBetween};\nexport default trellisMorph;\n","import type {Alpine as AlpineType} from 'alpinejs';\n\nimport {registerLayoutDirective} from './directives/layout';\nimport {registerRequestDirective} from './directives/request';\nimport {registerTransitionDirective} from './directives/transition';\nimport morph from './runtime/morph-engine';\nimport {setPropReactivity} from './runtime/codecs';\nimport {registerConfirm} from './runtime/confirm';\nimport {registerStream} from './runtime/engine/stream';\nimport {registerThemeStore} from './runtime/theme';\nimport {registerUiMagic, ui} from './runtime/ui';\n\ntype CoreRuntimePlugin = (AlpineInstance: AlpineType) => void;\nconst registered = new WeakSet<AlpineType>();\n\nconst coreRuntime: CoreRuntimePlugin = (AlpineInstance): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n setPropReactivity(AlpineInstance.reactive);\n AlpineInstance.plugin(morph);\n registerLayoutDirective(AlpineInstance);\n registerUiMagic(AlpineInstance);\n registerTransitionDirective(AlpineInstance);\n registerThemeStore(AlpineInstance);\n registerConfirm();\n registerRequestDirective(AlpineInstance);\n registerStream(AlpineInstance);\n};\n\nexport {coreRuntime, ui};\nexport default coreRuntime;\nexport type {CoreRuntimePlugin};\nexport {\n bool,\n createAlpineMachine,\n createMachine,\n decodeProps,\n defineAlpineData,\n defineManifest,\n defineProps,\n defineStyles,\n json,\n mergeBindings,\n number,\n oneOf,\n propsFromSchema,\n resolveStyle,\n string,\n createTransitionCoordinator,\n defineHook,\n} from './runtime';\nexport type {\n AlpineMachine,\n AlpineMachineOwner,\n AlpinePropsChangedEvent,\n AlpineDataFactory,\n AlpineDataRegistrar,\n CodecFn,\n ComponentManifest,\n CreateAlpineMachineOptions,\n DecodePropsOptions,\n Machine,\n MachineConfig,\n MachineEffect,\n MachineEffectList,\n MachineEffectRef,\n MachineEntry,\n MachineEvent,\n MachineEventObject,\n MachineGuard,\n MachineOptions,\n MachineReducer,\n MachineReducerList,\n MachineReducerRef,\n MachineScope,\n MachineSnapshot,\n MachineStateConfig,\n MachineStateValue,\n MachineTransition,\n MachineTransitionDefinition,\n MachineUpdate,\n DefineManifestOptions,\n DefineStylesOptions,\n ManifestPart,\n ManifestProp,\n ManifestPropDetails,\n ManifestToken,\n MachineFactoryScope,\n BindingInput,\n PropState,\n PropsFromSchemaOptions,\n MergeBindingsOptions,\n ResolveStyleOptions,\n SchemaPropDetails,\n SchemaToProps,\n StyleDefinition,\n StylePart,\n StyleProps,\n TrellisAlpineComponent,\n AnyTransitionHook,\n TransitionCallback,\n TransitionContext,\n TransitionCoordinator,\n TransitionCoordinatorOptions,\n TransitionEventCreator,\n TransitionForHook,\n TransitionHookDefinition,\n UiGetOptions,\n UiRequestOptions,\n UiRuntime,\n} from './runtime';\nexport {registerTransitionDirective} from './directives/transition';\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{c as e,f as t,l as n,n as r,o as i}from"./codecs-Cb1ns_47.js";import{t as a}from"./fragment-Bl3Rq38L.js";var o=e=>Math.max(0,Math.floor(e)),s=e=>{if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.src==`string`):[]}catch{return[]}},c=async(e,t)=>{let n=e.status===204?``:await e.text(),r=document.createElement(`template`);r.innerHTML=n;let i=null,a=e.headers.get(t.totalHeader),c=a===null||a.trim()===``?NaN:Number(a);Number.isFinite(c)&&c>=0&&(i=o(c));let l=r.content.querySelector(t.metaSelector);if(l){if(i===null)try{let e=JSON.parse(l.innerHTML),t=Number(e.totalItems);Number.isFinite(t)&&t>=0&&(i=o(t))}catch{}l.remove()}let u=document.createElement(`div`);return u.append(r.content),{html:u.innerHTML,assets:s(e.headers.get(t.assetsHeader)),totalItems:i}},l=(e,t=0)=>Number.isFinite(e)?e:t,u=e=>Math.max(0,Math.floor(l(e))),d=(e,t=1)=>Math.max(2**-52,l(e,t)),f=(e,t,n)=>Math.min(n,Math.max(t,e)),p=(e,t)=>{let n=u(t.total),r=d(t.itemSize),i=Math.max(0,l(t.viewportSize)),a=u(t.buffer),o=Math.min(n,Math.max(1,Math.ceil(i/r))),s=Math.max(0,n-o),c=f(Math.max(0,l(t.scrollOffset)),0,Math.max(0,n*r-i)),p=f(Math.floor(c/r),0,s),m=Math.min(n,o+a*2),h=f(p-a,0,Math.max(0,n-m));return{axis:e,start:h,count:m,total:n,itemSize:r,viewportSize:i,scrollOffset:c,buffer:a,visibleStart:p,visibleCount:o,guardStart:Math.min(n,h+a),guardEnd:Math.max(0,h+m-a),translateOffset:h*r,spacerSize:n*r}},m={compute(e){let t={};return e.axes.x&&(t.x=p(`x`,e.axes.x)),e.axes.y&&(t.y=p(`y`,e.axes.y)),{kind:`fixed-axis`,key:[`x`,`y`].map(e=>{let n=t[e];return n?`${e}:${n.start}:${n.count}:${n.total}`:``}).filter(Boolean).join(`|`),axes:t}},covers(e,t){return[`x`,`y`].every(n=>{let r=t.axes[n];if(!r)return!0;let i=e.axes[n];if(!i||i.total!==r.total||i.itemSize!==r.itemSize)return!1;let a=r.visibleStart+r.visibleCount;return r.visibleStart>=i.guardStart&&a<=i.guardEnd})},serialize(e){let t={};return[`x`,`y`].forEach(n=>{let r=e.axes[n];r&&(t[n]={start:r.start,count:r.count,total:r.total})}),{window:JSON.stringify(t)}},spacerSize(e,t){return e.axes[t]?.spacerSize??0},translateOffset(e,t){return e.axes[t]?.translateOffset??0},setAxisTotal(e,t,n){let r=e.axes[t];return r?{...e,axes:{...e.axes,[t]:{...r,total:u(n)}}}:e},scrollTo(e,t){let n=u(e.total),r=d(e.itemSize),i=Math.max(0,l(e.viewportSize)),a=f(u(t.index),0,Math.max(0,n-1))*r,o=a+r,s=Math.max(0,n*r-i),c=a;if(t.align===`center`)c=a-(i-r)/2;else if(t.align===`end`)c=o-i;else if(t.align===`auto`){let t=Math.max(0,l(e.scrollOffset));if(a>=t&&o<=t+i)return f(t,0,s);c=a<t?a:o-i}return f(c,0,s)}},h=(e,t={})=>{let n=0,r=0,i=new Map,a=new Map,o=new Map,s=()=>({generation:n,mounted:new Map(i),pending:new Map(a),latestDesired:new Map(o)}),c=()=>t.onChange?.(s()),l=e=>{let t=a.get(e.block);return e.generation===n&&t?.requestGeneration===e.requestGeneration};return{computeWindow:t=>e.compute(t),shouldLoad:(t,n)=>!n||!e.covers(n,t),begin(e,t){if(o.set(e,t),a.has(e)||!this.shouldLoad(t,i.get(e)))return c(),null;let s={block:e,window:t,generation:n,requestGeneration:++r};return a.set(e,s),c(),s},commit(e,t=e.window){return l(e)?(a.delete(e.block),i.set(e.block,t),c(),!0):!1},fail(e){return l(e)?(a.delete(e.block),c(),!0):!1},next(t){if(a.has(t))return null;let n=o.get(t);if(!n)return null;let r=i.get(t);return r&&e.covers(r,n)?null:n},mounted:e=>i.get(e)??null,pending:e=>a.get(e)??null,invalidate(){n+=1,i.clear(),a.clear(),o.clear(),c()},snapshot:s}},ee={fetchUrl:t,cursor:r,totalItems:e.min(0).default(0),itemSize:e.min(2**-52).default(36),bufferSize:e.min(1).default(50),overscan:e.min(0).default(0),axis:n([`vertical`],`vertical`),initialIndex:e.min(0).default(0),startParam:t.default(`start`),countParam:t.default(`count`),totalParam:t.default(`total`),windowParam:t.default(`window`),totalHeader:t.default(`X-Trellis-Total-Items`),assetsHeader:t.default(`X-Trellis-Assets`),metaSelector:t.default(`template[data-ui-virtualizer-meta]`),scrollArea:r.default(!0),fill:r.default(!0),class:t,scrollAreaClass:t,viewportClass:t,spacerClass:t,blockClass:t},g=(e,t=0)=>Math.max(t,Math.floor(Number.isFinite(e)?e:t)),_=(e,t={})=>{let n=null,r=null,o=null,s=[],l=0,u=``,d=null,f=0,p=0,_=!1,v=null,y=!1,b=new Map,x=h(m),S=t.cursor,C=S?.query,w=0,te=0,T=!1,E=!1,D=null,O=0,k=null,A=null,j=null,M=new Map,N=new Map,P=(e,t)=>{n?.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))},F=()=>{if(!n||!o)return;let e=N.size===0?0:Math.max(...[...N.values()].map(({startIndex:e,count:t})=>e+t)),t=[...N.values()].some(({page:t,startIndex:n,count:r})=>n+r===e&&t.hasNext),r=S&&l===0?e+(t?g($.props.bufferSize,1):0):l;n.toggleAttribute(`data-loading`,p>0),n.toggleAttribute(`data-empty`,S?N.size===0&&p===0:l===0),o.style.height=`${Math.max(r*$.props.itemSize,$.props.itemSize)}px`},I=e=>{let t=g(e);return t===l?!1:(l=t,F(),P(`ui:virtualizer-total-change`,{totalItems:l}),P(`ui:virtualizer-axis-total-change`,{axis:`y`,total:l,window:null}),!0)},L=e=>m.compute({axes:{y:{total:l,itemSize:$.props.itemSize,viewportSize:$.props.bufferSize*$.props.itemSize,scrollOffset:e*$.props.itemSize,buffer:0}}}),R=e=>{if(l===0||!S&&!$.props.fetchUrl.trim())return[];let t=g($.props.bufferSize,1),n=Math.min(l-1,Math.floor(Math.max(0,e)/$.props.itemSize)),r=Math.floor(n/t)*t,i=Math.floor((l-1)/t)*t,a=[r-t,r,r+t].map(e=>Math.min(i,Math.max(0,e)));return r===0&&i>t?a.splice(0,3,0,t,Math.min(i,t*2)):r===i&&i>t&&a.splice(0,3,Math.max(0,i-t*2),i-t,i),[...new Set(a)].map(L)},ne=e=>{let t=e.axes.y;if(!t)throw Error(`Vertical virtualizer requires a y window.`);let n=new URL($.props.fetchUrl,document.baseURI);return n.searchParams.set($.props.startParam,String(t.start)),n.searchParams.set($.props.countParam,String(t.count)),n.searchParams.set($.props.totalParam,String(t.total)),/^[a-z][a-z\d+.-]*:/i.test($.props.fetchUrl)||$.props.fetchUrl.startsWith(`//`)?n.href:`${n.pathname}${n.search}${n.hash}`},z=async(t,n,i)=>{let o=t.element.contains(document.activeElement),s=await a(e,t.element,n.html,{assets:n.assets,shouldReplace:i});return s&&o&&r?.focus({preventScroll:!0}),s},B=(e,t,n)=>{e.element.style.height=`${n*$.props.itemSize}px`,e.element.style.transform=`translateY(${t*$.props.itemSize}px)`},re=()=>{if(p=Math.max(0,p-1),F(),p>0||d===null||_)return;let e=d;d=null,Z(e)},ie=async(e,t,i)=>{let a=t.axes.y;if(!a)return;let o=new AbortController;b.set(e.key,o),p+=1,F(),n?.removeAttribute(`data-error`),P(`ui:virtualizer-load-start`,{block:e.key,window:t});try{let s=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${i.requestGeneration}`,l=await fetch(ne(t),{method:`GET`,headers:{Accept:`text/html`,"X-Trellis-Virtualizer":`true`,"X-Trellis-Request-ID":s},signal:o.signal});if(!l.ok&&l.status!==204){x.fail(i),n?.setAttribute(`data-error`,``),P(`ui:virtualizer-error`,{block:e.key,window:t,status:l.status});return}let u=await c(l,$.props);if(x.pending(e.key)!==i||_||!await z(e,u,()=>x.pending(e.key)===i&&!_))return;let f=u.totalItems!==null&&I(u.totalItems);if(!x.commit(i,t))return;B(e,a.start,a.count),P(`ui:virtualizer-load`,{block:e.key,window:t}),f&&(d=r?.scrollTop??0)}catch(r){if(o.signal.aborted)return;x.fail(i),n?.setAttribute(`data-error`,``),P(`ui:virtualizer-error`,{block:e.key,window:t,status:0,error:r})}finally{b.get(e.key)===o&&b.delete(e.key),re()}},V=()=>g($.props.bufferSize,1),H=()=>[...N.values()].sort((e,t)=>e.startIndex-t.startIndex),U=(e,t)=>!_&&t.generation===w&&M.get(e.key)?.id===t.id,W=async(e,t,r,i,a=`page`)=>{if(!S||M.has(e.key))return null;let o=i??new AbortController,s={generation:w,id:++te,aborter:o};M.set(e.key,s),p+=1,F(),n?.removeAttribute(`data-error`),P(`ui:virtualizer-load-start`,{block:e.key,mode:`cursor`});try{let n=await t(o.signal);if(!U(e,s))return null;if(n.hasNext&&n.endCursor===null)throw Error(`Cursor page hasNext requires a non-null endCursor.`);if(n.hasPrevious&&n.startCursor===null)throw Error(`Cursor page hasPrevious requires a non-null startCursor.`);if(a===`seek`&&n.startIndex===void 0)throw Error(`Cursor seek response requires startIndex.`);let i=await S.responseAdapter(n.content,n);if(!U(e,s))return null;let c=n.startIndex===void 0?g(r):g(n.startIndex),u=i.totalItems??l,d=i.itemCount===void 0?V():g(i.itemCount),f=u>0?Math.min(V(),Math.max(0,u-c)):d;if(!await z(e,i,()=>U(e,s))||!U(e,s))return null;i.totalItems===null?n.hasNext||I(c+f):I(i.totalItems);let p={block:e,page:n,startIndex:c,count:f};return N.set(e.key,p),B(e,c,f),P(`ui:virtualizer-load`,{block:e.key,mode:`cursor`,page:{...n,content:void 0},startIndex:c}),p}catch(t){return o.signal.aborted||!U(e,s)?null:(E=!0,n?.setAttribute(`data-error`,``),P(`ui:virtualizer-error`,{block:e.key,mode:`cursor`,status:0,error:t}),null)}finally{M.get(e.key)===s&&M.delete(e.key),p=Math.max(0,p-1),F()}},G=()=>{T=!1;let e=D??r?.scrollTop??0;D=null,X(e)},ae=async()=>{if(!S||T||E||N.size>0)return;T=!0;let e=w;try{let t=await W(s[0],e=>S.dataSource.first({limit:V(),query:C,signal:e}),0);if(!t||e!==w)return;let n=t;for(let t of s.slice(1)){if(!n.page.hasNext||n.page.endCursor===null)break;let r=n.page.endCursor,i=await W(t,e=>S.dataSource.next({cursor:r,limit:V(),query:C,signal:e}),n.startIndex+n.count);if(!i||e!==w)break;n=i}}finally{e===w&&G()}},K=async()=>{if(!S||T)return;let e=H(),t=e.at(-1);if(!t?.page.hasNext||t.page.endCursor===null)return;let n=e[0]?.block;if(!n)return;T=!0;let r=w,i=t.page.endCursor;try{await W(n,e=>S.dataSource.next({cursor:i,limit:V(),query:C,signal:e}),t.startIndex+t.count)}finally{r===w&&G()}},q=async()=>{if(!S||T)return;let e=H(),t=e[0];if(!t?.page.hasPrevious||t.page.startCursor===null)return;let n=e.at(-1)?.block;if(!n)return;T=!0;let r=w,i=t.page.startCursor;try{await W(n,e=>S.dataSource.previous({cursor:i,limit:V(),query:C,signal:e}),Math.max(0,t.startIndex-V()))}finally{r===w&&G()}},J=()=>{O&&window.clearTimeout(O),O=0,k=null},oe=async t=>{let n=S?.dataSource.seek;if(!S||!n)return;j?.abort(),M.forEach(({aborter:e})=>e.abort()),M.clear(),T=!0;let r=w,i=new AbortController;j=i,A=t;let o=s[1];N.clear(),s.forEach(t=>{t!==o&&a(e,t.element,``)});try{let e=await W(o,e=>n({index:t,limit:V(),query:C,signal:e}),t,i,`seek`);if(!e||r!==w||j!==i)return;let a=[];if(e.page.hasPrevious&&e.page.startCursor!==null){let t=e.page.startCursor;a.push(W(s[0],e=>S.dataSource.previous({cursor:t,limit:V(),query:C,signal:e}),Math.max(0,e.startIndex-V())))}if(e.page.hasNext&&e.page.endCursor!==null){let t=e.page.endCursor;a.push(W(s[2],e=>S.dataSource.next({cursor:t,limit:V(),query:C,signal:e}),e.startIndex+e.count))}await Promise.all(a)}finally{j===i&&(j=null,A=null,r===w&&G())}},Y=e=>{if(!S?.dataSource.seek)return;let t=l>0?Math.min(Math.max(0,l-1),g(e)):g(e);H().some(e=>t>=e.startIndex&&t<e.startIndex+e.count)||k===t||A===t||(J(),k=t,O=window.setTimeout(()=>{O=0,k=null,oe(t)},g(S.seekDebounce??100)))},X=e=>{if(!S)return;let t=l>0?Math.min(l-1,Math.floor(Math.max(0,e)/$.props.itemSize)):Math.floor(Math.max(0,e)/$.props.itemSize);if(j&&S.dataSource.seek&&A!==t){D=e,Y(t);return}if(T||p>0){D=e;return}let n=H();if(n.length===0){ae();return}let r=n.find(e=>t>=e.startIndex&&t<e.startIndex+e.count);if(r){J(),r===n[0]&&r.page.hasPrevious?q():r===n.at(-1)&&r.page.hasNext&&K();return}if(S.dataSource.seek){Y(t);return}t<n[0].startIndex?q():K()},Z=t=>{if(S){X(t);return}if(p>0){d=t;return}let n=R(t),r=n.map(e=>e.key).join(`,`),i=Math.min(Math.max(0,l-1),Math.floor(Math.max(0,t)/$.props.itemSize)),o=n.find(e=>{let t=e.axes.y;return t&&i>=t.start&&i<t.start+t.count})??n[0];if(o&&u!==o.key){u=o.key;let e=o.axes.y;P(`ui:virtualizer-window`,{window:o}),P(`ui:virtualizer-range`,{start:e.start,count:e.count,end:e.start+e.count,window:o})}if(!r){s.forEach(t=>void a(e,t.element,``));return}let c=new Set;n.forEach(e=>{let t=s.find(t=>x.mounted(t.key)?.key===e.key);t&&c.add(t)});let f=s.filter(e=>!c.has(e));n.forEach(e=>{if(s.some(t=>x.mounted(t.key)?.key===e.key))return;let t=f.shift();if(!t)return;let n=x.begin(t.key,e);n&&ie(t,e,n)})},Q=()=>{b.forEach(e=>e.abort()),b.clear(),p=0,d=null,u=``,x.invalidate(),w+=1,J(),j?.abort(),j=null,A=null,M.forEach(({aborter:e})=>e.abort()),M.clear(),N.clear(),T=!1,E=!1,D=null,s.forEach(t=>{t.element.style.height=``,t.element.style.transform=``,a(e,t.element,``)}),F()},$={supportsSeek:!!S?.dataSource.seek,props:null,init(){if(n=this.$el,_=!1,this.props=i({el:n,schema:ee,onChange:(e,t)=>{y||(t.some(({key:e})=>e===`totalItems`)?(I(this.props.totalItems),S||this.reload()):t.some(({key:e})=>[`fetchUrl`,`itemSize`,`bufferSize`].includes(e))&&this.reload())}}),l=S?g(this.props.totalItems):this.props.fetchUrl.trim()?Math.max(1,g(this.props.totalItems)):0,r=n.querySelector(`[data-ui-scroll-area-viewport]`)??n,o=n.querySelector(`[data-ui-virtualizer-spacer]`),s=Array.from(n.querySelectorAll(`[data-ui-virtualizer-block]`)).slice(0,3).map((e,t)=>({element:e,key:`block-${t+1}`})),!o||s.length!==3)throw Error(`Virtualizer requires one spacer and three block containers.`);r.style.overscrollBehavior=`contain`,r.style.overflowAnchor=`none`,v=new AbortController,r.addEventListener(`scroll`,()=>{f||=requestAnimationFrame(()=>{f=0,r&&Z(r.scrollTop)})},{passive:!0,signal:v.signal}),r.scrollTop=m.scrollTo({total:l,itemSize:this.props.itemSize,viewportSize:r.clientHeight,scrollOffset:0,buffer:this.props.bufferSize},{axis:`y`,index:this.props.initialIndex}),F(),Z(r.scrollTop)},destroy(){_=!0,f&&cancelAnimationFrame(f),v?.abort(),v=null,Q(),this.props.disconnect(),n=null,r=null,o=null,s=[]},scrollToIndex(e,t=`start`){r&&(r.scrollTop=m.scrollTo({total:l,itemSize:this.props.itemSize,viewportSize:r.clientHeight,scrollOffset:r.scrollTop,buffer:this.props.bufferSize},{axis:`y`,index:e,align:t}),Z(r.scrollTop))},setTotalItems(e){if(I(e),S){r&&X(r.scrollTop);return}let t=r?.scrollTop;this.reload(t===void 0?{}:{scrollTop:t})},setUrl(e,t={}){let n=String(e).trim();y=!0,this.props.fetchUrl=n,y=!1,I(n?Math.max(1,g(this.props.totalItems)):0),t.reset??!0?this.reset():this.reload()},setQuery(e){S&&(C=e,this.reset())},reset(e={}){this.reload({scrollTop:e.scrollTop??0})},reload(e={}){let t=e.scrollTop??r?.scrollTop??0;Q(),r&&(r.scrollTop=Math.max(0,t)),Z(t)}};return $},v=e=>{let t=async({cursor:t,direction:n,limit:r,signal:i,index:a})=>{let o=e().dataset.fetchUrl??``,s=new URL(o,document.baseURI);s.searchParams.set(`cursor`,t??``),s.searchParams.set(`direction`,n),s.searchParams.set(`limit`,String(r)),a!==void 0&&s.searchParams.set(`index`,String(a));let c=/^[a-z][a-z\d+.-]*:/i.test(o)||o.startsWith(`//`)?s.href:`${s.pathname}${s.search}${s.hash}`,l=await fetch(c,{signal:i});if(!l.ok)throw Error(`Cursor request failed (${l.status}).`);let u=await l.json();return{...u,content:u}};return{query:null,dataSource:{first:({limit:e,signal:n})=>t({cursor:null,direction:`forward`,limit:e,signal:n}),next:({cursor:e,limit:n,signal:r})=>t({cursor:e,direction:`forward`,limit:n,signal:r}),previous:({cursor:e,limit:n,signal:r})=>t({cursor:e,direction:`backward`,limit:n,signal:r}),seek:({index:e,limit:n,signal:r})=>t({cursor:null,direction:`forward`,index:e,limit:n,signal:r}).then(e=>{if(e.startIndex===void 0)throw Error(`Cursor seek response is missing startIndex.`);return{...e,startIndex:e.startIndex}})},responseAdapter:e=>({html:e.content,assets:e.assets??[],totalItems:e.total??null,...e.count===void 0?{}:{itemCount:e.count}})}};export{c as a,m as i,_ as n,h as r,v as t};
|
|
2
|
-
//# sourceMappingURL=cursor-data-source-DvHNTjt1.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-data-source-DvHNTjt1.js","names":[],"sources":["../../../../../../../../client/src/runtime/virtualizer-fragment.ts","../../../../../../../../client/src/runtime/virtual-window.ts","../../../../../../../../client/src/runtime/virtualizer-schema.ts","../../../../../../../../client/src/runtime/virtualizer.ts","../../../../../../../../client/src/runtime/cursor-data-source.ts"],"sourcesContent":["import type {AssetDescriptor} from '../assets/bridge';\n\ntype VirtualizerFragmentOptions = {\n totalHeader: string;\n assetsHeader: string;\n metaSelector: string;\n};\n\ntype VirtualizerFragmentPayload = {\n html: string;\n assets: AssetDescriptor[];\n totalItems: number | null;\n};\n\nconst integer = (value: number): number => Math.max(0, Math.floor(value));\n\nconst parseAssets = (raw: string | null): AssetDescriptor[] => {\n if (!raw) return [];\n try {\n const parsed: unknown = JSON.parse(raw);\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((value): value is AssetDescriptor => (\n typeof value === 'object'\n && value !== null\n && typeof (value as Partial<AssetDescriptor>).id === 'string'\n && typeof (value as Partial<AssetDescriptor>).src === 'string'\n ));\n } catch {\n return [];\n }\n};\n\nconst parseVirtualizerFragmentResponse = async (\n response: Response,\n options: VirtualizerFragmentOptions,\n): Promise<VirtualizerFragmentPayload> => {\n const html = response.status === 204 ? '' : await response.text();\n const template = document.createElement('template');\n template.innerHTML = html;\n let totalItems: number | null = null;\n const rawHeaderTotal = response.headers.get(options.totalHeader);\n const headerTotal = rawHeaderTotal === null || rawHeaderTotal.trim() === ''\n ? Number.NaN\n : Number(rawHeaderTotal);\n if (Number.isFinite(headerTotal) && headerTotal >= 0) totalItems = integer(headerTotal);\n\n const meta = template.content.querySelector<HTMLTemplateElement>(options.metaSelector);\n if (meta) {\n if (totalItems === null) {\n try {\n const parsed = JSON.parse(meta.innerHTML) as {totalItems?: unknown};\n const inlineTotal = Number(parsed.totalItems);\n if (Number.isFinite(inlineTotal) && inlineTotal >= 0) totalItems = integer(inlineTotal);\n } catch {\n // Invalid optional metadata does not invalidate otherwise usable fragment HTML.\n }\n }\n meta.remove();\n }\n\n const container = document.createElement('div');\n container.append(template.content);\n return {\n html: container.innerHTML,\n assets: parseAssets(response.headers.get(options.assetsHeader)),\n totalItems,\n };\n};\n\nexport {parseVirtualizerFragmentResponse};\nexport type {VirtualizerFragmentOptions, VirtualizerFragmentPayload};\n","type VirtualWindowKind = string;\n\ntype VirtualWindowBase = {\n kind: VirtualWindowKind;\n key: string;\n};\n\ntype VirtualWindowAdapter<Input, Window extends VirtualWindowBase> = {\n compute(input: Input): Window;\n covers(mounted: Window, desired: Window): boolean;\n serialize(window: Window): Record<string, string>;\n};\n\ntype VirtualAxis = 'x' | 'y';\ntype VirtualScrollAlign = 'start' | 'center' | 'end' | 'auto';\n\ntype FixedAxisInputDetail = {\n total: number;\n itemSize: number;\n viewportSize: number;\n scrollOffset: number;\n buffer: number;\n overscan?: number;\n};\n\ntype FixedAxisWindowInput = {\n axes: Partial<Record<VirtualAxis, FixedAxisInputDetail>>;\n};\n\ntype VirtualAxisWindow = {\n axis: VirtualAxis;\n start: number;\n count: number;\n total: number;\n itemSize: number;\n viewportSize: number;\n scrollOffset: number;\n buffer: number;\n visibleStart: number;\n visibleCount: number;\n guardStart: number;\n guardEnd: number;\n translateOffset: number;\n spacerSize: number;\n};\n\ntype FixedAxisWindow = VirtualWindowBase & {\n kind: 'fixed-axis';\n axes: Partial<Record<VirtualAxis, VirtualAxisWindow>>;\n};\n\ntype FixedAxisScrollTarget = {\n axis: VirtualAxis;\n index: number;\n align?: VirtualScrollAlign;\n};\n\ntype FixedAxisWindowAdapter = VirtualWindowAdapter<FixedAxisWindowInput, FixedAxisWindow> & {\n spacerSize(window: FixedAxisWindow, axis: VirtualAxis): number;\n translateOffset(window: FixedAxisWindow, axis: VirtualAxis): number;\n setAxisTotal(input: FixedAxisWindowInput, axis: VirtualAxis, total: number): FixedAxisWindowInput;\n scrollTo(input: FixedAxisInputDetail, target: FixedAxisScrollTarget): number;\n};\n\ntype VirtualWindowRequest<Window extends VirtualWindowBase> = {\n block: string;\n window: Window;\n generation: number;\n requestGeneration: number;\n};\n\ntype VirtualWindowSnapshot<Window extends VirtualWindowBase> = {\n generation: number;\n mounted: ReadonlyMap<string, Window>;\n pending: ReadonlyMap<string, VirtualWindowRequest<Window>>;\n latestDesired: ReadonlyMap<string, Window>;\n};\n\ntype VirtualWindowControllerOptions<Window extends VirtualWindowBase> = {\n onChange?(snapshot: VirtualWindowSnapshot<Window>): void;\n};\n\ntype VirtualWindowController<Input, Window extends VirtualWindowBase> = {\n computeWindow(input: Input): Window;\n shouldLoad(desired: Window, mounted?: Window | null): boolean;\n begin(block: string, desired: Window): VirtualWindowRequest<Window> | null;\n commit(request: VirtualWindowRequest<Window>, mounted?: Window): boolean;\n fail(request: VirtualWindowRequest<Window>): boolean;\n next(block: string): Window | null;\n mounted(block: string): Window | null;\n pending(block: string): VirtualWindowRequest<Window> | null;\n invalidate(): void;\n snapshot(): VirtualWindowSnapshot<Window>;\n};\n\nconst finite = (value: number, fallback = 0): number => (\n Number.isFinite(value) ? value : fallback\n);\n\nconst nonNegativeInteger = (value: number): number => (\n Math.max(0, Math.floor(finite(value)))\n);\n\nconst positive = (value: number, fallback = 1): number => (\n Math.max(Number.EPSILON, finite(value, fallback))\n);\n\nconst clamp = (value: number, minimum: number, maximum: number): number => (\n Math.min(maximum, Math.max(minimum, value))\n);\n\nconst computeAxis = (axis: VirtualAxis, input: FixedAxisInputDetail): VirtualAxisWindow => {\n const total = nonNegativeInteger(input.total);\n const itemSize = positive(input.itemSize);\n const viewportSize = Math.max(0, finite(input.viewportSize));\n const buffer = nonNegativeInteger(input.buffer);\n const visibleCount = Math.min(total, Math.max(1, Math.ceil(viewportSize / itemSize)));\n const maximumVisibleStart = Math.max(0, total - visibleCount);\n const scrollOffset = clamp(\n Math.max(0, finite(input.scrollOffset)),\n 0,\n Math.max(0, total * itemSize - viewportSize),\n );\n const visibleStart = clamp(Math.floor(scrollOffset / itemSize), 0, maximumVisibleStart);\n const count = Math.min(total, visibleCount + (buffer * 2));\n const start = clamp(visibleStart - buffer, 0, Math.max(0, total - count));\n\n return {\n axis,\n start,\n count,\n total,\n itemSize,\n viewportSize,\n scrollOffset,\n buffer,\n visibleStart,\n visibleCount,\n guardStart: Math.min(total, start + buffer),\n guardEnd: Math.max(0, start + count - buffer),\n translateOffset: start * itemSize,\n spacerSize: total * itemSize,\n };\n};\n\nconst fixedAxisWindowAdapter: FixedAxisWindowAdapter = {\n compute(input: FixedAxisWindowInput): FixedAxisWindow {\n const axes: FixedAxisWindow['axes'] = {};\n if (input.axes.x) axes.x = computeAxis('x', input.axes.x);\n if (input.axes.y) axes.y = computeAxis('y', input.axes.y);\n const key = (['x', 'y'] as const)\n .map((axis) => {\n const detail = axes[axis];\n return detail ? `${axis}:${detail.start}:${detail.count}:${detail.total}` : '';\n })\n .filter(Boolean)\n .join('|');\n return {kind: 'fixed-axis', key, axes};\n },\n\n covers(mounted: FixedAxisWindow, desired: FixedAxisWindow): boolean {\n return (['x', 'y'] as const).every((axis) => {\n const wanted = desired.axes[axis];\n if (!wanted) return true;\n const current = mounted.axes[axis];\n if (!current || current.total !== wanted.total || current.itemSize !== wanted.itemSize) return false;\n const desiredEnd = wanted.visibleStart + wanted.visibleCount;\n return wanted.visibleStart >= current.guardStart && desiredEnd <= current.guardEnd;\n });\n },\n\n serialize(window: FixedAxisWindow): Record<string, string> {\n const axes: Record<string, {start: number; count: number; total: number}> = {};\n (['x', 'y'] as const).forEach((axis) => {\n const detail = window.axes[axis];\n if (detail) axes[axis] = {start: detail.start, count: detail.count, total: detail.total};\n });\n return {window: JSON.stringify(axes)};\n },\n\n spacerSize(window: FixedAxisWindow, axis: VirtualAxis): number {\n return window.axes[axis]?.spacerSize ?? 0;\n },\n\n translateOffset(window: FixedAxisWindow, axis: VirtualAxis): number {\n return window.axes[axis]?.translateOffset ?? 0;\n },\n\n setAxisTotal(input: FixedAxisWindowInput, axis: VirtualAxis, total: number): FixedAxisWindowInput {\n const current = input.axes[axis];\n if (!current) return input;\n return {...input, axes: {...input.axes, [axis]: {...current, total: nonNegativeInteger(total)}}};\n },\n\n scrollTo(input: FixedAxisInputDetail, target: FixedAxisScrollTarget): number {\n const total = nonNegativeInteger(input.total);\n const itemSize = positive(input.itemSize);\n const viewportSize = Math.max(0, finite(input.viewportSize));\n const index = clamp(nonNegativeInteger(target.index), 0, Math.max(0, total - 1));\n const itemStart = index * itemSize;\n const itemEnd = itemStart + itemSize;\n const maximum = Math.max(0, total * itemSize - viewportSize);\n let offset = itemStart;\n if (target.align === 'center') offset = itemStart - ((viewportSize - itemSize) / 2);\n else if (target.align === 'end') offset = itemEnd - viewportSize;\n else if (target.align === 'auto') {\n const current = Math.max(0, finite(input.scrollOffset));\n if (itemStart >= current && itemEnd <= current + viewportSize) return clamp(current, 0, maximum);\n offset = itemStart < current ? itemStart : itemEnd - viewportSize;\n }\n return clamp(offset, 0, maximum);\n },\n};\n\nconst createVirtualWindowController = <Input, Window extends VirtualWindowBase>(\n adapter: VirtualWindowAdapter<Input, Window>,\n options: VirtualWindowControllerOptions<Window> = {},\n): VirtualWindowController<Input, Window> => {\n let generation = 0;\n let requestGeneration = 0;\n const mountedWindows = new Map<string, Window>();\n const pendingWindows = new Map<string, VirtualWindowRequest<Window>>();\n const latestDesired = new Map<string, Window>();\n\n const snapshot = (): VirtualWindowSnapshot<Window> => ({\n generation,\n mounted: new Map(mountedWindows),\n pending: new Map(pendingWindows),\n latestDesired: new Map(latestDesired),\n });\n const notify = (): void => options.onChange?.(snapshot());\n const isCurrent = (request: VirtualWindowRequest<Window>): boolean => {\n const pending = pendingWindows.get(request.block);\n return request.generation === generation\n && pending?.requestGeneration === request.requestGeneration;\n };\n\n return {\n computeWindow: (input) => adapter.compute(input),\n shouldLoad: (desired, mounted) => !mounted || !adapter.covers(mounted, desired),\n begin(block, desired) {\n latestDesired.set(block, desired);\n if (pendingWindows.has(block) || !this.shouldLoad(desired, mountedWindows.get(block))) {\n notify();\n return null;\n }\n const request = {\n block,\n window: desired,\n generation,\n requestGeneration: ++requestGeneration,\n };\n pendingWindows.set(block, request);\n notify();\n return request;\n },\n commit(request, mounted = request.window) {\n if (!isCurrent(request)) return false;\n pendingWindows.delete(request.block);\n mountedWindows.set(request.block, mounted);\n notify();\n return true;\n },\n fail(request) {\n if (!isCurrent(request)) return false;\n pendingWindows.delete(request.block);\n notify();\n return true;\n },\n next(block) {\n if (pendingWindows.has(block)) return null;\n const desired = latestDesired.get(block);\n if (!desired) return null;\n const mounted = mountedWindows.get(block);\n if (mounted && adapter.covers(mounted, desired)) return null;\n return desired;\n },\n mounted: (block) => mountedWindows.get(block) ?? null,\n pending: (block) => pendingWindows.get(block) ?? null,\n invalidate() {\n generation += 1;\n mountedWindows.clear();\n pendingWindows.clear();\n latestDesired.clear();\n notify();\n },\n snapshot,\n };\n};\n\nexport {\n createVirtualWindowController,\n fixedAxisWindowAdapter,\n};\nexport type {\n FixedAxisInputDetail,\n FixedAxisScrollTarget,\n FixedAxisWindowAdapter,\n FixedAxisWindow,\n FixedAxisWindowInput,\n VirtualAxis,\n VirtualAxisWindow,\n VirtualScrollAlign,\n VirtualWindowAdapter,\n VirtualWindowBase,\n VirtualWindowController,\n VirtualWindowControllerOptions,\n VirtualWindowKind,\n VirtualWindowRequest,\n VirtualWindowSnapshot,\n};\n","import {bool, number, oneOf, string, type SchemaToProps} from './codecs';\n\nconst VIRTUALIZER_AXES = ['vertical'] as const;\ntype VirtualizerAxis = typeof VIRTUALIZER_AXES[number];\n\nconst virtualizerSchema = {\n fetchUrl: string,\n cursor: bool,\n totalItems: number.min(0).default(0),\n itemSize: number.min(Number.EPSILON).default(36),\n bufferSize: number.min(1).default(50),\n overscan: number.min(0).default(0),\n axis: oneOf(VIRTUALIZER_AXES, 'vertical' as VirtualizerAxis),\n initialIndex: number.min(0).default(0),\n startParam: string.default('start'),\n countParam: string.default('count'),\n totalParam: string.default('total'),\n windowParam: string.default('window'),\n totalHeader: string.default('X-Trellis-Total-Items'),\n assetsHeader: string.default('X-Trellis-Assets'),\n metaSelector: string.default('template[data-ui-virtualizer-meta]'),\n scrollArea: bool.default(true),\n fill: bool.default(true),\n class: string,\n scrollAreaClass: string,\n viewportClass: string,\n spacerClass: string,\n blockClass: string,\n};\n\ntype VirtualizerProps = SchemaToProps<typeof virtualizerSchema>;\n\nexport {VIRTUALIZER_AXES, virtualizerSchema};\nexport type {VirtualizerAxis, VirtualizerProps};\n","import type Alpine from 'alpinejs';\n\nimport {defineProps, type PropState} from './codecs';\nimport {replaceFragmentChildren} from './engine/fragment';\nimport type {TrellisAlpineComponent} from './index';\nimport {\n parseVirtualizerFragmentResponse,\n type VirtualizerFragmentPayload,\n} from './virtualizer-fragment';\nimport {\n createVirtualWindowController,\n fixedAxisWindowAdapter,\n type FixedAxisWindow,\n type VirtualScrollAlign,\n type VirtualWindowRequest,\n} from './virtual-window';\nimport {virtualizerSchema} from './virtualizer-schema';\nimport type {\n CursorPage,\n CursorVirtualizerOptions,\n} from './cursor-data-source';\n\ntype ResetOptions = {scrollTop?: number};\ntype SetUrlOptions = {reset?: boolean};\n\n/** Public Alpine API for `ui.virtualizer`. @public */\ninterface UiVirtualizerApi<Query = unknown> {\n /** Whether the configured cursor data source supports arbitrary index seeks. */\n readonly supportsSeek: boolean;\n /** Scrolls a logical item into the requested vertical alignment. */\n scrollToIndex(index: number, align?: VirtualScrollAlign): void;\n /** Replaces the known logical item count and reloads mounted ranges. */\n setTotalItems(count: number): void;\n /** Replaces the fragment endpoint and optionally resets to the top. */\n setUrl(url: string, options?: SetUrlOptions): void;\n /** Replaces cursor-mode query state and resets to the first cursor. */\n setQuery(query: Query): void;\n /** Invalidates all blocks and reloads them around a scroll position. */\n reset(options?: ResetOptions): void;\n /** Reloads all blocks without changing the fragment endpoint. */\n reload(options?: ResetOptions): void;\n}\n\ntype VirtualizerData<Query = unknown> = UiVirtualizerApi<Query> & {\n props: PropState<typeof virtualizerSchema>;\n init(): void;\n destroy(): void;\n};\n\ntype BlockRecord = {\n key: string;\n element: HTMLElement;\n};\n\ntype VirtualizerOptions<Query, Content> = {\n cursor?: CursorVirtualizerOptions<Query, Content>;\n};\n\ntype CursorMounted<Content> = {\n block: BlockRecord;\n page: CursorPage<Content>;\n startIndex: number;\n count: number;\n};\n\ntype CursorRequest = {\n generation: number;\n id: number;\n aborter: AbortController;\n};\n\ntype CursorPageKind = 'page' | 'seek';\n\nconst integer = (value: number, minimum = 0): number => (\n Math.max(minimum, Math.floor(Number.isFinite(value) ? value : minimum))\n);\n\nconst UiVirtualizer = <Query = unknown, Content = unknown>(\n AlpineInstance: Alpine.Alpine,\n options: VirtualizerOptions<Query, Content> = {},\n): TrellisAlpineComponent<VirtualizerData<Query>> => {\n let root: HTMLElement | null = null;\n let viewport: HTMLElement | null = null;\n let spacer: HTMLElement | null = null;\n let blocks: BlockRecord[] = [];\n let totalItems = 0;\n let currentWindowKey = '';\n let latestScrollTop: number | null = null;\n let scrollFrame = 0;\n let loading = 0;\n let destroyed = false;\n let listenerAborter: AbortController | null = null;\n let suppressPropReload = false;\n const aborters = new Map<string, AbortController>();\n const controller = createVirtualWindowController(fixedAxisWindowAdapter);\n const cursor = options.cursor;\n let cursorQuery = cursor?.query;\n let cursorGeneration = 0;\n let cursorRequestId = 0;\n let cursorPaging = false;\n let cursorFailed = false;\n let cursorLatestScrollTop: number | null = null;\n let cursorSeekTimer = 0;\n let cursorSeekIndex: number | null = null;\n let cursorActiveSeekIndex: number | null = null;\n let cursorSeekAborter: AbortController | null = null;\n const cursorRequests = new Map<string, CursorRequest>();\n const cursorMounted = new Map<string, CursorMounted<Content>>();\n\n const dispatch = (name: string, detail: Record<string, unknown>): void => {\n root?.dispatchEvent(new CustomEvent(name, {bubbles: true, composed: true, detail}));\n };\n const syncState = (): void => {\n if (!root || !spacer) return;\n const cursorExtent = cursorMounted.size === 0\n ? 0\n : Math.max(...[...cursorMounted.values()].map(({startIndex, count}) => startIndex + count));\n const cursorHasNext = [...cursorMounted.values()].some(({page, startIndex, count}) => (\n startIndex + count === cursorExtent && page.hasNext\n ));\n const spacerItems = cursor && totalItems === 0\n ? cursorExtent + (cursorHasNext ? integer(component.props.bufferSize, 1) : 0)\n : totalItems;\n root.toggleAttribute('data-loading', loading > 0);\n root.toggleAttribute('data-empty', cursor ? cursorMounted.size === 0 && loading === 0 : totalItems === 0);\n spacer.style.height = `${Math.max(spacerItems * component.props.itemSize, component.props.itemSize)}px`;\n };\n const updateTotal = (next: number): boolean => {\n const normalized = integer(next);\n if (normalized === totalItems) return false;\n totalItems = normalized;\n syncState();\n dispatch('ui:virtualizer-total-change', {totalItems});\n dispatch('ui:virtualizer-axis-total-change', {axis: 'y', total: totalItems, window: null});\n return true;\n };\n const blockWindow = (start: number): FixedAxisWindow => fixedAxisWindowAdapter.compute({axes: {\n y: {\n total: totalItems,\n itemSize: component.props.itemSize,\n viewportSize: component.props.bufferSize * component.props.itemSize,\n scrollOffset: start * component.props.itemSize,\n buffer: 0,\n },\n }});\n const desiredWindows = (scrollTop: number): FixedAxisWindow[] => {\n if (totalItems === 0 || (!cursor && !component.props.fetchUrl.trim())) return [];\n const size = integer(component.props.bufferSize, 1);\n const index = Math.min(totalItems - 1, Math.floor(Math.max(0, scrollTop) / component.props.itemSize));\n const center = Math.floor(index / size) * size;\n const last = Math.floor((totalItems - 1) / size) * size;\n const starts = [center - size, center, center + size]\n .map((start) => Math.min(last, Math.max(0, start)));\n if (center === 0 && last > size) starts.splice(0, 3, 0, size, Math.min(last, size * 2));\n else if (center === last && last > size) starts.splice(0, 3, Math.max(0, last - (size * 2)), last - size, last);\n return [...new Set(starts)].map(blockWindow);\n };\n const requestUrl = (window: FixedAxisWindow): string => {\n const axis = window.axes.y;\n if (!axis) throw new Error('Vertical virtualizer requires a y window.');\n const url = new URL(component.props.fetchUrl, document.baseURI);\n url.searchParams.set(component.props.startParam, String(axis.start));\n url.searchParams.set(component.props.countParam, String(axis.count));\n url.searchParams.set(component.props.totalParam, String(axis.total));\n return /^[a-z][a-z\\d+.-]*:/i.test(component.props.fetchUrl) || component.props.fetchUrl.startsWith('//')\n ? url.href\n : `${url.pathname}${url.search}${url.hash}`;\n };\n const replaceBlock = async (\n block: BlockRecord,\n payload: VirtualizerFragmentPayload,\n shouldReplace: () => boolean,\n ): Promise<boolean> => {\n const hadFocus = block.element.contains(document.activeElement);\n const replaced = await replaceFragmentChildren(AlpineInstance, block.element, payload.html, {\n assets: payload.assets,\n shouldReplace,\n });\n if (replaced && hadFocus) viewport?.focus({preventScroll: true});\n return replaced;\n };\n const positionBlock = (block: BlockRecord, startIndex: number, count: number): void => {\n block.element.style.height = `${count * component.props.itemSize}px`;\n block.element.style.transform = `translateY(${startIndex * component.props.itemSize}px)`;\n };\n const settle = (): void => {\n loading = Math.max(0, loading - 1);\n syncState();\n if (loading > 0 || latestScrollTop === null || destroyed) return;\n const scrollTop = latestScrollTop;\n latestScrollTop = null;\n reconcile(scrollTop);\n };\n const load = async (\n block: BlockRecord,\n window: FixedAxisWindow,\n request: VirtualWindowRequest<FixedAxisWindow>,\n ): Promise<void> => {\n const axis = window.axes.y;\n if (!axis) return;\n const aborter = new AbortController();\n aborters.set(block.key, aborter);\n loading += 1;\n syncState();\n root?.removeAttribute('data-error');\n dispatch('ui:virtualizer-load-start', {block: block.key, window});\n try {\n const requestId = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${request.requestGeneration}`;\n const response = await fetch(requestUrl(window), {\n method: 'GET',\n headers: {\n Accept: 'text/html',\n 'X-Trellis-Virtualizer': 'true',\n 'X-Trellis-Request-ID': requestId,\n },\n signal: aborter.signal,\n });\n if (!response.ok && response.status !== 204) {\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:virtualizer-error', {block: block.key, window, status: response.status});\n return;\n }\n const payload = await parseVirtualizerFragmentResponse(response, component.props);\n if (controller.pending(block.key) !== request || destroyed) return;\n const replaced = await replaceBlock(\n block,\n payload,\n () => controller.pending(block.key) === request && !destroyed,\n );\n if (!replaced) return;\n const totalChanged = payload.totalItems !== null && updateTotal(payload.totalItems);\n if (!controller.commit(request, window)) return;\n positionBlock(block, axis.start, axis.count);\n dispatch('ui:virtualizer-load', {block: block.key, window});\n if (totalChanged) latestScrollTop = viewport?.scrollTop ?? 0;\n } catch (error) {\n if (aborter.signal.aborted) return;\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:virtualizer-error', {block: block.key, window, status: 0, error});\n } finally {\n if (aborters.get(block.key) === aborter) aborters.delete(block.key);\n settle();\n }\n };\n const cursorLimit = (): number => integer(component.props.bufferSize, 1);\n const cursorRecords = (): CursorMounted<Content>[] => (\n [...cursorMounted.values()].sort((left, right) => left.startIndex - right.startIndex)\n );\n const cursorRequestIsCurrent = (block: BlockRecord, request: CursorRequest): boolean => (\n !destroyed\n && request.generation === cursorGeneration\n && cursorRequests.get(block.key)?.id === request.id\n );\n const loadCursorPage = async (\n block: BlockRecord,\n getPage: (signal: AbortSignal) => Promise<CursorPage<Content>>,\n fallbackStartIndex: number,\n suppliedAborter?: AbortController,\n kind: CursorPageKind = 'page',\n ): Promise<CursorMounted<Content> | null> => {\n if (!cursor || cursorRequests.has(block.key)) return null;\n const aborter = suppliedAborter ?? new AbortController();\n const request: CursorRequest = {\n generation: cursorGeneration,\n id: ++cursorRequestId,\n aborter,\n };\n cursorRequests.set(block.key, request);\n loading += 1;\n syncState();\n root?.removeAttribute('data-error');\n dispatch('ui:virtualizer-load-start', {block: block.key, mode: 'cursor'});\n try {\n const page = await getPage(aborter.signal);\n if (!cursorRequestIsCurrent(block, request)) return null;\n if (page.hasNext && page.endCursor === null) {\n throw new Error('Cursor page hasNext requires a non-null endCursor.');\n }\n if (page.hasPrevious && page.startCursor === null) {\n throw new Error('Cursor page hasPrevious requires a non-null startCursor.');\n }\n if (kind === 'seek' && page.startIndex === undefined) {\n throw new Error('Cursor seek response requires startIndex.');\n }\n const payload = await cursor.responseAdapter(page.content, page);\n if (!cursorRequestIsCurrent(block, request)) return null;\n const startIndex = page.startIndex === undefined\n ? integer(fallbackStartIndex)\n : integer(page.startIndex);\n const pageTotal = payload.totalItems ?? totalItems;\n const returnedCount = payload.itemCount === undefined\n ? cursorLimit()\n : integer(payload.itemCount);\n const count = pageTotal > 0\n ? Math.min(cursorLimit(), Math.max(0, pageTotal - startIndex))\n : returnedCount;\n const replaced = await replaceBlock(\n block,\n payload,\n () => cursorRequestIsCurrent(block, request),\n );\n if (!replaced || !cursorRequestIsCurrent(block, request)) return null;\n if (payload.totalItems !== null) updateTotal(payload.totalItems);\n else if (!page.hasNext) updateTotal(startIndex + count);\n const mounted = {block, page, startIndex, count};\n cursorMounted.set(block.key, mounted);\n positionBlock(block, startIndex, count);\n dispatch('ui:virtualizer-load', {\n block: block.key,\n mode: 'cursor',\n page: {...page, content: undefined},\n startIndex,\n });\n return mounted;\n } catch (error) {\n if (aborter.signal.aborted || !cursorRequestIsCurrent(block, request)) return null;\n cursorFailed = true;\n root?.setAttribute('data-error', '');\n dispatch('ui:virtualizer-error', {block: block.key, mode: 'cursor', status: 0, error});\n return null;\n } finally {\n if (cursorRequests.get(block.key) === request) cursorRequests.delete(block.key);\n loading = Math.max(0, loading - 1);\n syncState();\n }\n };\n const finishCursorPaging = (): void => {\n cursorPaging = false;\n const scrollTop = cursorLatestScrollTop ?? viewport?.scrollTop ?? 0;\n cursorLatestScrollTop = null;\n reconcileCursor(scrollTop);\n };\n const loadInitialCursorPages = async (): Promise<void> => {\n if (!cursor || cursorPaging || cursorFailed || cursorMounted.size > 0) return;\n cursorPaging = true;\n const generation = cursorGeneration;\n try {\n const first = await loadCursorPage(\n blocks[0]!,\n (signal) => cursor.dataSource.first({limit: cursorLimit(), query: cursorQuery as Query, signal}),\n 0,\n );\n if (!first || generation !== cursorGeneration) return;\n let current = first;\n for (const block of blocks.slice(1)) {\n if (!current.page.hasNext || current.page.endCursor === null) break;\n const nextCursor = current.page.endCursor;\n const next = await loadCursorPage(\n block,\n (signal) => cursor.dataSource.next({\n cursor: nextCursor,\n limit: cursorLimit(),\n query: cursorQuery as Query,\n signal,\n }),\n current.startIndex + current.count,\n );\n if (!next || generation !== cursorGeneration) break;\n current = next;\n }\n } finally {\n if (generation === cursorGeneration) finishCursorPaging();\n }\n };\n const loadNextCursorPage = async (): Promise<void> => {\n if (!cursor || cursorPaging) return;\n const records = cursorRecords();\n const last = records.at(-1);\n if (!last?.page.hasNext || last.page.endCursor === null) return;\n const recycled = records[0]?.block;\n if (!recycled) return;\n cursorPaging = true;\n const generation = cursorGeneration;\n const endCursor = last.page.endCursor;\n try {\n await loadCursorPage(\n recycled,\n (signal) => cursor.dataSource.next({\n cursor: endCursor,\n limit: cursorLimit(),\n query: cursorQuery as Query,\n signal,\n }),\n last.startIndex + last.count,\n );\n } finally {\n if (generation === cursorGeneration) finishCursorPaging();\n }\n };\n const loadPreviousCursorPage = async (): Promise<void> => {\n if (!cursor || cursorPaging) return;\n const records = cursorRecords();\n const first = records[0];\n if (!first?.page.hasPrevious || first.page.startCursor === null) return;\n const recycled = records.at(-1)?.block;\n if (!recycled) return;\n cursorPaging = true;\n const generation = cursorGeneration;\n const startCursor = first.page.startCursor;\n try {\n await loadCursorPage(\n recycled,\n (signal) => cursor.dataSource.previous({\n cursor: startCursor,\n limit: cursorLimit(),\n query: cursorQuery as Query,\n signal,\n }),\n Math.max(0, first.startIndex - cursorLimit()),\n );\n } finally {\n if (generation === cursorGeneration) finishCursorPaging();\n }\n };\n const clearCursorSeekTimer = (): void => {\n if (cursorSeekTimer) window.clearTimeout(cursorSeekTimer);\n cursorSeekTimer = 0;\n cursorSeekIndex = null;\n };\n const performCursorSeek = async (index: number): Promise<void> => {\n const seek = cursor?.dataSource.seek;\n if (!cursor || !seek) return;\n cursorSeekAborter?.abort();\n cursorRequests.forEach(({aborter}) => aborter.abort());\n cursorRequests.clear();\n cursorPaging = true;\n const generation = cursorGeneration;\n const aborter = new AbortController();\n cursorSeekAborter = aborter;\n cursorActiveSeekIndex = index;\n const middle = blocks[1]!;\n cursorMounted.clear();\n blocks.forEach((block) => {\n if (block !== middle) void replaceFragmentChildren(AlpineInstance, block.element, '');\n });\n try {\n const resolved = await loadCursorPage(\n middle,\n (signal) => seek({index, limit: cursorLimit(), query: cursorQuery as Query, signal}),\n index,\n aborter,\n 'seek',\n );\n if (!resolved || generation !== cursorGeneration || cursorSeekAborter !== aborter) return;\n const adjacent: Array<Promise<CursorMounted<Content> | null>> = [];\n if (resolved.page.hasPrevious && resolved.page.startCursor !== null) {\n const startCursor = resolved.page.startCursor;\n adjacent.push(loadCursorPage(\n blocks[0]!,\n (signal) => cursor.dataSource.previous({\n cursor: startCursor,\n limit: cursorLimit(),\n query: cursorQuery as Query,\n signal,\n }),\n Math.max(0, resolved.startIndex - cursorLimit()),\n ));\n }\n if (resolved.page.hasNext && resolved.page.endCursor !== null) {\n const endCursor = resolved.page.endCursor;\n adjacent.push(loadCursorPage(\n blocks[2]!,\n (signal) => cursor.dataSource.next({\n cursor: endCursor,\n limit: cursorLimit(),\n query: cursorQuery as Query,\n signal,\n }),\n resolved.startIndex + resolved.count,\n ));\n }\n await Promise.all(adjacent);\n } finally {\n if (cursorSeekAborter === aborter) {\n cursorSeekAborter = null;\n cursorActiveSeekIndex = null;\n if (generation === cursorGeneration) finishCursorPaging();\n }\n }\n };\n const scheduleCursorSeek = (index: number): void => {\n if (!cursor?.dataSource.seek) return;\n const clamped = totalItems > 0 ? Math.min(Math.max(0, totalItems - 1), integer(index)) : integer(index);\n if (cursorRecords().some((record) => (\n clamped >= record.startIndex && clamped < record.startIndex + record.count\n ))) return;\n if (cursorSeekIndex === clamped || cursorActiveSeekIndex === clamped) return;\n clearCursorSeekTimer();\n cursorSeekIndex = clamped;\n cursorSeekTimer = window.setTimeout(() => {\n cursorSeekTimer = 0;\n cursorSeekIndex = null;\n void performCursorSeek(clamped);\n }, integer(cursor.seekDebounce ?? 100));\n };\n const reconcileCursor = (scrollTop: number): void => {\n if (!cursor) return;\n const index = totalItems > 0\n ? Math.min(totalItems - 1, Math.floor(Math.max(0, scrollTop) / component.props.itemSize))\n : Math.floor(Math.max(0, scrollTop) / component.props.itemSize);\n if (cursorSeekAborter && cursor.dataSource.seek && cursorActiveSeekIndex !== index) {\n cursorLatestScrollTop = scrollTop;\n scheduleCursorSeek(index);\n return;\n }\n if (cursorPaging || loading > 0) {\n cursorLatestScrollTop = scrollTop;\n return;\n }\n const records = cursorRecords();\n if (records.length === 0) {\n void loadInitialCursorPages();\n return;\n }\n const covered = records.find((record) => (\n index >= record.startIndex && index < record.startIndex + record.count\n ));\n if (covered) {\n clearCursorSeekTimer();\n if (covered === records[0] && covered.page.hasPrevious) void loadPreviousCursorPage();\n else if (covered === records.at(-1) && covered.page.hasNext) void loadNextCursorPage();\n return;\n }\n if (cursor.dataSource.seek) {\n scheduleCursorSeek(index);\n return;\n }\n if (index < records[0]!.startIndex) void loadPreviousCursorPage();\n else void loadNextCursorPage();\n };\n const reconcile = (scrollTop: number): void => {\n if (cursor) {\n reconcileCursor(scrollTop);\n return;\n }\n if (loading > 0) {\n latestScrollTop = scrollTop;\n return;\n }\n const desired = desiredWindows(scrollTop);\n const signature = desired.map((window) => window.key).join(',');\n const logicalIndex = Math.min(\n Math.max(0, totalItems - 1),\n Math.floor(Math.max(0, scrollTop) / component.props.itemSize),\n );\n const center = desired.find((window) => {\n const axis = window.axes.y;\n return axis && logicalIndex >= axis.start && logicalIndex < axis.start + axis.count;\n }) ?? desired[0];\n if (center && currentWindowKey !== center.key) {\n currentWindowKey = center.key;\n const axis = center.axes.y!;\n dispatch('ui:virtualizer-window', {window: center});\n dispatch('ui:virtualizer-range', {\n start: axis.start,\n count: axis.count,\n end: axis.start + axis.count,\n window: center,\n });\n }\n if (!signature) {\n blocks.forEach((block) => void replaceFragmentChildren(AlpineInstance, block.element, ''));\n return;\n }\n\n const preserved = new Set<BlockRecord>();\n desired.forEach((window) => {\n const existing = blocks.find((block) => controller.mounted(block.key)?.key === window.key);\n if (existing) preserved.add(existing);\n });\n const available = blocks.filter((block) => !preserved.has(block));\n desired.forEach((window) => {\n if (blocks.some((block) => controller.mounted(block.key)?.key === window.key)) return;\n const block = available.shift();\n if (!block) return;\n const request = controller.begin(block.key, window);\n if (request) void load(block, window, request);\n });\n };\n const invalidate = (): void => {\n aborters.forEach((aborter) => aborter.abort());\n aborters.clear();\n loading = 0;\n latestScrollTop = null;\n currentWindowKey = '';\n controller.invalidate();\n cursorGeneration += 1;\n clearCursorSeekTimer();\n cursorSeekAborter?.abort();\n cursorSeekAborter = null;\n cursorActiveSeekIndex = null;\n cursorRequests.forEach(({aborter}) => aborter.abort());\n cursorRequests.clear();\n cursorMounted.clear();\n cursorPaging = false;\n cursorFailed = false;\n cursorLatestScrollTop = null;\n blocks.forEach((block) => {\n block.element.style.height = '';\n block.element.style.transform = '';\n void replaceFragmentChildren(AlpineInstance, block.element, '');\n });\n syncState();\n };\n\n const component: TrellisAlpineComponent<VirtualizerData<Query>> = {\n supportsSeek: Boolean(cursor?.dataSource.seek),\n props: null as unknown as PropState<typeof virtualizerSchema>,\n init(): void {\n root = this.$el;\n destroyed = false;\n this.props = defineProps({\n el: root,\n schema: virtualizerSchema,\n onChange: (_state, changes) => {\n if (suppressPropReload) return;\n if (changes.some(({key}) => key === 'totalItems')) {\n updateTotal(this.props.totalItems);\n if (!cursor) this.reload();\n } else if (changes.some(({key}) => ['fetchUrl', 'itemSize', 'bufferSize'].includes(key))) {\n this.reload();\n }\n },\n });\n totalItems = cursor\n ? integer(this.props.totalItems)\n : this.props.fetchUrl.trim()\n ? Math.max(1, integer(this.props.totalItems))\n : 0;\n viewport = root.querySelector<HTMLElement>('[data-ui-scroll-area-viewport]') ?? root;\n spacer = root.querySelector<HTMLElement>('[data-ui-virtualizer-spacer]');\n blocks = Array.from(root.querySelectorAll<HTMLElement>('[data-ui-virtualizer-block]'))\n .slice(0, 3)\n .map((element, index) => ({element, key: `block-${index + 1}`}));\n if (!spacer || blocks.length !== 3) throw new Error('Virtualizer requires one spacer and three block containers.');\n viewport.style.overscrollBehavior = 'contain';\n viewport.style.overflowAnchor = 'none';\n listenerAborter = new AbortController();\n viewport.addEventListener('scroll', () => {\n if (scrollFrame) return;\n scrollFrame = requestAnimationFrame(() => {\n scrollFrame = 0;\n if (viewport) reconcile(viewport.scrollTop);\n });\n }, {passive: true, signal: listenerAborter.signal});\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalItems,\n itemSize: this.props.itemSize,\n viewportSize: viewport.clientHeight,\n scrollOffset: 0,\n buffer: this.props.bufferSize,\n }, {axis: 'y', index: this.props.initialIndex});\n syncState();\n reconcile(viewport.scrollTop);\n },\n destroy(): void {\n destroyed = true;\n if (scrollFrame) cancelAnimationFrame(scrollFrame);\n listenerAborter?.abort();\n listenerAborter = null;\n invalidate();\n this.props.disconnect();\n root = null;\n viewport = null;\n spacer = null;\n blocks = [];\n },\n scrollToIndex(index, align = 'start'): void {\n if (!viewport) return;\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalItems,\n itemSize: this.props.itemSize,\n viewportSize: viewport.clientHeight,\n scrollOffset: viewport.scrollTop,\n buffer: this.props.bufferSize,\n }, {axis: 'y', index, align});\n reconcile(viewport.scrollTop);\n },\n setTotalItems(count): void {\n updateTotal(count);\n if (cursor) {\n if (viewport) reconcileCursor(viewport.scrollTop);\n return;\n }\n const scrollTop = viewport?.scrollTop;\n this.reload(scrollTop === undefined ? {} : {scrollTop});\n },\n setUrl(url, options = {}): void {\n const nextUrl = String(url).trim();\n suppressPropReload = true;\n this.props.fetchUrl = nextUrl;\n suppressPropReload = false;\n updateTotal(nextUrl ? Math.max(1, integer(this.props.totalItems)) : 0);\n if (options.reset ?? true) this.reset();\n else this.reload();\n },\n setQuery(query): void {\n if (!cursor) return;\n cursorQuery = query;\n this.reset();\n },\n reset(options = {}): void {\n this.reload({scrollTop: options.scrollTop ?? 0});\n },\n reload(options = {}): void {\n const scrollTop = options.scrollTop ?? viewport?.scrollTop ?? 0;\n invalidate();\n if (viewport) viewport.scrollTop = Math.max(0, scrollTop);\n reconcile(scrollTop);\n },\n };\n return component;\n};\n\nexport {UiVirtualizer};\nexport type {\n CursorDataSource,\n CursorFirstArgs,\n CursorMoveArgs,\n CursorPage,\n CursorResponseAdapter,\n CursorRenderPayload,\n CursorSeekArgs,\n SoughtCursorPage,\n CursorVirtualizerOptions,\n} from './cursor-data-source';\nexport type {\n ResetOptions,\n SetUrlOptions,\n UiVirtualizerApi,\n VirtualizerOptions,\n VirtualizerData,\n VirtualScrollAlign,\n};\n","type CursorPage<Content> = {\n content: Content;\n startCursor: string | null;\n endCursor: string | null;\n hasNext: boolean;\n hasPrevious: boolean;\n startIndex?: number;\n};\n\ntype CursorRenderPayload = {\n html: string;\n assets: Array<{id: string; src: string; preloads?: string[]}>;\n totalItems: number | null;\n itemCount?: number;\n};\n\ntype SoughtCursorPage<Content> = CursorPage<Content> & {\n startIndex: number;\n};\n\ntype CursorFirstArgs<Query> = {\n limit: number;\n query: Query;\n signal: AbortSignal;\n};\n\ntype CursorMoveArgs<Query> = CursorFirstArgs<Query> & {\n cursor: string;\n};\n\ntype CursorSeekArgs<Query> = CursorFirstArgs<Query> & {\n index: number;\n};\n\ntype CursorDataSource<Query, Content> = {\n first(args: CursorFirstArgs<Query>): Promise<CursorPage<Content>>;\n next(args: CursorMoveArgs<Query>): Promise<CursorPage<Content>>;\n previous(args: CursorMoveArgs<Query>): Promise<CursorPage<Content>>;\n seek?(args: CursorSeekArgs<Query>): Promise<SoughtCursorPage<Content>>;\n};\n\ntype CursorResponseAdapter<Content> = (\n content: Content,\n page: CursorPage<Content>,\n) => CursorRenderPayload | Promise<CursorRenderPayload>;\n\ntype CursorVirtualizerOptions<Query, Content> = {\n dataSource: CursorDataSource<Query, Content>;\n query: Query;\n responseAdapter: CursorResponseAdapter<Content>;\n seekDebounce?: number;\n};\n\ntype ServerCursorResponse = {\n content: string;\n assets?: Array<{id: string; src: string; preloads?: string[]}>;\n startCursor: string | null;\n endCursor: string | null;\n hasNext: boolean;\n hasPrevious: boolean;\n startIndex?: number;\n total?: number;\n count?: number;\n};\n\nconst serverCursorOptions = (\n element: () => HTMLElement,\n): CursorVirtualizerOptions<null, ServerCursorResponse> => {\n const requestPage = async ({\n cursor,\n direction,\n limit,\n signal,\n index,\n }: {\n cursor: string | null;\n direction: 'forward' | 'backward';\n limit: number;\n signal: AbortSignal;\n index?: number;\n }): Promise<CursorPage<ServerCursorResponse>> => {\n const fetchUrl = element().dataset.fetchUrl ?? '';\n const url = new URL(fetchUrl, document.baseURI);\n url.searchParams.set('cursor', cursor ?? '');\n url.searchParams.set('direction', direction);\n url.searchParams.set('limit', String(limit));\n if (index !== undefined) url.searchParams.set('index', String(index));\n const href = /^[a-z][a-z\\d+.-]*:/i.test(fetchUrl) || fetchUrl.startsWith('//')\n ? url.href\n : `${url.pathname}${url.search}${url.hash}`;\n const response = await fetch(href, {signal});\n if (!response.ok) throw new Error(`Cursor request failed (${response.status}).`);\n const page = await response.json() as ServerCursorResponse;\n return {...page, content: page};\n };\n return {\n query: null,\n dataSource: {\n first: ({limit, signal}) => requestPage({cursor: null, direction: 'forward', limit, signal}),\n next: ({cursor, limit, signal}) => requestPage({cursor, direction: 'forward', limit, signal}),\n previous: ({cursor, limit, signal}) => requestPage({cursor, direction: 'backward', limit, signal}),\n seek: ({index, limit, signal}) => requestPage({\n cursor: null, direction: 'forward', index, limit, signal,\n }).then((page) => {\n if (page.startIndex === undefined) throw new Error('Cursor seek response is missing startIndex.');\n return {...page, startIndex: page.startIndex};\n }),\n },\n responseAdapter: (page) => ({\n html: page.content,\n assets: page.assets ?? [],\n totalItems: page.total ?? null,\n ...(page.count === undefined ? {} : {itemCount: page.count}),\n }),\n };\n};\n\nexport {serverCursorOptions};\n\nexport type {\n CursorDataSource,\n CursorFirstArgs,\n CursorMoveArgs,\n CursorPage,\n CursorResponseAdapter,\n CursorRenderPayload,\n CursorSeekArgs,\n ServerCursorResponse,\n SoughtCursorPage,\n CursorVirtualizerOptions,\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var e=[`true`,`1`,`yes`,`on`],t=({value:t})=>t!==void 0&&(t===``||e.includes(t.toLowerCase())),n=({el:e,name:t,detail:n,composed:r=!1})=>{let i={bubbles:!0,composed:r};n!==void 0&&(i.detail=n),e.dispatchEvent(new CustomEvent(t,i))},r=({target:e,event:t,handler:n,cleanup:r,options:i})=>{e.addEventListener(t,n,i);let a=()=>e.removeEventListener(t,n,i);return r?.push(a),a},i=({el:e,attr:t,present:n,value:r=``})=>{if(n){e.getAttribute(t)!==r&&e.setAttribute(t,r);return}e.removeAttribute(t)},a=({el:e,attr:t,value:n})=>{e.getAttribute(t)!==n&&e.setAttribute(t,n)},o=({el:e,attr:t})=>{e.hasAttribute(t)&&e.removeAttribute(t)},s=({el:e})=>(e.closest(`[dir]`)?.dir||document.dir).toLowerCase()===`rtl`;export{o as a,s as i,t as n,a as o,n as r,i as s,r as t};
|
|
2
|
-
//# sourceMappingURL=dom-qAeVl7dc.js.map
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dom-qAeVl7dc.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom-qAeVl7dc.js","names":[],"sources":["../../../../../../../../client/src/utils/dom.ts"],"sourcesContent":["type CleanupStack = Array<() => void>;\n\ntype DispatchOptions<T> = {\n el: HTMLElement;\n name: string;\n detail?: T;\n composed?: boolean;\n};\n\ntype AddListenerOptions = {\n target: EventTarget;\n event: string;\n handler: EventListener;\n cleanup?: CleanupStack;\n options?: globalThis.AddEventListenerOptions;\n};\n\ntype PresenceOptions = {\n el: HTMLElement;\n attr: string;\n present: boolean;\n value?: string;\n};\n\ntype AttributeOptions = {\n el: HTMLElement;\n attr: string;\n value: string;\n};\n\ntype ElementOptions = {\n el: HTMLElement;\n};\n\ntype BoolOptions = {\n value: string | undefined;\n};\n\nconst TRUE_STRINGS = ['true', '1', 'yes', 'on'];\n\nconst asBool = ({value}: BoolOptions): boolean => (\n value !== undefined && (value === '' || TRUE_STRINGS.includes(value.toLowerCase()))\n);\n\nconst dispatch = <T = unknown>({el, name, detail, composed = false}: DispatchOptions<T>): void => {\n const eventInit: CustomEventInit<T> = {bubbles: true, composed};\n if (detail !== undefined) eventInit.detail = detail;\n el.dispatchEvent(new CustomEvent(name, eventInit));\n};\n\nconst addListener = ({\n target,\n event,\n handler,\n cleanup,\n options,\n}: AddListenerOptions): (() => void) => {\n target.addEventListener(event, handler, options);\n const remove = (): void => target.removeEventListener(event, handler, options);\n cleanup?.push(remove);\n return remove;\n};\n\nconst setPresence = ({el, attr, present, value = ''}: PresenceOptions): void => {\n if (present) {\n if (el.getAttribute(attr) !== value) el.setAttribute(attr, value);\n return;\n }\n\n el.removeAttribute(attr);\n};\n\nconst setAttribute = ({el, attr, value}: AttributeOptions): void => {\n if (el.getAttribute(attr) !== value) el.setAttribute(attr, value);\n};\n\nconst removeAttribute = ({el, attr}: Omit<AttributeOptions, 'value'>): void => {\n if (el.hasAttribute(attr)) el.removeAttribute(attr);\n};\n\nconst isRtl = ({el}: ElementOptions): boolean => {\n const closestDir = el.closest<HTMLElement>('[dir]');\n return (closestDir?.dir || document.dir).toLowerCase() === 'rtl';\n};\n\nexport {addListener, asBool, dispatch, isRtl, removeAttribute, setAttribute, setPresence};\nexport type {AddListenerOptions, AttributeOptions, BoolOptions, CleanupStack, DispatchOptions, ElementOptions, PresenceOptions};\n"],"mappings":"AAsCA,IAAM,EAAe,CAAC,OAAQ,IAAK,MAAO,IAAI,EAExC,GAAU,CAAC,WACb,IAAU,IAAA,KAAc,IAAU,IAAM,EAAa,SAAS,EAAM,YAAY,CAAC,GAG/E,GAAyB,CAAC,KAAI,OAAM,SAAQ,WAAW,MAAqC,CAC9F,IAAM,EAAgC,CAAC,QAAS,GAAM,UAAQ,EAC1D,IAAW,IAAA,KAAW,EAAU,OAAS,GAC7C,EAAG,cAAc,IAAI,YAAY,EAAM,CAAS,CAAC,CACrD,EAEM,GAAe,CACjB,SACA,QACA,UACA,UACA,aACoC,CACpC,EAAO,iBAAiB,EAAO,EAAS,CAAO,EAC/C,IAAM,MAAqB,EAAO,oBAAoB,EAAO,EAAS,CAAO,EAE7E,OADA,GAAS,KAAK,CAAM,EACb,CACX,EAEM,GAAe,CAAC,KAAI,OAAM,UAAS,QAAQ,MAA+B,CAC5E,GAAI,EAAS,CACL,EAAG,aAAa,CAAI,IAAM,GAAO,EAAG,aAAa,EAAM,CAAK,EAChE,MACJ,CAEA,EAAG,gBAAgB,CAAI,CAC3B,EAEM,GAAgB,CAAC,KAAI,OAAM,WAAmC,CAC5D,EAAG,aAAa,CAAI,IAAM,GAAO,EAAG,aAAa,EAAM,CAAK,CACpE,EAEM,GAAmB,CAAC,KAAI,UAAiD,CACvE,EAAG,aAAa,CAAI,GAAG,EAAG,gBAAgB,CAAI,CACtD,EAEM,GAAS,CAAC,SACO,EAAG,QAAqB,OACnC,GAAY,KAAO,SAAS,KAAK,YAAY,IAAM"}
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/drag-and-drop-DHq3udf7.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{_ as e,a as t,b as n,c as r,g as i,h as a,i as o,n as s,o as c,r as l,s as u,t as d,v as f,y as p}from"./element-adapter-native-data-key-CW8suC9A.js";import{a as m,c as h,f as g,l as _,r as v}from"./codecs-Cb1ns_47.js";import{r as y,s as b}from"./dom-qAeVl7dc.js";var x=p(),S=2147483647,C={inset:`unset`,border:`none`,padding:0,margin:0,overflow:`visible`,color:`inherit`,background:`transparent`,width:`auto`,height:`auto`},w=a(function(){return typeof HTMLElement<`u`&&typeof HTMLElement.prototype.showPopover==`function`});function T(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function E(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?T(Object(n),!0).forEach(function(t){i(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):T(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var D=2,O=D/2;function k(e){return{x:Math.floor(e.x),y:Math.floor(e.y)}}function A(e){return{x:e.x-O,y:e.y-O}}function ee(e){return{x:Math.max(e.x,0),y:Math.max(e.y,0)}}function te(e){return{x:Math.min(e.x,window.innerWidth-D),y:Math.min(e.y,window.innerHeight-D)}}function j(e){var t=e.client,n=te(ee(A(k(t))));return DOMRect.fromRect({x:n.x,y:n.y,width:D,height:D})}function M(e){var t=e.clientRect;return{left:`${t.left}px`,top:`${t.top}px`,width:`${t.width}px`,height:`${t.height}px`}}function ne(e){var t=e.client,n=e.clientRect;return t.x>=n.x&&t.x<=n.x+n.width&&t.y>=n.y&&t.y<=n.y+n.height}function N(e){var t=e.initial,n=document.createElement(`div`);n.setAttribute(f,`true`),w()&&n.setAttribute(`popover`,`manual`);var r=j({client:t});Object.assign(n.style,E(E({position:`fixed`},w()?C:{zIndex:S}),{},{backgroundColor:`transparent`,padding:0,margin:0,boxSizing:`border-box`,pointerEvents:`auto`},M({clientRect:r}))),document.body.appendChild(n),w()&&n.showPopover();var i=(0,x.bind)(window,{type:`pointermove`,listener:function(e){r=j({client:{x:e.clientX,y:e.clientY}}),Object.assign(n.style,M({clientRect:r}))},options:{capture:!0}});return function(e){var t=e.current;if(i(),ne({client:t,clientRect:r})){n.remove();return}function a(){o(),n.remove()}var o=(0,x.bindAll)(window,[{type:`pointerdown`,listener:a},{type:`pointermove`,listener:a},{type:`focusin`,listener:a},{type:`focusout`,listener:a},{type:`dragstart`,listener:a},{type:`dragenter`,listener:a},{type:`dragover`,listener:a}],{capture:!0})}}function P(){var e=null;function t(){return e=null,(0,x.bind)(window,{type:`pointermove`,listener:function(t){e={x:t.clientX,y:t.clientY}},options:{capture:!0}})}function n(){var t=null;return function(n){var r=n.eventName,i=n.payload;if(r===`onDragStart`){var a=i.location.initial.input;t=N({initial:e??{x:a.clientX,y:a.clientY}})}if(r===`onDrop`){var o,s=i.location.current.input;(o=t)==null||o({current:{x:s.clientX,y:s.clientY}}),t=null,e=null}}}return{bindEvents:t,getOnPostDispatch:n}}var F=new WeakMap;function I(e){return F.set(e.element,e),function(){F.delete(e.element)}}var L=P(),R=t({typeKey:`element`,defaultDropEffect:`move`,mount:function(t){return u(L.bindEvents(),(0,x.bind)(document,{type:`dragstart`,listener:function(i){if(t.canStart(i)&&!i.defaultPrevented&&i.dataTransfer){var a=i.target;if(a instanceof HTMLElement){var c=F.get(a);if(c){var u=r(i),f={element:c.element,dragHandle:c.dragHandle??null,input:u};if(c.canDrag&&!c.canDrag(f)){i.preventDefault();return}if(c.dragHandle){var p=e({x:u.clientX,y:u.clientY});if(!c.dragHandle.contains(p)){i.preventDefault();return}}var m=c.getInitialDataForExternal?.call(c,f)??null;if(m)for(var h=0,g=Object.entries(m);h<g.length;h++){var _=n(g[h],2),v=_[0],y=_[1];i.dataTransfer.setData(v,y??``)}o()&&!i.dataTransfer.types.includes(`text/plain`)&&!i.dataTransfer.types.includes(`text/uri-list`)&&i.dataTransfer.setData(s,l),i.dataTransfer.setData(d,``);var b={type:`element`,payload:{element:c.element,dragHandle:c.dragHandle??null,data:c.getInitialData?.call(c,f)??{}},startedFrom:`internal`};t.start({event:i,dragType:b})}}}}}))},dispatchEventToSource:function(e){var t,n,r=e.eventName,i=e.payload;(t=F.get(i.source.element))==null||(n=t[r])==null||n.call(t,i)},onPostDispatch:L.getOnPostDispatch()}),z=R.dropTarget,B=R.monitor;function V(e){return a(u(R.registerUsage(),I(e),c(e.element,{attribute:`draggable`,value:`true`})))}var H=function(){if(typeof window>`u`)return null;var e=new Image;return e.src=`data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==`,e}();function U(e){var t=e.nativeSetDragImage;t&&H&&t(H,0,0)}var W=(e,t)=>{let n=e=>{e.dataTransfer&&(e.dataTransfer.effectAllowed=t)};return e.addEventListener(`dragstart`,n),()=>e.removeEventListener(`dragstart`,n)},G=e=>({clientX:e.location.current.input.clientX,clientY:e.location.current.input.clientY}),K=e=>({clientX:e.location.initial.input.clientX,clientY:e.location.initial.input.clientY}),q=60,J=1,Y=8,X=24,re=`[x-ui-resizable\\:handle], [data-ui-resize-handle]`,Z=`data-ui-resizable-managed-disabled`,ie={resizeAxis:_([`x`,`y`],`x`),resizeMode:_([`onChange`,`onEnd`],`onChange`),resizeMin:g.default(String(q)),resizeMax:g,resizeStep:h.default(J).min(J),resizeHitArea:h.default(Y).min(0),resizeCoarseHitArea:h.default(X).min(0),resizeDirection:_([`positive`,`negative`],`positive`)},Q=({value:e,element:t,axis:n,fallback:r})=>{if(e===void 0||e.trim()===``)return r;let i=Number(e);if(Number.isFinite(i))return i;if(e.endsWith(`px`)){let t=Number(e.slice(0,-2));if(Number.isFinite(t))return t}if(e.endsWith(`rem`)){let t=Number(e.slice(0,-3)),n=Number.parseFloat(getComputedStyle(document.documentElement).fontSize||`16`);if(Number.isFinite(t)&&Number.isFinite(n))return t*n}if(e.endsWith(`em`)){let n=Number(e.slice(0,-2)),r=Number.parseFloat(getComputedStyle(t).fontSize||`16`);if(Number.isFinite(n)&&Number.isFinite(r))return n*r}if(typeof document>`u`)return r;let a=document.createElement(`div`);a.style.position=`absolute`,a.style.visibility=`hidden`,a.style.pointerEvents=`none`,a.style.width=n===`x`?e:`0`,a.style.height=n===`y`?e:`0`,t.append(a);let o=a.getBoundingClientRect();a.remove();let s=n===`x`?o.width:o.height;return s>0?s:r},ae=e=>({$width:e.width,$height:e.height,$delta:e.delta,$axis:e.axis,$phase:e.phase,$previewWidth:e.previewWidth,$previewHeight:e.previewHeight}),$=({element:e,handle:t,axis:n=`x`,min:r=q,max:i=null,step:a=J,mode:o=`onChange`,hitArea:s=Y,coarseHitArea:c=X,direction:l=`positive`,disabled:u=()=>!1,onStart:d,onResize:f,onEnd:p})=>{let m=null,h=[],g=l===`negative`?-1:1,_=()=>{let n=u();return n?(e.setAttribute(`data-disabled`,``),e.setAttribute(Z,``),t.setAttribute(`data-disabled`,``),t.setAttribute(Z,``)):(e.hasAttribute(Z)&&(e.removeAttribute(`data-disabled`),e.removeAttribute(Z)),t.hasAttribute(Z)&&(t.removeAttribute(`data-disabled`),t.removeAttribute(Z))),t.setAttribute(`aria-disabled`,n?`true`:`false`),n},y=()=>typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(pointer: coarse)`).matches?c:s,x=()=>{e.setAttribute(`data-ui-resizable`,``),e.dataset.resizeAxis=n,e.dataset.resizeMode=o,e.dataset.resizeDirection=l,t.setAttribute(`data-ui-resize-handle`,``),t.setAttribute(`role`,`separator`),t.setAttribute(`tabindex`,t.getAttribute(`tabindex`)??`0`),t.setAttribute(`aria-orientation`,n===`x`?`vertical`:`horizontal`),t.style.touchAction=`none`,n===`x`?t.style.minWidth=`${y()}px`:t.style.minHeight=`${y()}px`},S=n=>{b({el:e,attr:`data-resizing`,present:n}),b({el:t,attr:`data-resizing`,present:n})},C=({phase:t,delta:o,input:s,previewOnly:c=!1})=>{let l=e.getBoundingClientRect(),u=m??{width:l.width,height:l.height,startWidth:l.width,startHeight:l.height,startClientX:s.clientX,startClientY:s.clientY},d=n===`x`?v(u.startWidth+o,r,i??1/0,a):u.startWidth,f=n===`y`?v(u.startHeight+o,r,i??1/0,a):u.startHeight;return{width:c?u.width:d,height:c?u.height:f,previewWidth:d,previewHeight:f,delta:o,axis:n,phase:t,input:s}},w=e=>{let a=n===`x`?e.previewWidth:e.previewHeight;t.setAttribute(`aria-valuenow`,String(Math.round(a))),t.setAttribute(`aria-valuemin`,String(Math.round(r))),i===null?t.removeAttribute(`aria-valuemax`):t.setAttribute(`aria-valuemax`,String(Math.round(i)))},T=t=>{let n=e.getBoundingClientRect();m={width:n.width,height:n.height,startWidth:n.width,startHeight:n.height,startClientX:t.clientX,startClientY:t.clientY};let r=C({phase:`start`,delta:0,input:t});return w(r),S(!0),d?.(r),r},E=e=>{if(!m)return null;let t=C({phase:`resize`,delta:(n===`x`?e.clientX-m.startClientX:e.clientY-m.startClientY)*g,input:e,previewOnly:o===`onEnd`});return w(t),f?.(t),o===`onChange`&&(m.width=t.width,m.height=t.height),t},D=e=>{if(!m)return null;let t=C({phase:`end`,delta:(n===`x`?e.clientX-m.startClientX:e.clientY-m.startClientY)*g,input:e});return w(t),p?.(t),m=null,S(!1),t};x(),_(),w(C({phase:`start`,delta:0,input:{clientX:0,clientY:0}})),h.push(V({element:t,canDrag:()=>!_(),getInitialData:()=>({type:`ui-resizable`}),onGenerateDragPreview:U,onDragStart:e=>{_()||T(K(e))},onDrag:e=>{_()||E(G(e))},onDrop:e=>{D(G(e))}}));let O=t=>{if(_())return;let o=a*(t.shiftKey?10:1),s=null;if(n===`x`&&t.key===`ArrowRight`&&(s=o),n===`x`&&t.key===`ArrowLeft`&&(s=-o),n===`y`&&t.key===`ArrowDown`&&(s=o),n===`y`&&t.key===`ArrowUp`&&(s=-o),t.key===`Home`&&(s=(r-e.getBoundingClientRect()[n===`x`?`width`:`height`])*g),t.key===`End`&&i!==null&&(s=(i-e.getBoundingClientRect()[n===`x`?`width`:`height`])*g),s!==null&&(t.preventDefault(),T({clientX:0,clientY:0}),m)){m.startClientX=0,m.startClientY=0;let e=n===`x`?{clientX:s,clientY:0}:{clientX:0,clientY:s};E(e),D(e)}};return t.addEventListener(`keydown`,O),h.push(()=>t.removeEventListener(`keydown`,O)),()=>{h.forEach(e=>e()),S(!1)}},oe=e=>{typeof e.directive==`function`&&e.directive(`ui-resizable`,(t,{value:n,expression:r},{cleanup:i})=>{if(!(t instanceof HTMLElement)||n===`handle`)return;let a=t,o=a.querySelector(re);if(!o)return;let s=m({el:a,schema:ie}),c=s.resizeAxis,l=Q({value:s.resizeMin,element:a,axis:c,fallback:q}),u=s.resizeMax,d=u?Q({value:u,element:a,axis:c,fallback:1/0}):null,f=s.resizeMode,p=r?e.evaluateLater(a,r):null,h=e=>{y({el:a,name:e.phase===`start`?`ui:resize-start`:e.phase===`end`?`ui:resize-end`:`ui:resize`,detail:e}),p&&(f===`onEnd`&&e.phase===`resize`||p(void 0,ae(e)))};i($({element:a,handle:o,axis:c,min:l,max:d===1/0?null:d,step:s.resizeStep,mode:f,hitArea:s.resizeHitArea,coarseHitArea:s.resizeCoarseHitArea,direction:s.resizeDirection,disabled:()=>a.hasAttribute(`data-disabled`)&&!a.hasAttribute(Z)||a.hasAttribute(`data-resize-disabled`)||a.dataset.disabled===`true`&&!a.hasAttribute(Z),onStart:h,onResize:h,onEnd:h}))})};export{K as a,z as c,G as i,B as l,oe as n,U as o,W as r,V as s,$ as t};
|
|
2
|
-
//# sourceMappingURL=drag-and-drop-DHq3udf7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"drag-and-drop-DHq3udf7.js","names":[],"sources":["../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.1/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/util/max-z-index.js","../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.1/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/util/popover-reset-styles.js","../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.1/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/util/supports-popover.js","../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.1/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/honey-pot-fix/make-honey-pot-fix.js","../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.1/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/util/media-types/url-media-type.js","../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.1/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/adapter/element-adapter.js","../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.1/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/public-utils/element/disable-native-drag-preview.js","../../../../../../../../client/src/runtime/drag-and-drop/pdd.ts","../../../../../../../../client/src/runtime/drag-and-drop/index.ts"],"sourcesContent":["// Maximum possible z-index\n// https://stackoverflow.com/questions/491052/minimum-and-maximum-value-of-z-index\nexport var maxZIndex = 2147483647;","/**\n * Resets user agent styles for `[popover]` elements.\n *\n * Browsers apply these defaults to popovers (per the WHATWG HTML spec rendering section):\n * - `inset: 0` + `margin: auto` → centers the popover in the viewport\n * - `border: solid` → visible border\n * - `padding: 0.25em` → internal spacing\n * - `overflow: auto` → scrollbars when content overflows\n * - `color: CanvasText` + `background-color: Canvas` → system theme colors\n *\n * This object neutralizes those defaults so the popover behaves like a plain\n * positioned `<div>`, matching the sizing of the legacy (non-popover)\n * fallback container exactly.\n *\n * **Width and height (`auto`)**\n *\n * `width` and `height` override the spec user agent value of `fit-content`\n * with `auto`.\n *\n * _Why?_\n *\n * - When a `[popover]` is sized with `fit-content` and contains a flex\n * container, Safari collapses any flex item that uses `overflow: auto`\n * to `0px`.\n * - Setting the popover's `width` and `height` to `auto` skips the `fit-content`\n * pass and avoids the bug in Safari\n * - Chromium and Firefox tolerate `fit-content` here, but `auto` is safe\n * everywhere and matches our non-popover path\n */\nexport var popoverResetUserAgentStyles = {\n inset: 'unset',\n border: 'none',\n padding: 0,\n margin: 0,\n overflow: 'visible',\n color: 'inherit',\n background: 'transparent',\n width: 'auto',\n height: 'auto'\n};","import { once } from '../public-utils/once';\n\n// Using `once` as the value won't change in a browser\n\n/**\n * Returns `true` if the browser supports the Popover API (top-layer).\n *\n * When supported, elements with `popover=\"manual\"` can be promoted to the\n * browser's top layer via `element.showPopover()`, which is more reliable\n * than `z-index` for ensuring an element renders above everything else.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Popover_API\n */\nexport var supportsPopover = once(function supportsPopover() {\n return typeof HTMLElement !== 'undefined' && typeof HTMLElement.prototype.showPopover === 'function';\n});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport { bind, bindAll } from 'bind-event-listener';\nimport { maxZIndex } from '../util/max-z-index';\nimport { popoverResetUserAgentStyles } from '../util/popover-reset-styles';\nimport { supportsPopover } from '../util/supports-popover';\nimport { honeyPotDataAttribute } from './honey-pot-data-attribute';\nvar honeyPotSize = 2;\nvar halfHoneyPotSize = honeyPotSize / 2;\n\n/**\n * `clientX` and `clientY` can be in sub pixels (eg `2.332`)\n * However, browser hitbox testing is commonly do to the closest pixel.\n *\n * → https://issues.chromium.org/issues/40940531\n *\n * To be sure that the honey pot will be over the `client` position,\n * we `.floor()` `clientX` and`clientY` and then make it `2px` in size.\n **/\nfunction floorToClosestPixel(point) {\n return {\n x: Math.floor(point.x),\n y: Math.floor(point.y)\n };\n}\n\n/**\n * We want to make sure the honey pot sits around the users position.\n * This seemed to be the most resilient while testing.\n */\nfunction pullBackByHalfHoneyPotSize(point) {\n return {\n x: point.x - halfHoneyPotSize,\n y: point.y - halfHoneyPotSize\n };\n}\n\n/**\n * Prevent the honey pot from changing the window size.\n * This is super unlikely to occur, but just being safe.\n */\nfunction preventGoingBackwardsOffScreen(point) {\n return {\n x: Math.max(point.x, 0),\n y: Math.max(point.y, 0)\n };\n}\n\n/**\n * Prevent the honey pot from changing the window size.\n * This is super unlikely to occur, but just being safe.\n */\nfunction preventGoingForwardsOffScreen(point) {\n return {\n x: Math.min(point.x, window.innerWidth - honeyPotSize),\n y: Math.min(point.y, window.innerHeight - honeyPotSize)\n };\n}\n\n/**\n * Create a `2x2` `DOMRect` around the `client` position\n */\nfunction getHoneyPotRectFor(_ref) {\n var client = _ref.client;\n var point = preventGoingForwardsOffScreen(preventGoingBackwardsOffScreen(pullBackByHalfHoneyPotSize(floorToClosestPixel(client))));\n\n // When debugging, it is helpful to\n // make this element a bit bigger\n return DOMRect.fromRect({\n x: point.x,\n y: point.y,\n width: honeyPotSize,\n height: honeyPotSize\n });\n}\nfunction getRectStyles(_ref2) {\n var clientRect = _ref2.clientRect;\n return {\n left: \"\".concat(clientRect.left, \"px\"),\n top: \"\".concat(clientRect.top, \"px\"),\n width: \"\".concat(clientRect.width, \"px\"),\n height: \"\".concat(clientRect.height, \"px\")\n };\n}\nfunction isWithin(_ref3) {\n var client = _ref3.client,\n clientRect = _ref3.clientRect;\n return (\n // is within horizontal bounds\n client.x >= clientRect.x && client.x <= clientRect.x + clientRect.width &&\n // is within vertical bounds\n client.y >= clientRect.y && client.y <= clientRect.y + clientRect.height\n );\n}\n/**\n * The honey pot fix is designed to get around a painful bug in all browsers.\n *\n * [Overview](https://www.youtube.com/watch?v=udE9qbFTeQg)\n *\n * **Background**\n *\n * When a drag starts, browsers incorrectly think that the users pointer is\n * still depressed where the drag started. Any element that goes under this position\n * will be entered into, causing `\"mouseenter\"` events and `\":hover\"` styles to be applied.\n *\n * _This is a violation of the spec_\n *\n * > \"From the moment that the user agent is to initiate the drag-and-drop operation,\n * > until the end \tof the drag-and-drop operation, device input events\n * > (e.g. mouse and keyboard events) must be suppressed.\"\n * >\n * > - https://html.spec.whatwg.org/multipage/dnd.html#drag-and-drop-processing-model\n *\n * _Some impacts_\n *\n * - `\":hover\"` styles being applied where they shouldn't (looks messy)\n * - components such as tooltips responding to `\"mouseenter\"` can show during a drag,\n * and on an element the user isn't even over\n *\n * Bug: https://issues.chromium.org/issues/41129937\n *\n * **Honey pot fix**\n *\n * 1. Create an element where the browser thinks the depressed pointer is\n * to absorb the incorrect pointer events\n * 2. Remove that element when it is no longer needed\n */\nfunction mountHoneyPot(_ref4) {\n var initial = _ref4.initial;\n var element = document.createElement('div');\n element.setAttribute(honeyPotDataAttribute, 'true');\n\n // Using popover=\"manual\" to place the element in the browser's top layer.\n // This ensures the honey pot is visually on top of everything else,\n // including elements using z-index and other stacking contexts.\n // \"manual\" means no light dismiss — we manage the lifecycle ourselves.\n // Falls back to position:fixed + maxZIndex when the popover API is not available.\n if (supportsPopover()) {\n element.setAttribute('popover', 'manual');\n }\n\n // can shift during the drag thanks to Firefox\n var clientRect = getHoneyPotRectFor({\n client: initial\n });\n Object.assign(element.style, _objectSpread(_objectSpread({\n position: 'fixed'\n }, supportsPopover() ?\n // needs to come first as it has 'inset: unset' which\n // needs to be overridden by our top / left values\n popoverResetUserAgentStyles : {\n // Fallback: using maximum possible z-index so that this element\n // will always be on top of other positioned content.\n zIndex: maxZIndex\n }), {}, {\n // Setting a background color explicitly to avoid any inherited styles.\n // Looks like this could be `opacity: 0`, but worried that _might_\n // cause the element to be ignored on some platforms.\n // When debugging, set backgroundColor to something like \"red\".\n backgroundColor: 'transparent',\n // Being explicit to avoid inheriting styles\n padding: 0,\n margin: 0,\n boxSizing: 'border-box',\n // We want this element to absorb pointer events,\n // it's kind of the whole point 😉\n pointerEvents: 'auto'\n }, getRectStyles({\n clientRect: clientRect\n })));\n document.body.appendChild(element);\n if (supportsPopover()) {\n element.showPopover();\n }\n\n /**\n * 🦊 In firefox we can get `\"pointermove\"` events after the drag\n * has started, which is a spec violation.\n * The final `\"pointermove\"` will reveal where the \"depressed\" position\n * is for our honey pot fix.\n */\n var unbindPointerMove = bind(window, {\n type: 'pointermove',\n listener: function listener(event) {\n var client = {\n x: event.clientX,\n y: event.clientY\n };\n clientRect = getHoneyPotRectFor({\n client: client\n });\n Object.assign(element.style, getRectStyles({\n clientRect: clientRect\n }));\n },\n // using capture so we are less likely to be impacted by event stopping\n options: {\n capture: true\n }\n });\n return function finish(_ref5) {\n var current = _ref5.current;\n // Don't need this any more\n unbindPointerMove();\n\n // If the user is hover the honey pot, we remove it\n // so that the user can continue to interact with the page normally.\n if (isWithin({\n client: current,\n clientRect: clientRect\n })) {\n element.remove();\n return;\n }\n function cleanup() {\n unbindPostDragEvents();\n element.remove();\n }\n var unbindPostDragEvents = bindAll(window, [{\n type: 'pointerdown',\n listener: cleanup\n }, {\n type: 'pointermove',\n listener: cleanup\n }, {\n type: 'focusin',\n listener: cleanup\n }, {\n type: 'focusout',\n listener: cleanup\n },\n // a 'pointerdown' should happen before 'dragstart', but just being super safe\n {\n type: 'dragstart',\n listener: cleanup\n },\n // if the user has dragged something out of the window\n // and then is dragging something back into the window\n // the first events we will see are \"dragenter\" (and then \"dragover\").\n // So if we see any of these we need to clear the post drag fix.\n {\n type: 'dragenter',\n listener: cleanup\n }, {\n type: 'dragover',\n listener: cleanup\n }\n\n // Not adding a \"wheel\" event listener, as \"wheel\" by itself does not\n // resolve the bug.\n ], {\n // Using `capture` so less likely to be impacted by other code stopping events\n capture: true\n });\n };\n}\nexport function makeHoneyPotFix() {\n var latestPointerMove = null;\n function bindEvents() {\n // For sanity, only collecting this value from when events are first bound.\n // This prevents the case where a super old \"pointermove\" could be used\n // from a prior interaction.\n latestPointerMove = null;\n return bind(window, {\n type: 'pointermove',\n listener: function listener(event) {\n latestPointerMove = {\n x: event.clientX,\n y: event.clientY\n };\n },\n // listening for pointer move in capture phase\n // so we are less likely to be impacted by events being stopped.\n options: {\n capture: true\n }\n });\n }\n function getOnPostDispatch() {\n var finish = null;\n return function onPostEvent(_ref6) {\n var eventName = _ref6.eventName,\n payload = _ref6.payload;\n // We are adding the honey pot `onDragStart` so we don't\n // impact the creation of the native drag preview.\n if (eventName === 'onDragStart') {\n var input = payload.location.initial.input;\n\n // Sometimes there will be no latest \"pointermove\" (eg iOS).\n // In which case, we use the start position of the drag.\n var initial = latestPointerMove !== null && latestPointerMove !== void 0 ? latestPointerMove : {\n x: input.clientX,\n y: input.clientY\n };\n\n // Don't need to defensively call `finish()` as `onDrop` from\n // one interaction is guaranteed to be called before `onDragStart`\n // of the next.\n finish = mountHoneyPot({\n initial: initial\n });\n }\n if (eventName === 'onDrop') {\n var _finish;\n var _input = payload.location.current.input;\n (_finish = finish) === null || _finish === void 0 || _finish({\n current: {\n x: _input.clientX,\n y: _input.clientY\n }\n });\n finish = null;\n // this interaction is finished, we want to use\n // the latest \"pointermove\" for each interaction\n latestPointerMove = null;\n }\n };\n }\n return {\n bindEvents: bindEvents,\n getOnPostDispatch: getOnPostDispatch\n };\n}","// Why we put the media types in their own files:\n//\n// - we are not putting them all in one file as not all adapters need all types\n// - we are not putting them in the external helpers as some things just need the\n// types and not the external functions code\nexport var URLMediaType = 'text/uri-list';","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport { bind } from 'bind-event-listener';\nimport { getElementFromPointWithoutHoneypot } from '../honey-pot-fix/get-element-from-point-without-honey-pot';\nimport { makeHoneyPotFix } from '../honey-pot-fix/make-honey-pot-fix';\nimport { makeAdapter } from '../make-adapter/make-adapter';\nimport { combine } from '../public-utils/combine';\nimport { once } from '../public-utils/once';\nimport { addAttribute } from '../util/add-attribute';\nimport { androidFallbackText, isAndroid } from '../util/android';\nimport { getInput } from '../util/get-input';\nimport { textMediaType } from '../util/media-types/text-media-type';\nimport { URLMediaType } from '../util/media-types/url-media-type';\nimport { elementAdapterNativeDataKey } from './element-adapter-native-data-key';\nvar draggableRegistry = new WeakMap();\nfunction addToRegistry(args) {\n draggableRegistry.set(args.element, args);\n return function cleanup() {\n draggableRegistry.delete(args.element);\n };\n}\nvar honeyPotFix = makeHoneyPotFix();\nvar adapter = makeAdapter({\n typeKey: 'element',\n defaultDropEffect: 'move',\n mount: function mount(api) {\n /** Binding event listeners the `document` rather than `window` so that\n * this adapter always gets preference over the text adapter.\n * `document` is the first `EventTarget` under `window`\n * https://twitter.com/alexandereardon/status/1604658588311465985\n */\n return combine(honeyPotFix.bindEvents(), bind(document, {\n type: 'dragstart',\n listener: function listener(event) {\n var _entry$dragHandle, _entry$getInitialData, _entry$getInitialData2, _entry$dragHandle2, _entry$getInitialData3, _entry$getInitialData4;\n if (!api.canStart(event)) {\n return;\n }\n\n // If the \"dragstart\" event is cancelled, then a drag won't start\n // There will be no further drag operation events (eg no \"dragend\" event)\n if (event.defaultPrevented) {\n return;\n }\n\n // Technically `dataTransfer` can be `null` according to the types\n // But that behaviour does not seem to appear in the spec.\n // If there is not `dataTransfer`, we can assume something is wrong and not\n // start a drag\n if (!event.dataTransfer) {\n // Including this code on \"test\" and \"development\" environments:\n // - Browser tests commonly run against \"development\" builds\n // - Unit tests commonly run in \"test\"\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\"\\n It appears as though you have are not testing DragEvents correctly.\\n\\n - If you are unit testing, ensure you have polyfilled DragEvent.\\n - If you are browser testing, ensure you are dispatching drag events correctly.\\n\\n Please see our testing guides for more information:\\n https://atlassian.design/components/pragmatic-drag-and-drop/core-package/testing\\n \".replace(/ {2}/g, ''));\n }\n return;\n }\n\n // the closest parent that is a draggable element will be marked as\n // the `event.target` for the event\n var target = event.target;\n\n // this source is only for elements\n // Note: only HTMLElements can have the \"draggable\" attribute\n if (!(target instanceof HTMLElement)) {\n return;\n }\n\n // see if the thing being dragged is owned by us\n var entry = draggableRegistry.get(target);\n\n // no matching element found\n // → dragging an element with `draggable=\"true\"` that is not controlled by us\n if (!entry) {\n return;\n }\n\n /**\n * A text selection drag _can_ have the `draggable` element be\n * the `event.target` if the user is dragging the text selection\n * from the `draggable`.\n *\n * To know if the `draggable` is being dragged, we look at whether any\n * `\"text/plain\"` data is being dragged. If it is, then a text selection\n * drag is occurring.\n *\n * This behaviour has been validated on:\n *\n * - Chrome@128 on Android@14\n * - Chrome@128 on iOS@17.6.1\n * - Chrome@128 on Windows@11\n * - Chrome@128 on MacOS@14.6.1\n * - Firefox@129 on Windows@11 (not possible for user to select text in a draggable)\n * - Firefox@129 on MacOS@14.6.1 (not possible for user to select text in a draggable)\n *\n * Note: Could usually just use: `event.dataTransfer.types.includes(textMediaType)`\n * but unfortunately ProseMirror is always setting `\"\"` as the dragged text\n *\n * Note: Unfortunately editor is (heavily) leaning on the current functionality today\n * and unwinding it will be a decent amount of effort. So for now, a text selection\n * where the `event.target` is a `draggable` element will still trigger the\n * element adapter.\n *\n * // Future state:\n * if(event.dataTransfer.getData(textMediaType)) {\n * \treturn;\n * }\n *\n */\n\n var input = getInput(event);\n var feedback = {\n element: entry.element,\n dragHandle: (_entry$dragHandle = entry.dragHandle) !== null && _entry$dragHandle !== void 0 ? _entry$dragHandle : null,\n input: input\n };\n\n // Check: does the draggable want to allow dragging?\n if (entry.canDrag && !entry.canDrag(feedback)) {\n // cancel drag operation if we cannot drag\n event.preventDefault();\n return;\n }\n\n // Check: is there a drag handle and is the user using it?\n if (entry.dragHandle) {\n // technically don't need this util, but just being\n // consistent with how we look up what is under the users\n // cursor.\n var over = getElementFromPointWithoutHoneypot({\n x: input.clientX,\n y: input.clientY\n });\n\n // if we are not dragging from the drag handle (or something inside the drag handle)\n // then we will cancel the active drag\n if (!entry.dragHandle.contains(over)) {\n event.preventDefault();\n return;\n }\n }\n\n /**\n * **Goal**\n * Pass information to other applications\n *\n * **Approach**\n * Put data into the native data store\n *\n * **What about the native adapter?**\n * When the element adapter puts native data into the native data store\n * the native adapter is not triggered in the current window,\n * but a native adapter in an external window _can_ be triggered\n *\n * **Why bake this into core?**\n * This functionality could be pulled out and exposed inside of\n * `onGenerateDragPreview`. But decided to make it a part of the\n * base API as it felt like a common enough use case and ended\n * up being a similar amount of code to include this function as\n * it was to expose the hook for it\n */\n var nativeData = (_entry$getInitialData = (_entry$getInitialData2 = entry.getInitialDataForExternal) === null || _entry$getInitialData2 === void 0 ? void 0 : _entry$getInitialData2.call(entry, feedback)) !== null && _entry$getInitialData !== void 0 ? _entry$getInitialData : null;\n if (nativeData) {\n for (var _i = 0, _Object$entries = Object.entries(nativeData); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n key = _Object$entries$_i[0],\n data = _Object$entries$_i[1];\n event.dataTransfer.setData(key, data !== null && data !== void 0 ? data : '');\n }\n }\n\n /**\n * 📱 For Android devices, a drag operation will not start unless\n * \"text/plain\" or \"text/uri-list\" data exists in the native data store\n * https://twitter.com/alexandereardon/status/1732189803754713424\n *\n * Tested on:\n * Device: Google Pixel 5\n * Android version: 14 (November 5, 2023)\n * Chrome version: 120.0\n */\n if (isAndroid() && !event.dataTransfer.types.includes(textMediaType) && !event.dataTransfer.types.includes(URLMediaType)) {\n event.dataTransfer.setData(textMediaType, androidFallbackText);\n }\n\n /**\n * 1. Must set any media type for `iOS15` to work\n * 2. We are also doing adding data so that the native adapter\n * can know that the element adapter has handled this drag\n *\n * We used to wrap this `setData()` in a `try/catch` for Firefox,\n * but it looks like that was not needed.\n *\n * Tested using: https://codesandbox.io/s/checking-firefox-throw-behaviour-on-dragstart-qt8h4f\n *\n * - ✅ Firefox@70.0 (Oct 2019) on macOS Sonoma\n * - ✅ Firefox@70.0 (Oct 2019) on macOS Big Sur\n * - ✅ Firefox@70.0 (Oct 2019) on Windows 10\n *\n * // just checking a few more combinations to be super safe\n *\n * - ✅ Chrome@78 (Oct 2019) on macOS Big Sur\n * - ✅ Chrome@78 (Oct 2019) on Windows 10\n * - ✅ Safari@14.1 on macOS Big Sur\n */\n event.dataTransfer.setData(elementAdapterNativeDataKey, '');\n var payload = {\n element: entry.element,\n dragHandle: (_entry$dragHandle2 = entry.dragHandle) !== null && _entry$dragHandle2 !== void 0 ? _entry$dragHandle2 : null,\n data: (_entry$getInitialData3 = (_entry$getInitialData4 = entry.getInitialData) === null || _entry$getInitialData4 === void 0 ? void 0 : _entry$getInitialData4.call(entry, feedback)) !== null && _entry$getInitialData3 !== void 0 ? _entry$getInitialData3 : {}\n };\n var dragType = {\n type: 'element',\n payload: payload,\n startedFrom: 'internal'\n };\n api.start({\n event: event,\n dragType: dragType\n });\n }\n }));\n },\n dispatchEventToSource: function dispatchEventToSource(_ref) {\n var _draggableRegistry$ge, _draggableRegistry$ge2;\n var eventName = _ref.eventName,\n payload = _ref.payload;\n // During a drag operation, a draggable can be:\n // - remounted with different functions\n // - removed completely\n // So we need to get the latest entry from the registry in order\n // to call the latest event functions\n\n (_draggableRegistry$ge = draggableRegistry.get(payload.source.element)) === null || _draggableRegistry$ge === void 0 || (_draggableRegistry$ge2 = _draggableRegistry$ge[eventName]) === null || _draggableRegistry$ge2 === void 0 || _draggableRegistry$ge2.call(_draggableRegistry$ge,\n // I cannot seem to get the types right here.\n // TS doesn't seem to like that one event can need `nativeSetDragImage`\n // @ts-expect-error\n payload);\n },\n onPostDispatch: honeyPotFix.getOnPostDispatch()\n});\nexport var dropTargetForElements = adapter.dropTarget;\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport var monitorForElements = adapter.monitor;\n\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport function draggable(args) {\n // Guardrail: warn if the drag handle is not contained in draggable element\n if (process.env.NODE_ENV !== 'production') {\n if (args.dragHandle && !args.element.contains(args.dragHandle)) {\n // eslint-disable-next-line no-console\n console.warn('Drag handle element must be contained in draggable element', {\n element: args.element,\n dragHandle: args.dragHandle\n });\n }\n }\n // Guardrail: warn if the draggable element is already registered\n if (process.env.NODE_ENV !== 'production') {\n var existing = draggableRegistry.get(args.element);\n if (existing) {\n // eslint-disable-next-line no-console\n console.warn('You have already registered a `draggable` on the same element', {\n existing: existing,\n proposed: args\n });\n }\n }\n var cleanup = combine(\n // making the draggable register the adapter rather than drop targets\n // this is because you *must* have a draggable element to start a drag\n // but you _might_ not have any drop targets immediately\n // (You might create drop targets async)\n adapter.registerUsage(), addToRegistry(args), addAttribute(args.element, {\n attribute: 'draggable',\n value: 'true'\n }));\n\n // Wrapping in `once` to prevent unexpected side effects if consumers call\n // the clean up function multiple times.\n return once(cleanup);\n}\n\n/** Common event payload for all events */\n\n/** A map containing payloads for all events */\n\n/** Common event payload for all drop target events */\n\n/** A map containing payloads for all events on drop targets */\n\n/** Arguments given to all feedback functions (eg `canDrag()`) on for a `draggable()` */\n\n/** Arguments given to all feedback functions (eg `canDrop()`) on a `dropTargetForElements()` */\n\n/** Arguments given to all monitor feedback functions (eg `canMonitor()`) for a `monitorForElements` */","// In order to disable the native drag preview you can\n// use `event.dataTransfer.setDragImage()` to set a small\n// invisible image as the drag preview.\n// There are alternative techniques,\n// (eg setting opacity to in onGenerateDragPreview and then 1 in onDragStart)\n// but the technique in this file worked best across browsers and platforms\n\n// Here we are preloading the image so that it is ready for the first drag.\n// Even though the image is base64 encoded, the browser queues an async task\n// to decode the image. The image needs to be decoded before it can be used\nvar tinyTransparentImage = function () {\n // SSR safe\n if (typeof window === 'undefined') {\n return null;\n }\n\n // Image generated by: https://png-pixel.com/\n // It is a 1x1 transparent gif\n // It is the smallest possible transparent image we could find that works on all platforms\n // Note: using an encoded SVG would be nicer code, but it doesn't work on iOS\n var img = new Image();\n img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';\n return img;\n}();\nexport function disableNativeDragPreview(_ref) {\n var nativeSetDragImage = _ref.nativeSetDragImage;\n if (nativeSetDragImage && tinyTransparentImage) {\n nativeSetDragImage(tinyTransparentImage, 0, 0);\n }\n}","import type {ElementEventPayloadMap} from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\n\ntype ElementDragEvent = ElementEventPayloadMap['onDrag'] | ElementEventPayloadMap['onDragStart'];\ntype DragInput = Readonly<{clientX: number; clientY: number}>;\n\nconst bindDragEffectAllowed = (\n element: HTMLElement,\n effect: DataTransfer['effectAllowed'],\n): (() => void) => {\n const setEffect = (event: DragEvent): void => {\n if (event.dataTransfer) event.dataTransfer.effectAllowed = effect;\n };\n element.addEventListener('dragstart', setEffect);\n return () => element.removeEventListener('dragstart', setEffect);\n};\n\nconst currentDragInput = (event: ElementDragEvent): DragInput => ({\n clientX: event.location.current.input.clientX,\n clientY: event.location.current.input.clientY,\n});\n\nconst initialDragInput = (event: ElementEventPayloadMap['onDragStart']): DragInput => ({\n clientX: event.location.initial.input.clientX,\n clientY: event.location.initial.input.clientY,\n});\n\nexport {bindDragEffectAllowed, currentDragInput, initialDragInput};\nexport type {DragInput};\n","import {draggable} from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport {disableNativeDragPreview} from '@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview';\nimport type Alpine from 'alpinejs';\n\nimport {boundNumber, decodeProps, number, oneOf, string} from '../codecs';\nimport {dispatch, setPresence, type CleanupStack} from '../../utils';\nimport {currentDragInput, initialDragInput} from './pdd';\n\ntype ResizeAxis = 'x' | 'y';\ntype ResizeMode = 'onChange' | 'onEnd';\ntype ResizePhase = 'start' | 'resize' | 'end';\ntype ResizeDirection = 'positive' | 'negative';\n\ntype ResizeEvent = {\n width: number;\n height: number;\n previewWidth: number;\n previewHeight: number;\n delta: number;\n axis: ResizeAxis;\n phase: ResizePhase;\n input: { clientX: number; clientY: number };\n};\n\ntype ResizableOptions = {\n element: HTMLElement;\n handle: HTMLElement;\n axis?: ResizeAxis;\n min?: number;\n max?: number | null;\n step?: number;\n mode?: ResizeMode;\n hitArea?: number;\n coarseHitArea?: number;\n direction?: ResizeDirection;\n disabled?: () => boolean;\n onStart?: (event: ResizeEvent) => void;\n onResize?: (event: ResizeEvent) => void;\n onEnd?: (event: ResizeEvent) => void;\n};\n\ntype ResizeState = {\n width: number;\n height: number;\n startWidth: number;\n startHeight: number;\n startClientX: number;\n startClientY: number;\n};\n\nconst DEFAULT_MIN = 60;\nconst DEFAULT_STEP = 1;\nconst DEFAULT_HIT_AREA = 8;\nconst DEFAULT_COARSE_HIT_AREA = 24;\nconst HANDLE_SELECTOR = '[x-ui-resizable\\\\:handle], [data-ui-resize-handle]';\nconst MANAGED_DISABLED_ATTR = 'data-ui-resizable-managed-disabled';\nconst RESIZE_AXES = ['x', 'y'] as const;\nconst RESIZE_MODES = ['onChange', 'onEnd'] as const;\nconst RESIZE_DIRECTIONS = ['positive', 'negative'] as const;\n\nconst resizableSchema = {\n resizeAxis: oneOf(RESIZE_AXES, 'x'),\n resizeMode: oneOf(RESIZE_MODES, 'onChange'),\n resizeMin: string.default(String(DEFAULT_MIN)),\n resizeMax: string,\n resizeStep: number.default(DEFAULT_STEP).min(DEFAULT_STEP),\n resizeHitArea: number.default(DEFAULT_HIT_AREA).min(0),\n resizeCoarseHitArea: number.default(DEFAULT_COARSE_HIT_AREA).min(0),\n resizeDirection: oneOf(RESIZE_DIRECTIONS, 'positive'),\n};\n\nconst parseLength = ({value, element, axis, fallback}: {\n value: string | undefined;\n element: HTMLElement;\n axis: ResizeAxis;\n fallback: number;\n}): number => {\n if (value === undefined || value.trim() === '') return fallback;\n const parsed = Number(value);\n if (Number.isFinite(parsed)) return parsed;\n\n if (value.endsWith('px')) {\n const pixels = Number(value.slice(0, -2));\n if (Number.isFinite(pixels)) return pixels;\n }\n\n if (value.endsWith('rem')) {\n const rem = Number(value.slice(0, -3));\n const fontSize = Number.parseFloat(getComputedStyle(document.documentElement).fontSize || '16');\n if (Number.isFinite(rem) && Number.isFinite(fontSize)) return rem * fontSize;\n }\n\n if (value.endsWith('em')) {\n const em = Number(value.slice(0, -2));\n const fontSize = Number.parseFloat(getComputedStyle(element).fontSize || '16');\n if (Number.isFinite(em) && Number.isFinite(fontSize)) return em * fontSize;\n }\n\n if (typeof document === 'undefined') return fallback;\n\n const probe = document.createElement('div');\n probe.style.position = 'absolute';\n probe.style.visibility = 'hidden';\n probe.style.pointerEvents = 'none';\n probe.style.width = axis === 'x' ? value : '0';\n probe.style.height = axis === 'y' ? value : '0';\n element.append(probe);\n const rect = probe.getBoundingClientRect();\n probe.remove();\n\n const measured = axis === 'x' ? rect.width : rect.height;\n return measured > 0 ? measured : fallback;\n};\n\nconst detailFromResize = (event: ResizeEvent): Record<string, unknown> => ({\n $width: event.width,\n $height: event.height,\n $delta: event.delta,\n $axis: event.axis,\n $phase: event.phase,\n $previewWidth: event.previewWidth,\n $previewHeight: event.previewHeight,\n});\n\nconst createResizable = ({\n element,\n handle,\n axis = 'x',\n min = DEFAULT_MIN,\n max = null,\n step = DEFAULT_STEP,\n mode = 'onChange',\n hitArea = DEFAULT_HIT_AREA,\n coarseHitArea = DEFAULT_COARSE_HIT_AREA,\n direction = 'positive',\n disabled = () => false,\n onStart,\n onResize,\n onEnd,\n }: ResizableOptions): (() => void) => {\n let state: ResizeState | null = null;\n const cleanup: CleanupStack = [];\n const directionFactor = direction === 'negative' ? -1 : 1;\n\n const syncDisabled = (): boolean => {\n const isDisabled = disabled();\n if (isDisabled) {\n element.setAttribute('data-disabled', '');\n element.setAttribute(MANAGED_DISABLED_ATTR, '');\n handle.setAttribute('data-disabled', '');\n handle.setAttribute(MANAGED_DISABLED_ATTR, '');\n } else {\n if (element.hasAttribute(MANAGED_DISABLED_ATTR)) {\n element.removeAttribute('data-disabled');\n element.removeAttribute(MANAGED_DISABLED_ATTR);\n }\n if (handle.hasAttribute(MANAGED_DISABLED_ATTR)) {\n handle.removeAttribute('data-disabled');\n handle.removeAttribute(MANAGED_DISABLED_ATTR);\n }\n }\n handle.setAttribute('aria-disabled', isDisabled ? 'true' : 'false');\n return isDisabled;\n };\n\n const hitTarget = (): number => {\n const coarse = typeof window !== 'undefined'\n && typeof window.matchMedia === 'function'\n && window.matchMedia('(pointer: coarse)').matches;\n return coarse ? coarseHitArea : hitArea;\n };\n\n const applyHandleBase = (): void => {\n element.setAttribute('data-ui-resizable', '');\n element.dataset.resizeAxis = axis;\n element.dataset.resizeMode = mode;\n element.dataset.resizeDirection = direction;\n handle.setAttribute('data-ui-resize-handle', '');\n handle.setAttribute('role', 'separator');\n handle.setAttribute('tabindex', handle.getAttribute('tabindex') ?? '0');\n handle.setAttribute('aria-orientation', axis === 'x' ? 'vertical' : 'horizontal');\n handle.style.touchAction = 'none';\n if (axis === 'x') handle.style.minWidth = `${hitTarget()}px`;\n else handle.style.minHeight = `${hitTarget()}px`;\n };\n\n const setResizing = (resizing: boolean): void => {\n setPresence({el: element, attr: 'data-resizing', present: resizing});\n setPresence({el: handle, attr: 'data-resizing', present: resizing});\n };\n\n const eventFor = ({phase, delta, input, previewOnly = false}: {\n phase: ResizePhase;\n delta: number;\n input: { clientX: number; clientY: number };\n previewOnly?: boolean;\n }): ResizeEvent => {\n const rect = element.getBoundingClientRect();\n const current = state ?? {\n width: rect.width,\n height: rect.height,\n startWidth: rect.width,\n startHeight: rect.height,\n startClientX: input.clientX,\n startClientY: input.clientY,\n };\n const previewWidth = axis === 'x'\n ? boundNumber(current.startWidth + delta, min, max ?? Number.POSITIVE_INFINITY, step)\n : current.startWidth;\n const previewHeight = axis === 'y'\n ? boundNumber(current.startHeight + delta, min, max ?? Number.POSITIVE_INFINITY, step)\n : current.startHeight;\n const width = previewOnly ? current.width : previewWidth;\n const height = previewOnly ? current.height : previewHeight;\n\n return {width, height, previewWidth, previewHeight, delta, axis, phase, input};\n };\n\n const updateAriaValue = (event: ResizeEvent): void => {\n const value = axis === 'x' ? event.previewWidth : event.previewHeight;\n handle.setAttribute('aria-valuenow', String(Math.round(value)));\n handle.setAttribute('aria-valuemin', String(Math.round(min)));\n if (max !== null) handle.setAttribute('aria-valuemax', String(Math.round(max)));\n else handle.removeAttribute('aria-valuemax');\n };\n\n const emitStart = (input: { clientX: number; clientY: number }): ResizeEvent => {\n const rect = element.getBoundingClientRect();\n state = {\n width: rect.width,\n height: rect.height,\n startWidth: rect.width,\n startHeight: rect.height,\n startClientX: input.clientX,\n startClientY: input.clientY,\n };\n const event = eventFor({phase: 'start', delta: 0, input});\n updateAriaValue(event);\n setResizing(true);\n onStart?.(event);\n return event;\n };\n\n const emitResize = (input: { clientX: number; clientY: number }): ResizeEvent | null => {\n if (!state) return null;\n const physicalDelta = axis === 'x' ? input.clientX - state.startClientX : input.clientY - state.startClientY;\n const delta = physicalDelta * directionFactor;\n const event = eventFor({phase: 'resize', delta, input, previewOnly: mode === 'onEnd'});\n updateAriaValue(event);\n onResize?.(event);\n if (mode === 'onChange') {\n state.width = event.width;\n state.height = event.height;\n }\n return event;\n };\n\n const emitEnd = (input: { clientX: number; clientY: number }): ResizeEvent | null => {\n if (!state) return null;\n const physicalDelta = axis === 'x' ? input.clientX - state.startClientX : input.clientY - state.startClientY;\n const delta = physicalDelta * directionFactor;\n const event = eventFor({phase: 'end', delta, input});\n updateAriaValue(event);\n onEnd?.(event);\n state = null;\n setResizing(false);\n return event;\n };\n\n applyHandleBase();\n syncDisabled();\n updateAriaValue(eventFor({phase: 'start', delta: 0, input: {clientX: 0, clientY: 0}}));\n\n cleanup.push(draggable({\n element: handle,\n canDrag: () => !syncDisabled(),\n getInitialData: () => ({type: 'ui-resizable'}),\n onGenerateDragPreview: disableNativeDragPreview,\n onDragStart: (event) => {\n if (syncDisabled()) return;\n emitStart(initialDragInput(event));\n },\n onDrag: (event) => {\n if (syncDisabled()) return;\n emitResize(currentDragInput(event));\n },\n onDrop: (event) => {\n emitEnd(currentDragInput(event));\n },\n }));\n\n const onKeydown = (event: KeyboardEvent): void => {\n if (syncDisabled()) return;\n\n const multiplier = event.shiftKey ? 10 : 1;\n const amount = step * multiplier;\n let delta: number | null = null;\n\n if (axis === 'x' && event.key === 'ArrowRight') delta = amount;\n if (axis === 'x' && event.key === 'ArrowLeft') delta = -amount;\n if (axis === 'y' && event.key === 'ArrowDown') delta = amount;\n if (axis === 'y' && event.key === 'ArrowUp') delta = -amount;\n if (event.key === 'Home') {\n delta = (min - element.getBoundingClientRect()[axis === 'x' ? 'width' : 'height']) * directionFactor;\n }\n if (event.key === 'End' && max !== null) {\n delta = (max - element.getBoundingClientRect()[axis === 'x' ? 'width' : 'height']) * directionFactor;\n }\n\n if (delta === null) return;\n event.preventDefault();\n\n const input = {clientX: 0, clientY: 0};\n emitStart(input);\n if (state) {\n state.startClientX = 0;\n state.startClientY = 0;\n const resizeInput = axis === 'x' ? {clientX: delta, clientY: 0} : {clientX: 0, clientY: delta};\n emitResize(resizeInput);\n emitEnd(resizeInput);\n }\n };\n\n handle.addEventListener('keydown', onKeydown);\n cleanup.push(() => handle.removeEventListener('keydown', onKeydown));\n\n return () => {\n cleanup.forEach((cleanupItem) => cleanupItem());\n setResizing(false);\n };\n};\n\nconst registerResizable = (AlpineInstance: Alpine.Alpine): void => {\n if (typeof AlpineInstance.directive !== 'function') return;\n\n AlpineInstance.directive('ui-resizable', (el, {value, expression}, {cleanup}) => {\n if (!(el instanceof HTMLElement) || value === 'handle') return;\n\n const root = el;\n const handle = root.querySelector<HTMLElement>(HANDLE_SELECTOR);\n if (!handle) return;\n\n const props = decodeProps({el: root, schema: resizableSchema});\n const axis = props.resizeAxis;\n const min = parseLength({\n value: props.resizeMin,\n element: root,\n axis,\n fallback: DEFAULT_MIN,\n });\n const maxValue = props.resizeMax;\n const max = maxValue ? parseLength({\n value: maxValue,\n element: root,\n axis,\n fallback: Number.POSITIVE_INFINITY\n }) : null;\n const mode = props.resizeMode;\n const evaluator = expression\n ? AlpineInstance.evaluateLater(root, expression)\n : null;\n\n const notify = (event: ResizeEvent): void => {\n const eventName = event.phase === 'start'\n ? 'ui:resize-start'\n : event.phase === 'end'\n ? 'ui:resize-end'\n : 'ui:resize';\n\n dispatch({el: root, name: eventName, detail: event});\n if (!evaluator) return;\n if (mode === 'onEnd' && event.phase === 'resize') return;\n evaluator(undefined, detailFromResize(event));\n };\n\n cleanup(createResizable({\n element: root,\n handle,\n axis,\n min,\n max: max === Number.POSITIVE_INFINITY ? null : max,\n step: props.resizeStep,\n mode,\n hitArea: props.resizeHitArea,\n coarseHitArea: props.resizeCoarseHitArea,\n direction: props.resizeDirection,\n disabled: () => root.hasAttribute('data-disabled')\n && !root.hasAttribute(MANAGED_DISABLED_ATTR)\n || root.hasAttribute('data-resize-disabled')\n || (root.dataset.disabled === 'true' && !root.hasAttribute(MANAGED_DISABLED_ATTR)),\n onStart: notify,\n onResize: notify,\n onEnd: notify,\n }));\n });\n};\n\nexport {createResizable, registerResizable};\nexport type {ResizableOptions, ResizeAxis, ResizeDirection, ResizeEvent, ResizeMode, ResizePhase};\nexport {createSortableRegistry, sortable} from './sortable';\nexport type {\n SortableAnchor,\n SortableCancelReason,\n SortableCanDropContext,\n SortableDirection,\n SortableDragDetail,\n SortableDropDetail,\n SortableEdge,\n SortableFeedback,\n SortableGroup,\n SortableIndicatorFrame,\n SortableInsertSource,\n SortableMoveSource,\n SortableOperation,\n SortableOrientation,\n SortablePlacement,\n SortableReorderOffset,\n SortableSource,\n UiSortableService,\n} from './sortable';\n"],"x_google_ignoreList":[0,1,2,3,4,5,6],"mappings":"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"}
|