@vireo-ai/trellis-ui 0.1.55 → 0.1.57
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 +1 -23
- package/package.json +3 -2
- package/packages/client/src/components/data-grid/styles.css +0 -16
- package/packages/client/src/components/panels/styles.css +2 -10
- package/packages/client/src/styles/components.css +1 -1
- package/packages/client/src/styles/generated/theme-fonts.css +1 -1
- package/packages/client/src/styles/generated/theme-palette.css +275 -59
- package/packages/client/src/styles/generated/theme-runtime.css +1007 -24
- package/packages/client/src/styles/generated-sources.css +1 -1
- package/packages/client/src/styles/recipes/selection.css +62 -12
- package/packages/client/src/styles/theme-support.css +23 -2
- package/packages/client/types/components/accordion/index.d.ts +3 -3
- package/packages/client/types/components/accordion/machine.d.ts +11 -7
- package/packages/client/types/components/app/contract.d.ts +5 -5
- package/packages/client/types/components/badge/contract.d.ts +1 -1
- package/packages/client/types/components/box/contract.d.ts +5 -5
- package/packages/client/types/components/button/contract.d.ts +1 -1
- package/packages/client/types/components/card/contract.d.ts +2 -2
- package/packages/client/types/components/common.d.ts +3 -3
- package/packages/client/types/components/container/contract.d.ts +4 -4
- package/packages/client/types/components/date-picker/contract.d.ts +4 -4
- package/packages/client/types/components/date-picker/machine.d.ts +4 -4
- package/packages/client/types/components/flex/contract.d.ts +4 -4
- package/packages/client/types/components/frame/contract.d.ts +5 -5
- package/packages/client/types/components/grid/contract.d.ts +4 -4
- package/packages/client/types/components/input/contract.d.ts +2 -2
- package/packages/client/types/components/layout.d.ts +5 -5
- package/packages/client/types/components/menu/contract.d.ts +4 -2
- package/packages/client/types/components/modal/contract.d.ts +5 -4
- package/packages/client/types/components/modal/index.d.ts +1 -1
- package/packages/client/types/components/section/contract.d.ts +4 -4
- package/packages/client/types/components/select/contract.d.ts +3 -3
- package/packages/client/types/components/select/machine.d.ts +4 -4
- package/packages/client/types/components/sidebar/contract.d.ts +3 -3
- package/packages/client/types/components/stack/contract.d.ts +4 -4
- package/packages/client/types/components/table/contract.d.ts +1 -1
- package/packages/client/types/components/textarea/contract.d.ts +1 -1
- package/packages/client/types/components/tooltip/contract.d.ts +2 -2
- package/packages/client/types/runtime/engine/stream.d.ts +1 -0
- package/packages/client/types/runtime/focus-scope.d.ts +5 -6
- package/packages/client/types/runtime/focus.d.ts +9 -0
- package/packages/client/types/runtime/index.d.ts +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +3278 -265
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +395 -379
- 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/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/chunks/{capability-motion-C3q5Xzv2.js → capability-motion-BGVnZE_T.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-C3q5Xzv2.js.map → capability-motion-BGVnZE_T.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-DZUQHJ3A.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-DZUQHJ3A.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-ehmPfdn1.js +5 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-Bh6pkITu.js.map → capability-sortable-ehmPfdn1.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-hTbwy6oQ.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-hTbwy6oQ.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-CBK89mIt.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-CBK89mIt.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-crMEr9_l.js → controller-CalXJ5hB.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-crMEr9_l.js.map → controller-CalXJ5hB.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-DOHj5fa1.js → core-Ybm_WmKr.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-DOHj5fa1.js.map → core-Ybm_WmKr.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-Do0FfF4Z.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-Do0FfF4Z.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BAghaHV-.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BAghaHV-.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D8iA1e6i.js → entry.generated-BQNpmLZO.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D8iA1e6i.js.map → entry.generated-BQNpmLZO.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BREj4oHG.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BREj4oHG.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BZWdGtgg.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BZWdGtgg.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CvL196IN.js → entry.generated-COp9wMCd.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CvL196IN.js.map → entry.generated-COp9wMCd.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BmVGptdJ.js → entry.generated-CVOYoh61.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BmVGptdJ.js.map → entry.generated-CVOYoh61.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CVWqQEed.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CVWqQEed.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C_ObpRjR.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C_ObpRjR.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BLduYCHm.js → entry.generated-C_SxTqg5.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BLduYCHm.js.map → entry.generated-C_SxTqg5.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-ollD3I52.js → entry.generated-Cb-VMAE1.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-ollD3I52.js.map → entry.generated-Cb-VMAE1.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CfYgsDun.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CfYgsDun.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Dcm3s3ey.js → entry.generated-D2es_Wi2.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Dcm3s3ey.js.map → entry.generated-D2es_Wi2.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D6ai6meC.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D6ai6meC.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DYQxGle9.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DYQxGle9.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D_jeOgRf.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D_jeOgRf.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DVOBR4CK.js → entry.generated-DaXIKPN9.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DVOBR4CK.js.map → entry.generated-DaXIKPN9.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DqL-zI7j.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DqL-zI7j.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C3y5qBcc.js → entry.generated-EqHVGr1d.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C3y5qBcc.js.map → entry.generated-EqHVGr1d.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xjydizn-.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xjydizn-.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-z3EbXrD0.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-z3EbXrD0.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{flip-XeJ05afl.js → flip-Bzn312Nc.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{flip-XeJ05afl.js.map → flip-Bzn312Nc.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-pk_lz9sg.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-pk_lz9sg.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-BrYxsrhc.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-BrYxsrhc.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-CbwLBhMt.js → motion-DI5H1Js0.js} +3 -3
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-CbwLBhMt.js.map → motion-DI5H1Js0.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{styles-C9PrQrca.js → styles-CQDZhwd_.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{styles-C9PrQrca.js.map → styles-CQDZhwd_.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CTQoglp3.js +4 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CTQoglp3.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/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/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/formset.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/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/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/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/logical-entry-manifest.json +184 -170
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +11 -11
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +11 -11
- package/packages/client/src/styles/layout-participation.css +0 -17
- package/packages/client/types/runtime/focus-handoff.d.ts +0 -12
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BwvEqEbL.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BwvEqEbL.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bh6pkITu.js +0 -5
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-BbxUBQFs.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-BbxUBQFs.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-De1R7Xh6.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-De1R7Xh6.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-FA9FLGtB.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-FA9FLGtB.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B41qiwNq.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B41qiwNq.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B7n4iFyw.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B7n4iFyw.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BeNK2EFl.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BeNK2EFl.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Bq2KAnfO.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Bq2KAnfO.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C3cRWutN.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C3cRWutN.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CGasYxmV.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CGasYxmV.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CyynUmGS.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CyynUmGS.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DScbsE6-.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DScbsE6-.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DjKX5KuB.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DjKX5KuB.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-R1BlPlZW.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-R1BlPlZW.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-iMJrYzAB.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-iMJrYzAB.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-n_t4T8XC.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-n_t4T8XC.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-BE3g0swK.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-BE3g0swK.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-DtaPVNl5.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-DtaPVNl5.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CGwc8KXJ.js +0 -4
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CGwc8KXJ.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e,r as t,s as n,t as r}from"./dom-DiTFTWeR.js";import{f as i,s as a}from"./motion-CbwLBhMt.js";import{t as o}from"./capability-motion-C3q5Xzv2.js";import{n as s}from"./morph-Cq3V_23_.js";import{a as c,f as l,l as u,n as d}from"./codecs-CQ7olTJL.js";import{i as f,t as ee}from"./alpine-machine-CE2UN4Qu.js";import{t as te}from"./cleanup-manager-D9QiZF_Q.js";import{n as p,t as ne}from"./alpine-data-Dvc_bXq6.js";import{n as m,t as h}from"./styles-CX2j92ex.js";import{t as re}from"./merge-bindings-BtqW3UgP.js";import{t as g}from"./machine-CNnHDbyo.js";import{i as ie}from"./focus-scope-DtaPVNl5.js";import{t as ae}from"./semantic-observer-CIoriWtV.js";import{n as oe,t as _}from"./capability-resizable-ByUbMIHF.js";var se=(e,t)=>{let n=getComputedStyle(e).getPropertyValue(`--breakpoint-${t}`),r=Number.parseFloat(n);return Number.isFinite(r)?r:1/0},v=[`horizontal`,`vertical`],y=[`div`,`section`,`aside`,`main`,`nav`],b=[`1`,`2`,`3`,`4`,`5`,`6`,`fill`],x=[`none`,`start`,`end`],ce=[`toggle`,`expand`,`collapse`],le={id:l.default(`ui-panels`),orientation:u(v,`horizontal`),persist:d,divider:d.default(!0),class:l},ue={id:l,as:u(y,`section`),size:u(b,`fill`),resize:u(x,`none`),collapsible:d,defaultCollapsed:d,class:l},S={target:l,action:u(ce,`toggle`),icon:l.default(`menu`),label:l.default(`Expand`),class:l},de=[f({name:`opening`,state:`changing`,projectEach:e=>e.context.change.openingIds.map(e=>({panelId:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{expand:e=>({type:`EXPAND`,panelId:e}),collapse:e=>({type:`COLLAPSE`,panelId:e}),toggle:e=>({type:`TOGGLE`,panelId:e})}}),f({name:`closing`,state:`changing`,projectEach:e=>e.context.change.closingIds.map(e=>({panelId:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{expand:e=>({type:`EXPAND`,panelId:e}),collapse:e=>({type:`COLLAPSE`,panelId:e}),toggle:e=>({type:`TOGGLE`,panelId:e})}}),f({name:`sizing`,state:`sizing`,projectEach:e=>e.context.sizing.changes,onDone:`SIZE_DONE`,onError:`SIZE_ERROR`}),f({name:`persisting`,state:`persisting`,project:e=>({groupId:e.props.id,collapsed:[...e.context.layout.collapsedIds],sizes:{...e.context.layout.committedSizes}}),onDone:`PERSIST_DONE`,onError:`PERSIST_ERROR`})],C=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],w=e=>typeof e.panelId==`string`?e.panelId:``,T=e=>typeof e==`number`&&Number.isFinite(e)?e:null,E=e=>(Array.isArray(e.changes)?e.changes:[e]).flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=e,n=typeof t.panelId==`string`?t.panelId:``,r=T(t.from),i=T(t.to),a=t.reset===!0;return n&&r!==null&&i!==null&&(r!==i||a)?[{panelId:n,from:r,to:i,...a?{reset:!0}:{}}]:[]}),D=(e,t)=>typeof e.props==`object`&&e.props!==null?e.props:t,O=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),k=e=>{if(!Array.isArray(e))return[];let t=[];return e.forEach(e=>{if(typeof e!=`object`||!e)return;let n=e;if(typeof n.id!=`string`||!n.id)return;let r=n.collapsible===!0?{collapsible:!0,defaultCollapsed:n.defaultCollapsed===!0}:{collapsible:!1,defaultCollapsed:!1};n.kind===`fill`&&t.push({id:n.id,kind:`fill`,...r}),n.kind===`bounded`&&t.push({id:n.id,kind:`bounded`,resizable:n.resizable===!0,...r})}),t},A=e=>new Map(e.map(e=>[e.id,e])),j=(e,t)=>Object.fromEntries(e.flatMap(e=>e.kind===`bounded`&&Object.hasOwn(t,e.id)?[[e.id,t[e.id]]]:[])),M=e=>{let t=w(e.event),n=e.context.layout.collapsedIds,r=e.context.collection,i=A(r).get(t);switch(e.event.type){case`COLLAPSE`:return i?.collapsible&&!n.includes(t)?r.map(e=>e.id).filter(e=>n.includes(e)||e===t):n;case`EXPAND`:return n.filter(e=>e!==t);case`TOGGLE`:return i?.collapsible?n.includes(t)?n.filter(e=>e!==t):r.map(e=>e.id).filter(e=>n.includes(e)||e===t):n;default:return n}},N=e=>{let t=w(e.event);return A(e.context.collection).has(t)&&!O(e.context.layout.collapsedIds,M(e))},P=e=>{let t=w(e.event),n=A(e.context.collection).get(t);return n?.kind===`bounded`&&n.resizable&&!e.context.layout.collapsedIds.includes(t)&&T(e.event.size)!==null},F=e=>{let t=E(e.event),n=A(e.context.collection);return t.length>0&&t.every(({panelId:t})=>n.get(t)?.kind===`bounded`&&!e.context.layout.collapsedIds.includes(t))},I=e=>{let t=E(e.event),n=A(e.context.collection);return t.length>0&&t.every(({panelId:t})=>n.get(t)?.kind===`bounded`&&e.context.layout.collapsedIds.includes(t))},L=e=>{let t=C(e.event.ids),n=A(e.context.collection);return t.length>0&&t.every(t=>n.get(t)?.kind===`bounded`&&e.context.layout.collapsedIds.includes(t)&&Object.hasOwn(e.context.layout.committedSizes,t))},R=e=>{let t=E(e.event),n={...e.context.layout.committedSizes};return t.forEach(({panelId:e,to:t,reset:r})=>{r?delete n[e]:n[e]=t}),{context:{...e.context,layout:{...e.context.layout,committedSizes:j(e.context.collection,n)},sizing:{changes:t}}}},z=e=>{let t=E(e.event),n={...e.context.layout.committedSizes,...Object.fromEntries(t.map(({panelId:e,to:t})=>[e,t]))};return{context:{...e.context,layout:{...e.context.layout,committedSizes:j(e.context.collection,n)}}}},fe=e=>{let t={...e.context.layout.committedSizes};return C(e.event.ids).forEach(e=>delete t[e]),{context:{...e.context,layout:{...e.context.layout,committedSizes:j(e.context.collection,t)}}}},B=e=>{let t=M(e),n=e.context.layout.collapsedIds;return{context:{...e.context,layout:{...e.context.layout,collapsedIds:t},change:{openingIds:n.filter(e=>!t.includes(e)),closingIds:t.filter(e=>!n.includes(e))}}}},V=e=>{let t=k(e.event.collection),n=A(e.context.collection),r=t.filter(t=>(e.context.layout.collapsedIds.includes(t.id)||!n.has(t.id)&&t.defaultCollapsed)&&t.collapsible).map(e=>e.id),i=j(t,e.context.layout.committedSizes),a=A(t).get(e.context.resize.activeId),o=a?.kind===`bounded`&&a.resizable;return{context:{...e.context,collection:t,layout:{collapsedIds:r,committedSizes:i},resize:o?e.context.resize:{activeId:``,initialSize:null,previewSize:null}}}},H=e=>{let t=A(k(e.event.collection)).get(e.context.resize.activeId);return t?.kind!==`bounded`||!t.resizable},pe=({props:e,context:t,effects:n})=>g({initial:`stable`,on:{DOM_INVALIDATED:{effects:`sync`}},states:{stable:{tags:[`stable`],on:{COLLAPSE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},EXPAND:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},SIZE:{target:`sizing`,guard:F,reduce:R,effects:`prepareSizing`},RESTORE_HIDDEN_SIZES:{guard:I,reduce:z},RESET_HIDDEN_SIZES:{target:`persisting`,guard:L,reduce:fe,effects:[`sync`,`persist`]},RESIZE_START:{target:`resizing`,guard:P,reduce:`startResize`,effects:`beginResize`},PANELS_CHANGED:{reduce:V,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},changing:{tags:[`changing`,`transitioning`],on:{CHANGE_DONE:{target:`persisting`,effects:[`finishChange`,`persist`]},CHANGE_ERROR:{target:`persisting`,effects:[`finishChange`,`persist`]},COLLAPSE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},EXPAND:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},PANELS_CHANGED:{reduce:V,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},sizing:{tags:[`sizing`,`transitioning`],on:{SIZE_DONE:{target:`persisting`,effects:[`finishSizing`,`persist`]},SIZE_ERROR:{target:`persisting`,effects:[`finishSizing`,`persist`]},SIZE:{target:`sizing`,guard:F,reduce:R,effects:`prepareSizing`},RESIZE_START:{target:`resizing`,guard:P,reduce:`startResize`,effects:`beginResize`},PANELS_CHANGED:{reduce:V,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},resizing:{tags:[`resizing`],on:{RESIZE:{guard:`activeResize`,reduce:`previewResize`,effects:`previewResize`},RESIZE_END:{target:`persisting`,guard:`activeResize`,reduce:`commitResize`,effects:[`commitResize`,`persist`]},RESIZE_CANCEL:{target:`stable`,reduce:`clearResize`,effects:`cancelResize`},PANELS_CHANGED:[{target:`stable`,guard:H,reduce:V,effects:[`cancelResize`,`sync`]},{reduce:V,effects:`sync`}],PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},persisting:{tags:[`persisting`],on:{PERSIST_DONE:`stable`,PERSIST_ERROR:`stable`,COLLAPSE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},EXPAND:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},SIZE:{target:`sizing`,guard:F,reduce:R,effects:`prepareSizing`},PANELS_CHANGED:{reduce:V,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}}}},{props:e,context:t,reducers:{replaceProps:e=>({props:D(e.event,e.props)}),startResize:e=>{let t=T(e.event.size);return{context:{...e.context,resize:{activeId:w(e.event),initialSize:t,previewSize:t}}}},previewResize:e=>({context:{...e.context,resize:{...e.context.resize,previewSize:T(e.event.size)}}}),commitResize:e=>{let t=w(e.event),n=T(e.event.size);if(n!==null)return{context:{...e.context,layout:{...e.context.layout,committedSizes:j(e.context.collection,{...e.context.layout.committedSizes,[t]:n})},resize:{activeId:``,initialSize:null,previewSize:null}}}},clearResize:e=>({context:{...e.context,resize:{activeId:``,initialSize:null,previewSize:null}}})},guards:{activeResize:e=>w(e.event)===e.context.resize.activeId&&T(e.event.size)!==null},effects:{prepareChange:n.prepareChange,finishChange:n.finishChange,sync:n.sync,beginResize:n.beginResize,previewResize:n.previewResize,commitResize:n.commitResize,cancelResize:n.cancelResize,prepareSizing:n.prepareSizing,finishSizing:n.finishSizing,persist:n.persist}}),U=h({definition:{component:`ui.panels`,parts:{root:{base:`relative flex h-full min-h-0 w-full min-w-0`,variants:{orientation:{horizontal:`flex-row`,vertical:`flex-col`}},defaults:{orientation:`horizontal`}},panel:{base:`relative min-w-0 overflow-hidden`,variants:{orientation:{horizontal:`h-full`,vertical:`w-full`},divider:{true:``,false:``},resize:{none:``,start:``,end:``}},defaults:{orientation:`horizontal`,divider:!0,resize:`none`}},expanded:{base:`h-full min-h-0 w-full min-w-0`},collapsed:{base:`flex h-full min-h-0 w-full min-w-0 items-center justify-center overflow-hidden`},resizeHandle:{base:[`absolute z-20 touch-none border-transparent outline-none`,`hover:border-intent-neutral-edge-hover focus-visible:ui-focus-ring-inset`,`data-resizing:border-intent-neutral-edge-strong`],variants:{orientation:{horizontal:`inset-y-0 w-panel-resize-handle cursor-col-resize`,vertical:`inset-x-0 h-panel-resize-handle cursor-row-resize`},edge:{start:``,end:``}},defaults:{orientation:`horizontal`,edge:`end`}},toggle:{base:`inline-flex size-control-md items-center justify-center outline-none focus-visible:ui-focus-ring-inset`},toggleIcon:{base:`size-icon-md shrink-0`}}}}),W=new Set,G=e=>e instanceof CustomEvent&&e.detail&&typeof e.detail==`object`?e.detail:{},me=(()=>{let e=!1;return()=>{if(e||typeof document>`u`)return;let t=e=>t=>{let n=G(t);!n.__panelsNotification&&n.panelId&&W.forEach(t=>{n.groupId&&n.groupId!==t.id||t.hasPanel(n.panelId)&&t.perform(n.action??e,n.panelId,n.trigger)})};document.addEventListener(`ui:panel-collapse`,t(`collapse`)),document.addEventListener(`ui:panel-expand`,t(`expand`)),document.addEventListener(`ui:panel-toggle`,t(`toggle`)),document.addEventListener(`ui:panel-size`,e=>{let t=G(e);!t.__panelsNotification&&t.panelId&&Number.isFinite(t.size)&&W.forEach(e=>{t.groupId&&t.groupId!==e.id||e.hasPanel(t.panelId)&&e.resize(t.panelId,t.size)})}),document.addEventListener(`ui:panels-reset`,e=>{let t=G(e);t.__panelsNotification||W.forEach(e=>{t.groupId&&t.groupId!==e.id||(!t.panelId||e.hasPanel(t.panelId))&&e.reset(t.panelId)})}),e=!0}})(),he=e=>`trellis-ui:panels:${e}:v1`,ge=e=>typeof e!=`object`||!e||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`number`&&Number.isFinite(e[1]))),K=()=>{let o=null,l=null,u=null,d=`wide`,f,p=null,h=new Set,g=new Set,_=new Map,v=new Map,y=new Map,b=new Map,x=()=>{if(!o)throw Error(`Panels has not been initialized.`);return o},ce=e=>e.closest(`[data-ui-panels]`)===x(),S=()=>Array.from(x().children).flatMap(e=>{if(!(e instanceof HTMLElement)||!e.hasAttribute(`data-ui-panel`))return[];let t=e.querySelector(`:scope > [data-ui-panel-expanded]`);return!t||!ce(t)?[]:[{panel:e,expanded:t,collapsed:e.querySelector(`:scope > [data-ui-panel-collapsed]`),handle:e.querySelector(`:scope > [data-ui-panel-resize-handle]`),props:c({el:e,schema:ue})}]}),C=e=>S().find(t=>t.props.id===e)??null,w=()=>Q.getCommittedSnapshot().context,T=()=>Q.getCommittedSnapshot().props,E=e=>w().layout.collapsedIds.includes(e),D=()=>T().orientation===`horizontal`&&d===`stacked`,O=()=>D()?`vertical`:T().orientation,k=()=>x().dataset.orientation===`vertical`?`vertical`:`horizontal`,A=e=>{let t=e.getBoundingClientRect();return k()===`horizontal`?t.width:t.height},j=()=>{let e=S(),t=e.map(({props:e})=>e.id);if(t.some(e=>!e))throw Error(`Every Panel requires a stable id.`);if(new Set(t).size!==t.length)throw Error(`Panel ids must be unique within a Panels group.`);if(e.length>0&&!e.some(({props:e})=>e.size===`fill`))throw Error(`A Panels group requires at least one size="fill" Panel.`);if(e.some(({props:e})=>e.size===`fill`&&e.resize!==`none`))throw Error(`A size="fill" Panel cannot own a resize handle.`);return e.map(({props:e})=>{let t=e.collapsible?{collapsible:!0,defaultCollapsed:e.defaultCollapsed}:{collapsible:!1,defaultCollapsed:!1};return e.size===`fill`?{id:e.id,kind:`fill`,...t}:{id:e.id,kind:`bounded`,resizable:e.resize!==`none`,...t}})},M=e=>{let t=document.createElement(`div`);t.style.cssText=`position:absolute;visibility:hidden;pointer-events:none;inset:0 auto auto 0;`,k()===`horizontal`?t.style.width=`var(${e})`:t.style.height=`var(${e})`,x().append(t);let n=A(t);return t.remove(),n},N=e=>e.props.size===`fill`?{minimum:0,maximum:1/0}:{minimum:M(`--spacing-panel-${e.props.size}-min`),maximum:M(`--spacing-panel-${e.props.size}-max`)},P=(e,t)=>{let{minimum:n,maximum:r}=N(e);return Math.min(r,Math.max(n,t))},F=()=>{let e=j();return{collection:e,layout:{collapsedIds:e.filter(e=>e.defaultCollapsed).map(({id:e})=>e),committedSizes:{}},change:{openingIds:[],closingIds:[]},resize:{activeId:``,initialSize:null,previewSize:null},sizing:{changes:[]}}},I=(e,t,n)=>{k()===`horizontal`?(e.style.minWidth=t,e.style.maxWidth=n,e.style.minHeight=``,e.style.maxHeight=``):(e.style.minHeight=t,e.style.maxHeight=n,e.style.minWidth=``,e.style.maxWidth=``)},L=e=>{e.style.flex=``,e.style.minWidth=``,e.style.maxWidth=``,e.style.minHeight=``,e.style.maxHeight=``},R=(e,t)=>{if(D()){L(e.panel);return}if(t!==void 0){e.panel.style.flex=`0 0 ${t}px`,I(e.panel,`0px`,`none`);return}if(E(e.props.id)){if(w().collection.find(({id:t})=>t===e.props.id)?.defaultCollapsed){L(e.panel);return}let t=e.collapsed?`var(--spacing-panel-collapsed)`:`0px`;e.panel.style.flex=`0 0 ${t}`,I(e.panel,t,t);return}if(e.props.size===`fill`){L(e.panel);return}let n=w().resize.activeId===e.props.id?w().resize.previewSize:w().layout.committedSizes[e.props.id];if(n==null){L(e.panel);return}let r=`${P(e,n)}px`;e.panel.style.flex=`0 1 ${r}`,I(e.panel,`var(--spacing-panel-${e.props.size}-min)`,`var(--spacing-panel-${e.props.size}-max)`)},z=(e,t)=>{e.toggleAttribute(`inert`,t),e.setAttribute(`aria-hidden`,t?`true`:`false`)},fe=e=>{let t=T(),r=O(),i=E(e.props.id),a=Q.hasTag(`changing`)&&w().change.openingIds.includes(e.props.id),o=Q.hasTag(`changing`)&&w().change.closingIds.includes(e.props.id),s=!(i&&!o),c=i&&!o&&!a&&e.collapsed!==null;if(e.panel.dataset.state=i?`collapsed`:`expanded`,e.panel.dataset.orientation=r,e.panel.dataset.size=e.props.size,e.panel.dataset.resize=e.props.resize,e.panel.className=m({part:U.parts.panel,props:{orientation:r,divider:t.divider,resize:e.props.resize},className:e.props.class}),n({el:e.panel,attr:`data-collapsible`,present:e.props.collapsible}),n({el:e.panel,attr:`data-resizing`,present:w().resize.activeId===e.props.id}),R(e),e.expanded.hidden=!s,z(e.expanded,!s),e.collapsed&&(e.collapsed.hidden=!c,z(e.collapsed,!c)),e.handle){let t=D()||i||e.props.size===`fill`||e.props.resize===`none`;e.handle.dataset.orientation=r,e.handle.dataset.resizeEdge=e.props.resize,e.handle.setAttribute(`aria-label`,`Resize ${e.props.id} panel`),e.handle.toggleAttribute(`data-resize-disabled`,t),e.handle.hidden=D(),e.handle.className=m({part:U.parts.resizeHandle,props:{orientation:r,edge:e.props.resize},className:e.handle.dataset.class??``})}},B=e=>{e.forEach((t,r)=>{let i=e[r+1],a=t.props.resize===`end`||i?.props.resize===`start`;s(t.panel,`data-divider`),n({el:t.panel,attr:`data-divider`,present:T().divider&&i!==void 0&&!a})})},V=e=>{let t=e.dataset.target||``;if(!t){let t=e.closest(`[data-ui-panel]`),n=t?.closest(`[data-ui-panels]`),r=[...W].find(e=>e.id===n?.id),i=t&&r===$?C(t.id):null;return i&&r?{record:i,controller:r}:null}let n=e.dataset.groupId||e.closest(`[data-ui-panels]`)?.id,r=[...W].filter(e=>!n||e.id===n).find(e=>e.hasPanel(t)),i=r===$?C(t):null;return i&&r?{record:i,controller:r}:null},H=()=>{document.querySelectorAll(`[data-ui-panel-toggle]`).forEach(e=>{let t=V(e);if(!t||t.controller!==$)return;let n=E(t.record.props.id);e.dataset.target=t.record.props.id,e.dataset.groupId=T().id,e.dataset.state=n?`collapsed`:`expanded`,e.setAttribute(`aria-controls`,t.record.panel.id),e.setAttribute(`aria-expanded`,n?`false`:`true`),e.toggleAttribute(`disabled`,!t.record.props.collapsible)})},G=()=>{let e=T(),t=O();x().dataset.responsiveMode=d,x().dataset.layoutOrientation=t,x().style.flexDirection=t===`horizontal`?`row`:`column`,x().className=m({part:U.parts.root,props:{...e,orientation:t},className:e.class}),n({el:x(),attr:`data-resizing`,present:Q.hasTag(`resizing`)}),n({el:x(),attr:`data-transitioning`,present:Q.hasTag(`transitioning`)});let r=S();r.forEach(fe),B(r),H()},K=(e,t=!1)=>{let n=document.activeElement;if(!t&&(!(n instanceof HTMLElement)||!e.collapsed?.contains(n)))return;let r=y.get(e.props.id);r?.isConnected&&e.expanded.contains(r)?r.focus({preventScroll:!0}):(e.expanded.tabIndex=-1,e.expanded.focus({preventScroll:!0}))},q=(e,t=!1)=>{let n=document.activeElement;if(!t&&(!(n instanceof HTMLElement)||!e.expanded.contains(n)))return;let r=e.collapsed?ie(e.collapsed)[0]:void 0,i=b.get(e.props.id),a=i?.isConnected&&!e.panel.contains(i)?i:void 0;r?r.focus({preventScroll:!0}):a?a.focus({preventScroll:!0}):(x().tabIndex=-1,x().focus({preventScroll:!0}))},_e=()=>{let e=[...w().change.openingIds,...w().change.closingIds],t=new Set(w().change.openingIds.filter(e=>{let t=C(e),n=document.activeElement;return t!==null&&t.collapsed!==null&&n instanceof HTMLElement&&t.collapsed.contains(n)})),n=new Map(e.flatMap(e=>{let t=C(e);if(!t)return[];if(w().change.closingIds.includes(e)){let n=document.activeElement;n instanceof HTMLElement&&t.expanded.contains(n)&&y.set(e,n)}return[[e,A(t.panel)]]}));G(),w().change.openingIds.forEach(e=>{let n=C(e);n&&K(n,t.has(e))}),e.forEach(e=>{let t=C(e),r=n.get(e);if(!t||r===void 0)return;let i=A(t.panel);v.set(e,{from:r,to:i}),R(t,r)})},J=()=>{let e=[...w().change.openingIds],t=[...w().change.closingIds],n=new Set(t.filter(e=>{let t=C(e),n=document.activeElement;return t!==null&&n instanceof HTMLElement&&t.expanded.contains(n)}));S().forEach(e=>R(e)),G(),t.forEach(e=>{let t=C(e);t&&q(t,n.has(e))}),e.forEach(e=>Y(`ui:panel-expand`,e)),t.forEach(e=>Y(`ui:panel-collapse`,e)),[...e,...t].forEach(e=>v.delete(e))},Y=(e,n,r={})=>{t({el:x(),name:e,detail:{groupId:T().id,panelId:n,__panelsNotification:!0,...r}})},ve=()=>{let e=w().layout;if(T().persist)try{localStorage.setItem(he(T().id),JSON.stringify({collapsed:e.collapsedIds,sizes:e.committedSizes}))}catch{}t({el:x(),name:`ui:panels-layout-change`,detail:{groupId:T().id,collapsed:[...e.collapsedIds],sizes:{...e.committedSizes},__panelsNotification:!0}})},X=e=>{if(!o)return;if(Q.hasTag(`stable`)){e();return}let t=window.setTimeout(()=>{h.delete(t),X(e)},16);h.add(t)},Z=(e,t)=>{let n=e.find(e=>t(e)!==E(e));n&&(Q.send({type:t(n)?`COLLAPSE`:`EXPAND`,panelId:n}),X(()=>Z(e,t)))},ye=()=>{if(!T().persist)return;let e;try{e=JSON.parse(localStorage.getItem(he(T().id))??`null`)}catch{return}if(typeof e!=`object`||!e)return;let t=j(),n=t.filter(e=>e.collapsible),r=new Set((Array.isArray(e.collapsed)?e.collapsed:[]).filter(e=>typeof e==`string`&&n.some(t=>t.id===e))),i=ge(e.sizes),a=()=>{Z(n.map(({id:e})=>e),e=>r.has(e))},o=()=>{let e=t.filter(e=>e.kind===`bounded`).flatMap(({id:e})=>{let t=C(e),n=i[e];if(!t||n===void 0)return[];let r=A(t.panel),a=P(t,n);return Math.abs(r-a)<.5?[]:[{panelId:e,from:r,to:a}]});if(D()){e.length>0&&Q.send({type:`RESTORE_HIDDEN_SIZES`,changes:e}),a();return}let n=e.filter(({panelId:e})=>E(e)),r=e.filter(({panelId:e})=>!E(e));if(n.length>0&&Q.send({type:`RESTORE_HIDDEN_SIZES`,changes:n}),r.length>0){Q.send({type:`SIZE`,changes:r}),X(a);return}a()},s=n.map(({id:e})=>e).filter(e=>E(e)&&!r.has(e));s.length>0?(Z(s,()=>!1),X(o)):o()},be=()=>{let e=requestAnimationFrame(()=>{g.delete(e);let t=requestAnimationFrame(()=>{g.delete(t),ye()});g.add(t)});g.add(e)},xe=e=>{let t=j(),n=e?t.filter(({id:t})=>t===e):t;if(n.length===0)return;let r=()=>{Z(n.filter(e=>e.collapsible).map(({id:e})=>e),e=>t.find(t=>t.id===e)?.defaultCollapsed===!0)},i=n.filter(e=>e.kind===`bounded`).map(({id:e})=>e).filter(e=>Object.hasOwn(w().layout.committedSizes,e));if(D()){i.length>0?(Q.send({type:`RESET_HIDDEN_SIZES`,ids:i}),X(r)):r();return}let a=i.filter(E);a.length>0&&Q.send({type:`RESET_HIDDEN_SIZES`,ids:a});let o=i.filter(e=>!E(e)).flatMap(e=>{let t=C(e);return!t||t.props.size===`fill`?[]:[{panelId:e,from:A(t.panel),to:M(`--spacing-panel-${t.props.size}`),reset:!0}]});if(o.length>0){Q.send({type:`SIZE`,changes:o}),X(r);return}r()},Se=()=>{w().sizing.changes.forEach(({panelId:e,from:t})=>{let n=C(e);n&&R(n,t)})},Ce=()=>{w().sizing.changes.forEach(({panelId:e,to:t})=>{let n=C(e);n&&(R(n),Y(`ui:panel-resize-end`,e,{size:t}))}),G()},we=t=>{if(O()===`vertical`)return t===`start`?`negative`:`positive`;let n=e({el:x()});return t===`start`?n?`positive`:`negative`:n?`negative`:`positive`},Te=()=>{let e=p;if(!e)return;let t=new Set(S().map(({panel:e})=>e));_.forEach((e,n)=>{t.has(n)||(e.run(),_.delete(n))}),S().forEach(t=>{if(_.has(t.panel)||!t.handle||t.props.size===`fill`||t.props.resize===`none`)return;let n=N(t),r=M(`--spacing-panel-resize-handle`),i=M(`--spacing-panel-resize-handle-coarse`),a=new te;e.addChild(a),a.add(oe({element:t.panel,handle:t.handle,axis:O()===`horizontal`?`x`:`y`,direction:we(t.props.resize),min:n.minimum,max:n.maximum,mode:`onChange`,hitArea:r,coarseHitArea:i,disabled:()=>D()||E(t.props.id),onStart:e=>Q.send({type:`RESIZE_START`,panelId:t.props.id,size:De(e)}),onResize:e=>Q.send({type:`RESIZE`,panelId:t.props.id,size:De(e)}),onEnd:e=>Q.send({type:`RESIZE_END`,panelId:t.props.id,size:De(e)})})),_.set(t.panel,a)})},Ee=()=>{p?.run(),_.clear(),p=new te,f.addChild(p),Te()},De=e=>O()===`horizontal`?e.previewWidth:e.previewHeight,Oe=e=>{let t=T().orientation===`horizontal`&&e<se(x(),`sm`)?`stacked`:`wide`;t!==d&&(d=t,G(),Ee())},Q=ee({schema:le,hooks:de,resolveTransitionElement:({data:e})=>{let t=e?.panelId;return t?C(t)?.panel??null:x()},createMachine:({props:e})=>pe({props:e,context:F(),effects:{prepareChange:_e,finishChange:J,sync:()=>{G(),Ee()},beginResize:()=>{G()},previewResize:()=>{let e=w().resize.activeId,t=C(e);t&&R(t);let n=w().resize.previewSize;n!==null&&Y(`ui:panel-resize`,e,{size:n})},commitResize:e=>{G();let t=typeof e.event.panelId==`string`?e.event.panelId:``,n=w().layout.committedSizes[t];t&&n!==void 0&&Y(`ui:panel-resize-end`,t,{size:n})},cancelResize:G,prepareSizing:Se,finishSizing:Ce,persist:ve}})}),ke=()=>{let e=j();Q.send({type:`PANELS_CHANGED`,collection:e}),Te()},Ae=()=>{l=ae({targets:x(),read:j,onChange:ke,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`id`,`data-size`,`data-resize`,`data-collapsible`,`data-default-collapsed`]}})},$;return $={...Q,get id(){return x().id||T().id},get orientation(){return O()},get collapsed(){return[...w().layout.collapsedIds]},get sizes(){return{...w().layout.committedSizes}},get root(){let e=this.snapshot.current?.props??T();return re({inputs:[m({part:U.parts.root,props:e,className:e.class}),{"data-ui-panels":``}]})},init(){f=ne(this),p=new te,f.addChild(p),o=this.$el,Q.connect(this.$el,this.snapshot),x().id||=T().id,d=T().orientation===`horizontal`&&x().getBoundingClientRect().width<se(x(),`sm`)?`stacked`:`wide`,W.add($),me(),G(),Te(),u=new ResizeObserver(e=>{Oe(e[0]?.contentRect.width??x().clientWidth)}),u.observe(x()),Ae(),T().persist&&be(),r({target:x(),event:`keydown`,handler:()=>H(),cleanup:f})},destroy(){W.delete($),l?.(),l=null,u?.disconnect(),u=null,_.clear(),p=null,h.forEach(e=>window.clearTimeout(e)),h.clear(),g.forEach(e=>cancelAnimationFrame(e)),g.clear(),Q.disconnect(),o=null},transitionPanel(e){let t=e.data.panelId,n=C(t),r=v.get(t);return!n||!r||r.from===r.to?(n&&R(n,r?.to),i()):a(e,{target:n.panel,keyframes:{flexBasis:[`${r.from}px`,`${r.to}px`]},role:`layout`,cleanup:()=>R(n)})},transitionPanelSize(e){let{panelId:t,from:n,to:r}=e.data,o=C(t);return!o||n===r?(o&&R(o),i()):a(e,{target:o.panel,keyframes:{flexBasis:[`${n}px`,`${r}px`]},role:`layoutQuick`,cleanup:()=>R(o)})},hasPanel(e){return C(e)!==null},isCollapsed:E,collapse(e){Q.send({type:`COLLAPSE`,panelId:e})},expand(e){Q.send({type:`EXPAND`,panelId:e})},toggle(e){Q.send({type:`TOGGLE`,panelId:e})},resize(e,t){let n=C(e);if(D()||!n||n.props.size===`fill`||E(e)||!Number.isFinite(t))return;let r=A(n.panel),i=P(n,t);Math.abs(r-i)<.5||Q.send({type:`SIZE`,panelId:e,from:r,to:i})},reset(e){xe(e)},perform(e,t,n){n&&b.set(t,n),{collapse:this.collapse,expand:this.expand,toggle:this.toggle}[e](t)},syncToggles:H},$},q=()=>{let e={};return{get props(){return e},init(){e=c({el:this.$el,schema:S})},destroy(){},get root(){return re({inputs:[m({part:U.parts.toggle,props:{},className:e.class}),{"data-ui-panel-toggle":``,":data-target":()=>e.target||void 0,":data-action":()=>e.action,"@click":e=>this.trigger(e)}]})},trigger(t){t?.preventDefault();let n=this.$el,r=n.closest(`[data-ui-panel]`),i=r?.closest(`[data-ui-panels]`),a=e.target||r?.id||``;a&&document.dispatchEvent(new CustomEvent(`ui:panel-toggle`,{detail:{panelId:a,groupId:i?.id,action:e.action,trigger:n}}))}}},_e=e=>{p(`UiPanels`,K)(e),p(`UiPanelToggle`,q)(e)},J=new WeakSet,Y=e=>{J.has(e)||(J.add(e),o(e),_(e),_e(e))};export{q as n,K as r,Y as t};
|
|
2
|
-
//# sourceMappingURL=entry.generated-B41qiwNq.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entry.generated-B41qiwNq.js","names":[],"sources":["../../../../../../../../client/src/runtime/composition-breakpoint.ts","../../../../../../../../client/src/components/panels/contract.ts","../../../../../../../../client/src/components/panels/machine.ts","../../../../../../../../client/src/components/panels/styles.ts","../../../../../../../../client/src/components/panels/index.ts","../../../../../../../../client/src/components/panels/entry.generated.ts"],"sourcesContent":["type CompositionBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nconst compositionBreakpointPixels = (\n reference: HTMLElement,\n breakpoint: CompositionBreakpoint,\n): number => {\n const value = getComputedStyle(reference).getPropertyValue(`--breakpoint-${breakpoint}`);\n const pixels = Number.parseFloat(value);\n return Number.isFinite(pixels) ? pixels : Number.POSITIVE_INFINITY;\n};\n\nexport {compositionBreakpointPixels};\nexport type {CompositionBreakpoint};\n","import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\n\nconst PANELS_ORIENTATIONS = ['horizontal', 'vertical'] as const;\nconst PANEL_AS_VALUES = ['div', 'section', 'aside', 'main', 'nav'] as const;\nconst PANEL_SIZES = ['1', '2', '3', '4', '5', '6', 'fill'] as const;\nconst PANEL_RESIZE_EDGES = ['none', 'start', 'end'] as const;\nconst PANEL_TOGGLE_ACTIONS = ['toggle', 'expand', 'collapse'] as const;\n\nconst panelsSchema = {\n id: string.default('ui-panels'),\n orientation: oneOf(PANELS_ORIENTATIONS, 'horizontal'),\n persist: bool,\n divider: bool.default(true),\n class: string,\n};\n\nconst panelSchema = {\n id: string,\n as: oneOf(PANEL_AS_VALUES, 'section'),\n size: oneOf(PANEL_SIZES, 'fill'),\n resize: oneOf(PANEL_RESIZE_EDGES, 'none'),\n collapsible: bool,\n defaultCollapsed: bool,\n class: string,\n};\n\nconst panelToggleSchema = {\n target: string,\n action: oneOf(PANEL_TOGGLE_ACTIONS, 'toggle'),\n icon: string.default('menu'),\n label: string.default('Expand'),\n class: string,\n};\n\ntype PanelsOrientation = typeof PANELS_ORIENTATIONS[number];\ntype PanelAs = typeof PANEL_AS_VALUES[number];\ntype PanelSize = typeof PANEL_SIZES[number];\ntype PanelResizeEdge = typeof PANEL_RESIZE_EDGES[number];\ntype PanelToggleAction = typeof PANEL_TOGGLE_ACTIONS[number];\ntype PanelsProps = SchemaToProps<typeof panelsSchema>;\ntype PanelProps = SchemaToProps<typeof panelSchema>;\ntype PanelToggleProps = SchemaToProps<typeof panelToggleSchema>;\n\nexport {\n PANEL_AS_VALUES,\n PANEL_RESIZE_EDGES,\n PANEL_SIZES,\n PANEL_TOGGLE_ACTIONS,\n PANELS_ORIENTATIONS,\n panelSchema,\n panelToggleSchema,\n panelsSchema,\n};\nexport type {\n PanelAs,\n PanelProps,\n PanelResizeEdge,\n PanelSize,\n PanelToggleAction,\n PanelToggleProps,\n PanelsOrientation,\n PanelsProps,\n};\n","import {createMachine, type Machine, type MachineEventObject, type MachineScope} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {PanelsProps} from './contract';\n\ntype PanelCollapseCapability =\n | {collapsible: false; defaultCollapsed: false}\n | {collapsible: true; defaultCollapsed: boolean};\n\ntype PanelDescriptor = PanelCollapseCapability & (\n | {id: string; kind: 'fill'}\n | {id: string; kind: 'bounded'; resizable: boolean}\n);\n\ntype PanelsContext = {\n collection: PanelDescriptor[];\n layout: {\n collapsedIds: string[];\n committedSizes: Record<string, number>;\n };\n change: {\n openingIds: string[];\n closingIds: string[];\n };\n resize: {\n activeId: string;\n initialSize: number | null;\n previewSize: number | null;\n };\n sizing: {\n changes: PanelSizingTransitionData[];\n };\n};\n\ntype PanelTransitionData = {panelId: string};\ntype PanelSizingTransitionData = {panelId: string; from: number; to: number; reset?: boolean};\ntype PanelsPersistTransitionData = {\n groupId: string;\n collapsed: string[];\n sizes: Record<string, number>;\n};\n\ntype PanelsMachineEffects = {\n prepareChange(scope: MachineScope<PanelsContext, PanelsProps>): void;\n finishChange(scope: MachineScope<PanelsContext, PanelsProps>): void;\n sync(scope: MachineScope<PanelsContext, PanelsProps>): void;\n beginResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n previewResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n commitResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n cancelResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n prepareSizing(scope: MachineScope<PanelsContext, PanelsProps>): void;\n finishSizing(scope: MachineScope<PanelsContext, PanelsProps>): void;\n persist(scope: MachineScope<PanelsContext, PanelsProps>): void;\n};\n\ntype CreatePanelsMachineOptions = {\n props: PanelsProps;\n context: PanelsContext;\n effects: PanelsMachineEffects;\n};\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.openingIds.map((panelId) => ({panelId})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n expand: (panelId: string) => ({type: 'EXPAND', panelId}),\n collapse: (panelId: string) => ({type: 'COLLAPSE', panelId}),\n toggle: (panelId: string) => ({type: 'TOGGLE', panelId}),\n },\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelTransitionData, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.closingIds.map((panelId) => ({panelId})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n expand: (panelId: string) => ({type: 'EXPAND', panelId}),\n collapse: (panelId: string) => ({type: 'COLLAPSE', panelId}),\n toggle: (panelId: string) => ({type: 'TOGGLE', panelId}),\n },\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelTransitionData, 'closing'>);\n\nconst sizingHook = defineHook({\n name: 'sizing',\n state: 'sizing',\n projectEach: (snapshot) => snapshot.context.sizing.changes,\n onDone: 'SIZE_DONE',\n onError: 'SIZE_ERROR',\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelSizingTransitionData, 'sizing'>);\n\nconst persistingHook = defineHook({\n name: 'persisting',\n state: 'persisting',\n project: (snapshot) => ({\n groupId: snapshot.props.id,\n collapsed: [...snapshot.context.layout.collapsedIds],\n sizes: {...snapshot.context.layout.committedSizes},\n }),\n onDone: 'PERSIST_DONE',\n onError: 'PERSIST_ERROR',\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelsPersistTransitionData, 'persisting'>);\n\nconst panelsHooks = [openingHook, closingHook, sizingHook, persistingHook] as const;\n\nconst strings = (value: unknown): string[] => Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\nconst panelId = (event: MachineEventObject): string => typeof event.panelId === 'string' ? event.panelId : '';\nconst finiteSize = (value: unknown): number | null => typeof value === 'number' && Number.isFinite(value) ? value : null;\nconst sizingChanges = (event: MachineEventObject): PanelSizingTransitionData[] => {\n const candidates = Array.isArray(event.changes) ? event.changes : [event];\n return candidates.flatMap((candidate) => {\n if (typeof candidate !== 'object' || candidate === null) return [];\n const change = candidate as Record<string, unknown>;\n const id = typeof change.panelId === 'string' ? change.panelId : '';\n const from = finiteSize(change.from);\n const to = finiteSize(change.to);\n const reset = change.reset === true;\n return id && from !== null && to !== null && (from !== to || reset)\n ? [{panelId: id, from, to, ...(reset ? {reset: true} : {})}]\n : [];\n });\n};\nconst propsFrom = (event: MachineEventObject, fallback: PanelsProps): PanelsProps => (\n typeof event.props === 'object' && event.props !== null ? event.props as PanelsProps : fallback\n);\nconst sameStrings = (left: readonly string[], right: readonly string[]): boolean => (\n left.length === right.length && left.every((value, index) => value === right[index])\n);\nconst descriptors = (value: unknown): PanelDescriptor[] => {\n if (!Array.isArray(value)) return [];\n const result: PanelDescriptor[] = [];\n value.forEach((candidate) => {\n if (typeof candidate !== 'object' || candidate === null) return;\n const descriptor = candidate as Record<string, unknown>;\n if (typeof descriptor.id !== 'string' || !descriptor.id) return;\n const collapse: PanelCollapseCapability = descriptor.collapsible === true\n ? {collapsible: true, defaultCollapsed: descriptor.defaultCollapsed === true}\n : {collapsible: false, defaultCollapsed: false};\n if (descriptor.kind === 'fill') result.push({id: descriptor.id, kind: 'fill', ...collapse});\n if (descriptor.kind === 'bounded') {\n result.push({\n id: descriptor.id,\n kind: 'bounded',\n resizable: descriptor.resizable === true,\n ...collapse,\n });\n }\n });\n return result;\n};\nconst descriptorMap = (collection: readonly PanelDescriptor[]): Map<string, PanelDescriptor> => (\n new Map(collection.map((descriptor) => [descriptor.id, descriptor]))\n);\nconst orderedSizes = (\n collection: readonly PanelDescriptor[],\n sizes: Readonly<Record<string, number>>,\n): Record<string, number> => Object.fromEntries(collection.flatMap((descriptor) => (\n descriptor.kind === 'bounded' && Object.hasOwn(sizes, descriptor.id)\n ? [[descriptor.id, sizes[descriptor.id]!]]\n : []\n)));\n\nconst requestedCollapsed = (scope: MachineScope<PanelsContext, PanelsProps>): string[] => {\n const id = panelId(scope.event);\n const current = scope.context.layout.collapsedIds;\n const collection = scope.context.collection;\n const descriptor = descriptorMap(collection).get(id);\n switch (scope.event.type) {\n case 'COLLAPSE':\n return descriptor?.collapsible && !current.includes(id)\n ? collection.map((item) => item.id).filter((item) => current.includes(item) || item === id)\n : current;\n case 'EXPAND':\n return current.filter((item) => item !== id);\n case 'TOGGLE':\n if (!descriptor?.collapsible) return current;\n return current.includes(id)\n ? current.filter((item) => item !== id)\n : collection.map((item) => item.id).filter((item) => current.includes(item) || item === id);\n default:\n return current;\n }\n};\n\nconst changeAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const id = panelId(scope.event);\n return descriptorMap(scope.context.collection).has(id)\n && !sameStrings(scope.context.layout.collapsedIds, requestedCollapsed(scope));\n};\n\nconst resizeAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const id = panelId(scope.event);\n const descriptor = descriptorMap(scope.context.collection).get(id);\n return descriptor?.kind === 'bounded'\n && descriptor.resizable\n && !scope.context.layout.collapsedIds.includes(id)\n && finiteSize(scope.event.size) !== null;\n};\n\nconst sizingAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const changes = sizingChanges(scope.event);\n const collection = descriptorMap(scope.context.collection);\n return changes.length > 0 && changes.every(({panelId: id}) => (\n collection.get(id)?.kind === 'bounded'\n && !scope.context.layout.collapsedIds.includes(id)\n ));\n};\n\nconst hiddenSizingAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const changes = sizingChanges(scope.event);\n const collection = descriptorMap(scope.context.collection);\n return changes.length > 0 && changes.every(({panelId: id}) => (\n collection.get(id)?.kind === 'bounded'\n && scope.context.layout.collapsedIds.includes(id)\n ));\n};\n\nconst hiddenResetAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const ids = strings(scope.event.ids);\n const collection = descriptorMap(scope.context.collection);\n return ids.length > 0 && ids.every((id) => (\n collection.get(id)?.kind === 'bounded'\n && scope.context.layout.collapsedIds.includes(id)\n && Object.hasOwn(scope.context.layout.committedSizes, id)\n ));\n};\n\nconst applySizing = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const changes = sizingChanges(scope.event);\n const committedSizes = {...scope.context.layout.committedSizes};\n changes.forEach(({panelId: id, to, reset}) => {\n if (reset) delete committedSizes[id];\n else committedSizes[id] = to;\n });\n return {context: {\n ...scope.context,\n layout: {\n ...scope.context.layout,\n committedSizes: orderedSizes(scope.context.collection, committedSizes),\n },\n sizing: {changes},\n }};\n};\n\nconst commitHiddenSizes = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const changes = sizingChanges(scope.event);\n const committedSizes = {\n ...scope.context.layout.committedSizes,\n ...Object.fromEntries(changes.map(({panelId: id, to}) => [id, to])),\n };\n return {context: {\n ...scope.context,\n layout: {\n ...scope.context.layout,\n committedSizes: orderedSizes(scope.context.collection, committedSizes),\n },\n }};\n};\n\nconst resetHiddenSizes = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const committedSizes = {...scope.context.layout.committedSizes};\n strings(scope.event.ids).forEach((id) => delete committedSizes[id]);\n return {context: {\n ...scope.context,\n layout: {\n ...scope.context.layout,\n committedSizes: orderedSizes(scope.context.collection, committedSizes),\n },\n }};\n};\n\nconst applyChange = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const collapsedIds = requestedCollapsed(scope);\n const previous = scope.context.layout.collapsedIds;\n return {context: {\n ...scope.context,\n layout: {...scope.context.layout, collapsedIds},\n change: {\n openingIds: previous.filter((id) => !collapsedIds.includes(id)),\n closingIds: collapsedIds.filter((id) => !previous.includes(id)),\n },\n }};\n};\n\nconst reconcile = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const collection = descriptors(scope.event.collection);\n const known = descriptorMap(scope.context.collection);\n const collapsedIds = collection.filter((descriptor) => (\n scope.context.layout.collapsedIds.includes(descriptor.id)\n || (!known.has(descriptor.id) && descriptor.defaultCollapsed)\n ) && descriptor.collapsible).map((descriptor) => descriptor.id);\n const committedSizes = orderedSizes(collection, scope.context.layout.committedSizes);\n const active = descriptorMap(collection).get(scope.context.resize.activeId);\n const activeExists = active?.kind === 'bounded' && active.resizable;\n return {context: {\n ...scope.context,\n collection,\n layout: {collapsedIds, committedSizes},\n resize: activeExists\n ? scope.context.resize\n : {activeId: '', initialSize: null, previewSize: null},\n }};\n};\n\nconst activeRemoved = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const active = descriptorMap(descriptors(scope.event.collection)).get(scope.context.resize.activeId);\n return active?.kind !== 'bounded' || !active.resizable;\n};\n\nconst createPanelsMachine = ({\n props,\n context,\n effects,\n}: CreatePanelsMachineOptions): Machine<PanelsContext, PanelsProps> => createMachine<PanelsContext, PanelsProps>({\n initial: 'stable',\n on: {\n DOM_INVALIDATED: {effects: 'sync'},\n },\n states: {\n stable: {\n tags: ['stable'],\n on: {\n COLLAPSE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n EXPAND: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n SIZE: {target: 'sizing', guard: sizingAllowed, reduce: applySizing, effects: 'prepareSizing'},\n RESTORE_HIDDEN_SIZES: {guard: hiddenSizingAllowed, reduce: commitHiddenSizes},\n RESET_HIDDEN_SIZES: {\n target: 'persisting',\n guard: hiddenResetAllowed,\n reduce: resetHiddenSizes,\n effects: ['sync', 'persist'],\n },\n RESIZE_START: {target: 'resizing', guard: resizeAllowed, reduce: 'startResize', effects: 'beginResize'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n changing: {\n tags: ['changing', 'transitioning'],\n on: {\n CHANGE_DONE: {target: 'persisting', effects: ['finishChange', 'persist']},\n CHANGE_ERROR: {target: 'persisting', effects: ['finishChange', 'persist']},\n COLLAPSE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n EXPAND: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n sizing: {\n tags: ['sizing', 'transitioning'],\n on: {\n SIZE_DONE: {target: 'persisting', effects: ['finishSizing', 'persist']},\n SIZE_ERROR: {target: 'persisting', effects: ['finishSizing', 'persist']},\n SIZE: {target: 'sizing', guard: sizingAllowed, reduce: applySizing, effects: 'prepareSizing'},\n RESIZE_START: {target: 'resizing', guard: resizeAllowed, reduce: 'startResize', effects: 'beginResize'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n resizing: {\n tags: ['resizing'],\n on: {\n RESIZE: {guard: 'activeResize', reduce: 'previewResize', effects: 'previewResize'},\n RESIZE_END: {target: 'persisting', guard: 'activeResize', reduce: 'commitResize', effects: ['commitResize', 'persist']},\n RESIZE_CANCEL: {target: 'stable', reduce: 'clearResize', effects: 'cancelResize'},\n PANELS_CHANGED: [\n {target: 'stable', guard: activeRemoved, reduce: reconcile, effects: ['cancelResize', 'sync']},\n {reduce: reconcile, effects: 'sync'},\n ],\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n persisting: {\n tags: ['persisting'],\n on: {\n PERSIST_DONE: 'stable',\n PERSIST_ERROR: 'stable',\n COLLAPSE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n EXPAND: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n SIZE: {target: 'sizing', guard: sizingAllowed, reduce: applySizing, effects: 'prepareSizing'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n },\n}, {\n props,\n context,\n reducers: {\n replaceProps: (scope) => ({props: propsFrom(scope.event, scope.props)}),\n startResize: (scope) => {\n const size = finiteSize(scope.event.size);\n return {context: {\n ...scope.context,\n resize: {activeId: panelId(scope.event), initialSize: size, previewSize: size},\n }};\n },\n previewResize: (scope) => ({context: {\n ...scope.context,\n resize: {...scope.context.resize, previewSize: finiteSize(scope.event.size)},\n }}),\n commitResize: (scope) => {\n const id = panelId(scope.event);\n const size = finiteSize(scope.event.size);\n if (size === null) return;\n return {context: {\n ...scope.context,\n layout: {\n ...scope.context.layout,\n committedSizes: orderedSizes(scope.context.collection, {\n ...scope.context.layout.committedSizes,\n [id]: size,\n }),\n },\n resize: {activeId: '', initialSize: null, previewSize: null},\n }};\n },\n clearResize: (scope) => ({context: {\n ...scope.context,\n resize: {activeId: '', initialSize: null, previewSize: null},\n }}),\n },\n guards: {\n activeResize: (scope) => panelId(scope.event) === scope.context.resize.activeId\n && finiteSize(scope.event.size) !== null,\n },\n effects: {\n prepareChange: effects.prepareChange,\n finishChange: effects.finishChange,\n sync: effects.sync,\n beginResize: effects.beginResize,\n previewResize: effects.previewResize,\n commitResize: effects.commitResize,\n cancelResize: effects.cancelResize,\n prepareSizing: effects.prepareSizing,\n finishSizing: effects.finishSizing,\n persist: effects.persist,\n },\n});\n\nexport {createPanelsMachine, panelsHooks};\nexport type {\n CreatePanelsMachineOptions,\n PanelDescriptor,\n PanelsContext,\n PanelsMachineEffects,\n PanelsPersistTransitionData,\n PanelSizingTransitionData,\n PanelTransitionData,\n};\n","import {defineStyles} from '../../runtime';\n\nconst panelsStyles = defineStyles({definition: {\n component: 'ui.panels',\n parts: {\n root: {\n base: 'relative flex h-full min-h-0 w-full min-w-0',\n variants: {\n orientation: {\n horizontal: 'flex-row',\n vertical: 'flex-col',\n },\n },\n defaults: {orientation: 'horizontal'},\n },\n panel: {\n base: 'relative min-w-0 overflow-hidden',\n variants: {\n orientation: {\n horizontal: 'h-full',\n vertical: 'w-full',\n },\n divider: {\n true: '',\n false: '',\n },\n resize: {\n none: '',\n start: '',\n end: '',\n },\n },\n defaults: {orientation: 'horizontal', divider: true, resize: 'none'},\n },\n expanded: {base: 'h-full min-h-0 w-full min-w-0'},\n collapsed: {base: 'flex h-full min-h-0 w-full min-w-0 items-center justify-center overflow-hidden'},\n resizeHandle: {\n base: [\n 'absolute z-20 touch-none border-transparent outline-none',\n 'hover:border-intent-neutral-edge-hover focus-visible:ui-focus-ring-inset',\n 'data-resizing:border-intent-neutral-edge-strong',\n ],\n variants: {\n orientation: {\n horizontal: 'inset-y-0 w-panel-resize-handle cursor-col-resize',\n vertical: 'inset-x-0 h-panel-resize-handle cursor-row-resize',\n },\n edge: {\n start: '',\n end: '',\n },\n },\n defaults: {orientation: 'horizontal', edge: 'end'},\n },\n toggle: {base: 'inline-flex size-control-md items-center justify-center outline-none focus-visible:ui-focus-ring-inset'},\n toggleIcon: {base: 'size-icon-md shrink-0'},\n },\n}});\n\nexport {panelsStyles};\n","import type Alpine from 'alpinejs';\n\nimport {\n type AlpineMachine,\n createAlpineMachine,\n createResizable,\n decodeProps,\n defineAlpineData,\n focusableElements,\n isRtl,\n mergeBindings,\n observeSemanticChanges,\n resolveStyle,\n type BindingObject,\n type ResizeDirection,\n type ResizeEvent,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {cleanupManagerFor} from '@client/runtime/alpine-data';\nimport {CleanupManager} from '@client/runtime/cleanup-manager';\nimport {animateSize, type MotionHandle, type MotionTransitionSubject} from '@client/motion';\nimport {noopHandle} from '@client/motion/animate';\nimport {compositionBreakpointPixels} from '@client/runtime/composition-breakpoint';\nimport {declareMorphAttributes} from '@client/runtime/morph';\nimport {addListener, asBool, dispatch, setPresence} from '@client/utils';\nimport {\n panelSchema,\n panelToggleSchema,\n panelsSchema,\n type PanelProps,\n type PanelResizeEdge,\n type PanelToggleAction,\n type PanelToggleProps,\n type PanelsOrientation,\n type PanelsProps,\n} from './contract';\nimport {\n createPanelsMachine,\n panelsHooks,\n type PanelDescriptor,\n type PanelsContext,\n type PanelsPersistTransitionData,\n type PanelSizingTransitionData,\n type PanelTransitionData,\n} from './machine';\nimport {panelsStyles} from './styles';\n\ntype PanelsTransitionName = (typeof panelsHooks)[number]['name'];\ntype PanelsTransition<TName extends PanelsTransitionName = PanelsTransitionName> = TransitionForHook<\n Extract<(typeof panelsHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype PanelRecord = {\n panel: HTMLElement;\n expanded: HTMLElement;\n collapsed: HTMLElement | null;\n handle: HTMLElement | null;\n props: PanelProps;\n};\n\ntype PanelEventDetail = {\n panelId?: string;\n groupId?: string;\n size?: number;\n action?: PanelToggleAction;\n trigger?: HTMLElement | null;\n __panelsNotification?: boolean;\n};\n\ntype PanelTransitionGeometry = {from: number; to: number};\ntype PanelsResponsiveMode = 'stacked' | 'wide';\ntype PanelMotionTransition = MotionTransitionSubject & Readonly<{\n data: PanelTransitionData;\n}>;\ntype PanelSizingMotionTransition = MotionTransitionSubject & Readonly<{\n data: PanelSizingTransitionData;\n}>;\n\ntype PanelsController = {\n readonly id: string;\n hasPanel(panelId: string): boolean;\n perform(action: PanelToggleAction, panelId: string, trigger?: HTMLElement | null): void;\n resize(panelId: string, size: number): void;\n reset(panelId?: string): void;\n syncToggles(): void;\n};\n\n/** Public Alpine API for `ui.panels`. @public */\ninterface UiPanelsApi {\n /** Stable group id used by explicit controls, named events, and persistence. */\n readonly id: string;\n /** Current main axis along which direct panels negotiate space. */\n readonly orientation: 'horizontal' | 'vertical';\n /** Stable ids of panels whose collapsed representation is active. */\n readonly collapsed: readonly string[];\n /** User-committed pixel measures keyed by stable panel id. */\n readonly sizes: Readonly<Record<string, number>>;\n /** Returns whether a named panel is currently collapsed. */\n isCollapsed(id: string): boolean;\n /** Collapses a named collapsible panel. */\n collapse(id: string): void;\n /** Expands a named collapsed panel. */\n expand(id: string): void;\n /** Reverses the collapsed state of a named collapsible panel. */\n toggle(id: string): void;\n /** Moves an expanded bounded panel to a clamped pixel size through the sizing transition. */\n resize(id: string, size: number): void;\n /** Restores one panel or the whole group to its authored layout. */\n reset(id?: string): void;\n}\n\ntype PanelsData = AlpineMachine<PanelsContext, PanelsProps, typeof panelsHooks> & UiPanelsApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n perform(action: PanelToggleAction, panelId: string, trigger?: HTMLElement | null): void;\n syncToggles(): void;\n hasPanel(panelId: string): boolean;\n transitionPanel(transition: PanelMotionTransition): MotionHandle;\n transitionPanelSize(transition: PanelSizingMotionTransition): MotionHandle;\n};\n\nconst controllers = new Set<PanelsController>();\n\nconst eventDetail = (event: Event): PanelEventDetail => (\n event instanceof CustomEvent && event.detail && typeof event.detail === 'object'\n ? event.detail as PanelEventDetail\n : {}\n);\n\nconst registerDocumentListeners = (() => {\n let registered = false;\n return (): void => {\n if (registered || typeof document === 'undefined') return;\n const route = (action: PanelToggleAction) => (event: Event): void => {\n const detail = eventDetail(event);\n if (detail.__panelsNotification || !detail.panelId) return;\n controllers.forEach((controller) => {\n if (detail.groupId && detail.groupId !== controller.id) return;\n if (!controller.hasPanel(detail.panelId!)) return;\n controller.perform(detail.action ?? action, detail.panelId!, detail.trigger);\n });\n };\n document.addEventListener('ui:panel-collapse', route('collapse'));\n document.addEventListener('ui:panel-expand', route('expand'));\n document.addEventListener('ui:panel-toggle', route('toggle'));\n document.addEventListener('ui:panel-size', (event) => {\n const detail = eventDetail(event);\n if (detail.__panelsNotification || !detail.panelId || !Number.isFinite(detail.size)) return;\n controllers.forEach((controller) => {\n if (detail.groupId && detail.groupId !== controller.id) return;\n if (!controller.hasPanel(detail.panelId!)) return;\n controller.resize(detail.panelId!, detail.size!);\n });\n });\n document.addEventListener('ui:panels-reset', (event) => {\n const detail = eventDetail(event);\n if (detail.__panelsNotification) return;\n controllers.forEach((controller) => {\n if (detail.groupId && detail.groupId !== controller.id) return;\n if (detail.panelId && !controller.hasPanel(detail.panelId)) return;\n controller.reset(detail.panelId);\n });\n });\n registered = true;\n };\n})();\n\nconst storageKey = (id: string): string => `trellis-ui:panels:${id}:v1`;\nconst numericRecord = (value: unknown): Record<string, number> => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return {};\n return Object.fromEntries(Object.entries(value).filter((entry): entry is [string, number] => (\n typeof entry[1] === 'number' && Number.isFinite(entry[1])\n )));\n};\n\nconst UiPanels = (): TrellisAlpineComponent<PanelsData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let disconnectObserver: (() => void) | null = null;\n let resizeObserver: ResizeObserver | null = null;\n let responsiveMode: PanelsResponsiveMode = 'wide';\n let cleanup: CleanupManager;\n let resizeCleanup: CleanupManager | null = null;\n const deferredTimers = new Set<number>();\n const restoreFrames = new Set<number>();\n const resizeCleanups = new Map<HTMLElement, CleanupManager>();\n const transitionGeometry = new Map<string, PanelTransitionGeometry>();\n const rememberedFocus = new Map<string, HTMLElement>();\n const activeTriggers = new Map<string, HTMLElement>();\n\n const root = (): HTMLElement & Alpine.ElementWithXAttributes => {\n if (!rootEl) throw new Error('Panels has not been initialized.');\n return rootEl;\n };\n const owns = (element: Element): boolean => element.closest('[data-ui-panels]') === root();\n const records = (): PanelRecord[] => Array.from(root().children).flatMap((child) => {\n if (!(child instanceof HTMLElement) || !child.hasAttribute('data-ui-panel')) return [];\n const expanded = child.querySelector<HTMLElement>(':scope > [data-ui-panel-expanded]');\n if (!expanded || !owns(expanded)) return [];\n return [{\n panel: child,\n expanded,\n collapsed: child.querySelector<HTMLElement>(':scope > [data-ui-panel-collapsed]'),\n handle: child.querySelector<HTMLElement>(':scope > [data-ui-panel-resize-handle]'),\n props: decodeProps({el: child, schema: panelSchema}),\n }];\n });\n const recordFor = (id: string): PanelRecord | null => records().find((record) => record.props.id === id) ?? null;\n const context = (): Readonly<PanelsContext> => bridge.getCommittedSnapshot().context;\n const currentProps = (): Readonly<PanelsProps> => bridge.getCommittedSnapshot().props;\n const isCollapsed = (id: string): boolean => context().layout.collapsedIds.includes(id);\n const isResponsiveStacked = (): boolean => (\n currentProps().orientation === 'horizontal' && responsiveMode === 'stacked'\n );\n const effectiveOrientation = (): PanelsOrientation => (\n isResponsiveStacked() ? 'vertical' : currentProps().orientation\n );\n const renderedOrientation = (): PanelsOrientation => root().dataset.orientation === 'vertical' ? 'vertical' : 'horizontal';\n const mainSize = (element: Element): number => {\n const rect = element.getBoundingClientRect();\n return renderedOrientation() === 'horizontal' ? rect.width : rect.height;\n };\n\n const collectionState = (): PanelDescriptor[] => {\n const items = records();\n const ids = items.map(({props}) => props.id);\n if (ids.some((id) => !id)) throw new Error('Every Panel requires a stable id.');\n if (new Set(ids).size !== ids.length) throw new Error('Panel ids must be unique within a Panels group.');\n if (items.length > 0 && !items.some(({props}) => props.size === 'fill')) {\n throw new Error('A Panels group requires at least one size=\"fill\" Panel.');\n }\n if (items.some(({props}) => props.size === 'fill' && props.resize !== 'none')) {\n throw new Error('A size=\"fill\" Panel cannot own a resize handle.');\n }\n return items.map(({props}): PanelDescriptor => {\n const collapse = props.collapsible\n ? {collapsible: true as const, defaultCollapsed: props.defaultCollapsed}\n : {collapsible: false as const, defaultCollapsed: false as const};\n return props.size === 'fill'\n ? {id: props.id, kind: 'fill', ...collapse}\n : {id: props.id, kind: 'bounded', resizable: props.resize !== 'none', ...collapse};\n });\n };\n\n const cssLength = (token: string): number => {\n const probe = document.createElement('div');\n probe.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none;inset:0 auto auto 0;';\n if (renderedOrientation() === 'horizontal') probe.style.width = `var(${token})`;\n else probe.style.height = `var(${token})`;\n root().append(probe);\n const value = mainSize(probe);\n probe.remove();\n return value;\n };\n\n const boundsFor = (record: PanelRecord): {minimum: number; maximum: number} => {\n if (record.props.size === 'fill') return {minimum: 0, maximum: Number.POSITIVE_INFINITY};\n return {\n minimum: cssLength(`--spacing-panel-${record.props.size}-min`),\n maximum: cssLength(`--spacing-panel-${record.props.size}-max`),\n };\n };\n\n const clampPanelSize = (record: PanelRecord, value: number): number => {\n const {minimum, maximum} = boundsFor(record);\n return Math.min(maximum, Math.max(minimum, value));\n };\n\n const initialContext = (): PanelsContext => {\n const collection = collectionState();\n return {\n collection,\n layout: {\n collapsedIds: collection.filter((descriptor) => descriptor.defaultCollapsed).map(({id}) => id),\n committedSizes: {},\n },\n change: {openingIds: [], closingIds: []},\n resize: {activeId: '', initialSize: null, previewSize: null},\n sizing: {changes: []},\n };\n };\n\n const setMainConstraints = (element: HTMLElement, minimum: string, maximum: string): void => {\n if (renderedOrientation() === 'horizontal') {\n element.style.minWidth = minimum;\n element.style.maxWidth = maximum;\n element.style.minHeight = '';\n element.style.maxHeight = '';\n } else {\n element.style.minHeight = minimum;\n element.style.maxHeight = maximum;\n element.style.minWidth = '';\n element.style.maxWidth = '';\n }\n };\n\n const clearGeometry = (element: HTMLElement): void => {\n element.style.flex = '';\n element.style.minWidth = '';\n element.style.maxWidth = '';\n element.style.minHeight = '';\n element.style.maxHeight = '';\n };\n\n const applyGeometry = (record: PanelRecord, transitionSize?: number): void => {\n if (isResponsiveStacked()) {\n clearGeometry(record.panel);\n return;\n }\n if (transitionSize !== undefined) {\n record.panel.style.flex = `0 0 ${transitionSize}px`;\n setMainConstraints(record.panel, '0px', 'none');\n return;\n }\n if (isCollapsed(record.props.id)) {\n if (context().collection.find(({id}) => id === record.props.id)?.defaultCollapsed) {\n clearGeometry(record.panel);\n return;\n }\n const collapsedSize = record.collapsed ? 'var(--spacing-panel-collapsed)' : '0px';\n record.panel.style.flex = `0 0 ${collapsedSize}`;\n setMainConstraints(record.panel, collapsedSize, collapsedSize);\n return;\n }\n if (record.props.size === 'fill') {\n clearGeometry(record.panel);\n return;\n }\n const committed = context().resize.activeId === record.props.id\n ? context().resize.previewSize\n : context().layout.committedSizes[record.props.id];\n if (committed === undefined || committed === null) {\n clearGeometry(record.panel);\n return;\n }\n const basis = `${clampPanelSize(record, committed)}px`;\n record.panel.style.flex = `0 1 ${basis}`;\n setMainConstraints(\n record.panel,\n `var(--spacing-panel-${record.props.size}-min)`,\n `var(--spacing-panel-${record.props.size}-max)`,\n );\n };\n\n const setInert = (element: HTMLElement, inert: boolean): void => {\n element.toggleAttribute('inert', inert);\n element.setAttribute('aria-hidden', inert ? 'true' : 'false');\n };\n\n const syncPanel = (record: PanelRecord): void => {\n const props = currentProps();\n const orientation = effectiveOrientation();\n const collapsed = isCollapsed(record.props.id);\n const opening = bridge.hasTag('changing') && context().change.openingIds.includes(record.props.id);\n const closing = bridge.hasTag('changing') && context().change.closingIds.includes(record.props.id);\n const finalCollapsed = collapsed && !closing;\n const showExpanded = !finalCollapsed;\n const showCollapsed = collapsed && !closing && !opening && record.collapsed !== null;\n\n record.panel.dataset.state = collapsed ? 'collapsed' : 'expanded';\n record.panel.dataset.orientation = orientation;\n record.panel.dataset.size = record.props.size;\n record.panel.dataset.resize = record.props.resize;\n record.panel.className = resolveStyle({\n part: panelsStyles.parts.panel,\n props: {orientation, divider: props.divider, resize: record.props.resize},\n className: record.props.class,\n });\n setPresence({el: record.panel, attr: 'data-collapsible', present: record.props.collapsible});\n setPresence({el: record.panel, attr: 'data-resizing', present: context().resize.activeId === record.props.id});\n applyGeometry(record);\n\n record.expanded.hidden = !showExpanded;\n setInert(record.expanded, !showExpanded);\n if (record.collapsed) {\n record.collapsed.hidden = !showCollapsed;\n setInert(record.collapsed, !showCollapsed);\n }\n if (record.handle) {\n const disabled = isResponsiveStacked()\n || collapsed\n || record.props.size === 'fill'\n || record.props.resize === 'none';\n record.handle.dataset.orientation = orientation;\n record.handle.dataset.resizeEdge = record.props.resize;\n record.handle.setAttribute('aria-label', `Resize ${record.props.id} panel`);\n record.handle.toggleAttribute('data-resize-disabled', disabled);\n record.handle.hidden = isResponsiveStacked();\n record.handle.className = resolveStyle({\n part: panelsStyles.parts.resizeHandle,\n props: {orientation, edge: record.props.resize},\n className: record.handle.dataset.class ?? '',\n });\n }\n };\n\n const syncDividers = (items: PanelRecord[]): void => {\n items.forEach((record, index) => {\n const next = items[index + 1];\n const interactive = record.props.resize === 'end' || next?.props.resize === 'start';\n declareMorphAttributes(record.panel, 'data-divider');\n setPresence({\n el: record.panel,\n attr: 'data-divider',\n present: currentProps().divider && next !== undefined && !interactive,\n });\n });\n };\n\n const targetForToggle = (toggle: HTMLElement): {record: PanelRecord; controller: PanelsController} | null => {\n const explicit = toggle.dataset.target || '';\n if (!explicit) {\n const panel = toggle.closest<HTMLElement>('[data-ui-panel]');\n const group = panel?.closest<HTMLElement>('[data-ui-panels]');\n const controller = [...controllers].find((item) => item.id === group?.id);\n const record = panel && controller === component ? recordFor(panel.id) : null;\n return record && controller ? {record, controller} : null;\n }\n const groupId = toggle.dataset.groupId || toggle.closest<HTMLElement>('[data-ui-panels]')?.id;\n const candidates = [...controllers].filter((item) => !groupId || item.id === groupId);\n const controller = candidates.find((item) => item.hasPanel(explicit));\n const record = controller === component ? recordFor(explicit) : null;\n return record && controller ? {record, controller} : null;\n };\n\n const syncToggles = (): void => {\n document.querySelectorAll<HTMLElement>('[data-ui-panel-toggle]').forEach((toggle) => {\n const target = targetForToggle(toggle);\n if (!target || target.controller !== component) return;\n const collapsed = isCollapsed(target.record.props.id);\n toggle.dataset.target = target.record.props.id;\n toggle.dataset.groupId = currentProps().id;\n toggle.dataset.state = collapsed ? 'collapsed' : 'expanded';\n toggle.setAttribute('aria-controls', target.record.panel.id);\n toggle.setAttribute('aria-expanded', collapsed ? 'false' : 'true');\n toggle.toggleAttribute('disabled', !target.record.props.collapsible);\n });\n };\n\n const syncAll = (): void => {\n const props = currentProps();\n const orientation = effectiveOrientation();\n root().dataset.responsiveMode = responsiveMode;\n root().dataset.layoutOrientation = orientation;\n root().style.flexDirection = orientation === 'horizontal' ? 'row' : 'column';\n root().className = resolveStyle({\n part: panelsStyles.parts.root,\n props: {...props, orientation},\n className: props.class,\n });\n setPresence({el: root(), attr: 'data-resizing', present: bridge.hasTag('resizing')});\n setPresence({el: root(), attr: 'data-transitioning', present: bridge.hasTag('transitioning')});\n const items = records();\n items.forEach(syncPanel);\n syncDividers(items);\n syncToggles();\n };\n\n const focusExpanded = (record: PanelRecord, force = false): void => {\n const active = document.activeElement;\n if (!force && (!(active instanceof HTMLElement) || !record.collapsed?.contains(active))) return;\n const remembered = rememberedFocus.get(record.props.id);\n if (remembered?.isConnected && record.expanded.contains(remembered)) remembered.focus({preventScroll: true});\n else {\n record.expanded.tabIndex = -1;\n record.expanded.focus({preventScroll: true});\n }\n };\n\n const focusCollapsed = (record: PanelRecord, force = false): void => {\n const active = document.activeElement;\n if (!force && (!(active instanceof HTMLElement) || !record.expanded.contains(active))) return;\n const collapsedTarget = record.collapsed ? focusableElements(record.collapsed)[0] : undefined;\n const external = activeTriggers.get(record.props.id);\n const fallback = external?.isConnected && !record.panel.contains(external) ? external : undefined;\n if (collapsedTarget) collapsedTarget.focus({preventScroll: true});\n else if (fallback) fallback.focus({preventScroll: true});\n else {\n root().tabIndex = -1;\n root().focus({preventScroll: true});\n }\n };\n\n const prepareChange = (): void => {\n const changed = [...context().change.openingIds, ...context().change.closingIds];\n const openingNeedsFocus = new Set(context().change.openingIds.filter((id) => {\n const record = recordFor(id);\n const active = document.activeElement;\n return record !== null\n && record.collapsed !== null\n && active instanceof HTMLElement\n && record.collapsed.contains(active);\n }));\n const from = new Map(changed.flatMap((id) => {\n const record = recordFor(id);\n if (!record) return [];\n if (context().change.closingIds.includes(id)) {\n const active = document.activeElement;\n if (active instanceof HTMLElement && record.expanded.contains(active)) rememberedFocus.set(id, active);\n }\n return [[id, mainSize(record.panel)] as const];\n }));\n syncAll();\n context().change.openingIds.forEach((id) => {\n const record = recordFor(id);\n if (record) focusExpanded(record, openingNeedsFocus.has(id));\n });\n changed.forEach((id) => {\n const record = recordFor(id);\n const start = from.get(id);\n if (!record || start === undefined) return;\n const target = mainSize(record.panel);\n transitionGeometry.set(id, {from: start, to: target});\n applyGeometry(record, start);\n });\n };\n\n const finishChange = (): void => {\n const opening = [...context().change.openingIds];\n const closing = [...context().change.closingIds];\n const closingNeedsFocus = new Set(closing.filter((id) => {\n const record = recordFor(id);\n const active = document.activeElement;\n return record !== null && active instanceof HTMLElement && record.expanded.contains(active);\n }));\n records().forEach((record) => applyGeometry(record));\n syncAll();\n closing.forEach((id) => {\n const record = recordFor(id);\n if (record) focusCollapsed(record, closingNeedsFocus.has(id));\n });\n opening.forEach((panelId) => emitPanelEvent('ui:panel-expand', panelId));\n closing.forEach((panelId) => emitPanelEvent('ui:panel-collapse', panelId));\n [...opening, ...closing].forEach((id) => transitionGeometry.delete(id));\n };\n\n const emitPanelEvent = (name: string, panelId: string, detail: Record<string, unknown> = {}): void => {\n dispatch({el: root(), name, detail: {\n groupId: currentProps().id,\n panelId,\n __panelsNotification: true,\n ...detail,\n }});\n };\n\n const persist = (): void => {\n const layout = context().layout;\n if (currentProps().persist) {\n try {\n localStorage.setItem(storageKey(currentProps().id), JSON.stringify({\n collapsed: layout.collapsedIds,\n sizes: layout.committedSizes,\n }));\n } catch {\n // Persistence is optional; layout state remains committed in memory.\n }\n }\n dispatch({el: root(), name: 'ui:panels-layout-change', detail: {\n groupId: currentProps().id,\n collapsed: [...layout.collapsedIds],\n sizes: {...layout.committedSizes},\n __panelsNotification: true,\n }});\n };\n\n const runWhenStable = (callback: () => void): void => {\n if (!rootEl) return;\n if (bridge.hasTag('stable')) {\n callback();\n return;\n }\n const timer = window.setTimeout(() => {\n deferredTimers.delete(timer);\n runWhenStable(callback);\n }, 16);\n deferredTimers.add(timer);\n };\n\n const reconcileCollapsedState = (\n ids: readonly string[],\n wantsCollapsed: (id: string) => boolean,\n ): void => {\n const next = ids.find((id) => wantsCollapsed(id) !== isCollapsed(id));\n if (!next) return;\n bridge.send({type: wantsCollapsed(next) ? 'COLLAPSE' : 'EXPAND', panelId: next});\n runWhenStable(() => reconcileCollapsedState(ids, wantsCollapsed));\n };\n\n const restorePersistedLayout = (): void => {\n if (!currentProps().persist) return;\n let stored: {collapsed?: unknown; sizes?: unknown};\n try {\n stored = JSON.parse(localStorage.getItem(storageKey(currentProps().id)) ?? 'null') as {\n collapsed?: unknown;\n sizes?: unknown;\n };\n } catch {\n return;\n }\n if (typeof stored !== 'object' || stored === null) return;\n\n const collection = collectionState();\n const collapsible = collection.filter((descriptor) => descriptor.collapsible);\n const desiredCollapsed = new Set(\n (Array.isArray(stored.collapsed) ? stored.collapsed : [])\n .filter((id): id is string => (\n typeof id === 'string' && collapsible.some((descriptor) => descriptor.id === id)\n )),\n );\n const desiredSizes = numericRecord(stored.sizes);\n\n const restoreCollapsedState = (): void => {\n reconcileCollapsedState(collapsible.map(({id}) => id), (id) => desiredCollapsed.has(id));\n };\n\n const restoreSizes = (): void => {\n const changes = collection.filter((descriptor) => descriptor.kind === 'bounded')\n .flatMap(({id}): PanelSizingTransitionData[] => {\n const record = recordFor(id);\n const storedSize = desiredSizes[id];\n if (!record || storedSize === undefined) return [];\n const from = mainSize(record.panel);\n const to = clampPanelSize(record, storedSize);\n return Math.abs(from - to) < 0.5 ? [] : [{panelId: id, from, to}];\n });\n if (isResponsiveStacked()) {\n if (changes.length > 0) bridge.send({type: 'RESTORE_HIDDEN_SIZES', changes});\n restoreCollapsedState();\n return;\n }\n const hidden = changes.filter(({panelId: id}) => isCollapsed(id));\n const visible = changes.filter(({panelId: id}) => !isCollapsed(id));\n if (hidden.length > 0) bridge.send({type: 'RESTORE_HIDDEN_SIZES', changes: hidden});\n if (visible.length > 0) {\n bridge.send({type: 'SIZE', changes: visible});\n runWhenStable(restoreCollapsedState);\n return;\n }\n restoreCollapsedState();\n };\n\n const opening = collapsible.map(({id}) => id)\n .filter((id) => isCollapsed(id) && !desiredCollapsed.has(id));\n if (opening.length > 0) {\n reconcileCollapsedState(opening, () => false);\n runWhenStable(restoreSizes);\n } else restoreSizes();\n };\n\n const schedulePersistedRestore = (): void => {\n const first = requestAnimationFrame(() => {\n restoreFrames.delete(first);\n const second = requestAnimationFrame(() => {\n restoreFrames.delete(second);\n restorePersistedLayout();\n });\n restoreFrames.add(second);\n });\n restoreFrames.add(first);\n };\n\n const resetLayout = (panelId?: string): void => {\n const collection = collectionState();\n const targets = panelId ? collection.filter(({id}) => id === panelId) : collection;\n if (targets.length === 0) return;\n\n const restoreCollapsedState = (): void => {\n reconcileCollapsedState(\n targets.filter((descriptor) => descriptor.collapsible).map(({id}) => id),\n (id) => collection.find((descriptor) => descriptor.id === id)?.defaultCollapsed === true,\n );\n };\n\n const sizedIds = targets.filter((descriptor) => descriptor.kind === 'bounded')\n .map(({id}) => id)\n .filter((id) => Object.hasOwn(context().layout.committedSizes, id));\n if (isResponsiveStacked()) {\n if (sizedIds.length > 0) {\n bridge.send({type: 'RESET_HIDDEN_SIZES', ids: sizedIds});\n runWhenStable(restoreCollapsedState);\n } else restoreCollapsedState();\n return;\n }\n const hiddenIds = sizedIds.filter(isCollapsed);\n if (hiddenIds.length > 0) bridge.send({type: 'RESET_HIDDEN_SIZES', ids: hiddenIds});\n\n const visible = sizedIds.filter((id) => !isCollapsed(id)).flatMap((id): PanelSizingTransitionData[] => {\n const record = recordFor(id);\n if (!record || record.props.size === 'fill') return [];\n return [{\n panelId: id,\n from: mainSize(record.panel),\n to: cssLength(`--spacing-panel-${record.props.size}`),\n reset: true,\n }];\n });\n if (visible.length > 0) {\n bridge.send({type: 'SIZE', changes: visible});\n runWhenStable(restoreCollapsedState);\n return;\n }\n restoreCollapsedState();\n };\n\n const prepareSizing = (): void => {\n context().sizing.changes.forEach(({panelId: id, from}) => {\n const record = recordFor(id);\n if (record) applyGeometry(record, from);\n });\n };\n\n const finishSizing = (): void => {\n context().sizing.changes.forEach(({panelId: id, to}) => {\n const record = recordFor(id);\n if (!record) return;\n applyGeometry(record);\n emitPanelEvent('ui:panel-resize-end', id, {size: to});\n });\n syncAll();\n };\n\n const resizeDirection = (edge: PanelResizeEdge): ResizeDirection => {\n if (effectiveOrientation() === 'vertical') return edge === 'start' ? 'negative' : 'positive';\n const rtl = isRtl({el: root()});\n return edge === 'start' ? rtl ? 'positive' : 'negative' : rtl ? 'negative' : 'positive';\n };\n\n const initializeResizeHandles = (): void => {\n const group = resizeCleanup;\n if (!group) return;\n const currentPanels = new Set(records().map(({panel}) => panel));\n resizeCleanups.forEach((owner, panel) => {\n if (currentPanels.has(panel)) return;\n owner.run();\n resizeCleanups.delete(panel);\n });\n records().forEach((record) => {\n if (resizeCleanups.has(record.panel) || !record.handle || record.props.size === 'fill' || record.props.resize === 'none') return;\n const bounds = boundsFor(record);\n const handleSize = cssLength('--spacing-panel-resize-handle');\n const coarseHandleSize = cssLength('--spacing-panel-resize-handle-coarse');\n const owner = new CleanupManager();\n group.addChild(owner);\n owner.add(createResizable({\n element: record.panel,\n handle: record.handle,\n axis: effectiveOrientation() === 'horizontal' ? 'x' : 'y',\n direction: resizeDirection(record.props.resize),\n min: bounds.minimum,\n max: bounds.maximum,\n mode: 'onChange',\n hitArea: handleSize,\n coarseHitArea: coarseHandleSize,\n disabled: () => isResponsiveStacked() || isCollapsed(record.props.id),\n onStart: (event) => bridge.send({type: 'RESIZE_START', panelId: record.props.id, size: resizeValue(event)}),\n onResize: (event) => bridge.send({type: 'RESIZE', panelId: record.props.id, size: resizeValue(event)}),\n onEnd: (event) => bridge.send({type: 'RESIZE_END', panelId: record.props.id, size: resizeValue(event)}),\n }));\n resizeCleanups.set(record.panel, owner);\n });\n };\n\n const reinitializeResizeHandles = (): void => {\n resizeCleanup?.run();\n resizeCleanups.clear();\n resizeCleanup = new CleanupManager();\n cleanup.addChild(resizeCleanup);\n initializeResizeHandles();\n };\n\n const resizeValue = (event: ResizeEvent): number => effectiveOrientation() === 'horizontal'\n ? event.previewWidth\n : event.previewHeight;\n\n const reconcileResponsiveMode = (width: number): void => {\n const next: PanelsResponsiveMode = currentProps().orientation === 'horizontal'\n && width < compositionBreakpointPixels(root(), 'sm')\n ? 'stacked'\n : 'wide';\n if (next === responsiveMode) return;\n responsiveMode = next;\n syncAll();\n reinitializeResizeHandles();\n };\n\n const bridge = createAlpineMachine({\n schema: panelsSchema,\n hooks: panelsHooks,\n resolveTransitionElement: ({data}) => {\n const panelId = (data as PanelTransitionData | undefined)?.panelId;\n return panelId ? recordFor(panelId)?.panel ?? null : root();\n },\n createMachine: ({props}) => createPanelsMachine({\n props,\n context: initialContext(),\n effects: {\n prepareChange,\n finishChange,\n sync: () => {\n syncAll();\n reinitializeResizeHandles();\n },\n beginResize: () => {\n syncAll();\n },\n previewResize: () => {\n const id = context().resize.activeId;\n const record = recordFor(id);\n if (record) applyGeometry(record);\n const size = context().resize.previewSize;\n if (size !== null) emitPanelEvent('ui:panel-resize', id, {size});\n },\n commitResize: (scope) => {\n syncAll();\n const id = typeof scope.event.panelId === 'string' ? scope.event.panelId : '';\n const size = context().layout.committedSizes[id];\n if (id && size !== undefined) emitPanelEvent('ui:panel-resize-end', id, {size});\n },\n cancelResize: syncAll,\n prepareSizing,\n finishSizing,\n persist,\n },\n }),\n });\n\n const sendPanelsChanged = (): void => {\n const collection = collectionState();\n bridge.send({type: 'PANELS_CHANGED', collection});\n initializeResizeHandles();\n };\n\n const setupObserver = (): void => {\n disconnectObserver = observeSemanticChanges({\n targets: root(),\n read: collectionState,\n onChange: sendPanelsChanged,\n observer: {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\n 'id', 'data-size', 'data-resize', 'data-collapsible', 'data-default-collapsed',\n ],\n },\n });\n };\n\n let component!: TrellisAlpineComponent<PanelsData>;\n component = {\n ...bridge,\n get id() { return root().id || currentProps().id; },\n get orientation() { return effectiveOrientation(); },\n get collapsed() { return [...context().layout.collapsedIds]; },\n get sizes() { return {...context().layout.committedSizes}; },\n get root(): BindingObject {\n const props = this.snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: panelsStyles.parts.root, props, className: props.class}),\n {'data-ui-panels': ''},\n ]});\n },\n init(): void {\n cleanup = cleanupManagerFor(this);\n resizeCleanup = new CleanupManager();\n cleanup.addChild(resizeCleanup);\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n root().id ||= currentProps().id;\n responsiveMode = currentProps().orientation === 'horizontal'\n && root().getBoundingClientRect().width < compositionBreakpointPixels(root(), 'sm')\n ? 'stacked'\n : 'wide';\n controllers.add(component);\n registerDocumentListeners();\n syncAll();\n initializeResizeHandles();\n resizeObserver = new ResizeObserver((entries) => {\n reconcileResponsiveMode(entries[0]?.contentRect.width ?? root().clientWidth);\n });\n resizeObserver.observe(root());\n setupObserver();\n if (currentProps().persist) schedulePersistedRestore();\n addListener({target: root(), event: 'keydown', handler: () => syncToggles(), cleanup});\n },\n destroy(): void {\n controllers.delete(component);\n disconnectObserver?.();\n disconnectObserver = null;\n resizeObserver?.disconnect();\n resizeObserver = null;\n resizeCleanups.clear();\n resizeCleanup = null;\n deferredTimers.forEach((timer) => window.clearTimeout(timer));\n deferredTimers.clear();\n restoreFrames.forEach((frame) => cancelAnimationFrame(frame));\n restoreFrames.clear();\n bridge.disconnect();\n rootEl = null;\n },\n transitionPanel(transition: PanelMotionTransition): MotionHandle {\n const id = transition.data.panelId;\n const record = recordFor(id);\n const geometry = transitionGeometry.get(id);\n if (!record || !geometry || geometry.from === geometry.to) {\n if (record) applyGeometry(record, geometry?.to);\n return noopHandle();\n }\n return animateSize(transition, {\n target: record.panel,\n keyframes: {flexBasis: [`${geometry.from}px`, `${geometry.to}px`]},\n role: 'layout',\n cleanup: () => applyGeometry(record),\n });\n },\n transitionPanelSize(transition: PanelSizingMotionTransition): MotionHandle {\n const {panelId: id, from, to} = transition.data;\n const record = recordFor(id);\n if (!record || from === to) {\n if (record) applyGeometry(record);\n return noopHandle();\n }\n return animateSize(transition, {\n target: record.panel,\n keyframes: {flexBasis: [`${from}px`, `${to}px`]},\n role: 'layoutQuick',\n cleanup: () => applyGeometry(record),\n });\n },\n hasPanel(id: string): boolean { return recordFor(id) !== null; },\n isCollapsed,\n collapse(id: string): void { bridge.send({type: 'COLLAPSE', panelId: id}); },\n expand(id: string): void { bridge.send({type: 'EXPAND', panelId: id}); },\n toggle(id: string): void { bridge.send({type: 'TOGGLE', panelId: id}); },\n resize(id: string, size: number): void {\n const record = recordFor(id);\n if (\n isResponsiveStacked()\n || !record\n || record.props.size === 'fill'\n || isCollapsed(id)\n || !Number.isFinite(size)\n ) return;\n const from = mainSize(record.panel);\n const to = clampPanelSize(record, size);\n if (Math.abs(from - to) < 0.5) return;\n bridge.send({type: 'SIZE', panelId: id, from, to});\n },\n reset(id?: string): void { resetLayout(id); },\n perform(action: PanelToggleAction, id: string, trigger?: HTMLElement | null): void {\n if (trigger) activeTriggers.set(id, trigger);\n ({collapse: this.collapse, expand: this.expand, toggle: this.toggle})[action](id);\n },\n syncToggles,\n };\n\n return component;\n};\n\nconst UiPanelToggle = (): TrellisAlpineComponent<{\n props: PanelToggleProps;\n readonly root: BindingObject;\n trigger(event?: Event): void;\n}> => {\n let props = {} as PanelToggleProps;\n return {\n get props() { return props; },\n init() { props = decodeProps({el: this.$el, schema: panelToggleSchema}); },\n destroy() {},\n get root() {\n return mergeBindings({inputs: [\n resolveStyle({part: panelsStyles.parts.toggle, props: {}, className: props.class}),\n {\n 'data-ui-panel-toggle': '',\n ':data-target': () => props.target || undefined,\n ':data-action': () => props.action,\n '@click': (event: Event) => this.trigger(event),\n },\n ]});\n },\n trigger(event?: Event) {\n event?.preventDefault();\n const button = this.$el as HTMLElement;\n const closestPanel = button.closest<HTMLElement>('[data-ui-panel]');\n const closestGroup = closestPanel?.closest<HTMLElement>('[data-ui-panels]');\n const target = props.target || closestPanel?.id || '';\n if (!target) return;\n document.dispatchEvent(new CustomEvent('ui:panel-toggle', {detail: {\n panelId: target,\n groupId: closestGroup?.id,\n action: props.action,\n trigger: button,\n }}));\n },\n };\n};\n\nconst registerPanels = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiPanels', UiPanels)(AlpineInstance);\n defineAlpineData('UiPanelToggle', UiPanelToggle)(AlpineInstance);\n};\n\nexport {registerPanels, UiPanels, UiPanelToggle};\nexport type {\n PanelEventDetail,\n PanelsData,\n PanelsPersistTransitionData,\n PanelSizingTransitionData,\n PanelsTransition,\n UiPanelsApi,\n};\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 {registerResizableCapability} from '../../capabilities/resizable';\nimport {registerPanels as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerPanels = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerResizableCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerPanels};\nexport default registerPanels;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,t}from"./dom-DiTFTWeR.js";import{t as n}from"./morph-Cq3V_23_.js";import{c as r,f as i,n as a,s as o}from"./codecs-CQ7olTJL.js";import{t as s}from"./alpine-machine-CE2UN4Qu.js";import{n as c,t as l}from"./alpine-data-Dvc_bXq6.js";import{t as u}from"./machine-CNnHDbyo.js";import{n as d}from"./props-change-2xfsIAEN.js";import{t as f}from"./focus-scope-DtaPVNl5.js";var p={prefix:i.trim,minForms:r.min(0).step(1).default(0),maxForms:o(null),disabled:a},m=e=>d(e.event)?.props??e.props,h=({props:e,context:t,effects:n})=>u({initial:`ready`,states:{ready:{tags:[`ready`],on:{ADD:[{guard:`canIncrease`,effects:`add`},{guard:`atMax`,effects:`maxLimit`}],REMOVE:[{guard:`canRemove`,effects:`remove`},{guard:`atMin`,effects:`minLimit`}],RESTORE:[{guard:`canIncrease`,effects:`restore`},{guard:`atMax`,effects:`maxLimit`}],REFRESH:{effects:`refresh`},DOM_INVALIDATED:{effects:`refresh`},RECONCILED:{reduce:`reconcile`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`refresh`}}}}},{context:t,props:e,reducers:{reconcile:e=>({context:{activeCount:typeof e.event.activeCount==`number`?e.event.activeCount:e.context.activeCount}}),replaceProps:e=>({props:m(e)})},guards:{canIncrease:({context:e,props:t})=>!t.disabled&&(t.maxForms===null||e.activeCount<t.maxForms),atMax:({context:e,props:t})=>!t.disabled&&t.maxForms!==null&&e.activeCount>=t.maxForms,canRemove:({context:e,props:t})=>!t.disabled&&e.activeCount>t.minForms,atMin:({context:e,props:t})=>!t.disabled&&e.activeCount<=t.minForms},effects:n}),g=[],_=`[data-ui-formset-item]`,v=[`data-can-add`,`data-can-remove`,`data-active-count`],y=r=>{let i=null,a=null,o=null,c=null,u=null,d=!1,m,y=0,b=()=>{if(!i)throw Error(`Formset has not been initialized.`);return i},x=()=>{if(!a)throw Error(`Formset template is unavailable.`);return a},S=()=>{if(!o)throw Error(`Formset container is unavailable.`);return o},C=()=>{if(!c)throw Error(`Formset management inputs are unavailable.`);return c},w=()=>q.getCommittedSnapshot().props,T=()=>q.getCommittedSnapshot().context,E=e=>e.closest(`[data-ui-formset]`)===b(),D=e=>Array.from(b().querySelectorAll(e)).find(E)??null,O=()=>{if(a=D(`template[data-ui-formset-template]`),o=D(`[data-ui-formset-container]`),!a||!o)throw Error(`ui.formset requires one template and live item container.`)},k=e=>Array.from(b().querySelectorAll(`input[name]`)).find(t=>t.name===e&&E(t))??null,A=e=>{let t=Number(e.dataset.formIndex);return Number.isInteger(t)&&t>=0?t:null},j=()=>Array.from(S().querySelectorAll(_)).filter(e=>E(e)&&e.closest(_)===e),M=(e,t=w().prefix)=>{let n=A(e);if(n===null)return null;let r=`${t}-${n}-DELETE`;return Array.from(e.querySelectorAll(`input[name]`)).find(e=>e.name===r&&e.type===`checkbox`)??null},N=()=>{let e=Array.from(x().content.querySelectorAll(_)).filter(e=>!e.parentElement?.closest(_));if(e.length!==1)throw Error(`ui.formset empty slot must contain exactly one ui.formset.item.`);return e[0]},P=e=>{let t={total:`${e}-TOTAL_FORMS`,initial:`${e}-INITIAL_FORMS`,min:`${e}-MIN_NUM_FORMS`,max:`${e}-MAX_NUM_FORMS`},n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,k(t)]));if(!n.total||!n.initial||!n.min||!n.max)throw Error(`ui.formset requires a complete Django management form.`);return n},F=e=>{if(O(),!e.prefix||e.prefix.includes(`__prefix__`))throw Error(`ui.formset requires a safe, non-empty prefix.`);if(e.maxForms!==null&&(!Number.isInteger(e.maxForms)||e.maxForms<0))throw Error(`ui.formset maxForms must be null or a non-negative integer.`);let t=N();if(t.dataset.formIndex!==`__prefix__`)throw Error(`ui.formset empty item requires the __prefix__ form index.`);let n=`${e.prefix}-__prefix__-DELETE`;if(!Array.from(t.querySelectorAll(`input[name]`)).find(e=>e.name===n&&e.type===`checkbox`))throw Error(`ui.formset empty item requires a Boolean DELETE input.`);let r=P(e.prefix);if(Object.values(r).map(e=>Number(e.value)).some(e=>!Number.isInteger(e)||e<0))throw Error(`ui.formset management counts must be non-negative integers.`);let i=Number(r.total.value),a=new Set,o=0;for(let t of j()){let n=A(t);if(n===null||a.has(n)||n>=i)throw Error(`ui.formset items require unique indexes below TOTAL_FORMS.`);a.add(n);let r=M(t,e.prefix);if(!r)throw Error(`ui.formset requires a Boolean DELETE input for every row.`);r.checked||(o+=1)}return c=r,{activeCount:o}},I=e=>{let t=M(e);if(!t)throw Error(`ui.formset requires a Boolean DELETE input for every row.`);t.setAttribute(`data-ui-formset-delete`,``);let n=t.checked;e.dataset.formState=n?`deleted`:`active`,e.hidden=n},L=()=>{let e=w();c=P(e.prefix);let t=j();t.forEach(I);let n=t.filter(e=>e.dataset.formState!==`deleted`).length;q.send({type:`RECONCILED`,activeCount:n});let r=!e.disabled&&(e.maxForms===null||n<e.maxForms),i=!e.disabled&&n>e.minForms;return b().dataset.activeCount=String(n),b().dataset.canAdd=String(r),b().dataset.canRemove=String(i),b().querySelectorAll(`[data-ui-formset-empty]`).forEach(e=>{E(e)&&(e.hidden=n!==0)}),n},R=e=>{if(b().dataset.announce===`false`)return;let t=D(`[data-ui-formset-status]`);t&&(t.textContent=e)},z=(t,n,r,i)=>{e({el:b(),name:`ui:formset-${t}`,detail:{index:n,item:r,activeCount:i},composed:!0}),e({el:b(),name:`ui:formset-change`,detail:{operation:t,index:n,activeCount:i},composed:!0})},B=(e,t)=>{[e,...Array.from(e.querySelectorAll(`*`))].forEach(e=>Array.from(e.attributes).forEach(n=>{n.value.includes(`__prefix__`)&&e.setAttribute(n.name,n.value.replaceAll(`__prefix__`,String(t)))}))},V=e=>{let t=b().dataset.focus,n=null;if(t)try{n=e.matches(t)?e:e.querySelector(t)}catch{n=null}n??=e.querySelector(f),n&&!n.hasAttribute(`disabled`)&&n.focus()},H=e=>{if(e instanceof HTMLElement){let t=e.matches(_)?e:e.closest(_);return t&&j().includes(t)?t:null}if(typeof e==`number`&&Number.isInteger(e))return j().find(t=>A(t)===e)??null;let t=b().ownerDocument.activeElement;return t instanceof HTMLElement?H(t):null},U=e=>{let t=j(),n=t.indexOf(e),r=t.filter(e=>e.dataset.formState!==`deleted`),i=r.find(e=>t.indexOf(e)>n),a=[...r].reverse().find(e=>t.indexOf(e)<n),o=i??a;if(o)return o.querySelector(f);let s=D(`[data-ui-formset-add]`);return s?s.matches(f)?s:s.querySelector(f):null},W=e=>{let t=new Set((b().getAttribute(`data-ui-preserve-attr`)??``).split(/\s+/).filter(Boolean));v.forEach(n=>e?t.add(n):t.delete(n)),t.size>0?b().setAttribute(n,[...t].join(` `)):b().removeAttribute(n)},G=e=>{let t=e.detail?.source;return t instanceof Element&&(t.contains(b())||b().contains(t))},K,q=s({schema:p,hooks:g,createMachine:({props:t})=>h({props:t,context:F(t),effects:{add(){d=!1,u=null;let e=Number(C().total.value),t=N().cloneNode(!0);B(t,e);let n=M(t);if(!n)throw Error(`ui.formset empty item requires a Boolean DELETE input.`);n.checked=!1,I(t),S().append(t);try{r.initTree(t)}catch(e){throw r.destroyTree(t),t.remove(),e}C().total.value=String(e+1);let i=L();V(t),u=t,d=!0,R(`Row ${e+1} added.`),z(`add`,e,t,i)},remove(e){d=!1;let t=e.event.item;if(!(t instanceof HTMLElement)||!j().includes(t))return;let n=M(t),r=A(t);if(!n||r===null||n.checked)return;let i=U(t);n.checked=!0,I(t);let a=L();i?.focus(),d=!0,R(`Row ${r+1} removed.`),z(`remove`,r,t,a)},restore(e){d=!1;let t=e.event.item;if(!(t instanceof HTMLElement)||!j().includes(t))return;let n=M(t),r=A(t);if(!n||r===null||!n.checked)return;n.checked=!1,I(t);let i=L();d=!0,z(`restore`,r,t,i)},refresh(){F(w()),L()},maxLimit(){e({el:b(),name:`ui:formset-limit`,detail:{limit:`max`,activeCount:T().activeCount},composed:!0})},minLimit(){e({el:b(),name:`ui:formset-limit`,detail:{limit:`min`,activeCount:T().activeCount},composed:!0})}}})});return K={...q,get activeCount(){return this.snapshot.current?.context.activeCount??0},get canAdd(){let e=this.snapshot.current;return!!(e&&!e.props.disabled&&(e.props.maxForms===null||e.context.activeCount<e.props.maxForms))},get canRemove(){let e=this.snapshot.current;return!!(e&&!e.props.disabled&&e.context.activeCount>e.props.minForms)},init(){m=l(this),i=this.$el,q.connect(this.$el,this.snapshot),L(),t({target:b().ownerDocument,event:`ui:request:start`,cleanup:m,handler:e=>{G(e)&&(y+=1,W(!0))}}),t({target:b().ownerDocument,event:`ui:request:finish`,cleanup:m,handler:e=>{G(e)&&(y=Math.max(0,y-1),y===0&&W(!1),q.send(`REFRESH`))}})},destroy(){y>0&&W(!1),y=0,q.disconnect(),c=null,o=null,a=null,i=null,u=null},add(){return u=null,q.send(`ADD`),u},remove(e){let t=H(e);return d=!1,!t||t.dataset.formState===`deleted`?!1:(q.send({type:`REMOVE`,item:t}),d)},restore(e){let t=H(e);return d=!1,!t||t.dataset.formState!==`deleted`?!1:(q.send({type:`RESTORE`,item:t}),d)},refresh(){q.send(`REFRESH`)}},K},b=e=>{c(`UiFormset`,()=>y(e))(e)},x=new WeakSet,S=e=>{x.has(e)||(x.add(e),b(e))};export{y as n,S as t};
|
|
2
|
-
//# sourceMappingURL=entry.generated-B7n4iFyw.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entry.generated-B7n4iFyw.js","names":[],"sources":["../../../../../../../../client/src/components/formset/contract.ts","../../../../../../../../client/src/components/formset/machine.ts","../../../../../../../../client/src/components/formset/index.ts","../../../../../../../../client/src/components/formset/entry.generated.ts"],"sourcesContent":["import {bool, json, number, string, type SchemaToProps} from '../../runtime';\n\nconst formsetSchema = {\n prefix: string.trim,\n minForms: number.min(0).step(1).default(0),\n maxForms: json<number | null>(null),\n disabled: bool,\n};\n\ntype FormsetProps = SchemaToProps<typeof formsetSchema>;\n\nexport {formsetSchema};\nexport type {FormsetProps};\n","import {\n createMachine,\n propsChangedEvent,\n type Machine,\n type MachineScope,\n} from '../../runtime/state-machine';\nimport type {FormsetProps} from './contract';\n\ntype FormsetContext = {\n activeCount: number;\n};\n\ntype FormsetMachineEffects = {\n add(): void;\n remove(scope: MachineScope<FormsetContext, FormsetProps>): void;\n restore(scope: MachineScope<FormsetContext, FormsetProps>): void;\n refresh(): void;\n maxLimit(): void;\n minLimit(): void;\n};\n\ntype CreateFormsetMachineOptions = {\n props: FormsetProps;\n context: FormsetContext;\n effects: FormsetMachineEffects;\n};\n\nconst nextProps = (scope: MachineScope<FormsetContext, FormsetProps>): FormsetProps => (\n propsChangedEvent<FormsetProps>(scope.event)?.props ?? scope.props\n);\n\nconst createFormsetMachine = ({\n props,\n context,\n effects,\n}: CreateFormsetMachineOptions): Machine<FormsetContext, FormsetProps> => createMachine({\n initial: 'ready',\n states: {\n ready: {\n tags: ['ready'],\n on: {\n ADD: [\n {guard: 'canIncrease', effects: 'add'},\n {guard: 'atMax', effects: 'maxLimit'},\n ],\n REMOVE: [\n {guard: 'canRemove', effects: 'remove'},\n {guard: 'atMin', effects: 'minLimit'},\n ],\n RESTORE: [\n {guard: 'canIncrease', effects: 'restore'},\n {guard: 'atMax', effects: 'maxLimit'},\n ],\n REFRESH: {effects: 'refresh'},\n DOM_INVALIDATED: {effects: 'refresh'},\n RECONCILED: {reduce: 'reconcile'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'refresh'},\n },\n },\n },\n}, {\n context,\n props,\n reducers: {\n reconcile: (scope) => ({context: {\n activeCount: typeof scope.event.activeCount === 'number'\n ? scope.event.activeCount\n : scope.context.activeCount,\n }}),\n replaceProps: (scope) => ({props: nextProps(scope)}),\n },\n guards: {\n canIncrease: ({context: current, props: currentProps}) => (\n !currentProps.disabled\n && (currentProps.maxForms === null || current.activeCount < currentProps.maxForms)\n ),\n atMax: ({context: current, props: currentProps}) => (\n !currentProps.disabled\n && currentProps.maxForms !== null\n && current.activeCount >= currentProps.maxForms\n ),\n canRemove: ({context: current, props: currentProps}) => (\n !currentProps.disabled && current.activeCount > currentProps.minForms\n ),\n atMin: ({context: current, props: currentProps}) => (\n !currentProps.disabled && current.activeCount <= currentProps.minForms\n ),\n },\n effects,\n});\n\nconst formsetHooks = [] as const;\n\nexport {createFormsetMachine, formsetHooks};\nexport type {CreateFormsetMachineOptions, FormsetContext, FormsetMachineEffects};\n","import type Alpine from 'alpinejs';\n\nimport {\n addListener,\n type AlpineMachine,\n createAlpineMachine,\n defineAlpineData,\n FOCUSABLE_SELECTOR,\n type MachineSnapshot,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {cleanupManagerFor} from '@client/runtime/alpine-data';\nimport type {CleanupManager} from '@client/runtime/cleanup-manager';\nimport {dispatch} from '@client/utils';\nimport {PRESERVE_MORPH_ATTRIBUTES} from '@client/runtime/morph';\nimport {formsetSchema, type FormsetProps} from './contract';\nimport {createFormsetMachine, formsetHooks, type FormsetContext} from './machine';\n\ntype FormsetOperation = 'add' | 'remove' | 'restore';\ntype FormsetItemArgument = HTMLElement | number;\n\ntype FormsetItemDetail = {\n index: number;\n item: HTMLElement;\n activeCount: number;\n};\n\ntype FormsetChangeDetail = {\n operation: FormsetOperation;\n index: number;\n activeCount: number;\n};\n\n/** Public Alpine API for `ui.formset`. @public */\ninterface UiFormsetApi {\n /** Number of rows not marked for Django deletion. */\n readonly activeCount: number;\n\n /** Whether adding one row is currently permitted. */\n readonly canAdd: boolean;\n\n /** Whether removing one active row is currently permitted. */\n readonly canRemove: boolean;\n\n /** Clone, index, initialize, and focus one empty-form row. */\n add(): HTMLElement | null;\n\n /** Tombstone an active member by element or immutable index. */\n remove(itemOrIndex?: FormsetItemArgument): boolean;\n\n /** Restore a tombstoned member by element or immutable index. */\n restore(itemOrIndex: FormsetItemArgument): boolean;\n\n /** Re-derive rows and management state from server-owned DOM. */\n refresh(): void;\n}\n\ntype FormsetData = AlpineMachine<FormsetContext, FormsetProps, typeof formsetHooks> & UiFormsetApi & {\n init(): void;\n destroy(): void;\n};\n\ntype Management = {\n total: HTMLInputElement;\n initial: HTMLInputElement;\n min: HTMLInputElement;\n max: HTMLInputElement;\n};\n\nconst ITEM_SELECTOR = '[data-ui-formset-item]';\nconst DERIVED_ATTRIBUTES = ['data-can-add', 'data-can-remove', 'data-active-count'] as const;\n\nconst UiFormset = (AlpineInstance: Alpine.Alpine): TrellisAlpineComponent<FormsetData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let templateEl: HTMLTemplateElement | null = null;\n let containerEl: HTMLElement | null = null;\n let management: Management | null = null;\n let lastAdded: HTMLElement | null = null;\n let operationSucceeded = false;\n let cleanup: CleanupManager;\n let preservedForRequests = 0;\n\n const root = (): HTMLElement & Alpine.ElementWithXAttributes => {\n if (!rootEl) throw new Error('Formset has not been initialized.');\n return rootEl;\n };\n const template = (): HTMLTemplateElement => {\n if (!templateEl) throw new Error('Formset template is unavailable.');\n return templateEl;\n };\n const container = (): HTMLElement => {\n if (!containerEl) throw new Error('Formset container is unavailable.');\n return containerEl;\n };\n const controls = (): Management => {\n if (!management) throw new Error('Formset management inputs are unavailable.');\n return management;\n };\n const currentProps = (): Readonly<FormsetProps> => bridge.getCommittedSnapshot().props;\n const currentContext = (): Readonly<FormsetContext> => bridge.getCommittedSnapshot().context;\n const owns = (element: Element): boolean => element.closest('[data-ui-formset]') === root();\n const findOwned = <T extends Element>(selector: string): T | null => Array.from(\n root().querySelectorAll<T>(selector),\n ).find(owns) ?? null;\n const resolveStructure = (): void => {\n templateEl = findOwned<HTMLTemplateElement>('template[data-ui-formset-template]');\n containerEl = findOwned<HTMLElement>('[data-ui-formset-container]');\n if (!templateEl || !containerEl) {\n throw new Error('ui.formset requires one template and live item container.');\n }\n };\n\n const findInput = (name: string): HTMLInputElement | null => Array.from(\n root().querySelectorAll<HTMLInputElement>('input[name]'),\n ).find((input) => input.name === name && owns(input)) ?? null;\n\n const parseIndex = (item: HTMLElement): number | null => {\n const index = Number(item.dataset.formIndex);\n return Number.isInteger(index) && index >= 0 ? index : null;\n };\n\n const liveItems = (): HTMLElement[] => Array.from(\n container().querySelectorAll<HTMLElement>(ITEM_SELECTOR),\n ).filter((item) => owns(item) && item.closest<HTMLElement>(ITEM_SELECTOR) === item);\n\n const deletionInput = (item: HTMLElement, prefix = currentProps().prefix): HTMLInputElement | null => {\n const index = parseIndex(item);\n if (index === null) return null;\n const expected = `${prefix}-${index}-DELETE`;\n return Array.from(item.querySelectorAll<HTMLInputElement>('input[name]'))\n .find((input) => input.name === expected && input.type === 'checkbox') ?? null;\n };\n\n const templateItem = (): HTMLElement => {\n const candidates = Array.from(template().content.querySelectorAll<HTMLElement>(ITEM_SELECTOR))\n .filter((item) => !item.parentElement?.closest(ITEM_SELECTOR));\n if (candidates.length !== 1) {\n throw new Error('ui.formset empty slot must contain exactly one ui.formset.item.');\n }\n return candidates[0]!;\n };\n\n const readManagement = (prefix: string): Management => {\n const names = {\n total: `${prefix}-TOTAL_FORMS`,\n initial: `${prefix}-INITIAL_FORMS`,\n min: `${prefix}-MIN_NUM_FORMS`,\n max: `${prefix}-MAX_NUM_FORMS`,\n };\n const resolved = Object.fromEntries(Object.entries(names).map(([key, name]) => [key, findInput(name)]));\n if (!resolved.total || !resolved.initial || !resolved.min || !resolved.max) {\n throw new Error('ui.formset requires a complete Django management form.');\n }\n return resolved as Management;\n };\n\n const validateDom = (props: FormsetProps): FormsetContext => {\n resolveStructure();\n if (!props.prefix || props.prefix.includes('__prefix__')) {\n throw new Error('ui.formset requires a safe, non-empty prefix.');\n }\n if (props.maxForms !== null && (!Number.isInteger(props.maxForms) || props.maxForms < 0)) {\n throw new Error('ui.formset maxForms must be null or a non-negative integer.');\n }\n const emptyItem = templateItem();\n if (emptyItem.dataset.formIndex !== '__prefix__') {\n throw new Error('ui.formset empty item requires the __prefix__ form index.');\n }\n const expectedEmptyDelete = `${props.prefix}-__prefix__-DELETE`;\n const emptyDeletion = Array.from(emptyItem.querySelectorAll<HTMLInputElement>('input[name]'))\n .find((input) => input.name === expectedEmptyDelete && input.type === 'checkbox');\n if (!emptyDeletion) {\n throw new Error('ui.formset empty item requires a Boolean DELETE input.');\n }\n const nextManagement = readManagement(props.prefix);\n const values = Object.values(nextManagement).map((input) => Number(input.value));\n if (values.some((value) => !Number.isInteger(value) || value < 0)) {\n throw new Error('ui.formset management counts must be non-negative integers.');\n }\n const total = Number(nextManagement.total.value);\n const seen = new Set<number>();\n let activeCount = 0;\n for (const item of liveItems()) {\n const index = parseIndex(item);\n if (index === null || seen.has(index) || index >= total) {\n throw new Error('ui.formset items require unique indexes below TOTAL_FORMS.');\n }\n seen.add(index);\n const deletion = deletionInput(item, props.prefix);\n if (!deletion) {\n throw new Error('ui.formset requires a Boolean DELETE input for every row.');\n }\n if (!deletion.checked) activeCount += 1;\n }\n management = nextManagement;\n return {activeCount};\n };\n\n const syncItem = (item: HTMLElement): void => {\n const deletion = deletionInput(item);\n if (!deletion) throw new Error('ui.formset requires a Boolean DELETE input for every row.');\n deletion.setAttribute('data-ui-formset-delete', '');\n const deleted = deletion.checked;\n item.dataset.formState = deleted ? 'deleted' : 'active';\n item.hidden = deleted;\n };\n\n const reconcile = (): number => {\n const props = currentProps();\n management = readManagement(props.prefix);\n const items = liveItems();\n items.forEach(syncItem);\n const activeCount = items.filter((item) => item.dataset.formState !== 'deleted').length;\n bridge.send({type: 'RECONCILED', activeCount});\n const canAdd = !props.disabled && (props.maxForms === null || activeCount < props.maxForms);\n const canRemove = !props.disabled && activeCount > props.minForms;\n root().dataset.activeCount = String(activeCount);\n root().dataset.canAdd = String(canAdd);\n root().dataset.canRemove = String(canRemove);\n root().querySelectorAll<HTMLElement>('[data-ui-formset-empty]').forEach((empty) => {\n if (owns(empty)) empty.hidden = activeCount !== 0;\n });\n return activeCount;\n };\n\n const announce = (message: string): void => {\n if (root().dataset.announce === 'false') return;\n const status = findOwned<HTMLElement>('[data-ui-formset-status]');\n if (status) status.textContent = message;\n };\n\n const dispatchChange = (\n operation: FormsetOperation,\n index: number,\n item: HTMLElement,\n activeCount: number,\n ): void => {\n dispatch<FormsetItemDetail>({\n el: root(),\n name: `ui:formset-${operation}`,\n detail: {index, item, activeCount},\n composed: true,\n });\n dispatch<FormsetChangeDetail>({\n el: root(),\n name: 'ui:formset-change',\n detail: {operation, index, activeCount},\n composed: true,\n });\n };\n\n const replacePrefixAttributes = (item: HTMLElement, index: number): void => {\n const elements = [item, ...Array.from(item.querySelectorAll<HTMLElement>('*'))];\n elements.forEach((element) => Array.from(element.attributes).forEach((attribute) => {\n if (attribute.value.includes('__prefix__')) {\n element.setAttribute(attribute.name, attribute.value.replaceAll('__prefix__', String(index)));\n }\n }));\n };\n\n const focusTarget = (item: HTMLElement): void => {\n const authored = root().dataset.focus;\n let target: HTMLElement | null = null;\n if (authored) {\n try {\n target = item.matches(authored) ? item : item.querySelector<HTMLElement>(authored);\n } catch {\n target = null;\n }\n }\n target ??= item.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n if (target && !target.hasAttribute('disabled')) target.focus();\n };\n\n const itemFrom = (value: FormsetItemArgument | undefined): HTMLElement | null => {\n if (value instanceof HTMLElement) {\n const item = value.matches(ITEM_SELECTOR) ? value : value.closest<HTMLElement>(ITEM_SELECTOR);\n return item && liveItems().includes(item) ? item : null;\n }\n if (typeof value === 'number' && Number.isInteger(value)) {\n return liveItems().find((item) => parseIndex(item) === value) ?? null;\n }\n const focused = root().ownerDocument.activeElement;\n return focused instanceof HTMLElement ? itemFrom(focused) : null;\n };\n\n const adjacentFocusTarget = (removed: HTMLElement): HTMLElement | null => {\n const live = liveItems();\n const removedIndex = live.indexOf(removed);\n const items = live.filter((item) => item.dataset.formState !== 'deleted');\n const next = items.find((item) => live.indexOf(item) > removedIndex);\n const previous = [...items].reverse().find((item) => live.indexOf(item) < removedIndex);\n const row = next ?? previous;\n if (row) return row.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n const add = findOwned<HTMLElement>('[data-ui-formset-add]');\n if (!add) return null;\n return add.matches(FOCUSABLE_SELECTOR) ? add : add.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n };\n\n const setPreserved = (preserve: boolean): void => {\n const declared = new Set((root().getAttribute(PRESERVE_MORPH_ATTRIBUTES) ?? '').split(/\\s+/).filter(Boolean));\n DERIVED_ATTRIBUTES.forEach((name) => preserve ? declared.add(name) : declared.delete(name));\n if (declared.size > 0) root().setAttribute(PRESERVE_MORPH_ATTRIBUTES, [...declared].join(' '));\n else root().removeAttribute(PRESERVE_MORPH_ATTRIBUTES);\n };\n\n const requestIncludesRoot = (event: Event): boolean => {\n const source = (event as CustomEvent<{source?: EventTarget}>).detail?.source;\n return source instanceof Element && (source.contains(root()) || root().contains(source));\n };\n\n let component!: TrellisAlpineComponent<FormsetData>;\n const bridge = createAlpineMachine({\n schema: formsetSchema,\n hooks: formsetHooks,\n createMachine: ({props}) => createFormsetMachine({\n props,\n context: validateDom(props),\n effects: {\n add(): void {\n operationSucceeded = false;\n lastAdded = null;\n const index = Number(controls().total.value);\n const item = templateItem().cloneNode(true) as HTMLElement;\n replacePrefixAttributes(item, index);\n const deletion = deletionInput(item);\n if (!deletion) throw new Error('ui.formset empty item requires a Boolean DELETE input.');\n deletion.checked = false;\n syncItem(item);\n container().append(item);\n try {\n AlpineInstance.initTree(item as Alpine.ElementWithXAttributes);\n } catch (error) {\n AlpineInstance.destroyTree(item);\n item.remove();\n throw error;\n }\n controls().total.value = String(index + 1);\n const activeCount = reconcile();\n focusTarget(item);\n lastAdded = item;\n operationSucceeded = true;\n announce(`Row ${index + 1} added.`);\n dispatchChange('add', index, item, activeCount);\n },\n remove(scope): void {\n operationSucceeded = false;\n const item = scope.event.item;\n if (!(item instanceof HTMLElement) || !liveItems().includes(item)) return;\n const deletion = deletionInput(item);\n const index = parseIndex(item);\n if (!deletion || index === null || deletion.checked) return;\n const focus = adjacentFocusTarget(item);\n deletion.checked = true;\n syncItem(item);\n const activeCount = reconcile();\n focus?.focus();\n operationSucceeded = true;\n announce(`Row ${index + 1} removed.`);\n dispatchChange('remove', index, item, activeCount);\n },\n restore(scope): void {\n operationSucceeded = false;\n const item = scope.event.item;\n if (!(item instanceof HTMLElement) || !liveItems().includes(item)) return;\n const deletion = deletionInput(item);\n const index = parseIndex(item);\n if (!deletion || index === null || !deletion.checked) return;\n deletion.checked = false;\n syncItem(item);\n const activeCount = reconcile();\n operationSucceeded = true;\n dispatchChange('restore', index, item, activeCount);\n },\n refresh(): void {\n validateDom(currentProps());\n reconcile();\n },\n maxLimit(): void {\n dispatch({el: root(), name: 'ui:formset-limit', detail: {\n limit: 'max', activeCount: currentContext().activeCount,\n }, composed: true});\n },\n minLimit(): void {\n dispatch({el: root(), name: 'ui:formset-limit', detail: {\n limit: 'min', activeCount: currentContext().activeCount,\n }, composed: true});\n },\n },\n }),\n });\n\n component = {\n ...bridge,\n get activeCount(): number {\n return this.snapshot.current?.context.activeCount ?? 0;\n },\n get canAdd(): boolean {\n const snapshot = this.snapshot.current;\n return Boolean(snapshot && !snapshot.props.disabled && (\n snapshot.props.maxForms === null || snapshot.context.activeCount < snapshot.props.maxForms\n ));\n },\n get canRemove(): boolean {\n const snapshot = this.snapshot.current;\n return Boolean(snapshot && !snapshot.props.disabled && snapshot.context.activeCount > snapshot.props.minForms);\n },\n init(): void {\n cleanup = cleanupManagerFor(this);\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n reconcile();\n addListener({target: root().ownerDocument, event: 'ui:request:start', cleanup, handler: (event) => {\n if (!requestIncludesRoot(event)) return;\n preservedForRequests += 1;\n setPreserved(true);\n }});\n addListener({target: root().ownerDocument, event: 'ui:request:finish', cleanup, handler: (event) => {\n if (!requestIncludesRoot(event)) return;\n preservedForRequests = Math.max(0, preservedForRequests - 1);\n if (preservedForRequests === 0) setPreserved(false);\n bridge.send('REFRESH');\n }});\n },\n destroy(): void {\n if (preservedForRequests > 0) setPreserved(false);\n preservedForRequests = 0;\n bridge.disconnect();\n management = null;\n containerEl = null;\n templateEl = null;\n rootEl = null;\n lastAdded = null;\n },\n add(): HTMLElement | null {\n lastAdded = null;\n bridge.send('ADD');\n return lastAdded;\n },\n remove(itemOrIndex?: FormsetItemArgument): boolean {\n const item = itemFrom(itemOrIndex);\n operationSucceeded = false;\n if (!item || item.dataset.formState === 'deleted') return false;\n bridge.send({type: 'REMOVE', item});\n return operationSucceeded;\n },\n restore(itemOrIndex: FormsetItemArgument): boolean {\n const item = itemFrom(itemOrIndex);\n operationSucceeded = false;\n if (!item || item.dataset.formState !== 'deleted') return false;\n bridge.send({type: 'RESTORE', item});\n return operationSucceeded;\n },\n refresh(): void {\n bridge.send('REFRESH');\n },\n };\n\n return component;\n};\n\nconst registerFormset = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiFormset', () => UiFormset(AlpineInstance))(AlpineInstance);\n};\n\nexport {registerFormset, UiFormset};\nexport type {\n FormsetChangeDetail,\n FormsetData,\n FormsetItemArgument,\n FormsetItemDetail,\n UiFormsetApi,\n};\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 {registerFormset as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerFormset = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerFormset};\nexport default registerFormset;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e,n as t,r as n}from"./dom-DiTFTWeR.js";import{t as r}from"./capability-motion-C3q5Xzv2.js";import{f as i,l as a,n as o,u as s}from"./codecs-CQ7olTJL.js";import{i as c,t as l}from"./alpine-machine-CE2UN4Qu.js";import{n as u}from"./alpine-data-Dvc_bXq6.js";import{t as d}from"./collection-navigation-BbxUBQFs.js";import{n as f,t as p}from"./styles-CX2j92ex.js";import{t as m}from"./merge-bindings-BtqW3UgP.js";import{t as h}from"./machine-CNnHDbyo.js";import{n as g,t as _}from"./props-change-2xfsIAEN.js";import{t as v}from"./semantic-observer-CIoriWtV.js";import{F as y,g as b}from"./common-De1R7Xh6.js";var x=[`single`,`multiple`],S=y,C=[`trailing`,`leading`];[...C];var w=b;[...w];var T={mode:a(x,`single`),animate:o,collapsible:o,disabled:o,orientation:a(S,`vertical`),defaultValue:i,defaultValues:i,value:i,values:i,loop:o.default(!0),iconPosition:a(C,`trailing`),headingAs:a(w,`h3`),class:i},E=[c({name:`opening`,state:`changing`,projectEach:e=>e.context.change.openingValues.map(e=>({value:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{open:e=>({type:`OPEN`,value:e}),close:e=>({type:`CLOSE`,value:e}),toggle:e=>({type:`TOGGLE`,value:e}),setValues:e=>({type:`SET_VALUES`,values:e})}}),c({name:`closing`,state:`changing`,projectEach:e=>e.context.change.closingValues.map(e=>({value:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{open:e=>({type:`OPEN`,value:e}),close:e=>({type:`CLOSE`,value:e}),toggle:e=>({type:`TOGGLE`,value:e}),setValues:e=>({type:`SET_VALUES`,values:e})}})],D=e=>typeof e==`string`?e:``,O=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],k=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean),A=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),j=(e,t,n)=>{let r=new Set(e.filter(e=>n.values.includes(e))),i=n.values.filter(e=>r.has(e));return t.mode===`single`?i.slice(0,1):i},M=e=>e.mode===`multiple`?k(e.values||e.value):e.value?[e.value]:[],N=e=>g(e.event)?.props??e.props,P=e=>e.event.type===`ITEMS_CHANGED`?{values:O(e.event.values),disabledValues:O(e.event.disabledValues)}:e.context.collection,F=(e,t,n)=>{let r=e.context.selection.values,i=D(e.event.value);switch(e.event.type){case`OPEN`:return!i||n.disabledValues.includes(i)?r:t.mode===`single`?[i]:[...r,i];case`CLOSE`:return!i||n.disabledValues.includes(i)||t.mode===`single`&&!t.collapsible&&r.includes(i)?r:r.filter(e=>e!==i);case`TOGGLE`:return!i||n.disabledValues.includes(i)?r:r.includes(i)?t.mode===`single`&&!t.collapsible?r:r.filter(e=>e!==i):t.mode===`single`?[i]:[...r,i];case`SET_VALUES`:return O(e.event.values);case`PROPS_CHANGED`:return _(e.event,`value`,`values`)?M(t):r;case`ITEMS_CHANGED`:return r;default:return r}},I=e=>{let t=N(e),n=P(e);return j(F(e,t,n),t,n)},L=e=>!([`OPEN`,`CLOSE`,`TOGGLE`,`SET_VALUES`].includes(e.event.type)&&e.props.disabled)&&!A(e.context.selection.values,I(e)),R=({props:e,context:t,effects:n})=>h({initial:`stable`,states:{stable:{tags:[`stable`],on:{OPEN:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},CLOSE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},SET_VALUES:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},PROPS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncItems`}]}},changing:{tags:[`changing`,`transitioning`],on:{CHANGE_DONE:{target:`stable`,effects:`finishChange`},CHANGE_ERROR:{target:`stable`,effects:`finishChange`},OPEN:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},CLOSE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},SET_VALUES:{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},PROPS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[{target:`changing`,guard:L,reduce:`applyChange`,effects:`prepareChange`},{reduce:`reconcile`,effects:`syncItems`}]}}}},{context:t,props:e,reducers:{applyChange:e=>{let t=I(e),n=e.context.selection.values;return{props:N(e),context:{...e.context,selection:{values:t},change:{openingValues:t.filter(e=>!n.includes(e)),closingValues:n.filter(e=>!t.includes(e))},collection:P(e)}}},reconcile:e=>({props:N(e),context:{...e.context,collection:P(e),selection:{values:I(e)}}})},effects:{prepareChange:n.prepareChange,finishChange:n.finishChange,syncProps:n.syncProps,syncItems:n.syncItems}}),z=p({definition:{component:`ui.accordion`,parts:{root:{base:`grid w-full min-w-0 gap-0`,variants:{orientation:{vertical:``,horizontal:`gap-2 md:grid-flow-col md:auto-cols-fr`}},defaults:{orientation:`vertical`}},item:{base:`min-w-0 border-b-edge-separator border-separator last:border-b-0 data-disabled:opacity-50`},heading:{base:`block text-surface-ink`},trigger:{base:[`flex min-h-control-xlg w-full min-w-0 items-center gap-2 rounded-control-sm border border-transparent px-3 py-2`,`text-left text-sm font-medium text-surface-ink outline-none`,`focus-visible:ui-focus-ring`,`data-disabled:pointer-events-none data-disabled:opacity-50`]},triggerLabel:{base:`min-w-0 flex-1`},icon:{base:`size-icon shrink-0 fill-current text-icon`},content:{base:`overflow-hidden text-sm text-surface-ink-muted`},contentInner:{base:`min-w-0 px-3 pb-3 pt-1`}}}}),B=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean),V=e=>e?`open`:`closed`,H=e=>e.trim().replace(/[^a-zA-Z0-9_-]+/g,`-`)||`item`,U=()=>{let r=null,i=null,a=null,o=e=>e,c=()=>{if(!r)throw Error(`Accordion has not been initialized.`);return r},u=e=>e.closest(`[data-ui-accordion]`)===c(),p=()=>Array.from(c().querySelectorAll(`[data-ui-accordion-item]`)).filter(u).map((e,n)=>{let r=e.querySelector(`[data-ui-accordion-trigger]`),i=e.querySelector(`[data-ui-accordion-content]`);return!(r instanceof HTMLButtonElement)||!i||!u(r)||!u(i)?null:(e.dataset.value||=`item-${n+1}`,{item:e,heading:e.querySelector(`[data-ui-accordion-heading]`),trigger:r,content:i,value:e.dataset.value,disabled:t({value:e.dataset.itemDisabled})})}).filter(e=>e!==null),h=e=>p().find(t=>t.value===e)??null,g=e=>{if(!(e instanceof Element))return null;let t=e.closest(`[data-ui-accordion-item]`);return t&&u(t)?p().find(e=>e.item===t)??null:null},_=()=>{let e=p();return{values:e.map(e=>e.value),disabledValues:e.filter(e=>e.disabled).map(e=>e.value)}},y=(e,t,n)=>{let r=new Set(e),i=n.filter(e=>r.has(e));return t.mode===`single`?i.slice(0,1):i},b=e=>{let n=_(),r=e.mode===`multiple`?B(e.values||e.value):e.value?[e.value]:[],i=e.mode===`multiple`?B(e.defaultValues):e.defaultValue?[e.defaultValue]:[],a=p().filter(e=>t({value:e.item.dataset.open})).map(e=>e.value),o=r.length>0?r:i.length>0?i:a;return{selection:{values:y(o,e,n.values)},change:{openingValues:[],closingValues:[]},collection:n}},x=()=>N.getCommittedSnapshot().props,S=()=>N.getCommittedSnapshot().context,C=e=>S().selection.values.includes(e.value),w=e=>x().disabled||e.disabled,D=e=>x().mode===`multiple`||x().collapsible||!C(e),O=()=>{let e=x(),t=S().selection.values;s({el:c(),schema:T,key:`value`,value:e.mode===`single`?t[0]??``:``}),s({el:c(),schema:T,key:`values`,value:e.mode===`multiple`?t.join(`,`):``}),c().dataset.orientation=e.orientation,c().dataset.iconPosition=e.iconPosition,c().dataset.mode=e.mode,e.disabled?c().setAttribute(`data-disabled`,``):c().removeAttribute(`data-disabled`)},k,A=e=>{let t=x(),n=C(e),r=V(n),i=w(e),a=N.hasTag(`changing`)&&S().change.closingValues.includes(e.value);e.item.dataset.state=r,e.item.dataset.orientation=t.orientation,e.item.className=f({part:z.parts.item,props:t,className:e.item.dataset.class??``}),e.heading?.setAttribute(`data-state`,r),e.heading?.setAttribute(`data-orientation`,t.orientation);let s=H(e.value);e.trigger.id||=o(`accordion-trigger-${s}`),e.content.id||=o(`accordion-content-${s}`),e.trigger.type=`button`,e.trigger.dataset.state=r,e.trigger.dataset.orientation=t.orientation,e.trigger.className=f({part:z.parts.trigger,props:t,className:e.trigger.dataset.class??``}),e.trigger.setAttribute(`aria-expanded`,n?`true`:`false`),e.trigger.setAttribute(`aria-controls`,e.content.id),e.content.dataset.state=r,e.content.dataset.orientation=t.orientation,e.content.setAttribute(`aria-labelledby`,e.trigger.id),e.content.hidden=!n&&!a,[e.item,e.heading,e.trigger,e.content].forEach(e=>{e&&(i?e.setAttribute(`data-disabled`,``):e.removeAttribute(`data-disabled`))}),e.trigger.disabled=i,i||n&&!D(e)?e.trigger.setAttribute(`aria-disabled`,`true`):e.trigger.removeAttribute(`aria-disabled`)},j=()=>{O(),p().forEach(A)},M=()=>{let e=[...S().selection.values];n({el:c(),name:`ui:change`,detail:{value:x().mode===`single`?e[0]??``:``,values:e}})},N=l({schema:T,hooks:E,resolveTransitionElement:({data:e})=>{let t=e.value;return h(t)?.content??null},createMachine:({props:e})=>R({props:e,context:b(e),effects:{prepareChange:()=>{j(),M()},finishChange:()=>{j()},syncProps:j,syncItems:j}})}),P=()=>{if(!i)throw Error(`Accordion navigation has not been initialized.`);return i},F=()=>{let e=_();N.send({type:`ITEMS_CHANGED`,...e})},I=(e,t)=>{t?.preventDefault(),!w(e)&&N.send({type:`TOGGLE`,value:e.value,motion:!(t instanceof KeyboardEvent)})},L=e=>{let t=g(e.target);t&&e.target instanceof Node&&t.trigger.contains(e.target)&&I(t,e)},U=t=>{let n=g(t.target);if(n&&t.target===n.trigger){if(t.key===`Enter`||t.key===` `){I(n,t);return}if(t.key===`Home`){t.preventDefault(),P().focusFirst();return}if(t.key===`End`){t.preventDefault(),P().focusLast();return}if(x().orientation===`vertical`){t.key===`ArrowDown`?(t.preventDefault(),P().focusNext()):t.key===`ArrowUp`&&(t.preventDefault(),P().focusPrevious());return}t.key===`ArrowRight`?(t.preventDefault(),e({el:c()})?P().focusPrevious():P().focusNext()):t.key===`ArrowLeft`&&(t.preventDefault(),e({el:c()})?P().focusNext():P().focusPrevious())}},W=e=>{let t=g(e.target);t&&e.target===t.trigger&&!w(t)&&P().activateItem({el:t.trigger})},G=()=>{a=v({targets:c(),read:_,onChange:F,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`data-value`,`data-item-disabled`]}})};return k={...N,get value(){return x().mode===`single`?this.snapshot.current?.context.selection.values[0]??``:``},get values(){return[...this.snapshot.current?.context.selection.values??[]]},init(){r=this.$el,o=this.$id.bind(this),N.connect(this.$el,this.snapshot),i=d({root:c,itemSelector:`[data-ui-accordion-trigger]`,isDisabled:e=>e.hasAttribute(`disabled`),loop:()=>x().loop}),j(),G()},destroy(){a?.(),a=null,N.disconnect(),i=null,r=null},get root(){let e=this.snapshot.current?.props??x();return m({inputs:[f({part:z.parts.root,props:e,className:e.class}),{"data-ui-accordion":``,":data-orientation":()=>x().orientation,":data-disabled":()=>x().disabled?``:void 0,"@click":L,"@keydown":e=>{e instanceof KeyboardEvent&&U(e)},"@focusin":W}]})},open(e){N.send({type:`OPEN`,value:e})},close(e){N.send({type:`CLOSE`,value:e})},toggle(e,t){let n=h(e);n&&I(n,t)},isOpen(e){return this.snapshot.current?.context.selection.values.includes(e)??!1}},k},W=u(`UiAccordion`,U),G=new WeakSet,K=e=>{G.has(e)||(G.add(e),r(e),W(e))};export{U as n,K as t};
|
|
2
|
-
//# sourceMappingURL=entry.generated-BeNK2EFl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entry.generated-BeNK2EFl.js","names":[],"sources":["../../../../../../../../client/src/components/accordion/contract.ts","../../../../../../../../client/src/components/accordion/machine.ts","../../../../../../../../client/src/components/accordion/styles.ts","../../../../../../../../client/src/components/accordion/index.ts","../../../../../../../../client/src/components/accordion/entry.generated.ts"],"sourcesContent":["import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {HEADING_LEVELS, ORIENTATIONS, type HeadingLevel, type Orientation} from '../common';\n\nconst ACCORDION_MODES = ['single', 'multiple'] as const;\nconst ACCORDION_ORIENTATIONS = ORIENTATIONS;\nconst ACCORDION_ICON_POSITIONS = ['trailing', 'leading'] as const;\nconst ACCORDION_ITEM_ICON_POSITIONS = ['inherit', ...ACCORDION_ICON_POSITIONS] as const;\nconst ACCORDION_HEADING_AS = HEADING_LEVELS;\nconst ACCORDION_ITEM_HEADING_AS = ['inherit', ...ACCORDION_HEADING_AS] as const;\n\nconst accordionSchema = {\n mode: oneOf(ACCORDION_MODES, 'single'),\n animate: bool,\n collapsible: bool,\n disabled: bool,\n orientation: oneOf(ACCORDION_ORIENTATIONS, 'vertical'),\n defaultValue: string,\n defaultValues: string,\n value: string,\n values: string,\n loop: bool.default(true),\n iconPosition: oneOf(ACCORDION_ICON_POSITIONS, 'trailing'),\n headingAs: oneOf(ACCORDION_HEADING_AS, 'h3'),\n class: string,\n};\n\ntype AccordionMode = typeof ACCORDION_MODES[number];\ntype AccordionOrientation = Orientation;\ntype AccordionIconPosition = typeof ACCORDION_ICON_POSITIONS[number];\ntype AccordionItemIconPosition = typeof ACCORDION_ITEM_ICON_POSITIONS[number];\ntype AccordionHeadingAs = HeadingLevel;\ntype AccordionItemHeadingAs = typeof ACCORDION_ITEM_HEADING_AS[number];\ntype AccordionProps = SchemaToProps<typeof accordionSchema>;\n\nexport {\n ACCORDION_HEADING_AS,\n ACCORDION_ICON_POSITIONS,\n ACCORDION_ITEM_HEADING_AS,\n ACCORDION_ITEM_ICON_POSITIONS,\n ACCORDION_ORIENTATIONS,\n ACCORDION_MODES,\n accordionSchema,\n};\nexport type {\n AccordionHeadingAs,\n AccordionIconPosition,\n AccordionItemHeadingAs,\n AccordionItemIconPosition,\n AccordionOrientation,\n AccordionProps,\n AccordionMode,\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 {AccordionProps} from './contract';\n\ntype AccordionContext = {\n selection: {values: string[]};\n change: {openingValues: string[]; closingValues: string[]};\n collection: {values: string[]; disabledValues: string[]};\n};\n\ntype AccordionTransitionData = {value: string};\n\ntype AccordionMachineEffects = {\n prepareChange(scope: MachineScope<AccordionContext, AccordionProps>): void;\n finishChange(scope: MachineScope<AccordionContext, AccordionProps>): void;\n syncProps(scope: MachineScope<AccordionContext, AccordionProps>): void;\n syncItems(scope: MachineScope<AccordionContext, AccordionProps>): void;\n};\n\ntype CreateAccordionMachineOptions = {\n props: AccordionProps;\n context: AccordionContext;\n effects: AccordionMachineEffects;\n};\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.openingValues.map((value) => ({value})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n open: (value: string) => ({type: 'OPEN', value}),\n close: (value: string) => ({type: 'CLOSE', value}),\n toggle: (value: string) => ({type: 'TOGGLE', value}),\n setValues: (values: string[]) => ({type: 'SET_VALUES', values}),\n },\n} satisfies TransitionHookDefinition<AccordionContext, AccordionProps, AccordionTransitionData, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.closingValues.map((value) => ({value})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n open: (value: string) => ({type: 'OPEN', value}),\n close: (value: string) => ({type: 'CLOSE', value}),\n toggle: (value: string) => ({type: 'TOGGLE', value}),\n setValues: (values: string[]) => ({type: 'SET_VALUES', values}),\n },\n} satisfies TransitionHookDefinition<AccordionContext, AccordionProps, AccordionTransitionData, 'closing'>);\n\nconst accordionHooks = [openingHook, closingHook] 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 splitValues = (value: string): string[] => value.split(',').map((item) => item.trim()).filter(Boolean);\nconst sameValues = (left: readonly string[], right: readonly string[]): boolean => (\n left.length === right.length && left.every((value, index) => value === right[index])\n);\n\nconst normalizeValues = (\n values: readonly string[],\n props: AccordionProps,\n collection: AccordionContext['collection'],\n): string[] => {\n const requested = new Set(values.filter((value) => collection.values.includes(value)));\n const ordered = collection.values.filter((value) => requested.has(value));\n return props.mode === 'single' ? ordered.slice(0, 1) : ordered;\n};\n\nconst controlledValues = (props: AccordionProps): string[] => (\n props.mode === 'multiple' ? splitValues(props.values || props.value) : props.value ? [props.value] : []\n);\n\nconst nextProps = (scope: MachineScope<AccordionContext, AccordionProps>): AccordionProps => (\n propsChangedEvent<AccordionProps>(scope.event)?.props ?? scope.props\n);\n\nconst nextCollection = (\n scope: MachineScope<AccordionContext, AccordionProps>,\n): AccordionContext['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 };\n};\n\nconst requestedValues = (\n scope: MachineScope<AccordionContext, AccordionProps>,\n props: AccordionProps,\n collection: AccordionContext['collection'],\n): string[] => {\n const current = scope.context.selection.values;\n const value = stringValue(scope.event.value);\n switch (scope.event.type) {\n case 'OPEN':\n if (!value || collection.disabledValues.includes(value)) return current;\n return props.mode === 'single' ? [value] : [...current, value];\n case 'CLOSE':\n if (\n !value\n || collection.disabledValues.includes(value)\n || (props.mode === 'single' && !props.collapsible && current.includes(value))\n ) return current;\n return current.filter((item) => item !== value);\n case 'TOGGLE':\n if (!value || collection.disabledValues.includes(value)) return current;\n if (!current.includes(value)) return props.mode === 'single' ? [value] : [...current, value];\n if (props.mode === 'single' && !props.collapsible) return current;\n return current.filter((item) => item !== value);\n case 'SET_VALUES':\n return stringValues(scope.event.values);\n case 'PROPS_CHANGED':\n if (propsChanged<AccordionProps>(scope.event, 'value', 'values')) return controlledValues(props);\n return current;\n case 'ITEMS_CHANGED':\n return current;\n default:\n return current;\n }\n};\n\nconst nextValues = (scope: MachineScope<AccordionContext, AccordionProps>): string[] => {\n const props = nextProps(scope);\n const collection = nextCollection(scope);\n return normalizeValues(requestedValues(scope, props, collection), props, collection);\n};\n\nconst selectionChanges = (scope: MachineScope<AccordionContext, AccordionProps>): boolean => (\n !(\n ['OPEN', 'CLOSE', 'TOGGLE', 'SET_VALUES'].includes(scope.event.type)\n && scope.props.disabled\n ) && !sameValues(scope.context.selection.values, nextValues(scope))\n);\n\nconst createAccordionMachine = ({\n props,\n context,\n effects,\n}: CreateAccordionMachineOptions): Machine<AccordionContext, AccordionProps> => createMachine<AccordionContext, AccordionProps>({\n initial: 'stable',\n states: {\n stable: {\n tags: ['stable'],\n on: {\n OPEN: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n CLOSE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n SET_VALUES: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n PROPS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncProps'},\n ],\n ITEMS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncItems'},\n ],\n },\n },\n changing: {\n tags: ['changing', 'transitioning'],\n on: {\n CHANGE_DONE: {target: 'stable', effects: 'finishChange'},\n CHANGE_ERROR: {target: 'stable', effects: 'finishChange'},\n OPEN: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n CLOSE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n SET_VALUES: {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n PROPS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncProps'},\n ],\n ITEMS_CHANGED: [\n {target: 'changing', guard: selectionChanges, reduce: 'applyChange', effects: 'prepareChange'},\n {reduce: 'reconcile', effects: 'syncItems'},\n ],\n },\n },\n },\n}, {\n context,\n props,\n reducers: {\n applyChange: (scope) => {\n const values = nextValues(scope);\n const previous = scope.context.selection.values;\n return {\n props: nextProps(scope),\n context: {\n ...scope.context,\n selection: {values},\n change: {\n openingValues: values.filter((value) => !previous.includes(value)),\n closingValues: previous.filter((value) => !values.includes(value)),\n },\n collection: nextCollection(scope),\n },\n };\n },\n reconcile: (scope) => ({\n props: nextProps(scope),\n context: {\n ...scope.context,\n collection: nextCollection(scope),\n selection: {values: nextValues(scope)},\n },\n }),\n },\n effects: {\n prepareChange: effects.prepareChange,\n finishChange: effects.finishChange,\n syncProps: effects.syncProps,\n syncItems: effects.syncItems,\n },\n});\n\nexport {accordionHooks, createAccordionMachine};\nexport type {\n AccordionContext,\n AccordionMachineEffects,\n AccordionTransitionData,\n CreateAccordionMachineOptions,\n};\n","import {defineStyles} from '../../runtime';\n\nconst accordionStyles = defineStyles({definition: {\n component: 'ui.accordion',\n parts: {\n root: {\n base: 'grid w-full min-w-0 gap-0',\n variants: {\n orientation: {\n vertical: '',\n horizontal: 'gap-2 md:grid-flow-col md:auto-cols-fr',\n },\n },\n defaults: {\n orientation: 'vertical',\n },\n },\n item: {\n base: 'min-w-0 border-b-edge-separator border-separator last:border-b-0 data-disabled:opacity-50',\n },\n heading: {\n base: 'block text-surface-ink',\n },\n trigger: {\n base: [\n 'flex min-h-control-xlg w-full min-w-0 items-center gap-2 rounded-control-sm border border-transparent px-3 py-2',\n 'text-left text-sm font-medium text-surface-ink outline-none',\n 'focus-visible:ui-focus-ring',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n ],\n },\n triggerLabel: {\n base: 'min-w-0 flex-1',\n },\n icon: {\n base: 'size-icon shrink-0 fill-current text-icon',\n },\n content: {\n base: 'overflow-hidden text-sm text-surface-ink-muted',\n },\n contentInner: {\n base: 'min-w-0 px-3 pb-3 pt-1',\n },\n },\n}});\n\nexport {accordionStyles};\n","import type Alpine from 'alpinejs';\n\nimport {\n type AlpineMachine,\n createAlpineMachine,\n type BindingObject,\n createCollectionNavigation,\n type CollectionNavigation,\n defineAlpineData,\n mergeBindings,\n type MachineSnapshot,\n observeSemanticChanges,\n reflectSchemaProp,\n resolveStyle,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {asBool, dispatch, isRtl} from '@client/utils';\nimport {accordionSchema, type AccordionMode, type AccordionProps} from './contract';\nimport {\n accordionHooks,\n createAccordionMachine,\n type AccordionContext,\n type AccordionTransitionData,\n} from './machine';\nimport {accordionStyles} from './styles';\n\ntype AccordionTransitionName = (typeof accordionHooks)[number]['name'];\ntype AccordionTransition<TName extends AccordionTransitionName = AccordionTransitionName> = TransitionForHook<\n Extract<(typeof accordionHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype AccordionItemRecord = {\n item: HTMLElement;\n heading: HTMLElement | null;\n trigger: HTMLButtonElement;\n content: HTMLElement;\n value: string;\n disabled: boolean;\n};\n\n/**\n * Public Alpine API for `ui.accordion`.\n *\n * @public\n */\ninterface UiAccordionApi {\n /** Open value in single mode, otherwise an empty string. */\n readonly value: string;\n\n /** Open values in document order. */\n readonly values: readonly string[];\n\n /** Opens an enabled item. In single mode it replaces the current value. */\n open(value: string): void;\n\n /** Closes an item when the current mode permits it. */\n close(value: string): void;\n\n /** Reverses an item's current disclosure state. */\n toggle(value: string, event?: Event): void;\n\n /** Whether an item belongs to the current open-value set. */\n isOpen(value: string): boolean;\n}\n\ntype AccordionData = AlpineMachine<AccordionContext, AccordionProps, typeof accordionHooks> & UiAccordionApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n};\n\nconst splitValues = (value: string): string[] => value.split(',').map((item) => item.trim()).filter(Boolean);\nconst stateFor = (open: boolean): 'open' | 'closed' => open ? 'open' : 'closed';\nconst safeIdPart = (value: string): string => value.trim().replace(/[^a-zA-Z0-9_-]+/g, '-') || 'item';\n\nconst UiAccordion = (): TrellisAlpineComponent<AccordionData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let collection: CollectionNavigation | null = null;\n let disconnectObserver: (() => void) | null = null;\n let idFor = (key: string): string => key;\n\n const root = (): HTMLElement & Alpine.ElementWithXAttributes => {\n if (!rootEl) throw new Error('Accordion has not been initialized.');\n return rootEl;\n };\n\n const owns = (element: Element): boolean => element.closest('[data-ui-accordion]') === root();\n\n const items = (): AccordionItemRecord[] => Array.from(\n root().querySelectorAll<HTMLElement>('[data-ui-accordion-item]'),\n ).filter(owns).map((item, index) => {\n const trigger = item.querySelector<HTMLElement>('[data-ui-accordion-trigger]');\n const content = item.querySelector<HTMLElement>('[data-ui-accordion-content]');\n if (!(trigger instanceof HTMLButtonElement) || !content || !owns(trigger) || !owns(content)) return null;\n item.dataset.value ||= `item-${index + 1}`;\n return {\n item,\n heading: item.querySelector<HTMLElement>('[data-ui-accordion-heading]'),\n trigger,\n content,\n value: item.dataset.value,\n disabled: asBool({value: item.dataset.itemDisabled}),\n } satisfies AccordionItemRecord;\n }).filter((item): item is AccordionItemRecord => item !== null);\n\n const itemForValue = (value: string): AccordionItemRecord | null => (\n items().find((item) => item.value === value) ?? null\n );\n\n const itemFrom = (target: EventTarget | null): AccordionItemRecord | null => {\n if (!(target instanceof Element)) return null;\n const itemEl = target.closest<HTMLElement>('[data-ui-accordion-item]');\n return itemEl && owns(itemEl) ? items().find((item) => item.item === itemEl) ?? null : null;\n };\n\n const collectionContext = (): AccordionContext['collection'] => {\n const records = items();\n return {\n values: records.map((item) => item.value),\n disabledValues: records.filter((item) => item.disabled).map((item) => item.value),\n };\n };\n\n const normalize = (\n values: readonly string[],\n props: AccordionProps,\n itemValues: readonly string[],\n ): string[] => {\n const requested = new Set(values);\n const ordered = itemValues.filter((value) => requested.has(value));\n return props.mode === 'single' ? ordered.slice(0, 1) : ordered;\n };\n\n const initialContext = (props: AccordionProps): AccordionContext => {\n const collectionState = collectionContext();\n const controlled = props.mode === 'multiple'\n ? splitValues(props.values || props.value)\n : props.value ? [props.value] : [];\n const defaults = props.mode === 'multiple'\n ? splitValues(props.defaultValues)\n : props.defaultValue ? [props.defaultValue] : [];\n const authored = items().filter((item) => asBool({value: item.item.dataset.open})).map((item) => item.value);\n const requested = controlled.length > 0 ? controlled : defaults.length > 0 ? defaults : authored;\n return {\n selection: {values: normalize(requested, props, collectionState.values)},\n change: {openingValues: [], closingValues: []},\n collection: collectionState,\n };\n };\n\n const currentProps = (): Readonly<AccordionProps> => bridge.getCommittedSnapshot().props;\n const currentContext = (): Readonly<AccordionContext> => bridge.getCommittedSnapshot().context;\n\n const itemIsOpen = (item: AccordionItemRecord): boolean => currentContext().selection.values.includes(item.value);\n const itemIsDisabled = (item: AccordionItemRecord): boolean => currentProps().disabled || item.disabled;\n const canCollapse = (item: AccordionItemRecord): boolean => (\n currentProps().mode === 'multiple' || currentProps().collapsible || !itemIsOpen(item)\n );\n\n const syncRoot = (): void => {\n const props = currentProps();\n const values = currentContext().selection.values;\n reflectSchemaProp({\n el: root(),\n schema: accordionSchema,\n key: 'value',\n value: props.mode === 'single' ? values[0] ?? '' : '',\n });\n reflectSchemaProp({\n el: root(),\n schema: accordionSchema,\n key: 'values',\n value: props.mode === 'multiple' ? values.join(',') : '',\n });\n root().dataset.orientation = props.orientation;\n root().dataset.iconPosition = props.iconPosition;\n root().dataset.mode = props.mode;\n if (props.disabled) root().setAttribute('data-disabled', '');\n else root().removeAttribute('data-disabled');\n };\n\n let component!: TrellisAlpineComponent<AccordionData>;\n\n const syncItem = (item: AccordionItemRecord): void => {\n const props = currentProps();\n const open = itemIsOpen(item);\n const state = stateFor(open);\n const disabled = itemIsDisabled(item);\n const closing = bridge.hasTag('changing') && currentContext().change.closingValues.includes(item.value);\n\n item.item.dataset.state = state;\n item.item.dataset.orientation = props.orientation;\n item.item.className = resolveStyle({\n part: accordionStyles.parts.item,\n props,\n className: item.item.dataset.class ?? '',\n });\n item.heading?.setAttribute('data-state', state);\n item.heading?.setAttribute('data-orientation', props.orientation);\n\n const idPart = safeIdPart(item.value);\n item.trigger.id ||= idFor(`accordion-trigger-${idPart}`);\n item.content.id ||= idFor(`accordion-content-${idPart}`);\n item.trigger.type = 'button';\n item.trigger.dataset.state = state;\n item.trigger.dataset.orientation = props.orientation;\n item.trigger.className = resolveStyle({\n part: accordionStyles.parts.trigger,\n props,\n className: item.trigger.dataset.class ?? '',\n });\n item.trigger.setAttribute('aria-expanded', open ? 'true' : 'false');\n item.trigger.setAttribute('aria-controls', item.content.id);\n item.content.dataset.state = state;\n item.content.dataset.orientation = props.orientation;\n item.content.setAttribute('aria-labelledby', item.trigger.id);\n item.content.hidden = !open && !closing;\n\n [item.item, item.heading, item.trigger, item.content].forEach((element) => {\n if (!element) return;\n if (disabled) element.setAttribute('data-disabled', '');\n else element.removeAttribute('data-disabled');\n });\n item.trigger.disabled = disabled;\n if (disabled || (open && !canCollapse(item))) item.trigger.setAttribute('aria-disabled', 'true');\n else item.trigger.removeAttribute('aria-disabled');\n };\n\n const syncAll = (): void => {\n syncRoot();\n items().forEach(syncItem);\n };\n\n const emitChange = (): void => {\n const values = [...currentContext().selection.values];\n dispatch({el: root(), name: 'ui:change', detail: {\n value: currentProps().mode === 'single' ? values[0] ?? '' : '',\n values,\n }});\n };\n\n const bridge = createAlpineMachine({\n schema: accordionSchema,\n hooks: accordionHooks,\n resolveTransitionElement: ({data}) => {\n const value = (data as AccordionTransitionData).value;\n return itemForValue(value)?.content ?? null;\n },\n createMachine: ({props}) => createAccordionMachine({\n props,\n context: initialContext(props),\n effects: {\n prepareChange: () => {\n syncAll();\n emitChange();\n },\n finishChange: () => {\n syncAll();\n },\n syncProps: syncAll,\n syncItems: syncAll,\n },\n }),\n });\n\n const collectionNav = (): CollectionNavigation => {\n if (!collection) throw new Error('Accordion navigation has not been initialized.');\n return collection;\n };\n\n const sendItemsChanged = (): void => {\n const next = collectionContext();\n bridge.send({type: 'ITEMS_CHANGED', ...next});\n };\n\n const handleToggle = (item: AccordionItemRecord, event?: Event): void => {\n event?.preventDefault();\n if (itemIsDisabled(item)) return;\n bridge.send({type: 'TOGGLE', value: item.value, motion: !(event instanceof KeyboardEvent)});\n };\n\n const handleClick = (event: Event): void => {\n const item = itemFrom(event.target);\n if (!item || !(event.target instanceof Node) || !item.trigger.contains(event.target)) return;\n handleToggle(item, event);\n };\n\n const handleKeydown = (event: KeyboardEvent): void => {\n const item = itemFrom(event.target);\n if (!item || event.target !== item.trigger) return;\n if (event.key === 'Enter' || event.key === ' ') {\n handleToggle(item, event);\n return;\n }\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 (currentProps().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 handleFocus = (event: Event): void => {\n const item = itemFrom(event.target);\n if (item && event.target === item.trigger && !itemIsDisabled(item)) {\n collectionNav().activateItem({el: item.trigger});\n }\n };\n\n const setupObserver = (): void => {\n disconnectObserver = observeSemanticChanges({\n targets: root(),\n read: collectionContext,\n onChange: sendItemsChanged,\n observer: {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-value', 'data-item-disabled'],\n },\n });\n };\n\n component = {\n ...bridge,\n get value(): string {\n return currentProps().mode === 'single' ? this.snapshot.current?.context.selection.values[0] ?? '' : '';\n },\n get values(): readonly string[] {\n return [...this.snapshot.current?.context.selection.values ?? []];\n },\n init(): void {\n rootEl = this.$el;\n idFor = this.$id.bind(this);\n bridge.connect(this.$el, this.snapshot);\n collection = createCollectionNavigation({\n root,\n itemSelector: '[data-ui-accordion-trigger]',\n isDisabled: (el) => el.hasAttribute('disabled'),\n loop: () => currentProps().loop,\n });\n syncAll();\n setupObserver();\n },\n destroy(): void {\n disconnectObserver?.();\n disconnectObserver = null;\n bridge.disconnect();\n collection = null;\n rootEl = null;\n },\n get root(): BindingObject {\n const props = this.snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: accordionStyles.parts.root, props, className: props.class}),\n {\n 'data-ui-accordion': '',\n ':data-orientation': () => currentProps().orientation,\n ':data-disabled': () => currentProps().disabled ? '' : undefined,\n '@click': handleClick,\n '@keydown': (event: Event) => {\n if (event instanceof KeyboardEvent) handleKeydown(event);\n },\n '@focusin': handleFocus,\n },\n ]});\n },\n open(value: string): void {\n bridge.send({type: 'OPEN', value});\n },\n close(value: string): void {\n bridge.send({type: 'CLOSE', value});\n },\n toggle(value: string, event?: Event): void {\n const item = itemForValue(value);\n if (item) handleToggle(item, event);\n },\n isOpen(value: string): boolean {\n return this.snapshot.current?.context.selection.values.includes(value) ?? false;\n },\n };\n\n return component;\n};\n\nconst registerAccordion = defineAlpineData('UiAccordion', UiAccordion);\n\nexport {registerAccordion, UiAccordion};\nexport type {AccordionData, AccordionMode, AccordionTransition, UiAccordionApi};\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 {registerAccordion as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerAccordion = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerAccordion};\nexport default registerAccordion;\nexport * from './index';\n"],"mappings":"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"}
|