@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.generated-n_t4T8XC.js","names":[],"sources":["../../../../../../../../client/src/components/modal/contract.ts","../../../../../../../../client/src/components/modal/machine.ts","../../../../../../../../client/src/components/modal/styles.ts","../../../../../../../../client/src/components/modal/index.ts","../../../../../../../../client/src/components/modal/entry.generated.ts"],"sourcesContent":["import {bool, oneOf, string, type PropState, type SchemaToProps} from '../../runtime';\nimport {\n EDGE_POSITIONS,\n ELEVATION_REFERENCES,\n HEADING_LEVELS,\n SURFACE_REFERENCES,\n type EdgePosition,\n type ElevationReference,\n type HeadingLevel,\n type SurfaceReference,\n} from '../common';\n\nconst MODAL_MODES = ['modal', 'sheet'] as const;\nconst MODAL_SIDES = EDGE_POSITIONS;\nconst MODAL_SIZES = ['sm', 'md', 'lg', 'xl', 'full'] as const;\nconst MODAL_SURFACES = SURFACE_REFERENCES;\nconst MODAL_ELEVATIONS = ELEVATION_REFERENCES;\nconst MODAL_TITLE_AS_VALUES = HEADING_LEVELS;\n\ntype ModalMode = typeof MODAL_MODES[number];\ntype ModalSide = EdgePosition;\ntype ModalSize = typeof MODAL_SIZES[number];\ntype ModalSurface = SurfaceReference;\ntype ModalElevation = ElevationReference;\ntype ModalTitleAs = HeadingLevel;\n\nconst modalSchema = {\n name: string,\n open: bool,\n mode: oneOf(MODAL_MODES, 'modal'),\n side: oneOf(MODAL_SIDES, 'right'),\n size: oneOf(MODAL_SIZES, 'md'),\n surface: oneOf(MODAL_SURFACES, '1' as ModalSurface),\n elevation: oneOf(MODAL_ELEVATIONS, '5' as ModalElevation),\n dismissible: bool.default(true),\n closable: bool.default(true),\n disabled: bool,\n autofocusTitle: bool,\n label: string,\n descriptionId: string,\n panelClass: string,\n overlayClass: string,\n class: string,\n};\n\nconst modalTriggerSchema = {\n name: string,\n disabled: bool,\n class: string,\n};\n\nconst modalOutletSchema = {\n id: string.default('ui-modal-root'),\n class: string,\n};\n\nconst modalTitleSchema = {\n as: oneOf(MODAL_TITLE_AS_VALUES, 'h2'),\n class: string,\n};\n\nconst modalDescriptionSchema = {\n class: string,\n};\n\nconst modalBodySchema = {\n class: string,\n};\n\nconst modalFooterSchema = {\n class: string,\n};\n\nconst modalCloseSchema = {\n label: string.default('Close'),\n class: string,\n};\n\ntype ModalProps = SchemaToProps<typeof modalSchema>;\ntype ModalTriggerProps = PropState<typeof modalTriggerSchema>;\n\nexport {\n MODAL_SIDES,\n MODAL_SIZES,\n MODAL_ELEVATIONS,\n MODAL_SURFACES,\n MODAL_TITLE_AS_VALUES,\n MODAL_MODES,\n modalBodySchema,\n modalCloseSchema,\n modalDescriptionSchema,\n modalFooterSchema,\n modalOutletSchema,\n modalSchema,\n modalTitleSchema,\n modalTriggerSchema,\n};\nexport type {\n ModalSide,\n ModalProps,\n ModalSize,\n ModalSurface,\n ModalElevation,\n ModalTitleAs,\n ModalTriggerProps,\n ModalMode,\n};\n","import {\n createMachine,\n type Machine,\n} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport {defineControlledOpenProps} from '../shared/controlled-open';\nimport type {ModalProps} from './contract';\n\ntype ModalContext = Record<string, never>;\n\ntype ModalMachineEffects = {\n prepareOpen(): void;\n finishOpen(): void;\n prepareClose(): void;\n finishClose(): void;\n syncProps(): void;\n emitCancel(reason: 'escape' | 'outside'): void;\n};\n\ntype CreateModalMachineOptions = {\n props: ModalProps;\n effects: ModalMachineEffects;\n};\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'opening',\n project: () => ({}),\n onDone: 'OPENING_DONE',\n onError: 'OPENING_ERROR',\n} satisfies TransitionHookDefinition<ModalContext, ModalProps, Record<string, never>, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'closing',\n project: () => ({}),\n onDone: 'CLOSING_DONE',\n onError: 'CLOSING_ERROR',\n} satisfies TransitionHookDefinition<ModalContext, ModalProps, Record<string, never>, 'closing'>);\n\nconst modalHooks = [openingHook, closingHook] as const;\nconst controlledOpenProps = defineControlledOpenProps<ModalContext, ModalProps>();\n\nconst createModalMachine = ({\n props,\n effects,\n}: CreateModalMachineOptions): Machine<ModalContext, ModalProps> => createMachine<ModalContext, ModalProps>({\n initial: 'closed',\n states: {\n closed: {\n tags: ['closed'],\n on: {\n OPEN: {target: 'opening', guard: 'canOpen', effects: 'prepareOpen'},\n PROPS_CHANGED: [\n {\n target: 'opening',\n guard: controlledOpenProps.shouldOpen,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareOpen'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n opening: {\n tags: ['visible', 'interactive', 'transitioning'],\n on: {\n OPENING_DONE: {target: 'open', effects: 'finishOpen'},\n OPENING_ERROR: {target: 'open', effects: 'finishOpen'},\n CLOSE: {target: 'closing', effects: 'prepareClose'},\n CANCEL: {target: 'closing', guard: 'canDismiss', effects: ['emitCancel', 'prepareClose']},\n PROPS_CHANGED: [\n {\n target: 'closing',\n guard: controlledOpenProps.shouldClose,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareClose'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n open: {\n tags: ['visible', 'interactive', 'open'],\n on: {\n CLOSE: {target: 'closing', effects: 'prepareClose'},\n CANCEL: {target: 'closing', guard: 'canDismiss', effects: ['emitCancel', 'prepareClose']},\n PROPS_CHANGED: [\n {\n target: 'closing',\n guard: controlledOpenProps.shouldClose,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareClose'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n closing: {\n tags: ['visible', 'transitioning'],\n on: {\n CLOSING_DONE: {target: 'closed', effects: 'finishClose'},\n CLOSING_ERROR: {target: 'closed', effects: 'finishClose'},\n OPEN: {target: 'opening', guard: 'canOpen', effects: 'prepareOpen'},\n PROPS_CHANGED: [\n {\n target: 'opening',\n guard: controlledOpenProps.shouldOpen,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareOpen'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n },\n}, {\n context: {},\n props,\n reducers: {\n replaceProps: controlledOpenProps.replace,\n },\n guards: {\n canOpen: ({props: currentProps}) => !currentProps.disabled,\n canDismiss: ({props: currentProps}) => currentProps.dismissible,\n },\n effects: {\n prepareOpen: effects.prepareOpen,\n finishOpen: effects.finishOpen,\n prepareClose: effects.prepareClose,\n finishClose: effects.finishClose,\n syncProps: effects.syncProps,\n emitCancel: ({event}) => {\n if (event.reason === 'escape' || event.reason === 'outside') effects.emitCancel(event.reason);\n },\n },\n});\n\nexport {createModalMachine, modalHooks};\nexport type {CreateModalMachineOptions, ModalContext, ModalMachineEffects};\n","import {defineStyles} from '../../runtime';\n\nconst EDGE_PANEL_LAYOUT_CLASSES = [\n 'grid-rows-[auto_auto_minmax(0,1fr)_auto]',\n '[&>[data-ui-modal-body]]:-mx-1 [&>[data-ui-modal-body]]:min-h-0 [&>[data-ui-modal-body]]:content-start',\n '[&>[data-ui-modal-body]]:overflow-x-hidden [&>[data-ui-modal-body]]:overflow-y-auto [&>[data-ui-modal-body]]:px-1',\n '[&>[data-ui-modal-footer]]:self-end',\n] as const;\n\nconst modalStyles = defineStyles({definition: {\n component: 'ui.modal',\n parts: {\n instance: {\n base: 'contents',\n },\n root: {\n base: [\n 'fixed inset-0 z-dialog m-0 h-auto max-h-none w-auto max-w-none overflow-visible border-0 bg-transparent p-0 text-surface-ink',\n 'backdrop:bg-transparent',\n ],\n },\n viewport: {\n base: 'fixed inset-0 z-dialog flex min-h-dvh',\n variants: {\n mode: {\n modal: 'items-center justify-center overflow-y-auto p-4',\n sheet: '',\n },\n side: {\n top: '',\n right: '',\n bottom: '',\n left: '',\n },\n },\n compounds: [\n {when: {mode: 'sheet', side: 'top'}, class: 'items-start justify-center'},\n {when: {mode: 'sheet', side: 'right'}, class: 'items-center justify-end overflow-hidden'},\n {when: {mode: 'sheet', side: 'bottom'}, class: 'items-end justify-center'},\n {when: {mode: 'sheet', side: 'left'}, class: 'items-center justify-start overflow-hidden'},\n ],\n defaults: {\n mode: 'modal',\n side: 'right',\n },\n },\n overlay: {\n base: 'fixed inset-0 bg-scrim',\n },\n panel: {\n base: [\n 'relative z-dialog grid w-full min-w-0 gap-4 overflow-auto p-5 outline-none',\n 'max-h-full',\n ],\n variants: {\n mode: {\n modal: 'rounded-overlay-md',\n sheet: '',\n },\n side: {\n top: '',\n right: '',\n bottom: '',\n left: '',\n },\n size: {\n sm: 'max-w-modal-sm',\n md: 'max-w-modal-md',\n lg: 'max-w-modal-lg',\n xl: 'max-w-modal-xl',\n full: 'max-w-full',\n },\n },\n compounds: [\n {when: {mode: 'sheet', side: 'right'}, class: ['min-h-dvh rounded-l-overlay-md', EDGE_PANEL_LAYOUT_CLASSES]},\n {when: {mode: 'sheet', side: 'left'}, class: ['min-h-dvh rounded-r-overlay-md', EDGE_PANEL_LAYOUT_CLASSES]},\n {when: {mode: 'sheet', side: 'top'}, class: 'max-w-full rounded-b-overlay-md'},\n {when: {mode: 'sheet', side: 'bottom'}, class: 'max-w-full rounded-t-overlay-md'},\n ],\n defaults: {\n mode: 'modal',\n side: 'right',\n size: 'md',\n },\n },\n trigger: {\n base: 'contents',\n },\n outlet: {\n base: '',\n },\n title: {\n base: 'pr-8',\n },\n description: {\n base: '-mt-3 pr-8 text-surface-ink-muted',\n },\n body: {\n base: 'grid min-w-0 gap-3 text-sm',\n },\n footer: {\n base: 'flex min-w-0 items-center justify-end gap-2 pt-1',\n },\n close: {\n base: [\n 'absolute right-3 top-3 inline-flex size-control-md items-center justify-center rounded-full border border-transparent text-surface-ink-muted outline-none',\n 'hover:bg-interaction-hover focus-visible:ui-focus-ring',\n ],\n },\n closeIcon: {\n base: 'size-icon fill-current',\n },\n },\n}});\n\nexport {modalStyles};\n","import type Alpine from 'alpinejs';\n\nimport {createBoundsMotion, type BoundsMotion} from '@client/motion';\nimport {\n type AlpineMachine,\n createAlpineMachine,\n defineAlpineData,\n reflectSchemaProp,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {cleanupManagerFor} from '@client/runtime/alpine-data';\nimport {defineProps} from '@client/runtime/codecs';\nimport {CleanupManager} from '@client/runtime/cleanup-manager';\nimport {addDismissableLayer} from '@client/runtime/dismissable-layer';\nimport {FOCUSABLE_SELECTOR, closestFocusable, focusableElements, isFocusable, trapFocus as trapFocusWithin} from '@client/runtime/focus-scope';\nimport {focusWithoutIndicator, isShortcutFocusHandoff} from '@client/runtime/focus-handoff';\nimport {mergeBindings, type BindingObject} from '@client/runtime/merge-bindings';\nimport {declareMorphAttributes} from '@client/runtime/morph';\nimport {acquireDocumentScrollLock} from '@client/runtime/scroll-lock';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {addListener, dispatch} from '@client/utils';\nimport {\n modalSchema,\n modalTriggerSchema,\n type ModalProps,\n type ModalTriggerProps,\n} from './contract';\nimport {createModalMachine, modalHooks, type ModalContext} from './machine';\nimport {modalStyles} from './styles';\n\ntype ModalTransitionName = (typeof modalHooks)[number]['name'];\ntype ModalTransition<TName extends ModalTransitionName = ModalTransitionName> = TransitionForHook<\n Extract<(typeof modalHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype CancelReason = 'escape' | 'outside';\n\ntype ModalCancelDetail = {\n reason: CancelReason;\n};\n\ntype ModalCloseEventDetail = {\n name?: string;\n};\n\ntype ModalController = {\n readonly name: string;\n readonly isOpen: boolean;\n readonly dialogId: string;\n openFrom(trigger: HTMLElement): void;\n close(event?: Event): void;\n syncExternalTrigger(trigger: HTMLElement, disabled: boolean): void;\n};\n\ntype ModalTriggerController = {\n readonly name: string;\n readonly target: HTMLElement;\n sync(): void;\n};\n\n/**\n * Public Alpine API for `ui.modal`.\n *\n * @public\n */\ninterface UiModalApi {\n /** Whether the modal has completed its opening transition. */\n readonly isOpen: boolean;\n\n /** Whether the modal is opening, open, or closing. */\n readonly isVisible: boolean;\n\n /** Opens the modal unless it is disabled. */\n open(event?: Event): void;\n\n /** Closes the modal. */\n close(event?: Event): void;\n}\n\n/**\n * Public Alpine API for `ui.modal.trigger`.\n *\n * @public\n */\ninterface UiModalTriggerApi {\n /** Opens the named modal unless the trigger or modal is disabled. */\n open(event?: Event): void;\n}\n\ntype ModalData = AlpineMachine<ModalContext, ModalProps, typeof modalHooks> & UiModalApi & {\n readonly name: string;\n readonly dialogId: string;\n readonly root: BindingObject;\n readonly dialog: BindingObject;\n readonly viewport: BindingObject;\n readonly overlay: BindingObject;\n readonly panel: BindingObject;\n init(): void;\n destroy(): void;\n};\n\ntype ModalTriggerData = UiModalTriggerApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n};\n\nconst modalControllers = new Set<ModalController>();\nconst modalTriggerControllers = new Set<ModalTriggerController>();\n\nconst stateFor = (open: boolean): 'open' | 'closed' => (open ? 'open' : 'closed');\nconst isExpandedState = (state: unknown): boolean => state === 'opening' || state === 'open';\n\nconst findNamedModal = (name: string): ModalController | null => (\n Array.from(modalControllers).find((controller) => controller.name === name) ?? null\n);\n\nconst setOpenAttributes = (el: HTMLElement, open: boolean): void => {\n el.setAttribute('data-state', stateFor(open));\n el.setAttribute('aria-expanded', open ? 'true' : 'false');\n};\n\nconst UiModal = (): TrellisAlpineComponent<ModalData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let dialogId = '';\n let activeTrigger: HTMLElement | null = null;\n let openedFromShortcut = false;\n let didShowModal = false;\n let releaseScrollLock: (() => void) | null = null;\n let isRegistered = false;\n let cleanup: CleanupManager;\n let localTriggerCleanup: CleanupManager | null = null;\n let settledMode: ModalProps['mode'] | null = null;\n let boundsMotion: BoundsMotion | null = null;\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Modal has not been initialized.');\n return rootEl;\n };\n\n const dialogEl = (): HTMLDialogElement => {\n const dialog = root().querySelector<HTMLDialogElement>('[data-ui-modal]');\n if (!(dialog instanceof HTMLDialogElement)) throw new Error('Modal requires a dialog element.');\n return dialog;\n };\n\n const viewportEl = (): HTMLElement => {\n const viewport = root().querySelector<HTMLElement>('[data-ui-modal-viewport]');\n if (!viewport) throw new Error('Modal requires a viewport element.');\n return viewport;\n };\n\n const overlayEl = (): HTMLElement => {\n const overlay = root().querySelector<HTMLElement>('[data-ui-modal-overlay]');\n if (!overlay) throw new Error('Modal requires an overlay element.');\n return overlay;\n };\n\n const panelEl = (): HTMLElement => {\n const panel = root().querySelector<HTMLElement>('[data-ui-modal-panel]');\n if (!panel) throw new Error('Modal requires a panel element.');\n return panel;\n };\n\n const titleEl = (): HTMLElement | null => root().querySelector<HTMLElement>('[data-ui-modal-title]');\n const descriptionEl = (): HTMLElement | null => root().querySelector<HTMLElement>('[data-ui-modal-description]');\n\n const syncPresentation = (): void => {\n const props = currentProps();\n dialogEl().className = resolveStyle({part: modalStyles.parts.root, props, className: props.class});\n viewportEl().className = resolveStyle({part: modalStyles.parts.viewport, props});\n overlayEl().className = resolveStyle({\n part: modalStyles.parts.overlay,\n props,\n className: props.overlayClass,\n });\n panelEl().className = resolveStyle({\n part: modalStyles.parts.panel,\n props,\n className: props.panelClass,\n });\n };\n\n const syncPresentationWithBoundsMotion = (): void => {\n const props = currentProps();\n const shouldAnimate = (\n settledMode === props.mode\n && props.open\n && dialogEl().open\n && bridge.matches('open')\n );\n boundsMotion?.update(syncPresentation, {\n animate: shouldAnimate,\n key: `${props.mode}:${props.size}`,\n });\n settledMode = props.mode;\n };\n\n const localTriggerEl = (): HTMLElement | null => (\n Array.from(root().children)\n .find((child) => child instanceof HTMLElement && child.matches('[data-ui-modal-trigger]')) as HTMLElement | undefined\n ?? null\n );\n\n const focusableEls = (): HTMLElement[] => focusableElements(panelEl());\n\n const currentProps = (): Readonly<ModalProps> => bridge.getCommittedSnapshot().props;\n const isExpanded = (): boolean => bridge.matches('opening') || bridge.matches('open');\n\n const syncExternalTrigger = (trigger: HTMLElement, disabled: boolean): void => {\n const expanded = isExpanded();\n setOpenAttributes(trigger, expanded);\n trigger.setAttribute('aria-controls', dialogId);\n trigger.setAttribute('data-ui-modal-trigger-target', dialogId);\n\n if (disabled || currentProps().disabled) {\n trigger.setAttribute('aria-disabled', 'true');\n trigger.setAttribute('data-disabled', '');\n if (trigger instanceof HTMLButtonElement) trigger.disabled = true;\n if (!trigger.matches(FOCUSABLE_SELECTOR)) trigger.tabIndex = -1;\n return;\n }\n\n trigger.removeAttribute('aria-disabled');\n trigger.removeAttribute('data-disabled');\n if (trigger instanceof HTMLButtonElement) trigger.disabled = false;\n if (!trigger.matches(FOCUSABLE_SELECTOR)) trigger.tabIndex = 0;\n };\n\n const syncTriggers = (): void => {\n const local = localTriggerEl();\n if (local) syncExternalTrigger(closestFocusable(local), currentProps().disabled);\n modalTriggerControllers.forEach((trigger) => trigger.sync());\n };\n\n const syncAccessibility = (): void => {\n const props = currentProps();\n const dialog = dialogEl();\n const panel = panelEl();\n const title = titleEl();\n const description = descriptionEl();\n\n dialog.id = dialogId;\n dialog.setAttribute('role', 'dialog');\n dialog.setAttribute('aria-modal', 'true');\n panel.id ||= `${dialogId}-panel`;\n panel.tabIndex = -1;\n\n if (title) {\n title.id ||= `${dialogId}-title`;\n dialog.setAttribute('aria-labelledby', title.id);\n dialog.removeAttribute('aria-label');\n if (props.autofocusTitle) title.tabIndex = -1;\n else title.removeAttribute('tabindex');\n } else {\n dialog.removeAttribute('aria-labelledby');\n if (props.label) dialog.setAttribute('aria-label', props.label);\n else dialog.removeAttribute('aria-label');\n }\n\n if (description) description.id ||= `${dialogId}-description`;\n if (props.descriptionId === 'none') dialog.removeAttribute('aria-describedby');\n else if (props.descriptionId) dialog.setAttribute('aria-describedby', props.descriptionId);\n else if (description) dialog.setAttribute('aria-describedby', description.id);\n else dialog.removeAttribute('aria-describedby');\n };\n\n const syncStateAttributes = ({syncOpen = true}: {syncOpen?: boolean} = {}): void => {\n const expanded = isExpanded();\n const state = stateFor(expanded);\n if (syncOpen) {\n reflectSchemaProp({el: root(), schema: modalSchema, key: 'open', value: expanded});\n }\n [dialogEl(), viewportEl(), overlayEl(), panelEl()].forEach((element) => {\n element.setAttribute('data-state', state);\n });\n syncTriggers();\n };\n\n const focusInitial = (): void => {\n if (openedFromShortcut) {\n focusWithoutIndicator(panelEl());\n return;\n }\n\n const autofocus = panelEl().querySelector<HTMLElement>('[autofocus]');\n if (autofocus && isFocusable(autofocus)) {\n autofocus.focus({preventScroll: true});\n return;\n }\n\n const title = titleEl();\n if (currentProps().autofocusTitle && title) {\n title.focus({preventScroll: true});\n return;\n }\n\n const firstFocusable = focusableEls()[0];\n if (firstFocusable) {\n firstFocusable.focus({preventScroll: true});\n return;\n }\n\n panelEl().focus({preventScroll: true});\n };\n\n const restoreFocus = (): void => {\n if (!activeTrigger || !document.contains(activeTrigger)) return;\n if (activeTrigger === activeTrigger.ownerDocument.activeElement) return;\n if (openedFromShortcut) focusWithoutIndicator(activeTrigger);\n else activeTrigger.focus({preventScroll: true});\n };\n\n const trapFocus = (event: KeyboardEvent): void => {\n if (!bridge.hasTag('interactive')) return;\n trapFocusWithin(event, panelEl());\n };\n\n const prepareOpen = (): void => {\n boundsMotion?.refresh({animate: false});\n const dialog = dialogEl();\n if (typeof dialog.showModal === 'function' && !didShowModal) {\n if (dialog.open) dialog.removeAttribute('open');\n dialog.showModal();\n didShowModal = true;\n } else if (!dialog.open) {\n dialog.setAttribute('open', '');\n }\n\n releaseScrollLock ??= acquireDocumentScrollLock(dialog.ownerDocument);\n syncAccessibility();\n syncStateAttributes();\n queueMicrotask(focusInitial);\n };\n\n const finishOpen = (): void => {\n boundsMotion?.refresh({animate: false});\n const panel = panelEl();\n panel.style.removeProperty('transform');\n panel.style.removeProperty('translate');\n panel.style.removeProperty('scale');\n panel.style.removeProperty('rotate');\n settledMode = currentProps().mode;\n syncStateAttributes();\n dispatch({el: dialogEl(), name: 'ui:open'});\n };\n\n const prepareClose = (): void => {\n boundsMotion?.refresh({animate: false});\n syncStateAttributes();\n };\n\n const finishClose = (): void => {\n boundsMotion?.refresh({animate: false});\n const dialog = dialogEl();\n if (dialog.open) dialog.close();\n didShowModal = false;\n releaseScrollLock?.();\n releaseScrollLock = null;\n syncStateAttributes();\n settledMode = null;\n restoreFocus();\n openedFromShortcut = false;\n dispatch({el: dialog, name: 'ui:close'});\n };\n\n const syncProps = (): void => {\n syncPresentationWithBoundsMotion();\n syncAccessibility();\n syncTriggers();\n };\n\n const bridge = createAlpineMachine({\n schema: modalSchema,\n hooks: modalHooks,\n createMachine: ({props}) => createModalMachine({\n props,\n effects: {\n prepareOpen,\n finishOpen,\n prepareClose,\n finishClose,\n syncProps,\n emitCancel: (reason) => {\n dispatch<ModalCancelDetail>({el: dialogEl(), name: 'ui:cancel', detail: {reason}});\n },\n },\n }),\n });\n\n const openFrom = (trigger: HTMLElement): void => {\n if (currentProps().disabled) return;\n activeTrigger = trigger;\n openedFromShortcut = isShortcutFocusHandoff(trigger.ownerDocument);\n bridge.send('OPEN');\n };\n\n const cancel = (reason: CancelReason, event?: Event): void => {\n event?.preventDefault();\n bridge.send({type: 'CANCEL', reason});\n };\n\n const teardownLocalTrigger = (): void => {\n localTriggerCleanup?.run();\n localTriggerCleanup = null;\n };\n\n const setupLocalTrigger = (trigger: HTMLElement): void => {\n const target = closestFocusable(trigger);\n teardownLocalTrigger();\n localTriggerCleanup = new CleanupManager();\n cleanup.addChild(localTriggerCleanup);\n syncExternalTrigger(target, currentProps().disabled);\n addListener({target, event: 'click', handler: () => openFrom(target), cleanup: localTriggerCleanup});\n addListener({target, event: 'keydown', handler: (event) => {\n if (!(event instanceof KeyboardEvent)) return;\n if (target instanceof HTMLButtonElement || target instanceof HTMLAnchorElement) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n openFrom(target);\n }, cleanup: localTriggerCleanup});\n };\n\n const mountLocalTrigger = (): void => {\n const dialog = dialogEl();\n const inlineTrigger = dialog.querySelector<HTMLElement>('[data-ui-modal-trigger]');\n if (!inlineTrigger || inlineTrigger.dataset.name) return;\n root().insertBefore(inlineTrigger, dialog);\n setupLocalTrigger(inlineTrigger);\n };\n\n const setupEvents = (): void => {\n const dialog = dialogEl();\n addListener({target: dialog, event: 'cancel', handler: (event) => {\n if (event.target !== dialog) return;\n cancel('escape', event);\n }, cleanup});\n addListener({target: dialog, event: 'close', handler: () => {\n if (bridge.hasTag('visible')) bridge.send('CLOSE');\n }, cleanup});\n addListener({target: dialog, event: 'keydown', handler: (event) => {\n if (event instanceof KeyboardEvent) trapFocus(event);\n }, cleanup});\n addListener({target: dialog, event: 'click', handler: (event) => {\n const target = event.target;\n if (!(target instanceof Element) || !target.closest('[data-ui-modal-close]')) return;\n event.preventDefault();\n bridge.send('CLOSE');\n }, cleanup});\n addListener({target: document, event: 'ui:modal-close', handler: (event) => {\n const detail = (event as CustomEvent<ModalCloseEventDetail>).detail;\n if (!detail?.name || detail.name !== currentProps().name) return;\n bridge.send('CLOSE');\n }, cleanup});\n cleanup.add(addDismissableLayer({\n isEnabled: () => bridge.hasTag('interactive'),\n roots: () => [panelEl(), activeTrigger, localTriggerEl()],\n onDismiss: (event) => cancel('outside', event),\n }));\n };\n\n let component!: TrellisAlpineComponent<ModalData>;\n const controller: ModalController = {\n get name() {\n return currentProps().name;\n },\n get isOpen() {\n return bridge.matches('open');\n },\n get dialogId() {\n return dialogId;\n },\n openFrom,\n close(event?: Event) {\n event?.preventDefault();\n bridge.send('CLOSE');\n },\n syncExternalTrigger,\n };\n\n component = {\n ...bridge,\n get name(): string {\n return this.snapshot.current?.props.name ?? '';\n },\n get isOpen(): boolean {\n return this.snapshot.current?.value === 'open';\n },\n get isVisible(): boolean {\n return this.snapshot.current?.tags.includes('visible') ?? false;\n },\n get dialogId(): string {\n return dialogId;\n },\n init(): void {\n cleanup = cleanupManagerFor(this);\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n const props = currentProps();\n syncPresentation();\n boundsMotion = createBoundsMotion(panelEl(), {properties: ['height', 'maxWidth']});\n dialogId = dialogEl().id || this.$id(`modal${props.name ? `-${props.name}` : ''}`);\n declareMorphAttributes(dialogEl(), 'open');\n syncAccessibility();\n modalControllers.add(controller);\n isRegistered = true;\n mountLocalTrigger();\n setupEvents();\n syncStateAttributes({syncOpen: false});\n if (props.open) queueMicrotask(() => bridge.send('OPEN'));\n },\n destroy(): void {\n boundsMotion?.destroy();\n boundsMotion = null;\n localTriggerCleanup = null;\n if (isRegistered) {\n modalControllers.delete(controller);\n isRegistered = false;\n }\n bridge.disconnect();\n const dialog = rootEl?.querySelector<HTMLDialogElement>('[data-ui-modal]');\n if (dialog?.open) dialog.close();\n releaseScrollLock?.();\n releaseScrollLock = null;\n modalTriggerControllers.forEach((trigger) => trigger.sync());\n rootEl = null;\n },\n get root(): BindingObject {\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.instance, props: {}, className: ''}),\n {'data-ui-modal-instance': ''},\n ]});\n },\n get dialog(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.root, props, className: props.class}),\n {\n id: dialogId,\n role: 'dialog',\n 'aria-modal': 'true',\n ':data-state': () => stateFor(isExpandedState(snapshot.current?.value)),\n ':data-mode': () => snapshot.current?.props.mode,\n ':data-side': () => snapshot.current?.props.side,\n ':data-size': () => snapshot.current?.props.size,\n },\n ]});\n },\n get viewport(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.viewport, props}),\n {\n ':data-state': () => stateFor(isExpandedState(snapshot.current?.value)),\n ':data-mode': () => snapshot.current?.props.mode,\n ':data-side': () => snapshot.current?.props.side,\n },\n ]});\n },\n get overlay(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.overlay, props, className: props.overlayClass}),\n {':data-state': () => stateFor(isExpandedState(snapshot.current?.value))},\n ]});\n },\n get panel(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.panel, props, className: props.panelClass}),\n {\n tabindex: -1,\n ':data-state': () => stateFor(isExpandedState(snapshot.current?.value)),\n ':data-mode': () => snapshot.current?.props.mode,\n ':data-side': () => snapshot.current?.props.side,\n ':data-size': () => snapshot.current?.props.size,\n ':data-ui-surface': () => snapshot.current?.props.surface,\n ':data-ui-elevation': () => snapshot.current?.props.elevation,\n },\n ]});\n },\n open(event?: Event): void {\n event?.preventDefault();\n if (currentProps().disabled) return;\n const local = localTriggerEl();\n if (local) activeTrigger = closestFocusable(local);\n openedFromShortcut = isShortcutFocusHandoff(root().ownerDocument);\n bridge.send('OPEN');\n },\n close(event?: Event): void {\n event?.preventDefault();\n bridge.send('CLOSE');\n },\n };\n\n return component;\n};\n\nconst UiModalTrigger = (): TrellisAlpineComponent<ModalTriggerData> => {\n let props: ModalTriggerProps | null = null;\n let target: HTMLElement | null = null;\n let cleanup: CleanupManager;\n let isRegistered = false;\n\n const currentProps = (): ModalTriggerProps => {\n if (!props) throw new Error('Modal trigger has not been initialized.');\n return props;\n };\n\n const targetEl = (): HTMLElement => {\n if (!target) throw new Error('Modal trigger has not been initialized.');\n return target;\n };\n\n const modal = (): ModalController | null => {\n const name = currentProps().name;\n return name ? findNamedModal(name) : null;\n };\n\n const sync = (): void => {\n const triggerProps = currentProps();\n const trigger = targetEl();\n const modalController = modal();\n if (modalController) {\n modalController.syncExternalTrigger(trigger, triggerProps.disabled);\n return;\n }\n\n setOpenAttributes(trigger, false);\n if (triggerProps.disabled) {\n trigger.setAttribute('aria-disabled', 'true');\n trigger.setAttribute('data-disabled', '');\n } else {\n trigger.removeAttribute('aria-disabled');\n trigger.removeAttribute('data-disabled');\n }\n };\n\n const controller: ModalTriggerController = {\n get name() {\n return currentProps().name;\n },\n get target() {\n return targetEl();\n },\n sync,\n };\n\n return {\n init(): void {\n cleanup = cleanupManagerFor(this);\n props = defineProps({\n el: this.$el,\n schema: modalTriggerSchema,\n onChange: () => {\n if (props?.name) sync();\n },\n });\n target = closestFocusable(this.$el);\n if (!props.name) return;\n modalTriggerControllers.add(controller);\n isRegistered = true;\n sync();\n\n addListener({target, event: 'click', handler: (event) => this.open(event), cleanup});\n addListener({target, event: 'keydown', handler: (event) => {\n if (!(event instanceof KeyboardEvent)) return;\n if (target instanceof HTMLButtonElement || target instanceof HTMLAnchorElement) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n this.open(event);\n }, cleanup});\n },\n destroy(): void {\n props?.disconnect();\n if (isRegistered) modalTriggerControllers.delete(controller);\n isRegistered = false;\n props = null;\n target = null;\n },\n get root(): BindingObject {\n const triggerProps = currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.trigger, props: {}, className: triggerProps.class}),\n {\n 'data-ui-modal-trigger': '',\n ':data-name': () => props?.name || undefined,\n ':data-disabled': () => (props?.disabled ? '' : undefined),\n },\n ]});\n },\n open(event?: Event): void {\n event?.preventDefault();\n if (currentProps().disabled) return;\n modal()?.openFrom(targetEl());\n },\n };\n};\n\nconst registerModal = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiModal', UiModal)(AlpineInstance);\n defineAlpineData('UiModalTrigger', UiModalTrigger)(AlpineInstance);\n};\n\nexport {registerModal, UiModal, UiModalTrigger};\nexport type {ModalCancelDetail, ModalTransition, UiModalApi, UiModalTriggerApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\nimport {registerMotionCapability} from '../../capabilities/motion';\nimport {registerModal as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerModal = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerModal};\nexport default registerModal;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=`[data-ui-button]:not([data-ui-loading-mode="false"])`,t=[`data-on`,`data-bind`,`data-ref`,`data-show`,`data-action`,`data-request`,`data-ui-request`,`wire:`],n=`ui:request:finish`,r=null,i=e=>e instanceof HTMLButtonElement||e instanceof HTMLAnchorElement,a=t=>{if(!(t instanceof Element))return null;let n=t.closest(e);return i(n)?n:null},o=e=>e.getAttributeNames().some(e=>t.some(t=>e.startsWith(t))),s=e=>e instanceof HTMLButtonElement&&e.type===`submit`,c=e=>e instanceof HTMLButtonElement&&(e.dataset.uiConfirm!==void 0||e.form?.dataset.uiConfirm!==void 0),l=(e,t)=>t?.dataset.uiConfirm!==void 0||e?.dataset.uiConfirm!==void 0,u=e=>e.dataset.uiLoadingMode===`true`||s(e)||o(e),d=e=>e.dataset.uiSubmitting===`true`||e.getAttribute(`aria-disabled`)===`true`||e.hasAttribute(`disabled`),f=e=>e.dataset.uiSubmitting===`true`||e.hasAttribute(`disabled`),p=e=>{e.dataset.uiSubmitting=`true`,e.setAttribute(`data-ui-loading`,``),e.setAttribute(`aria-disabled`,`true`),e.setAttribute(`aria-busy`,`true`),e.dispatchEvent(new CustomEvent(`ui:loading-start`,{bubbles:!0})),e instanceof HTMLButtonElement?e.disabled=!0:e.tabIndex=-1},m=e=>{e.dataset.initialLoading!==`true`&&(delete e.dataset.uiSubmitting,e.removeAttribute(`data-ui-loading`),e.removeAttribute(`aria-busy`),e.dataset.initialDisabled!==`true`&&(e.removeAttribute(`aria-disabled`),e instanceof HTMLButtonElement?e.disabled=!1:e.removeAttribute(`tabindex`),e.dispatchEvent(new CustomEvent(`ui:loading-end`,{bubbles:!0}))))},h=(e,t)=>{window.setTimeout(()=>{
|
|
2
|
-
//# sourceMappingURL=entry.generated-
|
|
1
|
+
var e=`[data-ui-button]:not([data-ui-loading-mode="false"])`,t=[`data-on`,`data-bind`,`data-ref`,`data-show`,`data-action`,`data-request`,`data-ui-request`,`wire:`],n=`ui:request:finish`,r=null,i=e=>e instanceof HTMLButtonElement||e instanceof HTMLAnchorElement,a=t=>{if(!(t instanceof Element))return null;let n=t.closest(e);return i(n)?n:null},o=e=>e.getAttributeNames().some(e=>t.some(t=>e.startsWith(t))),s=e=>e instanceof HTMLButtonElement&&e.type===`submit`,c=e=>e instanceof HTMLButtonElement&&(e.dataset.uiConfirm!==void 0||e.form?.dataset.uiConfirm!==void 0),l=(e,t)=>t?.dataset.uiConfirm!==void 0||e?.dataset.uiConfirm!==void 0,u=e=>e.dataset.uiLoadingMode===`true`||s(e)||o(e),d=e=>e.dataset.uiSubmitting===`true`||e.getAttribute(`aria-disabled`)===`true`||e.hasAttribute(`disabled`),f=e=>e.dataset.uiSubmitting===`true`||e.hasAttribute(`disabled`),p=e=>{e.dataset.uiSubmitting=`true`,e.setAttribute(`data-ui-loading`,``),e.setAttribute(`aria-disabled`,`true`),e.setAttribute(`aria-busy`,`true`),e.dispatchEvent(new CustomEvent(`ui:loading-start`,{bubbles:!0})),e instanceof HTMLButtonElement?e.disabled=!0:e.tabIndex=-1},m=e=>{e.dataset.initialLoading!==`true`&&(delete e.dataset.uiSubmitting,e.removeAttribute(`data-ui-loading`),e.removeAttribute(`aria-busy`),e.dataset.initialDisabled!==`true`&&(e.removeAttribute(`aria-disabled`),e instanceof HTMLButtonElement?e.disabled=!1:e.removeAttribute(`tabindex`),e.dispatchEvent(new CustomEvent(`ui:loading-end`,{bubbles:!0}))))},h=(e,t)=>{window.setTimeout(()=>{e.isConnected&&!f(e)&&p(e)},0)},g=e=>{let t=a(e.target);if(t&&u(t)){if(d(t)){e.preventDefault(),e.stopImmediatePropagation();return}t instanceof HTMLButtonElement&&t.form&&!t.form.checkValidity()||c(t)||h(t,e)}},_=t=>{let n=t,r=n.submitter instanceof HTMLElement?n.submitter:null,a=i(r)?r:null,o=t.target instanceof HTMLFormElement?t.target:null,c=a?a.matches(e)?a:null:o?.querySelector(e)??null;t.defaultPrevented&&l(o,r)||c&&s(c)&&h(c,t)},v=()=>{document.querySelectorAll(`[data-ui-button][data-ui-submitting="true"]`).forEach(e=>m(e))},y=()=>{r||=(document.addEventListener(`click`,g,!0),document.addEventListener(`submit`,_,!0),document.addEventListener(n,v),()=>{document.removeEventListener(`click`,g,!0),document.removeEventListener(`submit`,_,!0),document.removeEventListener(n,v),r=null})},b=()=>{r?.()},x=()=>{y()};export{b as n,x as t};
|
|
2
|
+
//# sourceMappingURL=entry.generated-oJwO9fIY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.generated-
|
|
1
|
+
{"version":3,"file":"entry.generated-oJwO9fIY.js","names":[],"sources":["../../../../../../../../client/src/components/button/index.ts","../../../../../../../../client/src/components/button/entry.generated.ts"],"sourcesContent":["import {buttonStyles} from './styles';\n\ntype ButtonElement = HTMLAnchorElement | HTMLButtonElement;\n\nconst BUTTON_SELECTOR = '[data-ui-button]:not([data-ui-loading-mode=\"false\"])';\nconst REQUEST_ATTR_PREFIXES = [\n 'data-on',\n 'data-bind',\n 'data-ref',\n 'data-show',\n 'data-action',\n 'data-request',\n 'data-ui-request',\n 'wire:',\n];\nconst REQUEST_FINISH_EVENT = 'ui:request:finish';\n\nlet cleanupSubmitGuard: (() => void) | null = null;\n\nconst isButtonElement = (value: EventTarget | null): value is ButtonElement => (\n value instanceof HTMLButtonElement || value instanceof HTMLAnchorElement\n);\n\nconst closestButton = (target: EventTarget | null): ButtonElement | null => {\n if (!(target instanceof Element)) return null;\n const button = target.closest<ButtonElement>(BUTTON_SELECTOR);\n return isButtonElement(button) ? button : null;\n};\n\nconst hasRequestAttribute = (button: ButtonElement): boolean => (\n button.getAttributeNames().some((name) => REQUEST_ATTR_PREFIXES.some((prefix) => name.startsWith(prefix)))\n);\n\nconst isSubmitButton = (button: ButtonElement): boolean => (\n button instanceof HTMLButtonElement && button.type === 'submit'\n);\n\nconst hasSubmitConfirmation = (button: ButtonElement): boolean => (\n button instanceof HTMLButtonElement\n && (\n button.dataset.uiConfirm !== undefined\n || button.form?.dataset.uiConfirm !== undefined\n )\n);\n\nconst submitEventHasConfirmation = (form: HTMLFormElement | null, submitter: HTMLElement | null): boolean => (\n submitter?.dataset.uiConfirm !== undefined\n || form?.dataset.uiConfirm !== undefined\n);\n\nconst shouldGuardClick = (button: ButtonElement): boolean => (\n button.dataset.uiLoadingMode === 'true'\n || isSubmitButton(button)\n || hasRequestAttribute(button)\n);\n\nconst isLocked = (button: ButtonElement): boolean => (\n button.dataset.uiSubmitting === 'true'\n || button.getAttribute('aria-disabled') === 'true'\n || button.hasAttribute('disabled')\n);\n\nconst shouldSkipScheduledLock = (button: ButtonElement): boolean => (\n button.dataset.uiSubmitting === 'true'\n || button.hasAttribute('disabled')\n);\n\nconst lockButton = (button: ButtonElement): void => {\n button.dataset.uiSubmitting = 'true';\n button.setAttribute('data-ui-loading', '');\n button.setAttribute('aria-disabled', 'true');\n button.setAttribute('aria-busy', 'true');\n button.dispatchEvent(new CustomEvent('ui:loading-start', {bubbles: true}));\n\n if (button instanceof HTMLButtonElement) {\n button.disabled = true;\n } else {\n button.tabIndex = -1;\n }\n};\n\nconst unlockButton = (button: ButtonElement): void => {\n if (button.dataset.initialLoading === 'true') return;\n\n delete button.dataset.uiSubmitting;\n button.removeAttribute('data-ui-loading');\n button.removeAttribute('aria-busy');\n\n if (button.dataset.initialDisabled === 'true') return;\n\n button.removeAttribute('aria-disabled');\n if (button instanceof HTMLButtonElement) {\n button.disabled = false;\n } else {\n button.removeAttribute('tabindex');\n }\n\n button.dispatchEvent(new CustomEvent('ui:loading-end', {bubbles: true}));\n};\n\nconst scheduleLock = (button: ButtonElement, event: Event): void => {\n window.setTimeout(() => {\n if (!button.isConnected || shouldSkipScheduledLock(button)) return;\n lockButton(button);\n }, 0);\n};\n\nconst guardClick = (event: Event): void => {\n const button = closestButton(event.target);\n if (!button || !shouldGuardClick(button)) return;\n\n if (isLocked(button)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n\n if (button instanceof HTMLButtonElement && button.form && !button.form.checkValidity()) return;\n if (hasSubmitConfirmation(button)) return;\n\n scheduleLock(button, event);\n};\n\nconst guardSubmit = (event: Event): void => {\n const submitEvent = event as SubmitEvent;\n const nativeSubmitter = submitEvent.submitter instanceof HTMLElement ? submitEvent.submitter : null;\n const submitter = isButtonElement(nativeSubmitter) ? nativeSubmitter : null;\n const form = event.target instanceof HTMLFormElement ? event.target : null;\n const button = submitter\n ? submitter.matches(BUTTON_SELECTOR) ? submitter : null\n : form?.querySelector<ButtonElement>(BUTTON_SELECTOR) ?? null;\n\n if (event.defaultPrevented && submitEventHasConfirmation(form, nativeSubmitter)) return;\n\n if (!button || !isSubmitButton(button)) return;\n\n scheduleLock(button, event);\n};\n\nconst unlockSubmittedButtons = (): void => {\n document.querySelectorAll<ButtonElement>('[data-ui-button][data-ui-submitting=\"true\"]')\n .forEach((button) => unlockButton(button));\n};\n\nconst registerButton = (): void => {\n if (cleanupSubmitGuard) return;\n\n document.addEventListener('click', guardClick, true);\n document.addEventListener('submit', guardSubmit, true);\n document.addEventListener(REQUEST_FINISH_EVENT, unlockSubmittedButtons);\n\n cleanupSubmitGuard = () => {\n document.removeEventListener('click', guardClick, true);\n document.removeEventListener('submit', guardSubmit, true);\n document.removeEventListener(REQUEST_FINISH_EVENT, unlockSubmittedButtons);\n cleanupSubmitGuard = null;\n };\n};\n\nconst unregisterButton = (): void => {\n cleanupSubmitGuard?.();\n};\n\nexport {registerButton, unregisterButton};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\n\nimport {registerButton as registerComponent} from './index';\n\nconst registerButton = (): void => {\n registerComponent();\n};\n\nexport {registerButton};\nexport default registerButton;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e,n as t,r as n,s as r}from"./dom-DiTFTWeR.js";import{f as i}from"./motion-CbwLBhMt.js";import{t as a}from"./capability-motion-C3q5Xzv2.js";import{t as o}from"./flip-XeJ05afl.js";import{f as s,l as c,n as l}from"./codecs-CQ7olTJL.js";import{i as u,t as d}from"./alpine-machine-CE2UN4Qu.js";import{n as f}from"./alpine-data-Dvc_bXq6.js";import{t as p}from"./collection-navigation-BbxUBQFs.js";import{t as m}from"./machine-CNnHDbyo.js";import{n as h,t as g}from"./props-change-2xfsIAEN.js";import{t as _}from"./semantic-observer-CIoriWtV.js";import{A as v,F as y}from"./common-De1R7Xh6.js";var b=[`manual`,`automatic`],x=y;[...x];var S=[`auto`,...v],ee={id:s.default(`ui-tabs`),animate:l,defaultValue:s,value:s,activation:c(b,`manual`),orientation:c(x,`horizontal`),gap:c(S,`auto`),loop:l.default(!0),panels:s,class:s},te=[u({name:`switching`,state:`switching`,project:e=>e.context.change,onDone:`SWITCH_DONE`,onError:`SWITCH_ERROR`,sends:{select:e=>({type:`SELECT`,value:e})}})],C=e=>typeof e==`string`?e:``,w=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],T=e=>!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`string`)),E=e=>h(e.event)?.props??e.props,D=e=>e.event.type===`ITEMS_CHANGED`?{values:w(e.event.values),disabledValues:w(e.event.disabledValues),panelIds:T(e.event.panelIds)}:e.context.collection,O=(e,t)=>e&&t.values.includes(e)&&!t.disabledValues.includes(e)?e:t.values.find(e=>!t.disabledValues.includes(e))??``,k=e=>{let t=D(e);if(e.event.type===`SELECT`){let n=C(e.event.value);return n&&t.values.includes(n)&&!t.disabledValues.includes(n)?n:e.context.selection.value}return e.event.type===`PROPS_CHANGED`&&g(e.event,`value`)?O(E(e).value,t):O(e.context.selection.value,t)},A=e=>e.context.selection.value!==k(e),j=(e,t)=>({target:e,guard:A,reduce:`applySwitch`,effects:t}),M=({props:e,context:t,effects:n})=>m({initial:`stable`,on:{DOM_INVALIDATED:{effects:`syncDom`}},states:{stable:{tags:[`stable`],on:{SELECT:j(`switching`,`prepareSwitch`),PROPS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncItems`}]}},switching:{tags:[`switching`,`transitioning`],on:{SWITCH_DONE:{target:`stable`,effects:`finishSwitch`},SWITCH_ERROR:{target:`stable`,effects:`finishSwitch`},SELECT:j(`switching`,`prepareSwitch`),PROPS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[j(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncItems`}]}}}},{context:t,props:e,reducers:{applySwitch:e=>{let t=D(e),n=k(e);return{props:E(e),context:{...e.context,selection:{value:n},change:{previousValue:e.context.selection.value,value:n,panelId:t.panelIds[n]??``},collection:t}}},reconcile:e=>({props:E(e),context:{...e.context,collection:D(e),selection:{value:k(e)}}})},effects:{prepareSwitch:n.prepareSwitch,finishSwitch:n.finishSwitch,syncDom:n.syncDom,syncProps:n.syncProps,syncItems:n.syncItems}}),N=`ui-tabs`,P=e=>e?`active`:`inactive`,F=e=>e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,`-`).replace(/^-+|-+$/g,``)||`tab`,I=(e,t)=>`${e}-tab-${F(t)}`,L=(e,t)=>`${e}-panel-${F(t)}`,R=e=>e instanceof HTMLButtonElement||e instanceof HTMLAnchorElement,z=e=>Array.from(new Set(e)),B=()=>{let a=null,s=null,c=null,l=null,u=null,f,m=null,h=()=>{if(!a)throw Error(`Tabs has not been initialized.`);return a},g=()=>h().id||h().dataset.id||h().dataset.owner||N,v=e=>e.closest(`[data-ui-tabs]`)===h(),y=e=>t({value:e}),b=e=>{let t=e?.dataset.variant;return t===`subtle`||t===`segmented`||t===`pills`?t:`line`},x=e=>e?.dataset.size===`sm`?`sm`:`md`,S=e=>{let t=e?.dataset.orientation;return t===`vertical`||t===`horizontal`?t:D().orientation},C=e=>{let t=g(),n=e=>e.dataset.uiTabsOwner===t||e.dataset.owner===t,r=Array.from(h().querySelectorAll(`[data-ui-tabs-list]`)).find(v)??null,i=Array.from(h().querySelectorAll(`[data-ui-tabs-panel]`)).filter(v),a=D().panels,o=a?document.querySelector(a):null;o&&i.push(...Array.from(o.querySelectorAll(`[data-ui-tabs-panel]`)).filter(n)),i.push(...Array.from(document.querySelectorAll(`[data-ui-tabs-panel][data-ui-tabs-owner="${CSS.escape(t)}"]`)).filter(n));let s=z(i),c=new Map;s.forEach(e=>{let t=e.dataset.value||``;c.has(t)||c.set(t,e)});let l=Array.from(h().querySelectorAll(`[data-ui-tabs-tab]`)).filter(v).map((e,t)=>R(e)?(e.dataset.value||=`tab-${t+1}`,{tab:e,value:e.dataset.value,disabled:y(e.dataset.disabled)||e.hasAttribute(`disabled`),panel:c.get(e.dataset.value)??null}):null).filter(e=>e!==null),u=new Map,d=new Map;return l.forEach(e=>{u.has(e.value)||u.set(e.value,e),d.set(e.tab,e)}),{ownerId:t,primaryList:r,panelsTarget:o,panels:s,panelByValue:c,items:l,itemByValue:u,itemByTab:d,tabStop:l.find(e=>document.activeElement===e.tab||e.tab.dataset.active===`true`)?.tab??(e?u.get(e)?.tab??null:null)}},w=(e,t)=>{if(!(e instanceof Element))return null;let n=e.closest(`[data-ui-tabs-tab]`);return n&&R(n)&&v(n)?t.itemByTab.get(n)??null:null},T=e=>{let t=e.items;return{values:t.map(e=>e.value),disabledValues:t.filter(e=>e.disabled).map(e=>e.value),panelIds:Object.fromEntries(t.map(t=>[t.value,t.panel?.id||L(t.tab.dataset.uiTabsOwner||t.tab.dataset.owner||e.ownerId,t.value)]))}},E=e=>{let t=C(),n=T(t),r=t.items.find(e=>y(e.tab.dataset.selected)||e.tab.getAttribute(`aria-selected`)===`true`),i=t.panels.find(e=>y(e.dataset.selected)),a=e.value||e.defaultValue||r?.value||i?.dataset.value||``,o=a&&n.values.includes(a)&&!n.disabledValues.includes(a)?a:n.values.find(e=>!n.disabledValues.includes(e))??``;return{selection:{value:o},change:{previousValue:``,value:o,panelId:n.panelIds[o]??``},collection:n}},D=()=>m??J.getCommittedSnapshot().props,O=()=>J.getCommittedSnapshot().context,k=()=>O().selection.value,A=e=>e.querySelector(`:scope > [data-ui-tabs-indicator]`),j=e=>{if(!(e instanceof HTMLElement))return null;let t=e.closest(`[data-ui-tabs-list]`),n=t?A(t):null;if(!t||!n)return null;n.hidden=!1;let r=t.getBoundingClientRect(),i=e.getBoundingClientRect(),a=t.dataset.orientation===`vertical`,o=t.dataset.variant===`line`,s=o&&a?2:i.width,c=o&&!a?2:i.height,l=o?Number.parseFloat(getComputedStyle(t).getPropertyValue(`--border-width-edge-separator`))||1:0,u=o&&a?r.left-(s-l)/2:i.left,d=o&&!a?r.bottom-(c+l)/2:i.top;return{indicator:n,styles:{height:c,left:u-r.left,top:d-r.top,width:s}}},F=e=>{e.indicator.style.height=`${e.styles.height}px`,e.indicator.style.left=`${e.styles.left}px`,e.indicator.style.top=`${e.styles.top}px`,e.indicator.style.width=`${e.styles.width}px`},B=(e,t)=>{let n=A(e);if(!n)return;let r=t.items.find(t=>t.value===k()&&t.tab.closest(`[data-ui-tabs-list]`)===e);if(!r){n.hidden=!0,e.dataset.uiTabsReady=``;return}let i=j(r.tab);i&&F(i),e.dataset.uiTabsReady=``},V=()=>{let e=D();!h().id&&e.id&&(h().id=e.id),h().dataset.orientation=e.orientation,h().dataset.activation=e.activation,h().dataset.value=k(),r({el:h(),attr:`data-animate`,present:e.animate})},H=e=>{let t=S(e);e.setAttribute(`role`,`tablist`),e.dataset.orientation=t,t===`vertical`?e.setAttribute(`aria-orientation`,`vertical`):e.removeAttribute(`aria-orientation`)},U=(e,t)=>{let n=e.value===k(),i=e.tab.closest(`[data-ui-tabs-list]`),a=S(i),o=b(i),s=x(i),c=e.tab.dataset.uiTabsOwner||e.tab.dataset.owner||g(),l=e.tab.querySelector(`[data-ui-tabs-tab-selected-icon]`),u=P(n);e.tab.id||=I(c,e.value),e.tab.dataset.state=u,e.tab.dataset.orientation=a,e.tab.dataset.variant=o,e.tab.dataset.size=s,e.tab.setAttribute(`role`,`tab`),e.tab.setAttribute(`aria-selected`,n?`true`:`false`),e.tab.setAttribute(`aria-controls`,e.panel?.id||L(c,e.value)),e.tab.tabIndex=e.tab===t.tabStop?0:-1,r({el:e.tab,attr:`data-selected`,present:n}),l&&(l.style.visibility=n?`visible`:`hidden`),r({el:e.tab,attr:`data-disabled`,present:e.disabled}),e.disabled?(e.tab.setAttribute(`aria-disabled`,`true`),e.tab.tabIndex=-1):e.tab.removeAttribute(`aria-disabled`),e.tab instanceof HTMLButtonElement&&(e.tab.disabled=e.disabled)},W=e=>{let t=e.dataset.value||``,n=t===k(),i=e.dataset.uiTabsOwner||e.dataset.owner||g(),a=L(i,t);t&&!e.id&&(e.id=a),t&&!e.hasAttribute(`data-ui-key`)&&e.setAttribute(`data-ui-key`,e.id||a),e.dataset.state=P(n),e.dataset.orientation=D().orientation,e.setAttribute(`role`,`tabpanel`),e.setAttribute(`aria-labelledby`,I(i,t)),e.hasAttribute(`tabindex`)||(e.tabIndex=0),e.hidden=!n,r({el:e,attr:`data-selected`,present:n})},G=({indicator:e=!1}={})=>{V();let t=C(k()),n=t.primaryList;return n&&H(n),t.items.forEach(e=>U(e,t)),t.panels.forEach(W),e&&n&&B(n,t),t},K=()=>{n({el:h(),name:`ui:change`,detail:{value:k()}})},ne=(e,t,r)=>{n({el:e,name:`ui:tabs:activate`,detail:{value:t,panelId:r}})},q=()=>{let e=G({indicator:!0});Z(e),Q(e)},J=d({schema:ee,hooks:te,resolveTransitionElement:({data:e})=>C(k()).itemByValue.get(e.value)?.tab??null,createMachine:({props:e})=>{m=e;let t=E(e);return m=null,M({props:e,context:t,effects:{prepareSwitch:({event:e})=>{G(),e.type===`SELECT`&&K()},finishSwitch:()=>G(),syncDom:q,syncProps:q,syncItems:()=>{let e=G({indicator:!0});Q(e)}}})}}),Y=()=>{if(!s)throw Error(`Tabs navigation has not been initialized.`);return s},X=(e,{tab:t,panel:n,motion:r=!0}={})=>{let i=k();J.send({type:`SELECT`,value:e,motion:r}),k()!==i&&t&&ne(t,k(),n?.id??``)},re=e=>{let t=w(e.target,C(k()));if(t){if(t.disabled){e.preventDefault();return}X(t.value,{tab:t.tab,panel:t.panel})}},ie=e=>{u=w(e.target,C(k()))?.tab??null,window.clearTimeout(f),f=window.setTimeout(()=>{u=null,f=void 0})},ae=e=>{let t=w(e.target,C(k()));t&&e.target===t.tab&&!t.disabled&&(Y().activateItem({el:t.tab}),D().activation===`automatic`&&u!==t.tab?X(t.value,{tab:t.tab,panel:t.panel,motion:!1}):G())},oe=t=>{let n=w(t.target,C(k()));if(!n||t.target!==n.tab)return;if(t.key===` `&&n.tab instanceof HTMLAnchorElement){t.preventDefault(),X(n.value,{tab:n.tab,panel:n.panel,motion:!1});return}let r=S(n.tab.closest(`[data-ui-tabs-list]`));if(t.key===`Home`){t.preventDefault(),Y().focusFirst();return}if(t.key===`End`){t.preventDefault(),Y().focusLast();return}if(r===`vertical`){t.key===`ArrowDown`?(t.preventDefault(),Y().focusNext()):t.key===`ArrowUp`&&(t.preventDefault(),Y().focusPrevious());return}t.key===`ArrowRight`?(t.preventDefault(),e({el:h()})?Y().focusPrevious():Y().focusNext()):t.key===`ArrowLeft`&&(t.preventDefault(),e({el:h()})?Y().focusNext():Y().focusPrevious())},se=e=>{J.send({type:`ITEMS_CHANGED`,...e})},Z=e=>{c?.();let t=[h()];e.panelsTarget&&t.push(e.panelsTarget),c=_({targets:z(t),read:()=>T(C(k())),onChange:se,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`data-value`,`data-disabled`,`disabled`,`data-ui-tabs-owner`,`data-owner`,`data-variant`,`data-size`,`data-orientation`,`data-gap`,`id`]}})},Q=e=>{l?.disconnect(),typeof ResizeObserver<`u`&&(l=new ResizeObserver(()=>{if(!a)return;let e=C(k());e.primaryList&&B(e.primaryList,e)}),e.primaryList&&l.observe(e.primaryList),e.items.forEach(e=>l?.observe(e.tab)))},$;return $={...J,get value(){return this.snapshot.current?.context.selection.value??``},init(){a=this.$el,J.connect(this.$el,this.snapshot),s=p({root:h,itemSelector:`[data-ui-tabs-tab]`,isDisabled:e=>!v(e)||y(e.dataset.disabled)||e.hasAttribute(`disabled`),loop:()=>D().loop});let e=G({indicator:!0});Z(e),Q(e)},destroy(){c?.(),c=null,l?.disconnect(),l=null,window.clearTimeout(f),u=null,f=void 0,J.disconnect(),s=null,a=null},transitionIndicator(e){if(!(e.el instanceof Element))return Promise.resolve();let t=j(e.el);return t?!e.props.animate||e.event.motion===!1?(F(t),i()):o(e,{target:t.indicator,update:()=>F(t),role:`layoutSpring`,transition:{bounce:0}}):Promise.resolve()},get root(){return{"data-ui-tabs":``,":data-orientation":()=>D().orientation,":data-activation":()=>D().activation,":data-animate":()=>D().animate?``:void 0,"@pointerdown":ie,"@click":re,"@focusin":ae,"@keydown":e=>{e instanceof KeyboardEvent&&oe(e)}}},select(e){X(e)},isActive(e){return this.snapshot.current?.context.selection.value===e}},$},V=f(`UiTabs`,B),H=new WeakSet,U=e=>{H.has(e)||(H.add(e),a(e),V(e))};export{B as n,U as t};
|
|
2
|
+
//# sourceMappingURL=entry.generated-ollD3I52.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.generated-ollD3I52.js","names":[],"sources":["../../../../../../../../client/src/components/tabs/contract.ts","../../../../../../../../client/src/components/tabs/machine.ts","../../../../../../../../client/src/components/tabs/index.ts","../../../../../../../../client/src/components/tabs/entry.generated.ts"],"sourcesContent":["import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {\n INTERACTION_TREATMENTS,\n LAYOUT_SPACES,\n ORIENTATIONS,\n SELECTION_COLORS,\n type ControlSize,\n type LayoutSpace,\n type Orientation,\n} from '../common';\n\nconst TABS_ACTIVATIONS = ['manual', 'automatic'] as const;\nconst TABS_ORIENTATIONS = ORIENTATIONS;\nconst TABS_LIST_ORIENTATIONS = ['inherit', ...TABS_ORIENTATIONS] as const;\nconst TABS_LIST_GAPS = ['auto', ...LAYOUT_SPACES] as const;\nconst TABS_VARIANTS = ['subtle', 'line', 'segmented', 'pills'] as const;\nconst TABS_SIZES = ['sm', 'md'] as const satisfies readonly ControlSize[];\nconst TABS_COLORS = SELECTION_COLORS;\nconst TABS_INTERACTIONS = INTERACTION_TREATMENTS;\n\nconst tabsSchema = {\n id: string.default('ui-tabs'),\n animate: bool,\n defaultValue: string,\n value: string,\n activation: oneOf(TABS_ACTIVATIONS, 'manual'),\n orientation: oneOf(TABS_ORIENTATIONS, 'horizontal'),\n gap: oneOf(TABS_LIST_GAPS, 'auto'),\n loop: bool.default(true),\n panels: string,\n class: string,\n};\n\ntype TabsActivation = typeof TABS_ACTIVATIONS[number];\ntype TabsOrientation = Orientation;\ntype TabsGap = 'auto' | LayoutSpace;\ntype TabsListOrientation = typeof TABS_LIST_ORIENTATIONS[number];\ntype TabsListGap = TabsGap;\ntype TabsVariant = typeof TABS_VARIANTS[number];\ntype TabsSize = typeof TABS_SIZES[number];\ntype TabsColor = typeof TABS_COLORS[number];\ntype TabsInteraction = typeof TABS_INTERACTIONS[number];\ntype TabsProps = SchemaToProps<typeof tabsSchema>;\n\nexport {\n TABS_ACTIVATIONS,\n TABS_COLORS,\n TABS_INTERACTIONS,\n TABS_LIST_ORIENTATIONS,\n TABS_LIST_GAPS,\n TABS_ORIENTATIONS,\n TABS_SIZES,\n TABS_VARIANTS,\n tabsSchema,\n};\nexport type {\n TabsActivation,\n TabsColor,\n TabsGap,\n TabsListOrientation,\n TabsInteraction,\n TabsListGap,\n TabsOrientation,\n TabsProps,\n TabsSize,\n TabsVariant,\n};\n","import {\n createMachine,\n propsChanged,\n propsChangedEvent,\n type Machine,\n type MachineEventObject,\n type MachineScope,\n} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {TabsProps} from './contract';\n\ntype TabsContext = {\n selection: {value: string};\n change: {previousValue: string; value: string; panelId: string};\n collection: {values: string[]; disabledValues: string[]; panelIds: Record<string, string>};\n};\n\ntype TabsTransitionData = TabsContext['change'];\n\ntype TabsMachineEffects = {\n prepareSwitch(scope: MachineScope<TabsContext, TabsProps>): void;\n finishSwitch(scope: MachineScope<TabsContext, TabsProps>): void;\n syncDom(scope: MachineScope<TabsContext, TabsProps>): void;\n syncProps(scope: MachineScope<TabsContext, TabsProps>): void;\n syncItems(scope: MachineScope<TabsContext, TabsProps>): void;\n};\n\ntype CreateTabsMachineOptions = {\n props: TabsProps;\n context: TabsContext;\n effects: TabsMachineEffects;\n};\n\nconst switchingHook = defineHook({\n name: 'switching',\n state: 'switching',\n project: (snapshot) => snapshot.context.change,\n onDone: 'SWITCH_DONE',\n onError: 'SWITCH_ERROR',\n sends: {\n select: (value: string) => ({type: 'SELECT', value}),\n },\n} satisfies TransitionHookDefinition<TabsContext, TabsProps, TabsTransitionData, 'switching'>);\n\nconst tabsHooks = [switchingHook] as const;\n\nconst stringValue = (value: unknown): string => typeof value === 'string' ? value : '';\nconst stringValues = (value: unknown): string[] => Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\nconst panelIds = (value: unknown): Record<string, string> => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {};\n return Object.fromEntries(Object.entries(value).filter((entry): entry is [string, string] => (\n typeof entry[1] === 'string'\n )));\n};\n\nconst nextProps = (scope: MachineScope<TabsContext, TabsProps>): TabsProps => (\n propsChangedEvent<TabsProps>(scope.event)?.props ?? scope.props\n);\n\nconst nextCollection = (scope: MachineScope<TabsContext, TabsProps>): TabsContext['collection'] => {\n if (scope.event.type !== 'ITEMS_CHANGED') return scope.context.collection;\n return {\n values: stringValues(scope.event.values),\n disabledValues: stringValues(scope.event.disabledValues),\n panelIds: panelIds(scope.event.panelIds),\n };\n};\n\nconst normalizeValue = (value: string, collection: TabsContext['collection']): string => {\n if (value && collection.values.includes(value) && !collection.disabledValues.includes(value)) return value;\n return collection.values.find((item) => !collection.disabledValues.includes(item)) ?? '';\n};\n\nconst nextValue = (scope: MachineScope<TabsContext, TabsProps>): string => {\n const collection = nextCollection(scope);\n if (scope.event.type === 'SELECT') {\n const requested = stringValue(scope.event.value);\n return requested && collection.values.includes(requested) && !collection.disabledValues.includes(requested)\n ? requested\n : scope.context.selection.value;\n }\n if (scope.event.type === 'PROPS_CHANGED' && propsChanged<TabsProps>(scope.event, 'value')) {\n return normalizeValue(nextProps(scope).value, collection);\n }\n return normalizeValue(scope.context.selection.value, collection);\n};\n\nconst selectionChanges = (scope: MachineScope<TabsContext, TabsProps>): boolean => (\n scope.context.selection.value !== nextValue(scope)\n);\n\nconst transition = (target: 'switching', effects: 'prepareSwitch') => ({\n target,\n guard: selectionChanges,\n reduce: 'applySwitch',\n effects,\n} as const);\n\nconst createTabsMachine = ({\n props,\n context,\n effects,\n}: CreateTabsMachineOptions): Machine<TabsContext, TabsProps> => createMachine<TabsContext, TabsProps>({\n initial: 'stable',\n on: {\n DOM_INVALIDATED: {effects: 'syncDom'},\n },\n states: {\n stable: {\n tags: ['stable'],\n on: {\n SELECT: transition('switching', 'prepareSwitch'),\n PROPS_CHANGED: [\n transition('switching', 'prepareSwitch'),\n {reduce: 'reconcile', effects: 'syncProps'},\n ],\n ITEMS_CHANGED: [\n transition('switching', 'prepareSwitch'),\n {reduce: 'reconcile', effects: 'syncItems'},\n ],\n },\n },\n switching: {\n tags: ['switching', 'transitioning'],\n on: {\n SWITCH_DONE: {target: 'stable', effects: 'finishSwitch'},\n SWITCH_ERROR: {target: 'stable', effects: 'finishSwitch'},\n SELECT: transition('switching', 'prepareSwitch'),\n PROPS_CHANGED: [\n transition('switching', 'prepareSwitch'),\n {reduce: 'reconcile', effects: 'syncProps'},\n ],\n ITEMS_CHANGED: [\n transition('switching', 'prepareSwitch'),\n {reduce: 'reconcile', effects: 'syncItems'},\n ],\n },\n },\n },\n}, {\n context,\n props,\n reducers: {\n applySwitch: (scope) => {\n const collection = nextCollection(scope);\n const value = nextValue(scope);\n return {\n props: nextProps(scope),\n context: {\n ...scope.context,\n selection: {value},\n change: {\n previousValue: scope.context.selection.value,\n value,\n panelId: collection.panelIds[value] ?? '',\n },\n collection,\n },\n };\n },\n reconcile: (scope) => ({\n props: nextProps(scope),\n context: {\n ...scope.context,\n collection: nextCollection(scope),\n selection: {value: nextValue(scope)},\n },\n }),\n },\n effects: {\n prepareSwitch: effects.prepareSwitch,\n finishSwitch: effects.finishSwitch,\n syncDom: effects.syncDom,\n syncProps: effects.syncProps,\n syncItems: effects.syncItems,\n },\n});\n\nexport {createTabsMachine, tabsHooks};\nexport type {\n CreateTabsMachineOptions,\n TabsContext,\n TabsMachineEffects,\n TabsTransitionData,\n};\n","import type Alpine from 'alpinejs';\n\nimport {\n type AlpineMachine,\n type BindingObject,\n createAlpineMachine,\n createCollectionNavigation,\n type CollectionNavigation,\n defineAlpineData,\n type MachineSnapshot,\n observeSemanticChanges,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {\n flip,\n type MotionHandle,\n type MotionTransitionSubject,\n} from '@client/motion';\nimport {noopHandle} from '@client/motion/animate';\nimport {asBool, dispatch, isRtl, setPresence} from '@client/utils';\nimport {\n tabsSchema,\n type TabsOrientation,\n type TabsProps,\n type TabsSize,\n type TabsVariant,\n} from './contract';\nimport {\n createTabsMachine,\n type TabsContext,\n tabsHooks,\n type TabsTransitionData,\n} from './machine';\n\ntype TabsTransitionName = (typeof tabsHooks)[number]['name'];\ntype TabsTransition<TName extends TabsTransitionName = TabsTransitionName> = TransitionForHook<\n Extract<(typeof tabsHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype IndicatorFrame = {indicator: HTMLElement; styles: {\n height: number;\n left: number;\n top: number;\n width: number;\n}};\n\ntype TabsTabElement = HTMLButtonElement | HTMLAnchorElement;\n\ntype TabsItem = {\n tab: TabsTabElement;\n value: string;\n disabled: boolean;\n panel: HTMLElement | null;\n};\n\ntype TabsProjection = {\n ownerId: string;\n primaryList: HTMLElement | null;\n panelsTarget: HTMLElement | null;\n panels: HTMLElement[];\n panelByValue: Map<string, HTMLElement>;\n items: TabsItem[];\n itemByValue: Map<string, TabsItem>;\n itemByTab: Map<TabsTabElement, TabsItem>;\n tabStop: TabsTabElement | null;\n};\n\ntype TabsChangeDetail = {value: string};\ntype TabsActivateDetail = {value: string; panelId: string};\n\n/**\n * Public Alpine API for `ui.tabs`.\n *\n * @public\n */\ninterface UiTabsApi {\n /** Currently selected tab value. */\n readonly value: string;\n\n /** Select an enabled tab that belongs to this Tabs owner. */\n select(value: string): void;\n\n /** Whether `value` is currently selected. */\n isActive(value: string): boolean;\n}\n\ntype TabsData = AlpineMachine<TabsContext, TabsProps, typeof tabsHooks> & UiTabsApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n transitionIndicator(transition: TabsMotionTransition): MotionHandle | Promise<void>;\n};\n\ntype TabsMotionTransition = MotionTransitionSubject & Readonly<{\n el: unknown;\n event: {motion?: boolean};\n props: {animate: boolean};\n}>;\n\nconst DEFAULT_OWNER = 'ui-tabs';\nconst stateFor = (active: boolean): 'active' | 'inactive' => active ? 'active' : 'inactive';\nconst safeIdPart = (value: string): string => {\n const sanitized = value.trim().toLowerCase().replace(/[^a-z0-9_-]+/g, '-').replace(/^-+|-+$/g, '');\n return sanitized || 'tab';\n};\nconst tabIdFor = (owner: string, value: string): string => `${owner}-tab-${safeIdPart(value)}`;\nconst panelIdFor = (owner: string, value: string): string => `${owner}-panel-${safeIdPart(value)}`;\nconst isTabElement = (element: Element | null): element is TabsTabElement => (\n element instanceof HTMLButtonElement || element instanceof HTMLAnchorElement\n);\nconst uniqueElements = <T extends HTMLElement>(elements: T[]): T[] => Array.from(new Set(elements));\n\nconst UiTabs = (): TrellisAlpineComponent<TabsData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let collection: CollectionNavigation | null = null;\n let disconnectObserver: (() => void) | null = null;\n let resizeObserver: ResizeObserver | null = null;\n let pointerFocusedTab: TabsTabElement | null = null;\n let pointerFocusReset: number | undefined;\n let connectingProps: TabsProps | null = null;\n\n const root = (): HTMLElement & Alpine.ElementWithXAttributes => {\n if (!rootEl) throw new Error('Tabs has not been initialized.');\n return rootEl;\n };\n const owner = (): string => root().id || root().dataset.id || root().dataset.owner || DEFAULT_OWNER;\n const owns = (element: Element): boolean => element.closest('[data-ui-tabs]') === root();\n const boolDataset = (value: string | undefined): boolean => asBool({value});\n\n const listVariant = (list: HTMLElement | null): TabsVariant => {\n const value = list?.dataset.variant;\n if (value === 'subtle' || value === 'segmented' || value === 'pills') return value;\n return 'line';\n };\n const listSize = (list: HTMLElement | null): TabsSize => (\n list?.dataset.size === 'sm' ? 'sm' : 'md'\n );\n const listOrientation = (list: HTMLElement | null): TabsOrientation => {\n const value = list?.dataset.orientation;\n return value === 'vertical' || value === 'horizontal' ? value : currentProps().orientation;\n };\n\n const createProjection = (selectedValue?: string): TabsProjection => {\n const ownerId = owner();\n const detached = (panel: HTMLElement): boolean => (\n panel.dataset.uiTabsOwner === ownerId || panel.dataset.owner === ownerId\n );\n const primaryList = Array.from(\n root().querySelectorAll<HTMLElement>('[data-ui-tabs-list]'),\n ).find(owns) ?? null;\n const foundPanels = Array.from(\n root().querySelectorAll<HTMLElement>('[data-ui-tabs-panel]'),\n ).filter(owns);\n const selector = currentProps().panels;\n const panelsTarget = selector ? document.querySelector<HTMLElement>(selector) : null;\n if (panelsTarget) {\n foundPanels.push(...Array.from(\n panelsTarget.querySelectorAll<HTMLElement>('[data-ui-tabs-panel]'),\n ).filter(detached));\n }\n foundPanels.push(...Array.from(document.querySelectorAll<HTMLElement>(\n `[data-ui-tabs-panel][data-ui-tabs-owner=\"${CSS.escape(ownerId)}\"]`,\n )).filter(detached));\n const panels = uniqueElements(foundPanels);\n const panelByValue = new Map<string, HTMLElement>();\n panels.forEach((panel) => {\n const value = panel.dataset.value || '';\n if (!panelByValue.has(value)) panelByValue.set(value, panel);\n });\n const items = Array.from(\n root().querySelectorAll<HTMLElement>('[data-ui-tabs-tab]'),\n ).filter(owns).map((element, index) => {\n if (!isTabElement(element)) return null;\n element.dataset.value ||= `tab-${index + 1}`;\n return {\n tab: element,\n value: element.dataset.value,\n disabled: boolDataset(element.dataset.disabled) || element.hasAttribute('disabled'),\n panel: panelByValue.get(element.dataset.value) ?? null,\n } satisfies TabsItem;\n }).filter((item): item is TabsItem => item !== null);\n const itemByValue = new Map<string, TabsItem>();\n const itemByTab = new Map<TabsTabElement, TabsItem>();\n items.forEach((item) => {\n if (!itemByValue.has(item.value)) itemByValue.set(item.value, item);\n itemByTab.set(item.tab, item);\n });\n const focused = items.find((item) => (\n document.activeElement === item.tab || item.tab.dataset.active === 'true'\n ));\n return {\n ownerId,\n primaryList,\n panelsTarget,\n panels,\n panelByValue,\n items,\n itemByValue,\n itemByTab,\n tabStop: focused?.tab ?? (selectedValue ? itemByValue.get(selectedValue)?.tab ?? null : null),\n };\n };\n\n const itemFrom = (target: EventTarget | null, projection: TabsProjection): TabsItem | null => {\n if (!(target instanceof Element)) return null;\n const tab = target.closest<HTMLElement>('[data-ui-tabs-tab]');\n return tab && isTabElement(tab) && owns(tab) ? projection.itemByTab.get(tab) ?? null : null;\n };\n\n const collectionContext = (projection: TabsProjection): TabsContext['collection'] => {\n const records = projection.items;\n return {\n values: records.map((item) => item.value),\n disabledValues: records.filter((item) => item.disabled).map((item) => item.value),\n panelIds: Object.fromEntries(records.map((item) => [\n item.value,\n item.panel?.id || panelIdFor(\n item.tab.dataset.uiTabsOwner || item.tab.dataset.owner || projection.ownerId,\n item.value,\n ),\n ])),\n };\n };\n\n const initialContext = (props: TabsProps): TabsContext => {\n const projection = createProjection();\n const collectionState = collectionContext(projection);\n const authoredTab = projection.items.find((item) => (\n boolDataset(item.tab.dataset.selected) || item.tab.getAttribute('aria-selected') === 'true'\n ));\n const authoredPanel = projection.panels.find((panel) => boolDataset(panel.dataset.selected));\n const requested = props.value || props.defaultValue || authoredTab?.value || authoredPanel?.dataset.value || '';\n const value = requested\n && collectionState.values.includes(requested)\n && !collectionState.disabledValues.includes(requested)\n ? requested\n : collectionState.values.find((item) => !collectionState.disabledValues.includes(item)) ?? '';\n return {\n selection: {value},\n change: {previousValue: '', value, panelId: collectionState.panelIds[value] ?? ''},\n collection: collectionState,\n };\n };\n\n const currentProps = (): Readonly<TabsProps> => (\n connectingProps ?? bridge.getCommittedSnapshot().props\n );\n const currentContext = (): Readonly<TabsContext> => bridge.getCommittedSnapshot().context;\n\n const activeValue = (): string => currentContext().selection.value;\n\n const indicatorFor = (list: HTMLElement): HTMLElement | null => (\n list.querySelector<HTMLElement>(':scope > [data-ui-tabs-indicator]')\n );\n const indicatorFrame = (tab: Element): IndicatorFrame | null => {\n if (!(tab instanceof HTMLElement)) return null;\n const list = tab.closest<HTMLElement>('[data-ui-tabs-list]');\n const indicator = list ? indicatorFor(list) : null;\n if (!list || !indicator) return null;\n indicator.hidden = false;\n const listRect = list.getBoundingClientRect();\n const tabRect = tab.getBoundingClientRect();\n const vertical = list.dataset.orientation === 'vertical';\n const line = list.dataset.variant === 'line';\n const width = line && vertical ? 2 : tabRect.width;\n const height = line && !vertical ? 2 : tabRect.height;\n const separatorWidth = line\n ? Number.parseFloat(getComputedStyle(list).getPropertyValue('--border-width-edge-separator')) || 1\n : 0;\n const targetLeft = line && vertical\n ? listRect.left - ((width - separatorWidth) / 2)\n : tabRect.left;\n const targetTop = line && !vertical\n ? listRect.bottom - ((height + separatorWidth) / 2)\n : tabRect.top;\n return {\n indicator,\n styles: {\n height,\n left: targetLeft - listRect.left,\n top: targetTop - listRect.top,\n width,\n },\n };\n };\n const applyIndicatorFrame = (frame: IndicatorFrame): void => {\n frame.indicator.style.height = `${frame.styles.height}px`;\n frame.indicator.style.left = `${frame.styles.left}px`;\n frame.indicator.style.top = `${frame.styles.top}px`;\n frame.indicator.style.width = `${frame.styles.width}px`;\n };\n const positionIndicator = (list: HTMLElement, projection: TabsProjection): void => {\n const indicator = indicatorFor(list);\n if (!indicator) return;\n const active = projection.items.find((item) => (\n item.value === activeValue() && item.tab.closest('[data-ui-tabs-list]') === list\n ));\n if (!active) {\n indicator.hidden = true;\n list.dataset.uiTabsReady = '';\n return;\n }\n const frame = indicatorFrame(active.tab);\n if (frame) applyIndicatorFrame(frame);\n list.dataset.uiTabsReady = '';\n };\n\n const syncRoot = (): void => {\n const props = currentProps();\n if (!root().id && props.id) root().id = props.id;\n root().dataset.orientation = props.orientation;\n root().dataset.activation = props.activation;\n root().dataset.value = activeValue();\n setPresence({el: root(), attr: 'data-animate', present: props.animate});\n };\n\n const syncList = (list: HTMLElement): void => {\n const orientation = listOrientation(list);\n list.setAttribute('role', 'tablist');\n list.dataset.orientation = orientation;\n if (orientation === 'vertical') list.setAttribute('aria-orientation', 'vertical');\n else list.removeAttribute('aria-orientation');\n };\n\n const syncTab = (item: TabsItem, projection: TabsProjection): void => {\n const active = item.value === activeValue();\n const list = item.tab.closest<HTMLElement>('[data-ui-tabs-list]');\n const orientation = listOrientation(list);\n const variant = listVariant(list);\n const size = listSize(list);\n const ownerId = item.tab.dataset.uiTabsOwner || item.tab.dataset.owner || owner();\n const selectedIcon = item.tab.querySelector<HTMLElement>('[data-ui-tabs-tab-selected-icon]');\n const state = stateFor(active);\n\n item.tab.id ||= tabIdFor(ownerId, item.value);\n item.tab.dataset.state = state;\n item.tab.dataset.orientation = orientation;\n item.tab.dataset.variant = variant;\n item.tab.dataset.size = size;\n item.tab.setAttribute('role', 'tab');\n item.tab.setAttribute('aria-selected', active ? 'true' : 'false');\n item.tab.setAttribute('aria-controls', item.panel?.id || panelIdFor(ownerId, item.value));\n item.tab.tabIndex = item.tab === projection.tabStop ? 0 : -1;\n setPresence({el: item.tab, attr: 'data-selected', present: active});\n if (selectedIcon) selectedIcon.style.visibility = active ? 'visible' : 'hidden';\n\n setPresence({el: item.tab, attr: 'data-disabled', present: item.disabled});\n if (item.disabled) {\n item.tab.setAttribute('aria-disabled', 'true');\n item.tab.tabIndex = -1;\n } else item.tab.removeAttribute('aria-disabled');\n if (item.tab instanceof HTMLButtonElement) item.tab.disabled = item.disabled;\n };\n\n const syncPanel = (panel: HTMLElement): void => {\n const value = panel.dataset.value || '';\n const active = value === activeValue();\n const ownerId = panel.dataset.uiTabsOwner || panel.dataset.owner || owner();\n const id = panelIdFor(ownerId, value);\n if (value && !panel.id) panel.id = id;\n if (value && !panel.hasAttribute('data-ui-key')) panel.setAttribute('data-ui-key', panel.id || id);\n panel.dataset.state = stateFor(active);\n panel.dataset.orientation = currentProps().orientation;\n panel.setAttribute('role', 'tabpanel');\n panel.setAttribute('aria-labelledby', tabIdFor(ownerId, value));\n if (!panel.hasAttribute('tabindex')) panel.tabIndex = 0;\n panel.hidden = !active;\n setPresence({el: panel, attr: 'data-selected', present: active});\n };\n\n const syncAll = ({indicator = false}: {indicator?: boolean} = {}): TabsProjection => {\n syncRoot();\n const projection = createProjection(activeValue());\n const tabList = projection.primaryList;\n if (tabList) syncList(tabList);\n projection.items.forEach((item) => syncTab(item, projection));\n projection.panels.forEach(syncPanel);\n if (indicator && tabList) positionIndicator(tabList, projection);\n return projection;\n };\n\n const emitChange = (): void => {\n dispatch<TabsChangeDetail>({el: root(), name: 'ui:change', detail: {value: activeValue()}});\n };\n const emitActivate = (tab: TabsTabElement, value: string, panelId: string): void => {\n dispatch<TabsActivateDetail>({\n el: tab,\n name: 'ui:tabs:activate',\n detail: {value, panelId},\n });\n };\n const syncDom = (): void => {\n const projection = syncAll({indicator: true});\n setupObservers(projection);\n setupResizeObserver(projection);\n };\n\n const bridge = createAlpineMachine({\n schema: tabsSchema,\n hooks: tabsHooks,\n resolveTransitionElement: ({data}) => (\n createProjection(activeValue()).itemByValue.get((data as TabsTransitionData).value)?.tab ?? null\n ),\n createMachine: ({props}) => {\n connectingProps = props;\n const context = initialContext(props);\n connectingProps = null;\n return createTabsMachine({\n props,\n context,\n effects: {\n prepareSwitch: ({event}) => {\n syncAll();\n if (event.type === 'SELECT') emitChange();\n },\n finishSwitch: () => syncAll(),\n syncDom,\n syncProps: syncDom,\n syncItems: () => {\n const projection = syncAll({indicator: true});\n setupResizeObserver(projection);\n },\n },\n });\n },\n });\n\n const collectionNav = (): CollectionNavigation => {\n if (!collection) throw new Error('Tabs navigation has not been initialized.');\n return collection;\n };\n\n const selectValue = (value: string, {tab, panel, motion = true}: {\n tab?: TabsTabElement;\n panel?: HTMLElement | null;\n motion?: boolean;\n } = {}): void => {\n const previous = activeValue();\n bridge.send({type: 'SELECT', value, motion});\n if (activeValue() !== previous && tab) emitActivate(tab, activeValue(), panel?.id ?? '');\n };\n\n const handleClick = (event: Event): void => {\n const item = itemFrom(event.target, createProjection(activeValue()));\n if (!item) return;\n if (item.disabled) {\n event.preventDefault();\n return;\n }\n selectValue(item.value, {tab: item.tab, panel: item.panel});\n };\n\n const handlePointerDown = (event: Event): void => {\n pointerFocusedTab = itemFrom(event.target, createProjection(activeValue()))?.tab ?? null;\n window.clearTimeout(pointerFocusReset);\n pointerFocusReset = window.setTimeout(() => {\n pointerFocusedTab = null;\n pointerFocusReset = undefined;\n });\n };\n\n const handleFocus = (event: Event): void => {\n const item = itemFrom(event.target, createProjection(activeValue()));\n if (!item || event.target !== item.tab || item.disabled) return;\n collectionNav().activateItem({el: item.tab});\n if (currentProps().activation === 'automatic' && pointerFocusedTab !== item.tab) {\n selectValue(item.value, {tab: item.tab, panel: item.panel, motion: false});\n } else syncAll();\n };\n\n const handleKeydown = (event: KeyboardEvent): void => {\n const item = itemFrom(event.target, createProjection(activeValue()));\n if (!item || event.target !== item.tab) return;\n if (event.key === ' ' && item.tab instanceof HTMLAnchorElement) {\n event.preventDefault();\n selectValue(item.value, {tab: item.tab, panel: item.panel, motion: false});\n return;\n }\n const orientation = listOrientation(item.tab.closest<HTMLElement>('[data-ui-tabs-list]'));\n if (event.key === 'Home') {\n event.preventDefault();\n collectionNav().focusFirst();\n return;\n }\n if (event.key === 'End') {\n event.preventDefault();\n collectionNav().focusLast();\n return;\n }\n if (orientation === 'vertical') {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n collectionNav().focusNext();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n collectionNav().focusPrevious();\n }\n return;\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n if (isRtl({el: root()})) collectionNav().focusPrevious();\n else collectionNav().focusNext();\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n if (isRtl({el: root()})) collectionNav().focusNext();\n else collectionNav().focusPrevious();\n }\n };\n\n const sendItemsChanged = (next: TabsContext['collection']): void => {\n bridge.send({type: 'ITEMS_CHANGED', ...next});\n };\n\n const setupObservers = (projection: TabsProjection): void => {\n disconnectObserver?.();\n const targets = [root()];\n if (projection.panelsTarget) targets.push(projection.panelsTarget);\n disconnectObserver = observeSemanticChanges({\n targets: uniqueElements(targets),\n read: () => collectionContext(createProjection(activeValue())),\n onChange: sendItemsChanged,\n observer: {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\n 'data-value',\n 'data-disabled',\n 'disabled',\n 'data-ui-tabs-owner',\n 'data-owner',\n 'data-variant',\n 'data-size',\n 'data-orientation',\n 'data-gap',\n 'id',\n ],\n },\n });\n };\n\n const setupResizeObserver = (projection: TabsProjection): void => {\n resizeObserver?.disconnect();\n if (typeof ResizeObserver === 'undefined') return;\n resizeObserver = new ResizeObserver(() => {\n if (!rootEl) return;\n const next = createProjection(activeValue());\n if (next.primaryList) positionIndicator(next.primaryList, next);\n });\n if (projection.primaryList) resizeObserver.observe(projection.primaryList);\n projection.items.forEach((item) => resizeObserver?.observe(item.tab));\n };\n\n let component!: TrellisAlpineComponent<TabsData>;\n component = {\n ...bridge,\n get value(): string {\n return this.snapshot.current?.context.selection.value ?? '';\n },\n init(): void {\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n collection = createCollectionNavigation({\n root,\n itemSelector: '[data-ui-tabs-tab]',\n isDisabled: (element) => !owns(element)\n || boolDataset(element.dataset.disabled)\n || element.hasAttribute('disabled'),\n loop: () => currentProps().loop,\n });\n const projection = syncAll({indicator: true});\n setupObservers(projection);\n setupResizeObserver(projection);\n },\n destroy(): void {\n disconnectObserver?.();\n disconnectObserver = null;\n resizeObserver?.disconnect();\n resizeObserver = null;\n window.clearTimeout(pointerFocusReset);\n pointerFocusedTab = null;\n pointerFocusReset = undefined;\n bridge.disconnect();\n collection = null;\n rootEl = null;\n },\n transitionIndicator(transition: TabsMotionTransition): MotionHandle | Promise<void> {\n if (!(transition.el instanceof Element)) return Promise.resolve();\n const frame = indicatorFrame(transition.el);\n if (!frame) return Promise.resolve();\n if (!transition.props.animate || transition.event.motion === false) {\n applyIndicatorFrame(frame);\n return noopHandle();\n }\n\n return flip(transition, {\n target: frame.indicator,\n update: () => applyIndicatorFrame(frame),\n role: 'layoutSpring',\n transition: {bounce: 0},\n });\n },\n get root(): BindingObject {\n return {\n 'data-ui-tabs': '',\n ':data-orientation': () => currentProps().orientation,\n ':data-activation': () => currentProps().activation,\n ':data-animate': () => currentProps().animate ? '' : undefined,\n '@pointerdown': handlePointerDown,\n '@click': handleClick,\n '@focusin': handleFocus,\n '@keydown': (event: Event) => {\n if (event instanceof KeyboardEvent) handleKeydown(event);\n },\n };\n },\n select(value: string): void {\n selectValue(value);\n },\n isActive(value: string): boolean {\n return this.snapshot.current?.context.selection.value === value;\n },\n };\n\n return component;\n};\n\nconst registerTabs = defineAlpineData('UiTabs', UiTabs);\n\nexport {registerTabs, UiTabs};\nexport type {TabsActivateDetail, TabsChangeDetail, TabsTransition, UiTabsApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\nimport {registerMotionCapability} from '../../capabilities/motion';\nimport {registerTabs as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerTabs = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerTabs};\nexport default registerTabs;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as e,c as t,d as n,f as r,l as i,m as a,p as o,u as s,v as c,x as l,y as u}from"./motion-CbwLBhMt.js";var d=(e,t)=>Math.abs(e.left-t.left)>=.5||Math.abs(e.top-t.top)>=.5||Math.abs(e.width-t.width)>=.5||Math.abs(e.height-t.height)>=.5,f=(e,t)=>{let n=Array.isArray(t)?t:[t];return Array.from(new Set(n.map(t=>i(e,t)))).map(e=>{if(!(e instanceof HTMLElement))throw TypeError(`FLIP motion requires an HTMLElement target.`);return e})},p=(i,p)=>{let m=f(i,p.target),h=p.signal??t(i);m.forEach(e=>n(e));let g=m.map(e=>e.getBoundingClientRect()),_=m.map(e=>({transform:e.style.transform,transformOrigin:e.style.transformOrigin,willChange:e.style.willChange}));p.update();let v=m.map(e=>e.getBoundingClientRect());if(h?.aborted||u())return r();let y=p.role??`layout`,b=[];return m.forEach((t,n)=>{let r=g[n],i=v[n],o=_[n];if(!d(r,i)||i.width===0||i.height===0)return;let u=`translate(${r.left-i.left}px, ${r.top-i.top}px) scale(${r.width/i.width}, ${r.height/i.height})`,f=o.transform||`none`;t.style.transformOrigin=`top left`,t.style.willChange=`transform`,b.push(s(t,()=>a(t,{transform:[u,f]},{...l(t,y),...e(y,t)?{type:c}:{type:`tween`},...p.transition}),new Set([`transform`]),h,()=>{t.style.transform=o.transform,t.style.transformOrigin=o.transformOrigin,t.style.willChange=o.willChange}))}),o(...b)};export{p as t};
|
|
2
|
+
//# sourceMappingURL=flip-XeJ05afl.js.map
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/flip-XeJ05afl.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flip-XeJ05afl.js","names":[],"sources":["../../../../../../../../client/src/motion/flip.ts"],"sourcesContent":["import {spring} from 'motion';\nimport {animate} from 'motion/mini';\nimport {noopHandle, parallel, type MotionHandle} from './animate';\nimport {ownMotion, stopOwnedMotion} from './owned';\nimport {isSpringRole, resolveMiniMotionRole, type MotionRoleName, type MotionTransition} from './recipe';\nimport {shouldReduceMotion} from './reduced-motion';\nimport {motionSignal, resolveMotionTarget, type MotionSubject} from './subject';\n\ntype FlipOptions = Readonly<{\n target?: Element | string | readonly (Element | string)[];\n update(): void;\n role?: MotionRoleName;\n transition?: MotionTransition;\n signal?: AbortSignal | null;\n}>;\n\nconst changed = (from: DOMRect, to: DOMRect): boolean => (\n Math.abs(from.left - to.left) >= 0.5\n || Math.abs(from.top - to.top) >= 0.5\n || Math.abs(from.width - to.width) >= 0.5\n || Math.abs(from.height - to.height) >= 0.5\n);\n\nconst resolveTargets = (subject: MotionSubject, requested?: FlipOptions['target']): HTMLElement[] => {\n const targets = Array.isArray(requested) ? requested : [requested];\n return Array.from(new Set(targets.map((target) => resolveMotionTarget(subject, target))))\n .map((target) => {\n if (!(target instanceof HTMLElement)) throw new TypeError('FLIP motion requires an HTMLElement target.');\n return target;\n });\n};\n\n/** Commit final geometry once, then animate every visual from its inverse frame using transform only. */\nconst flip = (subject: MotionSubject, options: FlipOptions): MotionHandle => {\n const targets = resolveTargets(subject, options.target);\n const signal = options.signal ?? motionSignal(subject);\n targets.forEach((target) => stopOwnedMotion(target));\n const from = targets.map((target) => target.getBoundingClientRect());\n const baselines = targets.map((target) => ({\n transform: target.style.transform,\n transformOrigin: target.style.transformOrigin,\n willChange: target.style.willChange,\n }));\n options.update();\n const to = targets.map((target) => target.getBoundingClientRect());\n if (signal?.aborted || shouldReduceMotion()) return noopHandle();\n const role = options.role ?? 'layout';\n const handles: MotionHandle[] = [];\n targets.forEach((target, index) => {\n const start = from[index]!;\n const end = to[index]!;\n const baseline = baselines[index]!;\n if (!changed(start, end) || end.width === 0 || end.height === 0) return;\n const inverse = `translate(${start.left - end.left}px, ${start.top - end.top}px) scale(${start.width / end.width}, ${start.height / end.height})`;\n const destination = baseline.transform || 'none';\n target.style.transformOrigin = 'top left';\n target.style.willChange = 'transform';\n handles.push(ownMotion(target, () => animate(target, {\n transform: [inverse, destination],\n }, {\n ...resolveMiniMotionRole(target, role),\n ...(isSpringRole(role, target) ? {type: spring} : {type: 'tween' as const}),\n ...options.transition,\n }), new Set(['transform']), signal, () => {\n target.style.transform = baseline.transform;\n target.style.transformOrigin = baseline.transformOrigin;\n target.style.willChange = baseline.willChange;\n }));\n });\n return parallel(...handles);\n};\n\nexport {flip};\nexport type {FlipOptions};\n"],"mappings":"+GAgBA,IAAM,GAAW,EAAe,IAC5B,KAAK,IAAI,EAAK,KAAO,EAAG,IAAI,GAAK,IAC9B,KAAK,IAAI,EAAK,IAAM,EAAG,GAAG,GAAK,IAC/B,KAAK,IAAI,EAAK,MAAQ,EAAG,KAAK,GAAK,IACnC,KAAK,IAAI,EAAK,OAAS,EAAG,MAAM,GAAK,GAGtC,GAAkB,EAAwB,IAAqD,CACjG,IAAM,EAAU,MAAM,QAAQ,CAAS,EAAI,EAAY,CAAC,CAAS,EACjE,OAAO,MAAM,KAAK,IAAI,IAAI,EAAQ,IAAK,GAAW,EAAoB,EAAS,CAAM,CAAC,CAAC,CAAC,CAAC,CACpF,IAAK,GAAW,CACb,GAAI,EAAE,aAAkB,aAAc,MAAU,UAAU,6CAA6C,EACvG,OAAO,CACX,CAAC,CACT,EAGM,GAAQ,EAAwB,IAAuC,CACzE,IAAM,EAAU,EAAe,EAAS,EAAQ,MAAM,EAChD,EAAS,EAAQ,QAAU,EAAa,CAAO,EACrD,EAAQ,QAAS,GAAW,EAAgB,CAAM,CAAC,EACnD,IAAM,EAAO,EAAQ,IAAK,GAAW,EAAO,sBAAsB,CAAC,EAC7D,EAAY,EAAQ,IAAK,IAAY,CACvC,UAAW,EAAO,MAAM,UACxB,gBAAiB,EAAO,MAAM,gBAC9B,WAAY,EAAO,MAAM,UAC7B,EAAE,EACF,EAAQ,OAAO,EACf,IAAM,EAAK,EAAQ,IAAK,GAAW,EAAO,sBAAsB,CAAC,EACjE,GAAI,GAAQ,SAAW,EAAmB,EAAG,OAAO,EAAW,EAC/D,IAAM,EAAO,EAAQ,MAAQ,SACvB,EAA0B,CAAC,EAsBjC,OArBA,EAAQ,SAAS,EAAQ,IAAU,CAC/B,IAAM,EAAQ,EAAK,GACb,EAAM,EAAG,GACT,EAAW,EAAU,GAC3B,GAAI,CAAC,EAAQ,EAAO,CAAG,GAAK,EAAI,QAAU,GAAK,EAAI,SAAW,EAAG,OACjE,IAAM,EAAU,aAAa,EAAM,KAAO,EAAI,KAAK,MAAM,EAAM,IAAM,EAAI,IAAI,YAAY,EAAM,MAAQ,EAAI,MAAM,IAAI,EAAM,OAAS,EAAI,OAAO,GACzI,EAAc,EAAS,WAAa,OAC1C,EAAO,MAAM,gBAAkB,WAC/B,EAAO,MAAM,WAAa,YAC1B,EAAQ,KAAK,EAAU,MAAc,EAAQ,EAAQ,CACjD,UAAW,CAAC,EAAS,CAAW,CACpC,EAAG,CACC,GAAG,EAAsB,EAAQ,CAAI,EACrC,GAAI,EAAa,EAAM,CAAM,EAAI,CAAC,KAAM,CAAM,EAAI,CAAC,KAAM,OAAgB,EACzE,GAAG,EAAQ,UACf,CAAC,EAAG,IAAI,IAAI,CAAC,WAAW,CAAC,EAAG,MAAc,CACtC,EAAO,MAAM,UAAY,EAAS,UAClC,EAAO,MAAM,gBAAkB,EAAS,gBACxC,EAAO,MAAM,WAAa,EAAS,UACvC,CAAC,CAAC,CACN,CAAC,EACM,EAAS,GAAG,CAAO,CAC9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-handoff-BE3g0swK.js","names":[],"sources":["../../../../../../../../client/src/runtime/focus-handoff.ts"],"sourcesContent":["type FocusHandoffState = {\n pointerDown: boolean;\n pointerFocused: HTMLElement | null;\n indicatorSuppressed: HTMLElement | null;\n shortcut: boolean;\n shortcutReset: number | undefined;\n};\n\nconst NAVIGATION_KEYS = new Set([\n 'Tab',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'Home',\n 'End',\n 'PageDown',\n 'PageUp',\n]);\n\nconst states = new WeakMap<Document, FocusHandoffState>();\n\nconst ensureFocusHandoff = (document: Document): FocusHandoffState => {\n const existing = states.get(document);\n if (existing) return existing;\n\n const state: FocusHandoffState = {\n pointerDown: false,\n pointerFocused: null,\n indicatorSuppressed: null,\n shortcut: false,\n shortcutReset: undefined,\n };\n states.set(document, state);\n\n const clearSuppressedIndicator = (): void => {\n state.indicatorSuppressed?.removeAttribute('data-ui-focus-indicator');\n state.indicatorSuppressed = null;\n };\n\n document.addEventListener('pointerdown', () => {\n state.pointerDown = true;\n }, true);\n document.addEventListener('focusin', (event) => {\n state.pointerFocused = state.pointerDown && event.target instanceof HTMLElement\n ? event.target\n : null;\n }, true);\n document.addEventListener('pointerup', (event) => {\n const active = document.activeElement;\n state.pointerFocused = active instanceof HTMLElement\n && active !== document.body\n && event.composedPath().some((entry) => entry === active)\n ? active\n : null;\n state.pointerDown = false;\n }, true);\n document.addEventListener('pointercancel', () => {\n state.pointerDown = false;\n }, true);\n document.addEventListener('keydown', (event) => {\n clearSuppressedIndicator();\n if (NAVIGATION_KEYS.has(event.key)) {\n state.pointerFocused = null;\n }\n }, true);\n document.addEventListener('focusout', (event) => {\n if (event.target === state.indicatorSuppressed) clearSuppressedIndicator();\n }, true);\n document.defaultView?.addEventListener('blur', () => {\n state.pointerDown = false;\n state.pointerFocused = null;\n clearSuppressedIndicator();\n });\n return state;\n};\n\nconst beginShortcutFocusHandoff = (document: Document): void => {\n const state = ensureFocusHandoff(document);\n const active = document.activeElement;\n if (active instanceof HTMLElement && active === state.pointerFocused) active.blur();\n state.pointerFocused = null;\n state.shortcut = true;\n if (state.shortcutReset !== undefined) document.defaultView?.clearTimeout(state.shortcutReset);\n state.shortcutReset = document.defaultView?.setTimeout(() => {\n state.shortcut = false;\n state.shortcutReset = undefined;\n });\n};\n\nconst isShortcutFocusHandoff = (document: Document): boolean => ensureFocusHandoff(document).shortcut;\n\nconst focusWithoutIndicator = (element: HTMLElement): void => {\n const state = ensureFocusHandoff(element.ownerDocument);\n state.indicatorSuppressed?.removeAttribute('data-ui-focus-indicator');\n element.focus({preventScroll: true, focusVisible: false});\n element.setAttribute('data-ui-focus-indicator', 'suppressed');\n state.indicatorSuppressed = element;\n};\n\nexport {\n beginShortcutFocusHandoff,\n ensureFocusHandoff,\n focusWithoutIndicator,\n isShortcutFocusHandoff,\n};\n"],"mappings":"AAQA,IAAM,EAAkB,IAAI,IAAI,CAC5B,MACA,YACA,YACA,aACA,UACA,OACA,MACA,WACA,QACJ,CAAC,EAEK,EAAS,IAAI,QAEb,EAAsB,GAA0C,CAClE,IAAM,EAAW,EAAO,IAAI,CAAQ,EACpC,GAAI,EAAU,OAAO,EAErB,IAAM,EAA2B,CAC7B,YAAa,GACb,eAAgB,KAChB,oBAAqB,KACrB,SAAU,GACV,cAAe,IAAA,EACnB,EACA,EAAO,IAAI,EAAU,CAAK,EAE1B,IAAM,MAAuC,CACzC,EAAM,qBAAqB,gBAAgB,yBAAyB,EACpE,EAAM,oBAAsB,IAChC,EAoCA,OAlCA,EAAS,iBAAiB,kBAAqB,CAC3C,EAAM,YAAc,EACxB,EAAG,EAAI,EACP,EAAS,iBAAiB,UAAY,GAAU,CAC5C,EAAM,eAAiB,EAAM,aAAe,EAAM,kBAAkB,YAC9D,EAAM,OACN,IACV,EAAG,EAAI,EACP,EAAS,iBAAiB,YAAc,GAAU,CAC9C,IAAM,EAAS,EAAS,cACxB,EAAM,eAAiB,aAAkB,aAClC,IAAW,EAAS,MACpB,EAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"focus-handoff-BE3g0swK.js","names":[],"sources":["../../../../../../../../client/src/runtime/focus-handoff.ts"],"sourcesContent":["type FocusHandoffState = {\n pointerDown: boolean;\n pointerFocused: HTMLElement | null;\n indicatorSuppressed: HTMLElement | null;\n shortcut: boolean;\n shortcutReset: number | undefined;\n};\n\nconst NAVIGATION_KEYS = new Set([\n 'Tab',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'Home',\n 'End',\n 'PageDown',\n 'PageUp',\n]);\n\nconst states = new WeakMap<Document, FocusHandoffState>();\n\nconst ensureFocusHandoff = (document: Document): FocusHandoffState => {\n const existing = states.get(document);\n if (existing) return existing;\n\n const state: FocusHandoffState = {\n pointerDown: false,\n pointerFocused: null,\n indicatorSuppressed: null,\n shortcut: false,\n shortcutReset: undefined,\n };\n states.set(document, state);\n\n const clearSuppressedIndicator = (): void => {\n state.indicatorSuppressed?.removeAttribute('data-ui-focus-indicator');\n state.indicatorSuppressed = null;\n };\n\n document.addEventListener('pointerdown', () => {\n state.pointerDown = true;\n }, true);\n document.addEventListener('focusin', (event) => {\n state.pointerFocused = state.pointerDown && event.target instanceof HTMLElement\n ? event.target\n : null;\n }, true);\n document.addEventListener('pointerup', (event) => {\n const active = document.activeElement;\n state.pointerFocused = active instanceof HTMLElement\n && active !== document.body\n && event.composedPath().some((entry) => entry === active)\n ? active\n : null;\n state.pointerDown = false;\n }, true);\n document.addEventListener('pointercancel', () => {\n state.pointerDown = false;\n }, true);\n document.addEventListener('keydown', (event) => {\n clearSuppressedIndicator();\n if (NAVIGATION_KEYS.has(event.key)) {\n state.pointerFocused = null;\n }\n }, true);\n document.addEventListener('focusout', (event) => {\n if (event.target === state.indicatorSuppressed) clearSuppressedIndicator();\n }, true);\n document.defaultView?.addEventListener('blur', () => {\n state.pointerDown = false;\n state.pointerFocused = null;\n clearSuppressedIndicator();\n });\n return state;\n};\n\nconst beginShortcutFocusHandoff = (document: Document): void => {\n const state = ensureFocusHandoff(document);\n const active = document.activeElement;\n if (active instanceof HTMLElement && active === state.pointerFocused) active.blur();\n state.pointerFocused = null;\n state.shortcut = true;\n if (state.shortcutReset !== undefined) document.defaultView?.clearTimeout(state.shortcutReset);\n state.shortcutReset = document.defaultView?.setTimeout(() => {\n state.shortcut = false;\n state.shortcutReset = undefined;\n });\n};\n\nconst isShortcutFocusHandoff = (document: Document): boolean => ensureFocusHandoff(document).shortcut;\n\nconst focusWithoutIndicator = (element: HTMLElement): void => {\n const state = ensureFocusHandoff(element.ownerDocument);\n state.indicatorSuppressed?.removeAttribute('data-ui-focus-indicator');\n element.focus({preventScroll: true, focusVisible: false});\n element.setAttribute('data-ui-focus-indicator', 'suppressed');\n state.indicatorSuppressed = element;\n};\n\nexport {\n beginShortcutFocusHandoff,\n ensureFocusHandoff,\n focusWithoutIndicator,\n isShortcutFocusHandoff,\n};\n"],"mappings":"AAQA,IAAM,EAAkB,IAAI,IAAI,CAC5B,MACA,YACA,YACA,aACA,UACA,OACA,MACA,WACA,QACJ,CAAC,EAEK,EAAS,IAAI,QAEb,EAAsB,GAA0C,CAClE,IAAM,EAAW,EAAO,IAAI,CAAQ,EACpC,GAAI,EAAU,OAAO,EAErB,IAAM,EAA2B,CAC7B,YAAa,GACb,eAAgB,KAChB,oBAAqB,KACrB,SAAU,GACV,cAAe,IAAA,EACnB,EACA,EAAO,IAAI,EAAU,CAAK,EAE1B,IAAM,MAAuC,CACzC,EAAM,qBAAqB,gBAAgB,yBAAyB,EACpE,EAAM,oBAAsB,IAChC,EAoCA,OAlCA,EAAS,iBAAiB,kBAAqB,CAC3C,EAAM,YAAc,EACxB,EAAG,EAAI,EACP,EAAS,iBAAiB,UAAY,GAAU,CAC5C,EAAM,eAAiB,EAAM,aAAe,EAAM,kBAAkB,YAC9D,EAAM,OACN,IACV,EAAG,EAAI,EACP,EAAS,iBAAiB,YAAc,GAAU,CAC9C,IAAM,EAAS,EAAS,cACxB,EAAM,eAAiB,aAAkB,aAClC,IAAW,EAAS,MACpB,EAAM,aAAa,CAAC,CAAC,KAAM,GAAU,IAAU,CAAM,EACtD,EACA,KACN,EAAM,YAAc,EACxB,EAAG,EAAI,EACP,EAAS,iBAAiB,oBAAuB,CAC7C,EAAM,YAAc,EACxB,EAAG,EAAI,EACP,EAAS,iBAAiB,UAAY,GAAU,CAC5C,EAAyB,EACrB,EAAgB,IAAI,EAAM,GAAG,IAC7B,EAAM,eAAiB,KAE/B,EAAG,EAAI,EACP,EAAS,iBAAiB,WAAa,GAAU,CACzC,EAAM,SAAW,EAAM,qBAAqB,EAAyB,CAC7E,EAAG,EAAI,EACP,EAAS,aAAa,iBAAiB,WAAc,CACjD,EAAM,YAAc,GACpB,EAAM,eAAiB,KACvB,EAAyB,CAC7B,CAAC,EACM,CACX,EAEM,EAA6B,GAA6B,CAC5D,IAAM,EAAQ,EAAmB,CAAQ,EACnC,EAAS,EAAS,cACpB,aAAkB,aAAe,IAAW,EAAM,gBAAgB,EAAO,KAAK,EAClF,EAAM,eAAiB,KACvB,EAAM,SAAW,GACb,EAAM,gBAAkB,IAAA,IAAW,EAAS,aAAa,aAAa,EAAM,aAAa,EAC7F,EAAM,cAAgB,EAAS,aAAa,eAAiB,CACzD,EAAM,SAAW,GACjB,EAAM,cAAgB,IAAA,EAC1B,CAAC,CACL,EAEM,EAA0B,GAAgC,EAAmB,CAAQ,CAAC,CAAC,SAEvF,EAAyB,GAA+B,CAC1D,IAAM,EAAQ,EAAmB,EAAQ,aAAa,EACtD,EAAM,qBAAqB,gBAAgB,yBAAyB,EACpE,EAAQ,MAAM,CAAC,cAAe,GAAM,aAAc,EAAK,CAAC,EACxD,EAAQ,aAAa,0BAA2B,YAAY,EAC5D,EAAM,oBAAsB,CAChC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-scope-DtaPVNl5.js","names":[],"sources":["../../../../../../../../client/src/runtime/focus-scope.ts"],"sourcesContent":["const FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(',');\n\nconst isFocusable = (el: HTMLElement): boolean => (\n !el.hasAttribute('disabled')\n && el.getAttribute('aria-disabled') !== 'true'\n && !el.hidden\n && el.tabIndex !== -1\n);\n\nconst closestFocusable = (el: HTMLElement): HTMLElement => {\n if (el.matches(FOCUSABLE_SELECTOR) && isFocusable(el)) return el;\n return el.querySelector<HTMLElement>(FOCUSABLE_SELECTOR) ?? el;\n};\n\nconst focusableElements = (scope: HTMLElement): HTMLElement[] => (\n Array.from(scope.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(isFocusable)\n);\n\nconst focusFirst = (scope: HTMLElement): void => {\n (focusableElements(scope)[0] ?? scope).focus({preventScroll: true});\n};\n\nconst trapFocus = (event: KeyboardEvent, scope: HTMLElement): void => {\n if (event.key !== 'Tab') return;\n const focusable = focusableElements(scope);\n if (focusable.length === 0) {\n event.preventDefault();\n scope.focus({preventScroll: true});\n return;\n }\n const first = focusable[0] as HTMLElement;\n const last = focusable.at(-1) as HTMLElement;\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus({preventScroll: true});\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus({preventScroll: true});\n }\n};\n\nexport {FOCUSABLE_SELECTOR, closestFocusable, focusFirst, focusableElements, isFocusable, trapFocus};\n"],"mappings":"AAAA,IAAM,EAAqB,CACvB,UACA,aACA,yBACA,wBACA,yBACA,2BACA,kCACA,0BACJ,
|
|
1
|
+
{"version":3,"file":"focus-scope-DtaPVNl5.js","names":[],"sources":["../../../../../../../../client/src/runtime/focus-scope.ts"],"sourcesContent":["const FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(',');\n\nconst isFocusable = (el: HTMLElement): boolean => (\n !el.hasAttribute('disabled')\n && el.getAttribute('aria-disabled') !== 'true'\n && !el.hidden\n && el.tabIndex !== -1\n);\n\nconst closestFocusable = (el: HTMLElement): HTMLElement => {\n if (el.matches(FOCUSABLE_SELECTOR) && isFocusable(el)) return el;\n return el.querySelector<HTMLElement>(FOCUSABLE_SELECTOR) ?? el;\n};\n\nconst focusableElements = (scope: HTMLElement): HTMLElement[] => (\n Array.from(scope.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(isFocusable)\n);\n\nconst focusFirst = (scope: HTMLElement): void => {\n (focusableElements(scope)[0] ?? scope).focus({preventScroll: true});\n};\n\nconst trapFocus = (event: KeyboardEvent, scope: HTMLElement): void => {\n if (event.key !== 'Tab') return;\n const focusable = focusableElements(scope);\n if (focusable.length === 0) {\n event.preventDefault();\n scope.focus({preventScroll: true});\n return;\n }\n const first = focusable[0] as HTMLElement;\n const last = focusable.at(-1) as HTMLElement;\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus({preventScroll: true});\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus({preventScroll: true});\n }\n};\n\nexport {FOCUSABLE_SELECTOR, closestFocusable, focusFirst, focusableElements, isFocusable, trapFocus};\n"],"mappings":"AAAA,IAAM,EAAqB,CACvB,UACA,aACA,yBACA,wBACA,yBACA,2BACA,kCACA,0BACJ,CAAC,CAAC,KAAK,GAAG,EAEJ,EAAe,GACjB,CAAC,EAAG,aAAa,UAAU,GACxB,EAAG,aAAa,eAAe,IAAM,QACrC,CAAC,EAAG,QACJ,EAAG,WAAa,GAGjB,EAAoB,GAClB,EAAG,QAAQ,CAAkB,GAAK,EAAY,CAAE,EAAU,EACvD,EAAG,cAA2B,CAAkB,GAAK,EAG1D,EAAqB,GACvB,MAAM,KAAK,EAAM,iBAA8B,CAAkB,CAAC,CAAC,CAAC,OAAO,CAAW,EAGpF,EAAc,GAA6B,EAC5C,EAAkB,CAAK,CAAC,CAAC,IAAM,EAAA,CAAO,MAAM,CAAC,cAAe,EAAI,CAAC,CACtE,EAEM,GAAa,EAAsB,IAA6B,CAClE,GAAI,EAAM,MAAQ,MAAO,OACzB,IAAM,EAAY,EAAkB,CAAK,EACzC,GAAI,EAAU,SAAW,EAAG,CACxB,EAAM,eAAe,EACrB,EAAM,MAAM,CAAC,cAAe,EAAI,CAAC,EACjC,MACJ,CACA,IAAM,EAAQ,EAAU,GAClB,EAAO,EAAU,GAAG,EAAE,EACxB,EAAM,UAAY,SAAS,gBAAkB,GAC7C,EAAM,eAAe,EACrB,EAAK,MAAM,CAAC,cAAe,EAAI,CAAC,GACzB,CAAC,EAAM,UAAY,SAAS,gBAAkB,IACrD,EAAM,eAAe,EACrB,EAAM,MAAM,CAAC,cAAe,EAAI,CAAC,EAEzC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{s as e}from"./dom-
|
|
2
|
-
//# sourceMappingURL=form-control-
|
|
1
|
+
import{s as e}from"./dom-DiTFTWeR.js";var t=({el:t,state:n,value:r=``})=>{e({el:t,attr:`data-disabled`,present:n.disabled??!1,value:r}),e({el:t,attr:`data-required`,present:n.required??!1,value:r}),e({el:t,attr:`data-invalid`,present:n.invalid??!1,value:r})},n=({input:e,state:t})=>{t.name!==void 0&&t.name!==``&&(e.name=t.name),t.value!==void 0&&(e.value=t.value),e.disabled=t.disabled??!1,e.required=t.nativeRequired??t.required??!1,`readOnly`in e&&(e.readOnly=t.readonly??!1),t.ariaRequired!==void 0&&e.setAttribute(`aria-required`,t.ariaRequired?`true`:`false`),t.invalid?e.setAttribute(`aria-invalid`,`true`):e.removeAttribute(`aria-invalid`)},r=e=>JSON.stringify({name:e.name,values:e.values,required:e.required??!1,form:e.form??``,marker:e.marker??`data-ui-hidden-input`}),i=({container:e,state:t,currentKey:n=``})=>{let i=t.marker??`data-ui-hidden-input`,a=r({...t,marker:i}),o=Array.from(e.querySelectorAll(`:scope > input[${i}]`)),s=o.length===t.values.length&&o.every((e,n)=>e.type===`hidden`&&e.name===t.name&&e.value===t.values[n]&&e.required===(t.required??!1)&&(e.getAttribute(`form`)??``)===(t.form??``));return a===n&&s?n:(e.replaceChildren(),t.name&&t.values.forEach(n=>{let r=document.createElement(`input`);r.type=`hidden`,r.name=t.name,r.value=n,r.setAttribute(i,``),t.required&&(r.required=!0),t.form&&r.setAttribute(`form`,t.form),e.append(r)}),a)},a=({container:e,fallback:t,marker:n})=>{let r=e?.querySelector(`input[${n}]`)??t;r.dispatchEvent(new Event(`input`,{bubbles:!0})),r.dispatchEvent(new Event(`change`,{bubbles:!0}))};export{i,t as n,n as r,a as t};
|
|
2
|
+
//# sourceMappingURL=form-control-DL1Hkox3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-control-
|
|
1
|
+
{"version":3,"file":"form-control-DL1Hkox3.js","names":[],"sources":["../../../../../../../../client/src/runtime/form-control.ts"],"sourcesContent":["import {setPresence} from '../utils';\n\ntype ControlState = {\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n};\n\ntype NativeControlState = ControlState & {\n name?: string;\n value?: string;\n readonly?: boolean;\n ariaRequired?: boolean;\n nativeRequired?: boolean;\n};\n\ntype HiddenInputState = {\n name: string;\n values: string[];\n required?: boolean;\n form?: string;\n marker?: string;\n};\n\ntype SyncControlPresenceOptions = {\n el: HTMLElement;\n state: ControlState;\n value?: string;\n};\n\ntype SyncNativeControlOptions = {\n input: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n state: NativeControlState;\n};\n\ntype SyncRepeatedHiddenInputsOptions = {\n container: HTMLElement;\n state: HiddenInputState;\n currentKey?: string;\n};\n\ntype DispatchNativeControlChangeOptions = {\n container: HTMLElement | null;\n fallback: HTMLElement;\n marker: string;\n};\n\nconst syncControlPresence = ({\n el,\n state,\n value = '',\n}: SyncControlPresenceOptions): void => {\n setPresence({el, attr: 'data-disabled', present: state.disabled ?? false, value});\n setPresence({el, attr: 'data-required', present: state.required ?? false, value});\n setPresence({el, attr: 'data-invalid', present: state.invalid ?? false, value});\n};\n\nconst syncNativeControl = ({\n input,\n state,\n}: SyncNativeControlOptions): void => {\n if (state.name !== undefined && state.name !== '') input.name = state.name;\n if (state.value !== undefined) input.value = state.value;\n\n input.disabled = state.disabled ?? false;\n input.required = state.nativeRequired ?? state.required ?? false;\n\n if ('readOnly' in input) {\n input.readOnly = state.readonly ?? false;\n }\n\n if (state.ariaRequired !== undefined) {\n input.setAttribute('aria-required', state.ariaRequired ? 'true' : 'false');\n }\n\n if (state.invalid) {\n input.setAttribute('aria-invalid', 'true');\n } else {\n input.removeAttribute('aria-invalid');\n }\n};\n\nconst hiddenInputsKey = (state: HiddenInputState): string => JSON.stringify({\n name: state.name,\n values: state.values,\n required: state.required ?? false,\n form: state.form ?? '',\n marker: state.marker ?? 'data-ui-hidden-input',\n});\n\nconst syncRepeatedHiddenInputs = ({\n container,\n state,\n currentKey = '',\n}: SyncRepeatedHiddenInputsOptions): string => {\n const marker = state.marker ?? 'data-ui-hidden-input';\n const nextKey = hiddenInputsKey({...state, marker});\n const inputs = Array.from(container.querySelectorAll<HTMLInputElement>(`:scope > input[${marker}]`));\n const domMatches = inputs.length === state.values.length && inputs.every((input, index) => (\n input.type === 'hidden'\n && input.name === state.name\n && input.value === state.values[index]\n && input.required === (state.required ?? false)\n && (input.getAttribute('form') ?? '') === (state.form ?? '')\n ));\n if (nextKey === currentKey && domMatches) return currentKey;\n\n container.replaceChildren();\n if (!state.name) return nextKey;\n\n state.values.forEach((value) => {\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = state.name;\n input.value = value;\n input.setAttribute(marker, '');\n if (state.required) input.required = true;\n if (state.form) input.setAttribute('form', state.form);\n container.append(input);\n });\n\n return nextKey;\n};\n\nconst dispatchNativeControlChange = ({\n container,\n fallback,\n marker,\n}: DispatchNativeControlChangeOptions): void => {\n const control = container?.querySelector<HTMLInputElement>(`input[${marker}]`) ?? fallback;\n control.dispatchEvent(new Event('input', {bubbles: true}));\n control.dispatchEvent(new Event('change', {bubbles: true}));\n};\n\nexport {\n dispatchNativeControlChange,\n syncControlPresence,\n syncNativeControl,\n syncRepeatedHiddenInputs,\n};\nexport type {\n ControlState,\n DispatchNativeControlChangeOptions,\n HiddenInputState,\n NativeControlState,\n SyncControlPresenceOptions,\n SyncNativeControlOptions,\n SyncRepeatedHiddenInputsOptions,\n};\n"],"mappings":"sCA+CA,IAAM,GAAuB,CACzB,KACA,QACA,QAAQ,MAC4B,CACpC,EAAY,CAAC,KAAI,KAAM,gBAAiB,QAAS,EAAM,UAAY,GAAO,OAAK,CAAC,EAChF,EAAY,CAAC,KAAI,KAAM,gBAAiB,QAAS,EAAM,UAAY,GAAO,OAAK,CAAC,EAChF,EAAY,CAAC,KAAI,KAAM,eAAgB,QAAS,EAAM,SAAW,GAAO,OAAK,CAAC,CAClF,EAEM,GAAqB,CACvB,QACA,WACkC,CAC9B,EAAM,OAAS,IAAA,IAAa,EAAM,OAAS,KAAI,EAAM,KAAO,EAAM,MAClE,EAAM,QAAU,IAAA,KAAW,EAAM,MAAQ,EAAM,OAEnD,EAAM,SAAW,EAAM,UAAY,GACnC,EAAM,SAAW,EAAM,gBAAkB,EAAM,UAAY,GAEvD,aAAc,IACd,EAAM,SAAW,EAAM,UAAY,IAGnC,EAAM,eAAiB,IAAA,IACvB,EAAM,aAAa,gBAAiB,EAAM,aAAe,OAAS,OAAO,EAGzE,EAAM,QACN,EAAM,aAAa,eAAgB,MAAM,EAEzC,EAAM,gBAAgB,cAAc,CAE5C,EAEM,EAAmB,GAAoC,KAAK,UAAU,CACxE,KAAM,EAAM,KACZ,OAAQ,EAAM,OACd,SAAU,EAAM,UAAY,GAC5B,KAAM,EAAM,MAAQ,GACpB,OAAQ,EAAM,QAAU,sBAC5B,CAAC,EAEK,GAA4B,CAC9B,YACA,QACA,aAAa,MAC8B,CAC3C,IAAM,EAAS,EAAM,QAAU,uBACzB,EAAU,EAAgB,CAAC,GAAG,EAAO,QAAM,CAAC,EAC5C,EAAS,MAAM,KAAK,EAAU,iBAAmC,kBAAkB,EAAO,EAAE,CAAC,EAC7F,EAAa,EAAO,SAAW,EAAM,OAAO,QAAU,EAAO,OAAO,EAAO,IAC7E,EAAM,OAAS,UACZ,EAAM,OAAS,EAAM,MACrB,EAAM,QAAU,EAAM,OAAO,IAC7B,EAAM,YAAc,EAAM,UAAY,MACrC,EAAM,aAAa,MAAM,GAAK,OAAS,EAAM,MAAQ,GAC5D,EAiBD,OAhBI,IAAY,GAAc,EAAmB,GAEjD,EAAU,gBAAgB,EACrB,EAAM,MAEX,EAAM,OAAO,QAAS,GAAU,CAC5B,IAAM,EAAQ,SAAS,cAAc,OAAO,EAC5C,EAAM,KAAO,SACb,EAAM,KAAO,EAAM,KACnB,EAAM,MAAQ,EACd,EAAM,aAAa,EAAQ,EAAE,EACzB,EAAM,WAAU,EAAM,SAAW,IACjC,EAAM,MAAM,EAAM,aAAa,OAAQ,EAAM,IAAI,EACrD,EAAU,OAAO,CAAK,CAC1B,CAAC,EAXuB,EAc5B,EAEM,GAA+B,CACjC,YACA,WACA,YAC4C,CAC5C,IAAM,EAAU,GAAW,cAAgC,SAAS,EAAO,EAAE,GAAK,EAClF,EAAQ,cAAc,IAAI,MAAM,QAAS,CAAC,QAAS,EAAI,CAAC,CAAC,EACzD,EAAQ,cAAc,IAAI,MAAM,SAAU,CAAC,QAAS,EAAI,CAAC,CAAC,CAC9D"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./bridge-
|
|
2
|
-
//# sourceMappingURL=fragment-
|
|
1
|
+
import{t as e}from"./bridge-DMrvM3JE.js";var t=(e,t,n)=>{Array.from(t.children).forEach(t=>{t instanceof HTMLElement&&e.destroyTree?.(t)});let r=document.createElement(`template`);r.innerHTML=n;let i=Array.from(r.content.children).filter(e=>e instanceof HTMLElement);t.replaceChildren(r.content),i.forEach(t=>e.initTree(t)),i.length===0&&n.trim()&&e.initTree(t)},n=async(n,r,i,a={})=>(a.assets?.length&&await e(a.assets,n),a.shouldReplace&&!a.shouldReplace()?!1:(t(n,r,i),!0));export{t as n,n as t};
|
|
2
|
+
//# sourceMappingURL=fragment-9OT0mn7F.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fragment-
|
|
1
|
+
{"version":3,"file":"fragment-9OT0mn7F.js","names":[],"sources":["../../../../../../../../client/src/runtime/engine/fragment.ts"],"sourcesContent":["import type Alpine from 'alpinejs';\n\nimport {loadAssets, type AssetDescriptor} from '../../assets/bridge';\n\ntype FragmentAlpine = Pick<Alpine.Alpine, 'initTree'> & Partial<Pick<Alpine.Alpine, 'destroyTree'>>;\n\ntype ReplaceFragmentOptions = {\n assets?: AssetDescriptor[];\n shouldReplace?: () => boolean;\n};\n\nconst replaceFragmentChildrenNow = (\n AlpineInstance: FragmentAlpine,\n target: Element,\n html: string,\n): void => {\n Array.from(target.children).forEach((element) => {\n if (element instanceof HTMLElement) AlpineInstance.destroyTree?.(element);\n });\n\n const template = document.createElement('template');\n template.innerHTML = html;\n const inserted = Array.from(template.content.children)\n .filter((element): element is HTMLElement => element instanceof HTMLElement);\n target.replaceChildren(template.content);\n inserted.forEach((element) => AlpineInstance.initTree(element));\n if (inserted.length === 0 && html.trim()) AlpineInstance.initTree(target as HTMLElement);\n};\n\nconst replaceFragmentChildren = async (\n AlpineInstance: FragmentAlpine,\n target: Element,\n html: string,\n options: ReplaceFragmentOptions = {},\n): Promise<boolean> => {\n if (options.assets?.length) {\n await loadAssets(options.assets, AlpineInstance as Alpine.Alpine);\n }\n if (options.shouldReplace && !options.shouldReplace()) return false;\n replaceFragmentChildrenNow(AlpineInstance, target, html);\n return true;\n};\n\nexport {\n replaceFragmentChildren,\n replaceFragmentChildrenNow,\n};\nexport type {\n FragmentAlpine,\n ReplaceFragmentOptions,\n};\n"],"mappings":"yCAWA,IAAM,GACF,EACA,EACA,IACO,CACP,MAAM,KAAK,EAAO,QAAQ,CAAC,CAAC,QAAS,GAAY,CACzC,aAAmB,aAAa,EAAe,cAAc,CAAO,CAC5E,CAAC,EAED,IAAM,EAAW,SAAS,cAAc,UAAU,EAClD,EAAS,UAAY,EACrB,IAAM,EAAW,MAAM,KAAK,EAAS,QAAQ,QAAQ,CAAC,CACjD,OAAQ,GAAoC,aAAmB,WAAW,EAC/E,EAAO,gBAAgB,EAAS,OAAO,EACvC,EAAS,QAAS,GAAY,EAAe,SAAS,CAAO,CAAC,EAC1D,EAAS,SAAW,GAAK,EAAK,KAAK,GAAG,EAAe,SAAS,CAAqB,CAC3F,EAEM,EAA0B,MAC5B,EACA,EACA,EACA,EAAkC,CAAC,KAE/B,EAAQ,QAAQ,QAChB,MAAM,EAAW,EAAQ,OAAQ,CAA+B,EAEhE,EAAQ,eAAiB,CAAC,EAAQ,cAAc,EAAU,IAC9D,EAA2B,EAAgB,EAAQ,CAAI,EAChD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={type:`@@init`},t=e=>typeof e==`string`?{type:e}:e,n=e=>e===void 0?[]:Array.isArray(e)?e:[e],r=e=>typeof e==`string`?{target:e}:e,i=(e,t)=>t===`$`||e===t||e.startsWith(`${t}.`),a=e=>{let t=new Map,i=new Map,a=new Map,o=0,s=(e,t)=>{if(e.length===0)throw Error(`Invalid empty machine state id at "${t}"`);let n=i.get(e);if(n)throw Error(`Duplicate machine state id "${e}" at "${n}" and "${t}"`);i.set(e,t)},c=(e,t,r,i,a=!1)=>{let o={key:e,path:t,order:a?-1:0,type:r.type??(r.states&&Object.keys(r.states).length>0?`compound`:`final`),initialLeaves:[],children:[],tags:r.tags??[],reduce:n(r.reduce),entry:n(r.entry),exit:n(r.exit),on:{}};return r.id!==void 0&&(o.id=r.id),r.initial!==void 0&&(o.initial=r.initial),i!==void 0&&(o.parent=i),o},l=c(`$`,`$`,e,void 0,!0);t.set(`$`,l),a.set(`$`,e),l.id!==void 0&&s(l.id,`$`);let u=(e,n)=>Object.entries(e).map(([e,r])=>{if(e.length===0||e===`$`||e.includes(`.`)||e.startsWith(`#`))throw Error(`Invalid machine state key "${e}" under "${n}"`);let i=n===`$`?e:`${n}.${e}`;if(t.has(i))throw Error(`Duplicate derived machine state path "${i}"`);let l=c(e,i,r,n);return t.set(i,l),a.set(i,r),l.id!==void 0&&s(l.id,i),l.children=r.states?u(r.states,i):[],l.order=o++,i});l.children=u(e.states,`$`),t.forEach(e=>{if(e.type===`final`){if(e.children.length>0)throw Error(`Final machine state "${e.path}" cannot define children`);if(e.initial!==void 0)throw Error(`Final machine state "${e.path}" cannot define an initial child`);return}if(e.children.length===0){let t=e.type===`parallel`?`Parallel`:`Compound`;throw Error(`${t} machine state "${e.path}" requires children`)}if(e.type===`parallel`){if(e.initial!==void 0)throw Error(`Parallel machine state "${e.path}" cannot define an initial child`);return}if(e.initial===void 0)throw Error(`Machine state "${e.path}" requires an initial child`);let t=e.path===`$`?e.initial:`${e.path}.${e.initial}`;if(!e.children.includes(t))throw Error(`Invalid initial child "${e.initial}" for machine state "${e.path}"`);e.initial=t});let d=e=>{let n=t.get(e);return n.type===`final`?e===`$`?[]:[e]:n.type===`parallel`?n.children.flatMap(d):d(n.initial)};t.forEach(e=>{e.initialLeaves=d(e.path)});let f=(e,n)=>{if(e.startsWith(`#`))return i.get(e.slice(1));if(e===`$`||t.has(e))return e;if(n.parent){let r=`${n.parent}.${e}`;if(t.has(r))return r}};return t.forEach(e=>{let t=a.get(e.path)?.on??{};Object.entries(t).forEach(([t,i])=>{let a=n(i);e.on[t]=a.map((n,i)=>{let o=r(n);if(o.target===void 0)return{...o};let s=f(o.target,e);if(s===void 0){let n=a.length>1?` at index ${i}`:``;throw Error(`Invalid transition target "${o.target}" from state "${e.path}" for event "${t}"${n}`)}return{...o,target:s}})})}),{nodes:t}},o=(r,o)=>{let{nodes:s}=a(r),c=new Set,l=new Set,u=new Map,d=new Map,f=new Map,p=[],m=!1,h=!1,g=e=>{let t=s.get(e);if(!t)throw Error(`Unknown machine state: ${e}`);return t},_=e=>{let t=[],n=e;for(;n;){let e=g(n);t.push(e),n=e.parent??(n===`$`?void 0:`$`)}return t},v=e=>{let t=new Set;return e.forEach(e=>_(e).forEach(e=>t.add(e.path))),Array.from(t).map(g).sort((e,t)=>e.order-t.order)},y=e=>[...g(e).initialLeaves],b=e=>e.length===1?e[0]:Object.freeze([...e]),x=e=>Object.freeze(Array.from(new Set(v(e).flatMap(e=>e.tags)))),S=()=>Object.freeze(Object.fromEntries(d)),C=y(`$`),w=Object.freeze({value:b(C),tags:x(C),context:Object.freeze({...o.context}),props:Object.freeze({...o.props??{}}),generations:Object.freeze({})}),T=(e,t=w)=>({snapshot:t,context:t.context,props:t.props,event:e,state:t.value}),E=e=>`${e}:${d.get(e)??0}`,D=(e,t)=>{if(typeof t!=`function`)return;let n=E(e),r=f.get(n)??[];r.push(t),f.set(n,r)},O=e=>{let t=E(e),n=f.get(t);n&&(n.splice(0).reverse().forEach(e=>e()),f.delete(t))},k=e=>typeof e==`function`?e:o.effects?.[e],A=(e,t,n,r=!0)=>{e.forEach(e=>{let i=k(e);if(!i)throw Error(`Unknown machine effect: ${String(e)}`);let a=i(T(t));r&&D(n,a)})},j=e=>typeof e==`function`?e:o.reducers?.[e],M=(e,t,n)=>{let r={},i={},a=new Set,o=new Set;return e.forEach(e=>{let s=j(e);if(!s)throw Error(`Unknown machine reducer: ${String(e)}`);let c=s(T(t,n));c&&(Reflect.ownKeys(c.context??{}).forEach(e=>{if(a.has(e))throw Error(`Conflicting machine context update: ${String(e)}`);a.add(e),Reflect.set(r,e,Reflect.get(c.context,e))}),Reflect.ownKeys(c.props??{}).forEach(e=>{if(o.has(e))throw Error(`Conflicting machine prop update: ${String(e)}`);o.add(e),Reflect.set(i,e,Reflect.get(c.props,e))}))}),{context:Object.freeze({...n.context,...r}),props:Object.freeze({...n.props,...i})}},N=(e,t,n)=>{if(!e)return!0;let r=typeof e==`function`?e:o.guards?.[e];if(!r)throw Error(`Unknown machine guard: ${String(e)}`);return r(T(t,n))},P=(e,t)=>{let r=new Map;C.forEach(i=>{for(let a of _(i)){let i=n(a.on[e.type]).find(n=>N(n.guard,e,t));i&&r.set(a.path,{source:a,definition:i})}});let a=Array.from(r.values());return a.filter(e=>!a.some(t=>t!==e&&i(e.source.path,t.source.path))).sort((e,t)=>e.source.order-t.source.order)},F=(e,t)=>{let n=new Set(_(t).map(e=>e.path));return _(e).find(e=>n.has(e.path))?.path??`$`},I=(e,t)=>{let n=F(e,t);if(e===t||n===e)return e;let r=_(e),i=r.findIndex(e=>e.path===n);return r[Math.max(0,i-1)]?.path??e},L=e=>{let t=[...C];return e.forEach(({source:e,definition:n})=>{if(n.target===void 0)return;let r=n.target,a=I(e.path,r);t=t.filter(e=>!i(e,a)),t.push(...y(r))}),Array.from(new Set(t)).sort((e,t)=>g(e).order-g(t).order)},R=e=>{if(typeof e.__state==`string`&&typeof e.__generation==`number`&&d.get(e.__state)!==e.__generation)return;let t=w,r=P(e,t);if(r.length===0)return;let a=L(r),o=v(C),s=v(a),f=new Set(o.map(e=>e.path)),p=new Set(s.map(e=>e.path)),m=r.flatMap(({source:e,definition:t})=>t.target===void 0?[]:t.target===e.path?o.filter(t=>i(t.path,e.path)).map(e=>e.path):[]),h=new Set(m),g=o.filter(e=>!p.has(e.path)||h.has(e.path)).sort((e,t)=>t.path.split(`.`).length-e.path.split(`.`).length||t.order-e.order),_=s.filter(e=>!f.has(e.path)||h.has(e.path)).sort((e,t)=>e.path.split(`.`).length-t.path.split(`.`).length||e.order-t.order);g.forEach(t=>{O(t.path),A(t.exit,e,t.path,!1),d.delete(t.path)});let y=[...r.flatMap(({definition:e})=>n(e.reduce)),..._.flatMap(e=>e.reduce)],T=M(y,e,t);_.forEach(e=>{let t=(u.get(e.path)??0)+1;u.set(e.path,t),d.set(e.path,t)}),C=a,w=Object.freeze({value:b(C),tags:x(C),context:T.context,props:T.props,generations:S()}),r.forEach(({source:t,definition:r})=>A(n(r.effects),e,t.path)),_.forEach(t=>A(t.entry,e,t.path)),c.forEach(e=>e(w)),_.forEach(n=>{let r=d.get(n.path);if(r===void 0)return;let i=Object.freeze({path:n.path,generation:r,from:t.value,to:w.value,event:e,snapshot:w});l.forEach(e=>e(i))})},z={get state(){return w.value},get context(){return w.context},get props(){return w.props},getSnapshot(){return w},send(e){if(!h&&(p.push(t(e)),!m)){m=!0;try{for(;p.length>0&&!h;)R(p.shift())}finally{m=!1}}},subscribe(e){return h?()=>{}:(c.add(e),()=>c.delete(e))},subscribeEntries(e){return h?()=>{}:(l.add(e),()=>l.delete(e))},matches(e){return C.some(t=>t===e||t.split(`.`).at(-1)===e||i(t,e))},hasTag(e){return w.tags.includes(e)},stop(){h||=(v(C).sort((e,t)=>t.path.split(`.`).length-e.path.split(`.`).length||t.order-e.order).forEach(e=>O(e.path)),c.clear(),l.clear(),p.splice(0),d.clear(),!0)}};v(C).forEach(e=>{let t=(u.get(e.path)??0)+1;u.set(e.path,t),d.set(e.path,t)});let B=M(v(C).flatMap(e=>e.reduce),e,w);return w=Object.freeze({value:b(C),tags:x(C),context:B.context,props:B.props,generations:S()}),v(C).forEach(t=>A(t.entry,e,t.path)),z};export{o as t};
|
|
2
|
+
//# sourceMappingURL=machine-CNnHDbyo.js.map
|