@vireo-ai/trellis-ui 0.1.61 → 0.1.63
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/THIRD_PARTY_NOTICES.md +9 -0
- package/package.json +15 -35
- package/packages/client/skills/compose-trellis-ui/SKILL.md +84 -0
- package/packages/client/skills/compose-trellis-ui/references/project-ui.md +40 -0
- package/packages/client/src/components/accordion/styles.css +21 -9
- package/packages/client/src/components/badge/styles.css +12 -0
- package/packages/client/src/components/button/styles.css +31 -5
- package/packages/client/src/components/card/styles.css +16 -0
- package/packages/client/src/components/checkbox/styles.css +29 -5
- package/packages/client/src/components/date-picker/styles.css +22 -17
- package/packages/client/src/components/field/styles.css +16 -16
- package/packages/client/src/components/input/styles.css +1 -0
- package/packages/client/src/components/keybinding/styles.css +9 -2
- package/packages/client/src/components/menu/styles.css +13 -0
- package/packages/client/src/components/panels/styles.css +12 -2
- package/packages/client/src/components/scroll-area/styles.css +169 -2
- package/packages/client/src/components/select/styles.css +28 -8
- package/packages/client/src/components/sidebar/styles.css +218 -0
- package/packages/client/src/components/slider/styles.css +57 -0
- package/packages/client/src/components/tabs/styles.css +26 -24
- package/packages/client/src/components/toast/styles.css +31 -0
- package/packages/client/src/directives/sortable.css +5 -0
- package/packages/client/src/runtime/drag-and-drop/resize-handle.css +2 -2
- package/packages/client/src/styles/components.css +8 -4
- package/packages/client/src/styles/fonts/fira-code/5.3.0/LICENSE +93 -0
- package/packages/client/src/styles/fonts/fira-code/5.3.0/download.json +47 -0
- package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-cyrillic-ext-wght-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-cyrillic-wght-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-greek-ext-wght-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-greek-wght-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-latin-ext-wght-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-latin-wght-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-symbols2-wght-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/fira-code/5.3.0/font.css +62 -0
- package/packages/client/src/styles/fonts/fira-code/5.3.0/resource.json +82 -0
- package/packages/client/src/styles/fonts/inter/5.3.0/LICENSE +93 -0
- package/packages/client/src/styles/fonts/inter/5.3.0/download.json +47 -0
- package/packages/client/src/styles/fonts/inter/5.3.0/font.css +62 -0
- package/packages/client/src/styles/fonts/inter/5.3.0/inter-cyrillic-ext-standard-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/inter/5.3.0/inter-cyrillic-standard-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/inter/5.3.0/inter-greek-ext-standard-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/inter/5.3.0/inter-greek-standard-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/inter/5.3.0/inter-latin-ext-standard-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/inter/5.3.0/inter-latin-standard-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/inter/5.3.0/inter-vietnamese-standard-normal.woff2 +0 -0
- package/packages/client/src/styles/fonts/inter/5.3.0/resource.json +82 -0
- package/packages/client/src/styles/generated/theme-fonts.css +3 -3
- package/packages/client/src/styles/generated/theme-palette.css +1001 -634
- package/packages/client/src/styles/generated/theme-runtime.css +938 -607
- package/packages/client/src/styles/generated-sources.css +1 -1
- package/packages/client/src/styles/layout.css +88 -0
- package/packages/client/src/styles/recipes/action.css +4 -16
- package/packages/client/src/styles/recipes/disabled.css +8 -0
- package/packages/client/src/styles/recipes/option.css +0 -44
- package/packages/client/src/styles/recipes/selection.css +28 -39
- package/packages/client/src/styles/theme-support.css +26 -42
- package/packages/client/src/styles/typography.css +26 -0
- package/packages/client/types/assets/bridge.d.ts +1 -2
- package/packages/client/types/capabilities/collection.d.ts +7 -0
- package/packages/client/types/capabilities/collection.entry.generated.d.ts +3 -0
- package/packages/client/types/capabilities/shortcut.d.ts +4 -3
- package/packages/client/types/components/accordion/machine.d.ts +4 -4
- package/packages/client/types/components/app/contract.d.ts +5 -5
- package/packages/client/types/components/badge/contract.d.ts +1 -0
- package/packages/client/types/components/box/contract.d.ts +17 -12
- package/packages/client/types/components/box/index.d.ts +1 -1
- package/packages/client/types/components/button/contract.d.ts +3 -2
- package/packages/client/types/components/card/contract.d.ts +27 -16
- package/packages/client/types/components/checkbox/contract.d.ts +13 -13
- package/packages/client/types/components/common.d.ts +13 -11
- package/packages/client/types/components/container/contract.d.ts +4 -3
- package/packages/client/types/components/data-grid/contract.d.ts +3 -2
- package/packages/client/types/components/date-picker/contract.d.ts +2 -2
- package/packages/client/types/components/date-picker/machine.d.ts +11 -11
- package/packages/client/types/components/dropdown/contract.d.ts +1 -1
- package/packages/client/types/components/dropdown/machine.d.ts +5 -3
- package/packages/client/types/components/field/contract.d.ts +4 -4
- package/packages/client/types/components/file-upload/contract.d.ts +3 -3
- package/packages/client/types/components/file-upload/machine.d.ts +4 -4
- package/packages/client/types/components/flex/contract.d.ts +10 -8
- package/packages/client/types/components/frame/contract.d.ts +14 -11
- package/packages/client/types/components/grid/contract.d.ts +8 -7
- package/packages/client/types/components/image/contract.d.ts +1 -0
- package/packages/client/types/components/import-flow/contract.d.ts +1 -0
- package/packages/client/types/components/input/contract.d.ts +1 -0
- package/packages/client/types/components/input/machine.d.ts +2 -2
- package/packages/client/types/components/layout.d.ts +91 -35
- package/packages/client/types/components/menu/contract.d.ts +27 -10
- package/packages/client/types/components/modal/contract.d.ts +22 -5
- package/packages/client/types/components/panels/contract.d.ts +2 -2
- package/packages/client/types/components/panels/index.d.ts +2 -1
- package/packages/client/types/components/panels/machine.d.ts +9 -8
- package/packages/client/types/components/radio/contract.d.ts +8 -8
- package/packages/client/types/components/scroll-area/contract.d.ts +1 -20
- package/packages/client/types/components/section/contract.d.ts +4 -3
- package/packages/client/types/components/select/contract.d.ts +3 -3
- package/packages/client/types/components/select/machine.d.ts +13 -13
- package/packages/client/types/components/select/presentation.d.ts +1 -0
- package/packages/client/types/components/sidebar/contract.d.ts +26 -8
- package/packages/client/types/components/sidebar/groups.d.ts +4 -0
- package/packages/client/types/components/sidebar/index.d.ts +5 -4
- package/packages/client/types/components/slider/contract.d.ts +1 -0
- package/packages/client/types/components/slider/machine.d.ts +10 -5
- package/packages/client/types/components/stack/contract.d.ts +10 -8
- package/packages/client/types/components/switch/contract.d.ts +8 -8
- package/packages/client/types/components/table/contract.d.ts +6 -5
- package/packages/client/types/components/tabs/index.d.ts +2 -1
- package/packages/client/types/components/tabs/machine.d.ts +2 -2
- package/packages/client/types/components/textarea/contract.d.ts +1 -1
- package/packages/client/types/components/toast/machine.d.ts +2 -2
- package/packages/client/types/components/tooltip/contract.d.ts +13 -13
- package/packages/client/types/components/tooltip/machine.d.ts +3 -7
- package/packages/client/types/core.d.ts +3 -1
- package/packages/client/types/directives/anchor.d.ts +1 -0
- package/packages/client/types/directives/animate.d.ts +3 -0
- package/packages/client/types/directives/collection.d.ts +9 -0
- package/packages/client/types/directives/index.d.ts +2 -2
- package/packages/client/types/docs/transition-docs.d.ts +0 -2
- package/packages/client/types/motion/animate.d.ts +7 -2
- package/packages/client/types/motion/config.d.ts +118 -0
- package/packages/client/types/motion/feedback.d.ts +3 -0
- package/packages/client/types/motion/index.d.ts +8 -107
- package/packages/client/types/motion/layout.d.ts +25 -0
- package/packages/client/types/motion/lifecycle.d.ts +10 -0
- package/packages/client/types/motion/owned.d.ts +15 -4
- package/packages/client/types/motion/properties.d.ts +17 -0
- package/packages/client/types/motion/recipe.d.ts +8 -75
- package/packages/client/types/motion/reduced-motion.d.ts +7 -8
- package/packages/client/types/motion/registry.d.ts +37 -0
- package/packages/client/types/motion/resize-preview.d.ts +26 -0
- package/packages/client/types/motion/resize.d.ts +3 -1
- package/packages/client/types/motion/size.d.ts +7 -4
- package/packages/client/types/runtime/anchored-popover.d.ts +11 -2
- package/packages/client/types/runtime/collection-navigation.d.ts +12 -4
- package/packages/client/types/runtime/control-size.d.ts +4 -0
- package/packages/client/types/runtime/drag-and-drop/index.d.ts +10 -3
- package/packages/client/types/runtime/drag-and-drop/sortable/ghost.d.ts +2 -1
- package/packages/client/types/runtime/engine/fragment.d.ts +2 -1
- package/packages/client/types/runtime/engine/stream.d.ts +5 -9
- package/packages/client/types/runtime/focus.d.ts +3 -1
- package/packages/client/types/runtime/index.d.ts +2 -2
- package/packages/client/types/runtime/layout-participant.d.ts +10 -9
- package/packages/client/types/runtime/layout-task.d.ts +9 -0
- package/packages/client/types/runtime/morph-engine.d.ts +1 -0
- package/packages/client/types/runtime/option-data.d.ts +2 -1
- package/packages/client/types/runtime/preferences.d.ts +14 -0
- package/packages/client/types/runtime/scroll-area-schema.d.ts +23 -0
- package/packages/client/types/runtime/theme.d.ts +6 -4
- package/packages/client/types/runtime/ui.d.ts +5 -5
- package/packages/client/types/runtime/virtualizer-schema.d.ts +3 -1
- package/packages/client/types/runtime/virtualizer-size.d.ts +7 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge-B7apK0M-.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge-B7apK0M-.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +984 -1132
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{anchor-B-CbpFFU.js → anchor-DXCLxWw-.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{anchor-B-CbpFFU.js.map → anchor-DXCLxWw-.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/anchor.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/collection-CSrnChwy.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/collection-CSrnChwy.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/collection.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable-DlgeSL0c.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{resizable-Ctqx_OoS.js.map → resizable-DlgeSL0c.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut-Qa2EByIB.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{shortcut-D2NgvMgw.js.map → shortcut-Qa2EByIB.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable-CgP1efhO.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{sortable-CbIOS4Lm.js.map → sortable-CgP1efhO.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-BqejlBjS.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-BqejlBjS.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-DPMSJ1AR.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-DPMSJ1AR.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BFvGIAs8.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BFvGIAs8.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-CpUAUTdh.js +5 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-CpUAUTdh.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-et2se66r.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-et2se66r.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-DnEHZCqy.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-DnEHZCqy.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/control-size-BcDu1m1N.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/control-size-BcDu1m1N.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-de7TruDm.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-de7TruDm.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-DdiMUeJM.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-DdiMUeJM.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dismissable-layer-MzcgNRti.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dismissable-layer-MzcgNRti.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/element-adapter-native-data-key-zFOeeob-.js +6 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{element-adapter-native-data-key-DrqJDAVH.js.map → element-adapter-native-data-key-zFOeeob-.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/feedback-DP_ydw-J.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/feedback-DP_ydw-J.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/floating-ui.dom-B05VsV_p.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/floating-ui.dom-B05VsV_p.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{focus-pk_lz9sg.js → focus-BvBkrIcj.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{focus-pk_lz9sg.js.map → focus-BvBkrIcj.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-DYfME-Rk.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{focus-scope-BrYxsrhc.js.map → focus-scope-DYfME-Rk.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/fragment-DVphuQVV.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/fragment-DVphuQVV.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/frame-DsKHMcuL.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/frame-DsKHMcuL.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/hover-CqeHOHpJ.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/hover-CqeHOHpJ.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/identity-BMTQyLbq.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/identity-BMTQyLbq.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-mHPk9rxi.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-mHPk9rxi.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-task-B6P8q7BH.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-task-B6P8q7BH.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-wLgk8rAu.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-wLgk8rAu.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-Do4tL7nc.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-Do4tL7nc.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/option-data-Du9mqQPo.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/option-data-Du9mqQPo.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/preferences-BZyZ-kK6.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/preferences-BZyZ-kK6.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/preload-helper-BZ1Pz5am.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/properties-D8pFWF8g.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/properties-D8pFWF8g.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/resize-DRGrWivx.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/resize-DRGrWivx.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/resize-preview-hnUhGcMX.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/resize-preview-hnUhGcMX.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/scroll-area-schema-DZgYyysJ.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/scroll-area-schema-DZgYyysJ.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/size-DAtboz8G.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/size-DAtboz8G.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{styles-CQDZhwd_.js → styles-BvLCjUXV.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/styles-BvLCjUXV.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CVVSxrtG.js +4 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CVVSxrtG.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtualizer-size-CTy2gO64.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtualizer-size-CTy2gO64.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion-DGWRKBdw.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion-DGWRKBdw.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button-DA4Ii46-.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button-DA4Ii46-.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox-omt0I9Rh.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox-omt0I9Rh.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid-Cr9kEoo9.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid-Cr9kEoo9.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker-CtTM4Gf6.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker-CtTM4Gf6.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload-B4dcq4bn.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload-B4dcq4bn.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown-BEMZqp_I.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown-BEMZqp_I.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field-BeqlTp38.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field-BeqlTp38.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload-DCluNmYW.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload-DCluNmYW.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset-DkPKkwlt.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset-DkPKkwlt.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper-aSuqkRen.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper-aSuqkRen.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input-2UqpKKXs.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input-2UqpKKXs.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding-DjUHW-EE.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding-DjUHW-EE.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-DYn805Mg.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-DYn805Mg.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels-C4TtKM8_.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels-C4TtKM8_.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio-gAYZVe11.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio-gAYZVe11.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area-SBruA-pr.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area-SBruA-pr.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select-C3hjgwMw.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select-C3hjgwMw.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar-b0T3yohM.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar-b0T3yohM.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider-B08DRTzI.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider-B08DRTzI.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch-CO-1hVz6.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch-CO-1hVz6.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table-BlPgZVqW.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table-BlPgZVqW.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs-CDbYmlUb.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs-CDbYmlUb.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast-Dxht5Hhg.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast-Dxht5Hhg.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip-Ck_ZV7RN.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip-Ck_ZV7RN.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer-BfCjewp3.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer-BfCjewp3.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core-CbDVD_pk.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core-CbDVD_pk.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +299 -441
- package/packages/theme-engine/README.md +98 -18
- package/packages/theme-engine/THEME_AUTHORING.md +34 -0
- package/packages/theme-engine/dist/trellis.js +613 -285
- package/packages/theme-engine/fonts/fira-code/5.3.0/LICENSE +93 -0
- package/packages/theme-engine/fonts/fira-code/5.3.0/download.json +47 -0
- package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-cyrillic-ext-wght-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-cyrillic-wght-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-greek-ext-wght-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-greek-wght-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-latin-ext-wght-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-latin-wght-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-symbols2-wght-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/fira-code/5.3.0/font.css +62 -0
- package/packages/theme-engine/fonts/fira-code/5.3.0/resource.json +82 -0
- package/packages/theme-engine/fonts/inter/5.3.0/LICENSE +93 -0
- package/packages/theme-engine/fonts/inter/5.3.0/download.json +47 -0
- package/packages/theme-engine/fonts/inter/5.3.0/font.css +62 -0
- package/packages/theme-engine/fonts/inter/5.3.0/inter-cyrillic-ext-standard-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/inter/5.3.0/inter-cyrillic-standard-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/inter/5.3.0/inter-greek-ext-standard-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/inter/5.3.0/inter-greek-standard-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/inter/5.3.0/inter-latin-ext-standard-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/inter/5.3.0/inter-latin-standard-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/inter/5.3.0/inter-vietnamese-standard-normal.woff2 +0 -0
- package/packages/theme-engine/fonts/inter/5.3.0/resource.json +82 -0
- package/packages/theme-engine/generated/knobs/v1/color-alpha.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/color-foundations.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/color-ink.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/color-lighting.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/color-normalization.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/color-ramps.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/composition.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/depth.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/edges.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/index.json +572 -85
- package/packages/theme-engine/generated/knobs/v1/manifest.json +25 -46
- package/packages/theme-engine/generated/knobs/v1/radii.json +50 -1
- package/packages/theme-engine/generated/knobs/v1/semantic-actions.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/semantic-disabled.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/semantic-disclosure.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/semantic-intents.json +856 -37
- package/packages/theme-engine/generated/knobs/v1/semantic-scrim.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/semantic-selection.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/semantic-structure.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/semantic-text-selection.json +372 -0
- package/packages/theme-engine/generated/knobs/v1/sizing-anatomy.json +4 -4
- package/packages/theme-engine/generated/knobs/v1/sizing-controls.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/sizing-measures.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/spacing.json +2 -2
- package/packages/theme-engine/generated/knobs/v1/substrates.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/surfaces.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/typography-anatomy.json +1 -1
- package/packages/theme-engine/generated/knobs/v1/typography-fonts.json +158 -40
- package/packages/theme-engine/generated/knobs/v1/typography-scale.json +1 -1
- package/packages/theme-engine/generated/schemas/theme-config-v1.json +108 -36
- package/packages/theme-engine/generated/schemas/theme-manifest-v1.json +10 -37
- package/packages/theme-engine/skills/create-trellis-theme/SKILL.md +4 -5
- package/packages/client/src/components/app/styles.css +0 -1
- package/packages/client/src/components/brand/styles.css +0 -8
- package/packages/client/src/styles/motion.css +0 -26
- package/packages/client/src/styles/static.css +0 -3
- package/packages/client/types/assets/full-runtime.generated.d.ts +0 -2
- package/packages/client/types/capabilities/motion.d.ts +0 -6
- package/packages/client/types/capabilities/motion.entry.generated.d.ts +0 -3
- package/packages/client/types/cdn.d.ts +0 -2
- package/packages/client/types/components/entry.generated.d.ts +0 -37
- package/packages/client/types/directives/bounds.d.ts +0 -4
- package/packages/client/types/directives/layout.d.ts +0 -3
- package/packages/client/types/index.d.ts +0 -8
- package/packages/client/types/motion/bounds.d.ts +0 -20
- package/packages/client/types/motion/controller.d.ts +0 -33
- package/packages/client/types/motion/flip.d.ts +0 -14
- package/packages/client/types/motion/plan.d.ts +0 -52
- package/packages/client/types/motion/stream.d.ts +0 -18
- package/packages/client/types/motion/targets.d.ts +0 -23
- package/packages/client/types/motion/view.d.ts +0 -27
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis-103fb43eb5e1.css +0 -14030
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +0 -14030
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min-584dec82495c.css +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge-COxhbtRZ.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion-CKiK3BQA.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion-CKiK3BQA.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable-Ctqx_OoS.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut-D2NgvMgw.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable-CbIOS4Lm.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/alpine-machine-CE2UN4Qu.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/alpine-machine-CE2UN4Qu.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/bridge-DMrvM3JE.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/bridge-DMrvM3JE.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-lhqk7hfo.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-lhqk7hfo.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-B32HePGn.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-B32HePGn.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-ByUbMIHF.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-ByUbMIHF.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-DZUQHJ3A.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-DZUQHJ3A.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bl6ng6Hd.js +0 -5
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bl6ng6Hd.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-hTbwy6oQ.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-hTbwy6oQ.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-CBK89mIt.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-CBK89mIt.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-C8xqwkr0.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-C8xqwkr0.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-BxNepYBE.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-BxNepYBE.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-Do0FfF4Z.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-Do0FfF4Z.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dismissable-layer-BROE-Ln2.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dismissable-layer-BROE-Ln2.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/element-adapter-native-data-key-DrqJDAVH.js +0 -6
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-7hdXmBLE.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-7hdXmBLE.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BCTWp6Xu.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BCTWp6Xu.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BQNpmLZO.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BQNpmLZO.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BRaKxvab.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BRaKxvab.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BZWdGtgg.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BZWdGtgg.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BnqcHAaF.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BnqcHAaF.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BzLNUDzF.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BzLNUDzF.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CC6pQ0nu.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CC6pQ0nu.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CEfr2bmw.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CEfr2bmw.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CL4bjCqf.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CL4bjCqf.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CVWqQEed.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CVWqQEed.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C_SxTqg5.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C_SxTqg5.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cbyseoex.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cbyseoex.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cf2hKkwA.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cf2hKkwA.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CfYgsDun.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CfYgsDun.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cl8rInnJ.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cl8rInnJ.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Ct9H8Hlf.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Ct9H8Hlf.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D2es_Wi2.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D2es_Wi2.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DQtFqG0K.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DQtFqG0K.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-EqHVGr1d.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-EqHVGr1d.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-FCDgmA0s.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-FCDgmA0s.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-HqE8R7N1.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-HqE8R7N1.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-J0oGNBzS.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-J0oGNBzS.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-O0hEhk-2.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-O0hEhk-2.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-oJwO9fIY.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-oJwO9fIY.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xjydizn-.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xjydizn-.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/flip-BKThFI4L.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/flip-BKThFI4L.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-BrYxsrhc.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/fragment-9OT0mn7F.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/fragment-9OT0mn7F.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-CNnHDbyo.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-CNnHDbyo.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-RwlK04Cy.js +0 -3
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-RwlK04Cy.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/pdd-BG5sXFGF.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/pdd-BG5sXFGF.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/styles-CQDZhwd_.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-Bg44ZmC3.js +0 -4
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-Bg44ZmC3.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion-DpoqsP_I.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button-Dnf0aKac.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox-BpFFtrfY.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid-CCPYnOuT.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker-BCkP5gtC.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload-DaT6-YFL.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown-Cc84envj.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field-CtQbyblj.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload-DARtpJDT.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset-CPO4XZkB.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper-C-3lKsKm.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DRH3gncZ.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DRH3gncZ.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input-BKEbDkKa.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding-RIi2q1IT.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-MUHGUsup.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels-DNAroAhk.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio-DrGFMWGq.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area-CyUCAbgG.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select-BjLF548F.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar-GpvEBW3K.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider-OztnTlqr.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch-CZ7aiASg.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table-G3G5d2Eo.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs-bq7j1uwx.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast-DkP0-rBO.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip-OITEWczP.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer-CkRX2qVO.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core-Z4zMCScs.js +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-DAz_hKiB.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-DAz_hKiB.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis-ecb43dfd3b7b.js +0 -11
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +0 -11
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min-ecb43dfd3b7b.js +0 -11
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +0 -11
- package/packages/theme-engine/generated/knobs/v1/motion.json +0 -128
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formset-DkPKkwlt.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 focusElement,\n tabbableElements,\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 ??= tabbableElements(item)[0] ?? null;\n focusElement(target);\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 tabbableElements(row)[0] ?? null;\n const add = findOwned<HTMLElement>('[data-ui-formset-add]');\n if (!add) return null;\n return add.tabIndex >= 0 ? add : tabbableElements(add)[0] ?? null;\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 focusElement(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 +1,2 @@
|
|
|
1
|
-
export * from "./formset-
|
|
2
|
-
export {default} from "./formset-
|
|
1
|
+
export * from "./formset-DkPKkwlt.js";
|
|
2
|
+
export {default} from "./formset-DkPKkwlt.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"../chunks/dom-DiTFTWeR.js";import{n as t,t as n}from"../chunks/alpine-data-Dvc_bXq6.js";var r=e=>{let t=e.filter(e=>!e.deleted),n=new Set(t.map(e=>e.source).filter(Boolean)),r=new Set(t.map(e=>e.target).filter(Boolean));return{usedSources:n,usedTargets:r,sourceAvailable:(e,t)=>t===e||!n.has(t),targetAvailable:(e,t)=>t===e||!r.has(t)}},i=()=>{let t=null,i,a=e=>e?.dataset.value??``,o=e=>e.closest(`[data-ui-import-mapper]`)===t,s=e=>Array.from(t?.querySelectorAll(e)??[]).filter(o),c=(e,t)=>Array.from(e.querySelectorAll(t)).find(o)??null,l=()=>Array.from(s(`[data-ui-formset-item]`)).map(e=>({source:a(c(e,`[data-ui-import-mapping-source]`)),target:a(c(e,`[data-ui-import-mapping-target]`)),deleted:e.dataset.formState===`deleted`})),u=(e,t)=>{let n=a(e);e.querySelectorAll(`[data-ui-select-option][data-value]`).forEach(e=>{let r=t(n,e.dataset.value??``);e.toggleAttribute(`data-disabled`,!r),r?e.removeAttribute(`aria-disabled`):e.setAttribute(`aria-disabled`,`true`)})};return{activeSource:``,init(){i=n(this),t=this.$el,e({target:t,event:`ui:formset-change`,handler:()=>this.refresh(),cleanup:i}),e({target:t,event:`ui:change`,cleanup:i,handler:e=>{let t=e.target instanceof Element?e.target.closest(`[data-ui-import-mapping-source]`):null;t&&o(t)&&this.selectSource(a(t)),this.refresh()}}),this.refresh()},destroy(){t=null},refresh(){if(!t)return;let e=l(),n=r(e);(!this.activeSource||!n.usedSources.has(this.activeSource))&&(this.activeSource=e.find(e=>!e.deleted&&e.source)?.source??``),s(`[data-ui-import-mapping-source]`).forEach(e=>u(e,n.sourceAvailable)),s(`[data-ui-import-mapping-target]`).forEach(e=>u(e,n.targetAvailable))},selectSource(e){e&&(this.activeSource=e)}}},a=e=>{t(`UiImportMapper`,i)(e)},o=new WeakSet,s=e=>{o.has(e)||(o.add(e),a(e))};export{i as UiImportMapper,s as default,s as registerImportMapper,r as mappingProjection};
|
|
2
|
+
//# sourceMappingURL=import-mapper-aSuqkRen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-mapper-aSuqkRen.js","names":[],"sources":["../../../../../../../../client/src/components/import-mapper/index.ts","../../../../../../../../client/src/components/import-mapper/entry.generated.ts"],"sourcesContent":["import type Alpine from 'alpinejs';\n\nimport {addListener, defineAlpineData, type TrellisAlpineComponent} from '@client/runtime';\nimport {cleanupManagerFor} from '@client/runtime/alpine-data';\nimport type {CleanupManager} from '@client/runtime/cleanup-manager';\n\ntype MappingProjectionRow = {\n source: string;\n target: string;\n deleted: boolean;\n};\n\ntype MappingProjection = {\n usedSources: ReadonlySet<string>;\n usedTargets: ReadonlySet<string>;\n sourceAvailable(current: string, candidate: string): boolean;\n targetAvailable(current: string, candidate: string): boolean;\n};\n\nconst mappingProjection = (rows: readonly MappingProjectionRow[]): MappingProjection => {\n const active = rows.filter((row) => !row.deleted);\n const usedSources = new Set(active.map((row) => row.source).filter(Boolean));\n const usedTargets = new Set(active.map((row) => row.target).filter(Boolean));\n return {\n usedSources,\n usedTargets,\n sourceAvailable: (current, candidate) => candidate === current || !usedSources.has(candidate),\n targetAvailable: (current, candidate) => candidate === current || !usedTargets.has(candidate),\n };\n};\n\ntype ImportMapperData = {\n activeSource: string;\n init(): void;\n destroy(): void;\n refresh(): void;\n selectSource(source: string): void;\n};\n\nconst UiImportMapper = (): TrellisAlpineComponent<ImportMapperData> => {\n let root: HTMLElement | null = null;\n let cleanup: CleanupManager;\n\n const selectValue = (element: HTMLElement | null): string => element?.dataset.value ?? '';\n const owns = (element: Element): boolean => element.closest('[data-ui-import-mapper]') === root;\n const owned = <T extends Element>(selector: string): T[] => Array.from(\n root?.querySelectorAll<T>(selector) ?? [],\n ).filter(owns);\n const ownedDescendant = <T extends Element>(element: Element, selector: string): T | null => (\n Array.from(element.querySelectorAll<T>(selector)).find(owns) ?? null\n );\n const rows = (): MappingProjectionRow[] => Array.from(\n owned<HTMLElement>('[data-ui-formset-item]'),\n ).map((item) => ({\n source: selectValue(ownedDescendant(item, '[data-ui-import-mapping-source]')),\n target: selectValue(ownedDescendant(item, '[data-ui-import-mapping-target]')),\n deleted: item.dataset.formState === 'deleted',\n }));\n\n const setAvailability = (\n select: HTMLElement,\n available: (current: string, candidate: string) => boolean,\n ): void => {\n const current = selectValue(select);\n select.querySelectorAll<HTMLElement>('[data-ui-select-option][data-value]').forEach((option) => {\n const enabled = available(current, option.dataset.value ?? '');\n option.toggleAttribute('data-disabled', !enabled);\n if (enabled) option.removeAttribute('aria-disabled');\n else option.setAttribute('aria-disabled', 'true');\n });\n };\n\n return {\n activeSource: '',\n init(): void {\n cleanup = cleanupManagerFor(this);\n root = this.$el;\n addListener({target: root, event: 'ui:formset-change', handler: () => this.refresh(), cleanup});\n addListener({\n target: root,\n event: 'ui:change',\n cleanup,\n handler: (event) => {\n const target = event.target instanceof Element\n ? event.target.closest<HTMLElement>('[data-ui-import-mapping-source]')\n : null;\n if (target && owns(target)) this.selectSource(selectValue(target));\n this.refresh();\n },\n });\n this.refresh();\n },\n destroy(): void {\n root = null;\n },\n refresh(): void {\n if (!root) return;\n const currentRows = rows();\n const projection = mappingProjection(currentRows);\n if (!this.activeSource || !projection.usedSources.has(this.activeSource)) {\n this.activeSource = currentRows.find((row) => !row.deleted && row.source)?.source ?? '';\n }\n owned<HTMLElement>('[data-ui-import-mapping-source]')\n .forEach((select) => setAvailability(select, projection.sourceAvailable));\n owned<HTMLElement>('[data-ui-import-mapping-target]')\n .forEach((select) => setAvailability(select, projection.targetAvailable));\n },\n selectSource(source: string): void {\n if (source) this.activeSource = source;\n },\n };\n};\n\nconst registerImportMapper = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiImportMapper', UiImportMapper)(AlpineInstance);\n};\n\nexport {mappingProjection, registerImportMapper, UiImportMapper};\nexport type {ImportMapperData, MappingProjection, MappingProjectionRow};\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 {registerImportMapper as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerImportMapper = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerImportMapper};\nexport default registerImportMapper;\nexport * from './index';\n"],"mappings":"2GAmBA,IAAM,EAAqB,GAA6D,CACpF,IAAM,EAAS,EAAK,OAAQ,GAAQ,CAAC,EAAI,OAAO,EAC1C,EAAc,IAAI,IAAI,EAAO,IAAK,GAAQ,EAAI,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC,EACrE,EAAc,IAAI,IAAI,EAAO,IAAK,GAAQ,EAAI,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC,EAC3E,MAAO,CACH,cACA,cACA,iBAAkB,EAAS,IAAc,IAAc,GAAW,CAAC,EAAY,IAAI,CAAS,EAC5F,iBAAkB,EAAS,IAAc,IAAc,GAAW,CAAC,EAAY,IAAI,CAAS,CAChG,CACJ,EAUM,MAAiE,CACnE,IAAI,EAA2B,KAC3B,EAEE,EAAe,GAAwC,GAAS,QAAQ,OAAS,GACjF,EAAQ,GAA8B,EAAQ,QAAQ,yBAAyB,IAAM,EACrF,EAA4B,GAA0B,MAAM,KAC9D,GAAM,iBAAoB,CAAQ,GAAK,CAAC,CAC5C,CAAC,CAAC,OAAO,CAAI,EACP,GAAsC,EAAkB,IAC1D,MAAM,KAAK,EAAQ,iBAAoB,CAAQ,CAAC,CAAC,CAAC,KAAK,CAAI,GAAK,KAE9D,MAAqC,MAAM,KAC7C,EAAmB,wBAAwB,CAC/C,CAAC,CAAC,IAAK,IAAU,CACb,OAAQ,EAAY,EAAgB,EAAM,iCAAiC,CAAC,EAC5E,OAAQ,EAAY,EAAgB,EAAM,iCAAiC,CAAC,EAC5E,QAAS,EAAK,QAAQ,YAAc,SACxC,EAAE,EAEI,GACF,EACA,IACO,CACP,IAAM,EAAU,EAAY,CAAM,EAClC,EAAO,iBAA8B,qCAAqC,CAAC,CAAC,QAAS,GAAW,CAC5F,IAAM,EAAU,EAAU,EAAS,EAAO,QAAQ,OAAS,EAAE,EAC7D,EAAO,gBAAgB,gBAAiB,CAAC,CAAO,EAC5C,EAAS,EAAO,gBAAgB,eAAe,EAC9C,EAAO,aAAa,gBAAiB,MAAM,CACpD,CAAC,CACL,EAEA,MAAO,CACH,aAAc,GACd,MAAa,CACT,EAAU,EAAkB,IAAI,EAChC,EAAO,KAAK,IACZ,EAAY,CAAC,OAAQ,EAAM,MAAO,oBAAqB,YAAe,KAAK,QAAQ,EAAG,SAAO,CAAC,EAC9F,EAAY,CACR,OAAQ,EACR,MAAO,YACP,UACA,QAAU,GAAU,CAChB,IAAM,EAAS,EAAM,kBAAkB,QACjC,EAAM,OAAO,QAAqB,iCAAiC,EACnE,KACF,GAAU,EAAK,CAAM,GAAG,KAAK,aAAa,EAAY,CAAM,CAAC,EACjE,KAAK,QAAQ,CACjB,CACJ,CAAC,EACD,KAAK,QAAQ,CACjB,EACA,SAAgB,CACZ,EAAO,IACX,EACA,SAAgB,CACZ,GAAI,CAAC,EAAM,OACX,IAAM,EAAc,EAAK,EACnB,EAAa,EAAkB,CAAW,GAC5C,CAAC,KAAK,cAAgB,CAAC,EAAW,YAAY,IAAI,KAAK,YAAY,KACnE,KAAK,aAAe,EAAY,KAAM,GAAQ,CAAC,EAAI,SAAW,EAAI,MAAM,CAAC,EAAE,QAAU,IAEzF,EAAmB,iCAAiC,CAAC,CAChD,QAAS,GAAW,EAAgB,EAAQ,EAAW,eAAe,CAAC,EAC5E,EAAmB,iCAAiC,CAAC,CAChD,QAAS,GAAW,EAAgB,EAAQ,EAAW,eAAe,CAAC,CAChF,EACA,aAAa,EAAsB,CAC3B,IAAQ,KAAK,aAAe,EACpC,CACJ,CACJ,EAEM,EAAwB,GAAwC,CAClE,EAAiB,iBAAkB,CAAc,CAAC,CAAC,CAAc,CACrE,EC7GM,EAAa,IAAI,QAEjB,EAAwB,GAAqC,CAC3D,EAAW,IAAI,CAAc,IACjC,EAAW,IAAI,CAAc,EAE7B,EAAkB,CAAc,EACpC"}
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./import-mapper-
|
|
2
|
-
export {default} from "./import-mapper-
|
|
1
|
+
export * from "./import-mapper-aSuqkRen.js";
|
|
2
|
+
export {default} from "./import-mapper-aSuqkRen.js";
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input-2UqpKKXs.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{o as e,s as t,t as n}from"../chunks/dom-DiTFTWeR.js";import{n as r}from"../chunks/morph-Cq3V_23_.js";import{f as i,l as a,n as o}from"../chunks/codecs-CQ7olTJL.js";import{n as s,t as c}from"../chunks/machine-Do4tL7nc.js";import{n as l}from"../chunks/focus-BvBkrIcj.js";import{n as u,t as d}from"../chunks/alpine-data-Dvc_bXq6.js";import{n as f}from"../chunks/props-change-2xfsIAEN.js";import{n as p,r as m}from"../chunks/form-control-DL1Hkox3.js";import{t as h}from"../chunks/control-size-BcDu1m1N.js";import{g,r as _,s as v}from"../chunks/common-DnEHZCqy.js";import{t as y}from"../chunks/feedback-DP_ydw-J.js";var b=[`outline`,`plain`,`surface`];a(b,`outline`);var x=h,S=v,C=_,w=g,T={type:i.default(`text`),name:i,value:i,placeholder:i,size:a(x,`lg`),variant:a(S,`outline`),radius:a(C,`md`),disabled:o,readonly:o,required:o,invalid:o,icon:i,iconTrailing:i,iconVariant:a(w,`outline`),clearable:o,copyable:o,keys:i,keysVariant:a(b,`outline`),prefix:i,suffix:i,rootClass:i,controlClass:i,class:i};a(x,`lg`),a(S,`outline`),a(C,`md`);var E=[],D=e=>typeof e.value==`string`?e.value:``,O=e=>({context:{value:D(e.event)}}),k=()=>({context:{value:``}}),A=e=>{let t=f(e.event);if(!t)return;let n=t.changes.some(({key:e})=>e===`value`);return{props:t.props,context:n?{value:t.props.value}:e.context}},j=({props:e,effects:t})=>c({initial:`idle`,on:{VALUE_CHANGED:{target:`idle`,reduce:`setValue`,effects:`sync`},CLEAR:{target:`idle`,reduce:`clearValue`,effects:[`sync`,`emitInput`,`emitChange`,`focus`]},COPY:{target:`copying`,guard:({props:e})=>!e.disabled},PROPS_CHANGED:[{target:`idle`,guard:({event:e})=>f(e)?.changes.some(({key:e})=>e===`value`||e===`disabled`)??!1,reduce:`reconcileProps`,effects:`sync`},{reduce:`reconcileProps`,effects:`sync`}]},states:{idle:{},copying:{entry:[`sync`,`copy`],on:{COPY_DONE:{target:`copied`},COPY_ERROR:{target:`error`}}},copied:{tags:[`copied`],entry:[`sync`,`startFeedbackTimer`],on:{COPY_FEEDBACK_TIMEOUT:{target:`idle`,effects:`sync`}}},error:{tags:[`copyError`],entry:[`sync`,`startFeedbackTimer`],on:{COPY_FEEDBACK_TIMEOUT:{target:`idle`,effects:`sync`}}}}},{context:{value:e.value},props:e,reducers:{setValue:O,clearValue:k,reconcileProps:A},effects:t}),M=()=>{let i=null,a=null,o,c=!1,u=new AbortController,f=y(u.signal),h=()=>{if(!i)throw Error(`Input has not been initialized.`);return i},g=()=>{if(!a)throw Error(`Input requires a native input element.`);return a},_=()=>x.getCommittedSnapshot(),v=()=>{let n=_(),i=n.props,a=g();a.value!==n.context.value&&(a.value=n.context.value),a.type=i.type,i.placeholder?a.placeholder=i.placeholder:a.removeAttribute(`placeholder`),m({input:a,state:{name:i.name,disabled:i.disabled,readonly:i.readonly,required:i.required,invalid:i.invalid}}),p({el:h(),state:i,value:`true`});let o=h().querySelector(`[data-ui-input-control]`);o&&p({el:o,state:{disabled:i.disabled,invalid:i.invalid},value:`true`}),h().querySelectorAll(`[data-ui-input-clear]`).forEach(e=>{e.hidden=n.context.value.length===0,e instanceof HTMLButtonElement&&(e.disabled=i.disabled||i.readonly)});let s=n.tags.includes(`copied`)?`copied`:n.tags.includes(`copyError`)?`error`:`idle`,c=s===`copied`?`Copied`:s===`error`?`Copy failed`:`Copy`;h().querySelectorAll(`[data-ui-input-copy]`).forEach(o=>{let l=(a.getAttribute(`aria-labelledby`)??``).split(/\s+/).filter(e=>e&&a.ownerDocument.getElementById(e)),u=a.getAttribute(`aria-label`)?.trim();!l.length&&!u&&a.labels?.forEach(e=>{e.id||(e.id=`ui-input-label-${crypto.randomUUID()}`,r(e,`id`)),l.push(e.id)}),o instanceof HTMLButtonElement&&(o.disabled=i.disabled),e({el:o,attr:`aria-label`,value:!l.length&&u?`${c} ${u}`:c}),l.length?(o.id||=`ui-input-copy-${crypto.randomUUID()}`,e({el:o,attr:`aria-labelledby`,value:[o.id,...l].join(` `)}),r(o,`id`,`aria-label`,`aria-labelledby`)):o.removeAttribute(`aria-labelledby`),o.querySelectorAll(`[data-ui-input-copy-icon]`).forEach(e=>{let t=e.getAttribute(`data-ui-input-copy-icon`)===s;e.toggleAttribute(`data-active`,t),f(e,t)}),t({el:o,attr:`data-copied`,present:n.tags.includes(`copied`),value:`true`})}),h().querySelectorAll(`[data-ui-input-copy-status]`).forEach(e=>{let t=s===`idle`?``:c;e.textContent!==t&&(e.textContent=t)}),t({el:h(),attr:`data-copied`,present:n.tags.includes(`copied`),value:`true`})},b=e=>{c=!0;try{g().dispatchEvent(new Event(e,{bubbles:!0}))}finally{c=!1}},x=s({schema:T,hooks:E,createMachine:({props:e})=>j({props:e,effects:{sync:v,copy:e=>{let t=!0;return Promise.resolve().then(async()=>{try{if(!navigator.clipboard)throw Error(`Clipboard is unavailable.`);await navigator.clipboard.writeText(e.context.value),t&&x.send(`COPY_DONE`)}catch{t&&x.send(`COPY_ERROR`)}}),()=>{t=!1}},emitInput:()=>b(`input`),emitChange:()=>b(`change`),focus:()=>l(g()),startFeedbackTimer:()=>{let e=window.setTimeout(()=>x.send(`COPY_FEEDBACK_TIMEOUT`),2e3);return()=>window.clearTimeout(e)}}})});return{...x,init(){if(o=d(this),o.add(()=>u.abort()),i=this.$el,a=h().querySelector(`[data-ui-input]`),!a)throw Error(`Input requires a native input element.`);x.connect(i,this.snapshot);let e=i.closest(`[data-ui-input-group]`);n({target:e??i,event:`pointerdown`,handler:t=>{let n=t.target;if(!(t instanceof PointerEvent)||t.defaultPrevented||!t.isPrimary||t.button!==0||g().disabled||!(n instanceof Element))return;let r=n.closest(`[data-ui-input-root]`);if(r&&r!==i||!r&&(!e||n.closest(`[data-ui-input-group]`)!==e||Array.from(e.querySelectorAll(`[data-ui-input-root]`)).find(t=>t.closest(`[data-ui-input-group]`)===e)!==i)||!n.closest(`[data-ui-input-control], [data-ui-input-group]`))return;let a=n.closest(`input, textarea, select, button, a[href], label, summary, [tabindex], [contenteditable]:not([contenteditable="false"]), [role="button"], [role="link"]`);a&&(e??h()).contains(a)||(t.preventDefault(),l(g(),{showIndicator:!1}))},cleanup:o}),n({target:a,event:`input`,handler:()=>{c||x.send({type:`VALUE_CHANGED`,value:g().value})},cleanup:o}),n({target:i,event:`click`,handler:e=>{let t=e.target;t instanceof Element&&(t.closest(`[data-ui-input-clear]`)?(e.preventDefault(),x.send(`CLEAR`)):t.closest(`[data-ui-input-copy]`)&&(e.preventDefault(),x.send(`COPY`)))},cleanup:o}),v()},destroy(){x.disconnect(),i=null,a=null},get value(){return x.getCommittedSnapshot().context.value},clear(){!g().disabled&&!g().readOnly&&x.send(`CLEAR`)},copy(){g().disabled||x.send(`COPY`)}}},N=u(`UiInput`,M),P=new WeakSet,F=e=>{P.has(e)||(P.add(e),N(e))};export{M as UiInput,F as default,F as registerInput};
|
|
2
|
+
//# sourceMappingURL=input-2UqpKKXs.js.map
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input-2UqpKKXs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-2UqpKKXs.js","names":[],"sources":["../../../../../../../../client/src/components/keybinding/contract.ts","../../../../../../../../client/src/components/input/contract.ts","../../../../../../../../client/src/components/input/machine.ts","../../../../../../../../client/src/components/input/index.ts","../../../../../../../../client/src/components/input/entry.generated.ts"],"sourcesContent":["import {oneOf, string, type SchemaToProps} from '../../runtime';\n\nconst KEYBINDING_VARIANTS = ['outline', 'plain', 'surface'] as const;\n\nconst keybindingSchema = {\n keys: string,\n variant: oneOf(KEYBINDING_VARIANTS, 'outline'),\n class: string,\n};\n\ntype KeybindingProps = SchemaToProps<typeof keybindingSchema>;\ntype KeybindingVariant = typeof KEYBINDING_VARIANTS[number];\n\nexport {KEYBINDING_VARIANTS, keybindingSchema};\nexport type {KeybindingVariant, KeybindingProps};\n","import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {\n CONTROL_SIZES,\n CONTROL_VARIANTS,\n COMPONENT_RADII,\n ICON_VARIANTS,\n type ComponentRadius,\n type ControlSize,\n type ControlVariant,\n type IconVariant,\n} from '../common';\nimport {KEYBINDING_VARIANTS} from '../keybinding/contract';\n\nconst INPUT_SIZES = CONTROL_SIZES;\nconst INPUT_VARIANTS = CONTROL_VARIANTS;\nconst INPUT_RADII = COMPONENT_RADII;\nconst INPUT_ICON_VARIANTS = ICON_VARIANTS;\n\ntype InputSize = ControlSize;\ntype InputVariant = ControlVariant;\ntype InputRadius = ComponentRadius;\ntype InputIconVariant = IconVariant;\n\nconst inputSchema = {\n type: string.default('text'),\n name: string,\n value: string,\n placeholder: string,\n size: oneOf(INPUT_SIZES, 'lg' as InputSize),\n variant: oneOf(INPUT_VARIANTS, 'outline' as InputVariant),\n radius: oneOf(INPUT_RADII, 'md' as InputRadius),\n disabled: bool,\n readonly: bool,\n required: bool,\n invalid: bool,\n icon: string,\n iconTrailing: string,\n iconVariant: oneOf(INPUT_ICON_VARIANTS, 'outline' as InputIconVariant),\n clearable: bool,\n copyable: bool,\n keys: string,\n keysVariant: oneOf(KEYBINDING_VARIANTS, 'outline'),\n prefix: string,\n suffix: string,\n rootClass: string,\n controlClass: string,\n class: string,\n};\n\nconst inputGroupSchema = {\n size: oneOf(INPUT_SIZES, 'lg' as InputSize),\n variant: oneOf(INPUT_VARIANTS, 'outline' as InputVariant),\n radius: oneOf(INPUT_RADII, 'md' as InputRadius),\n label: string,\n description: string,\n descriptionTrailing: string,\n error: string,\n errors: string,\n badge: string,\n fieldClass: string,\n class: string,\n};\n\nconst inputAffixSchema = {\n class: string,\n};\n\ntype InputProps = SchemaToProps<typeof inputSchema>;\n\nexport {INPUT_ICON_VARIANTS, INPUT_RADII, INPUT_SIZES, INPUT_VARIANTS, inputAffixSchema, inputGroupSchema, inputSchema};\nexport type {InputIconVariant, InputProps, InputRadius, InputSize, InputVariant};\n","import {createMachine, propsChangedEvent, type Machine, type MachineEventObject, type MachineScope} from '../../runtime/state-machine';\nimport type {InputProps} from './contract';\n\ntype InputContext = {value: string};\ntype InputEffects = {\n sync(scope: MachineScope<InputContext, InputProps>): void;\n copy(scope: MachineScope<InputContext, InputProps>): () => void;\n emitInput(scope: MachineScope<InputContext, InputProps>): void;\n emitChange(scope: MachineScope<InputContext, InputProps>): void;\n focus(scope: MachineScope<InputContext, InputProps>): void;\n startFeedbackTimer(scope: MachineScope<InputContext, InputProps>): () => void;\n};\nconst inputHooks = [] as const;\nconst eventValue = (event: MachineEventObject): string => typeof event.value === 'string' ? event.value : '';\nconst setValue = (scope: MachineScope<InputContext, InputProps>) => ({context: {value: eventValue(scope.event)}});\nconst clearValue = () => ({context: {value: ''}});\nconst reconcileProps = (scope: MachineScope<InputContext, InputProps>) => {\n const event = propsChangedEvent<InputProps>(scope.event);\n if (!event) return;\n const valueChanged = event.changes.some(({key}) => key === 'value');\n return {props: event.props, context: valueChanged ? {value: event.props.value} : scope.context};\n};\n\nconst createInputMachine = ({props, effects}: {props: InputProps; effects: InputEffects}): Machine<InputContext, InputProps> => createMachine<InputContext, InputProps>({\n initial: 'idle',\n on: {\n VALUE_CHANGED: {target: 'idle', reduce: 'setValue', effects: 'sync'},\n CLEAR: {target: 'idle', reduce: 'clearValue', effects: ['sync', 'emitInput', 'emitChange', 'focus']},\n COPY: {target: 'copying', guard: ({props}) => !props.disabled},\n PROPS_CHANGED: [\n {\n target: 'idle',\n guard: ({event}) => propsChangedEvent<InputProps>(event)?.changes.some(({key}) => key === 'value' || key === 'disabled') ?? false,\n reduce: 'reconcileProps', effects: 'sync',\n },\n {reduce: 'reconcileProps', effects: 'sync'},\n ],\n },\n states: {\n idle: {},\n copying: {entry: ['sync', 'copy'], on: {\n COPY_DONE: {target: 'copied'},\n COPY_ERROR: {target: 'error'},\n }},\n copied: {tags: ['copied'], entry: ['sync', 'startFeedbackTimer'], on: {\n COPY_FEEDBACK_TIMEOUT: {target: 'idle', effects: 'sync'},\n }},\n error: {tags: ['copyError'], entry: ['sync', 'startFeedbackTimer'], on: {\n COPY_FEEDBACK_TIMEOUT: {target: 'idle', effects: 'sync'},\n }},\n },\n}, {\n context: {value: props.value},\n props,\n reducers: {setValue, clearValue, reconcileProps},\n effects,\n});\n\nexport {createInputMachine, inputHooks};\nexport type {InputContext, InputEffects};\n","import type Alpine from 'alpinejs';\nimport {createOpacityFeedback} from '../../motion/feedback';\n\nimport {type AlpineMachine, createAlpineMachine, defineAlpineData, focusElement, type MachineSnapshot, type TrellisAlpineComponent} from '@client/runtime';\nimport {cleanupManagerFor} from '@client/runtime/alpine-data';\nimport type {CleanupManager} from '@client/runtime/cleanup-manager';\nimport {syncControlPresence, syncNativeControl} from '@client/runtime/form-control';\nimport {declareMorphAttributes} from '@client/runtime/morph';\nimport {addListener, setAttribute, setPresence} from '@client/utils';\nimport {inputSchema, type InputProps} from './contract';\nimport {createInputMachine, inputHooks, type InputContext} from './machine';\n\n/** Public Alpine API for `ui.input` and `ui.input.control`. @public */\ninterface UiInputApi {\n /** Current native input value. */\n readonly value: string;\n /** Clear the input, emit native input/change events, and restore focus. */\n clear(): void;\n /** Copy the current value to the clipboard. */\n copy(): void;\n}\n\ntype InputData = AlpineMachine<InputContext, InputProps, typeof inputHooks> & UiInputApi & {\n init(): void;\n destroy(): void;\n};\n\nconst UiInput = (): TrellisAlpineComponent<InputData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let inputEl: HTMLInputElement | null = null;\n let cleanup: CleanupManager;\n let dispatching = false;\n const copyFeedbackController = new AbortController();\n const syncCopyFeedback = createOpacityFeedback(copyFeedbackController.signal);\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Input has not been initialized.');\n return rootEl;\n };\n const input = (): HTMLInputElement => {\n if (!inputEl) throw new Error('Input requires a native input element.');\n return inputEl;\n };\n const snapshot = (): MachineSnapshot<InputContext, InputProps> => bridge.getCommittedSnapshot();\n const syncDom = (): void => {\n const current = snapshot();\n const props = current.props;\n const native = input();\n if (native.value !== current.context.value) native.value = current.context.value;\n native.type = props.type;\n if (props.placeholder) native.placeholder = props.placeholder;\n else native.removeAttribute('placeholder');\n syncNativeControl({input: native, state: {\n name: props.name,\n disabled: props.disabled,\n readonly: props.readonly,\n required: props.required,\n invalid: props.invalid,\n }});\n syncControlPresence({el: root(), state: props, value: 'true'});\n const control = root().querySelector<HTMLElement>('[data-ui-input-control]');\n if (control) syncControlPresence({el: control, state: {disabled: props.disabled, invalid: props.invalid}, value: 'true'});\n root().querySelectorAll<HTMLElement>('[data-ui-input-clear]').forEach((button) => {\n button.hidden = current.context.value.length === 0;\n if (button instanceof HTMLButtonElement) button.disabled = props.disabled || props.readonly;\n });\n const copyState = current.tags.includes('copied') ? 'copied' : current.tags.includes('copyError') ? 'error' : 'idle';\n const copyLabel = copyState === 'copied' ? 'Copied' : copyState === 'error' ? 'Copy failed' : 'Copy';\n root().querySelectorAll<HTMLElement>('[data-ui-input-copy]').forEach((button) => {\n const labelIds = (native.getAttribute('aria-labelledby') ?? '').split(/\\s+/)\n .filter((id) => id && native.ownerDocument.getElementById(id));\n const explicitLabel = native.getAttribute('aria-label')?.trim();\n if (!labelIds.length && !explicitLabel) {\n native.labels?.forEach((label) => {\n if (!label.id) {\n label.id = `ui-input-label-${crypto.randomUUID()}`;\n declareMorphAttributes(label, 'id');\n }\n labelIds.push(label.id);\n });\n }\n if (button instanceof HTMLButtonElement) button.disabled = props.disabled;\n setAttribute({el: button, attr: 'aria-label', value: !labelIds.length && explicitLabel ? `${copyLabel} ${explicitLabel}` : copyLabel});\n if (labelIds.length) {\n button.id ||= `ui-input-copy-${crypto.randomUUID()}`;\n setAttribute({el: button, attr: 'aria-labelledby', value: [button.id, ...labelIds].join(' ')});\n declareMorphAttributes(button, 'id', 'aria-label', 'aria-labelledby');\n } else button.removeAttribute('aria-labelledby');\n button.querySelectorAll<SVGElement>('[data-ui-input-copy-icon]').forEach((icon) => {\n const active = icon.getAttribute('data-ui-input-copy-icon') === copyState;\n icon.toggleAttribute('data-active', active);\n syncCopyFeedback(icon, active);\n });\n setPresence({el: button, attr: 'data-copied', present: current.tags.includes('copied'), value: 'true'});\n });\n root().querySelectorAll<HTMLElement>('[data-ui-input-copy-status]').forEach((status) => {\n const message = copyState === 'idle' ? '' : copyLabel;\n if (status.textContent !== message) status.textContent = message;\n });\n setPresence({el: root(), attr: 'data-copied', present: current.tags.includes('copied'), value: 'true'});\n };\n const dispatchNative = (type: 'input' | 'change'): void => {\n dispatching = true;\n try { input().dispatchEvent(new Event(type, {bubbles: true})); } finally { dispatching = false; }\n };\n const bridge = createAlpineMachine({\n schema: inputSchema,\n hooks: inputHooks,\n createMachine: ({props}) => createInputMachine({props, effects: {\n sync: syncDom,\n copy: (scope) => {\n let active = true;\n const copy = async (): Promise<void> => {\n try {\n if (!navigator.clipboard) throw new Error('Clipboard is unavailable.');\n await navigator.clipboard.writeText(scope.context.value);\n if (active) bridge.send('COPY_DONE');\n } catch {\n if (active) bridge.send('COPY_ERROR');\n }\n };\n // Defer synchronous failures until the copying state's cleanup is registered.\n void Promise.resolve().then(copy);\n return () => { active = false; };\n },\n emitInput: () => dispatchNative('input'),\n emitChange: () => dispatchNative('change'),\n focus: () => focusElement(input()),\n startFeedbackTimer: () => {\n const timer = window.setTimeout(() => bridge.send('COPY_FEEDBACK_TIMEOUT'), 2000);\n return () => window.clearTimeout(timer);\n },\n }}),\n });\n\n return {\n ...bridge,\n init(): void {\n cleanup = cleanupManagerFor(this);\n cleanup.add(() => copyFeedbackController.abort());\n rootEl = this.$el;\n inputEl = root().querySelector<HTMLInputElement>('[data-ui-input]');\n if (!inputEl) throw new Error('Input requires a native input element.');\n bridge.connect(rootEl, this.snapshot);\n const group = rootEl.closest<HTMLElement>('[data-ui-input-group]');\n addListener({target: group ?? rootEl, event: 'pointerdown', handler: (event) => {\n const target = event.target;\n if (!(event instanceof PointerEvent) || event.defaultPrevented || !event.isPrimary || event.button !== 0 || input().disabled || !(target instanceof Element)) return;\n const owner = target.closest('[data-ui-input-root]');\n if (owner && owner !== rootEl) return;\n if (!owner) {\n if (!group || target.closest('[data-ui-input-group]') !== group) return;\n const first = Array.from(group.querySelectorAll('[data-ui-input-root]'))\n .find((element) => element.closest('[data-ui-input-group]') === group);\n if (first !== rootEl) return;\n }\n if (!target.closest('[data-ui-input-control], [data-ui-input-group]')) return;\n const interactive = target.closest('input, textarea, select, button, a[href], label, summary, [tabindex], [contenteditable]:not([contenteditable=\"false\"]), [role=\"button\"], [role=\"link\"]');\n if (interactive && (group ?? root()).contains(interactive)) return;\n event.preventDefault();\n focusElement(input(), {showIndicator: false});\n }, cleanup});\n addListener({target: inputEl, event: 'input', handler: () => {\n if (!dispatching) bridge.send({type: 'VALUE_CHANGED', value: input().value});\n }, cleanup});\n addListener({target: rootEl, event: 'click', handler: (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n if (target.closest('[data-ui-input-clear]')) {\n event.preventDefault();\n bridge.send('CLEAR');\n } else if (target.closest('[data-ui-input-copy]')) {\n event.preventDefault();\n bridge.send('COPY');\n }\n }, cleanup});\n syncDom();\n },\n destroy(): void {\n bridge.disconnect();\n rootEl = null;\n inputEl = null;\n },\n get value(): string {\n return bridge.getCommittedSnapshot().context.value;\n },\n clear(): void {\n if (!input().disabled && !input().readOnly) bridge.send('CLEAR');\n },\n copy(): void {\n if (!input().disabled) bridge.send('COPY');\n },\n };\n};\n\nconst registerInput = defineAlpineData('UiInput', UiInput);\n\nexport {registerInput, UiInput};\nexport type {InputData, UiInputApi};\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 {registerInput as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerInput = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerInput};\nexport default registerInput;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./input-
|
|
2
|
-
export {default} from "./input-
|
|
1
|
+
export * from "./input-2UqpKKXs.js";
|
|
2
|
+
export {default} from "./input-2UqpKKXs.js";
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding-DjUHW-EE.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e}from"../chunks/dom-invalidation-Dw6clnS4.js";import{o as t}from"../chunks/capability-shortcut-BFvGIAs8.js";import{t as n}from"../chunks/controller-de7TruDm.js";var r=new WeakSet,i=t=>{r.has(t)||(r.add(t),t.directive(`ui-keybinding`,t.skipDuringClone((t,{expression:r},i)=>{if(!(t instanceof HTMLElement))return;let a=n(t),o=i.evaluateLater(r),s;i.effect(()=>o(e=>{s=e,a.setValue(e)}));let c=e(t,{invalidateDom:()=>a.setValue(s)});i.cleanup(()=>{c(),a.destroy()})})))},a=new WeakSet,o=e=>{a.has(e)||(a.add(e),t(e),i(e))};export{n as createKeybindingController,o as default,o as registerKeybinding};
|
|
2
|
+
//# sourceMappingURL=keybinding-DjUHW-EE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keybinding-DjUHW-EE.js","names":[],"sources":["../../../../../../../../client/src/components/keybinding/index.ts","../../../../../../../../client/src/components/keybinding/entry.generated.ts"],"sourcesContent":["import type Alpine from 'alpinejs';\n\nimport {registerDomInvalidationOwner} from '@client/runtime/dom-invalidation';\nimport {createKeybindingController} from './controller';\n\nconst registered = new WeakSet<Alpine.Alpine>();\n\nconst registerKeybinding = (AlpineInstance: Alpine.Alpine): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n AlpineInstance.directive('ui-keybinding', AlpineInstance.skipDuringClone((el, {expression}, utilities) => {\n if (!(el instanceof HTMLElement)) return;\n const controller = createKeybindingController(el);\n const evaluator = utilities.evaluateLater(expression);\n let currentValue: unknown;\n utilities.effect(() => evaluator((value) => {\n currentValue = value;\n controller.setValue(value);\n }));\n const unregisterInvalidationOwner = registerDomInvalidationOwner(el, {\n invalidateDom: () => controller.setValue(currentValue),\n });\n utilities.cleanup(() => {\n unregisterInvalidationOwner();\n controller.destroy();\n });\n }));\n};\n\nexport {createKeybindingController, registerKeybinding};\nexport type {KeybindingController} from './controller';\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 {registerShortcutCapability} from '../../capabilities/shortcut';\nimport {registerKeybinding as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerKeybinding = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerShortcutCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerKeybinding};\nexport default registerKeybinding;\nexport * from './index';\n"],"mappings":"8KAKA,IAAM,EAAa,IAAI,QAEjB,EAAsB,GAAwC,CAC5D,EAAW,IAAI,CAAc,IACjC,EAAW,IAAI,CAAc,EAC7B,EAAe,UAAU,gBAAiB,EAAe,iBAAiB,EAAI,CAAC,cAAa,IAAc,CACtG,GAAI,EAAE,aAAc,aAAc,OAClC,IAAM,EAAa,EAA2B,CAAE,EAC1C,EAAY,EAAU,cAAc,CAAU,EAChD,EACJ,EAAU,WAAa,EAAW,GAAU,CACxC,EAAe,EACf,EAAW,SAAS,CAAK,CAC7B,CAAC,CAAC,EACF,IAAM,EAA8B,EAA6B,EAAI,CACjE,kBAAqB,EAAW,SAAS,CAAY,CACzD,CAAC,EACD,EAAU,YAAc,CACpB,EAA4B,EAC5B,EAAW,QAAQ,CACvB,CAAC,CACL,CAAC,CAAC,EACN,ECrBM,EAAa,IAAI,QAEjB,EAAsB,GAAqC,CACzD,EAAW,IAAI,CAAc,IACjC,EAAW,IAAI,CAAc,EAC7B,EAA2B,CAAc,EACzC,EAAkB,CAAc,EACpC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./keybinding-
|
|
2
|
-
export {default} from "./keybinding-
|
|
1
|
+
export * from "./keybinding-DjUHW-EE.js";
|
|
2
|
+
export {default} from "./keybinding-DjUHW-EE.js";
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-DYn805Mg.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e,t}from"../chunks/dom-DiTFTWeR.js";import{k as n,t as r,u as i}from"../chunks/properties-D8pFWF8g.js";import{t as a}from"../chunks/layout-task-B6P8q7BH.js";import{n as o}from"../chunks/morph-Cq3V_23_.js";import{f as s,l as c,n as l,o as u,u as d}from"../chunks/codecs-CQ7olTJL.js";import{a as f,n as p,t as m}from"../chunks/machine-Do4tL7nc.js";import{n as h}from"../chunks/focus-BvBkrIcj.js";import{t as ee}from"../chunks/cleanup-manager-D9QiZF_Q.js";import{n as g,t as te}from"../chunks/alpine-data-Dvc_bXq6.js";import{n as _,t as v}from"../chunks/styles-CX2j92ex.js";import{t as y}from"../chunks/merge-bindings-BtqW3UgP.js";import{t as ne}from"../chunks/dismissable-layer-MzcgNRti.js";import{i as re,t as b}from"../chunks/focus-scope-DYfME-Rk.js";import{t as ie}from"../chunks/scroll-lock-C5dQtr4Y.js";import{B as x,E as S,h as C,k as w,l as T,r as E,u as D}from"../chunks/common-DnEHZCqy.js";import{a as O,i as k,n as A,s as j,t as M}from"../chunks/layout-mHPk9rxi.js";import{t as N}from"../chunks/controlled-open-Hy4-OT-6.js";var P=[`modal`,`sheet`],F=[`start`,`center`,`end`],I=T,L=w,R=E,z=[`sm`,`md`,`lg`,`xl`,`full`],ae=x,B=D,oe=C,se={name:s,...j.schema,padding:c(w,`5`),...k.schema,gap:c(w,`4`),...O.schema,open:l,mode:c(P,`modal`),align:c(F,`center`),side:c(I,`right`),inset:c(L,`0`),radius:c(R,`none`),size:c(z,`md`),surface:c(ae,`1`),elevation:c(B,`5`),dismissible:l.default(!0),closable:l.default(!0),disabled:l,initialFocus:s,finalFocus:s,label:s,descriptionId:s,panelClass:s,overlayClass:s,class:s},ce={name:s,disabled:l,class:s};s.default(`ui-modal-root`),c(oe,`h2`),{...k.schema},c(w,`3`),{...k.schema},c(w,`2`),s.default(`Close`);var le=[f({name:`opening`,state:`opening`,project:()=>({}),onDone:`OPENING_DONE`,onError:`OPENING_ERROR`}),f({name:`closing`,state:`closing`,project:()=>({}),onDone:`CLOSING_DONE`,onError:`CLOSING_ERROR`})],V=N(),ue=({props:e,effects:t})=>m({initial:`closed`,states:{closed:{tags:[`closed`],on:{OPEN:{target:`opening`,guard:`canOpen`,effects:`prepareOpen`},PROPS_CHANGED:[{target:`opening`,guard:V.shouldOpen,reduce:`replaceProps`,effects:[`syncProps`,`prepareOpen`]},{reduce:`replaceProps`,effects:`syncProps`}]}},opening:{tags:[`visible`,`interactive`,`transitioning`],on:{OPENING_DONE:{target:`open`,effects:`finishOpen`},OPENING_ERROR:{target:`open`,effects:`finishOpen`},CLOSE:{target:`closing`,effects:`prepareClose`},CANCEL:{target:`closing`,guard:`canDismiss`,effects:[`emitCancel`,`prepareClose`]},PROPS_CHANGED:[{target:`closing`,guard:V.shouldClose,reduce:`replaceProps`,effects:[`syncProps`,`prepareClose`]},{reduce:`replaceProps`,effects:`syncProps`}]}},open:{tags:[`visible`,`interactive`,`open`],on:{CLOSE:{target:`closing`,effects:`prepareClose`},CANCEL:{target:`closing`,guard:`canDismiss`,effects:[`emitCancel`,`prepareClose`]},PROPS_CHANGED:[{target:`closing`,guard:V.shouldClose,reduce:`replaceProps`,effects:[`syncProps`,`prepareClose`]},{reduce:`replaceProps`,effects:`syncProps`}]}},closing:{tags:[`visible`,`transitioning`],on:{CLOSING_DONE:{target:`closed`,effects:`finishClose`},CLOSING_ERROR:{target:`closed`,effects:`finishClose`},OPEN:{target:`opening`,guard:`canOpen`,effects:`prepareOpen`},PROPS_CHANGED:[{target:`opening`,guard:V.shouldOpen,reduce:`replaceProps`,effects:[`syncProps`,`prepareOpen`]},{reduce:`replaceProps`,effects:`syncProps`}]}}}},{context:{},props:e,reducers:{replaceProps:V.replace},guards:{canOpen:({props:e})=>!e.disabled,canDismiss:({props:e})=>e.dismissible},effects:{prepareOpen:t.prepareOpen,finishOpen:t.finishOpen,prepareClose:t.prepareClose,finishClose:t.finishClose,syncProps:t.syncProps,emitCancel:({event:e})=>{(e.reason===`escape`||e.reason===`outside`)&&t.emitCancel(e.reason)}}}),H={sm:`max-w-modal-sm`,md:`max-w-modal-md`,lg:`max-w-modal-lg`,xl:`max-w-modal-xl`,full:`max-w-full`},de={none:``,xs:`rounded-overlay-xs`,sm:`rounded-overlay-sm`,md:`rounded-overlay-md`,lg:`rounded-overlay-lg`,full:`rounded-full`},U=[`grid-rows-[auto_auto_minmax(0,1fr)_auto]`,`[&>[data-ui-modal-body]]:-mx-1 [&>[data-ui-modal-body]]:min-h-0 [&>[data-ui-modal-body]]:content-start`,`[&>[data-ui-modal-body]]:overflow-x-hidden [&>[data-ui-modal-body]]:overflow-y-auto [&>[data-ui-modal-body]]:px-1`,`[&>[data-ui-modal-footer]]:self-end`],W=v({definition:{component:`ui.modal`,parts:{instance:{base:`contents`},root:{base:[`fixed inset-0 z-dialog m-0 h-auto max-h-none w-auto max-w-none overflow-visible border-0 bg-transparent p-0 text-surface-ink`,`backdrop:bg-transparent`]},viewport:{base:`fixed inset-0 z-dialog flex h-dvh`,variants:{mode:{modal:`justify-center overflow-y-auto p-4`,sheet:``},side:{top:``,right:``,bottom:``,left:``}},compounds:[...F.map(e=>({when:{mode:`modal`,align:e},class:M[e]})),...w.map(e=>({when:{mode:`sheet`,inset:e},class:S[e]})),{when:{mode:`sheet`,side:`top`},class:`items-start justify-center`},{when:{mode:`sheet`,side:`right`},class:`items-center justify-end overflow-hidden`},{when:{mode:`sheet`,side:`bottom`},class:`items-end justify-center`},{when:{mode:`sheet`,side:`left`},class:`items-center justify-start overflow-hidden`}],defaults:{mode:`modal`,align:`center`,side:`right`,inset:`0`}},overlay:{base:`fixed inset-0 bg-scrim`},panel:{base:[`ui-content-edge relative z-dialog grid w-full min-w-0 overflow-auto outline-none`,`max-h-[min(var(--ui-modal-max-height,100%),100%)]`],variants:{...j.variants,...k.variants,...O.variants,maxHeight:Object.fromEntries(A.map(e=>[e,`[--ui-modal-max-height:${e===`none`||e===`full`?`100%`:`var(--container-${e})`}]`])),mode:{modal:`rounded-overlay-md`,sheet:``},side:{top:``,right:``,bottom:``,left:``}},compounds:[...z.flatMap(e=>[{when:{mode:`modal`,size:e},class:H[e]},{when:{mode:`sheet`,side:`right`,size:e},class:H[e]},{when:{mode:`sheet`,side:`left`,size:e},class:H[e]}]),{when:{mode:`sheet`,side:`right`},class:[`h-full`,U]},{when:{mode:`sheet`,side:`left`},class:[`h-full`,U]},{when:{mode:`sheet`,side:`top`},class:`max-w-full`},{when:{mode:`sheet`,side:`bottom`},class:`max-w-full`},...E.map(e=>({when:{mode:`sheet`,radius:e},class:de[e]})),{when:{mode:`sheet`,inset:`0`,side:`right`},class:`rounded-r-none`},{when:{mode:`sheet`,inset:`0`,side:`left`},class:`rounded-l-none`},{when:{mode:`sheet`,inset:`0`,side:`top`},class:`rounded-t-none`},{when:{mode:`sheet`,inset:`0`,side:`bottom`},class:`rounded-b-none`}],defaults:{...j.defaults,padding:`5`,...k.defaults,gap:`4`,...O.defaults,mode:`modal`,side:`right`,size:`md`,inset:`0`,radius:`none`}},trigger:{base:`contents`},outlet:{base:``},title:{base:`pr-8`},description:{base:`-mt-3 pr-8 text-surface-ink-muted`},body:{base:`grid min-w-0 text-sm`,variants:k.variants,defaults:{...k.defaults,gap:`3`}},footer:{base:`flex min-w-0 items-center justify-end pt-1`,variants:k.variants,defaults:{...k.defaults,gap:`2`}},close:{base:`absolute! right-3 top-3 rounded-dismiss`},closeIcon:{base:`size-icon`}}}}),G=new Set,K=new Set,q=e=>e?`open`:`closed`,J=e=>e===`opening`||e===`open`,Y=e=>Array.from(G).find(t=>t.name===e)??null,fe=(e,t)=>{e.setAttribute(`data-state`,q(t)),e.setAttribute(`aria-expanded`,t?`true`:`false`)},X=e=>{let t=b(e),n=`button, input:not([type="hidden"]), select, textarea, a[href], area[href], summary, [tabindex], [contenteditable]:not([contenteditable="false"]), [role="button"], [role="link"]`;return t!==e||e.matches(n)?t:e.querySelector(n)??e},Z=s=>{let c=null,l=``,u=null,f=null,m=!1,g=null,v=!1,b,x=null,S=null,C=()=>{if(!c)throw Error(`Modal has not been initialized.`);return c},w=()=>{let e=C().querySelector(`[data-ui-modal]`);if(!(e instanceof HTMLDialogElement))throw Error(`Modal requires a dialog element.`);return e},T=()=>{let e=C().querySelector(`[data-ui-modal-viewport]`);if(!e)throw Error(`Modal requires a viewport element.`);return e},E=()=>{let e=C().querySelector(`[data-ui-modal-overlay]`);if(!e)throw Error(`Modal requires an overlay element.`);return e},D=()=>{let e=C().querySelector(`[data-ui-modal-panel]`);if(!e)throw Error(`Modal requires a panel element.`);return e},O=()=>C().querySelector(`[data-ui-modal-title]`),k=()=>C().querySelector(`[data-ui-modal-description]`),A=()=>{let e=M();w().className=_({part:W.parts.root,props:e,className:e.class}),T().className=_({part:W.parts.viewport,props:e}),E().className=_({part:W.parts.overlay,props:e,className:e.overlayClass}),D().className=_({part:W.parts.panel,props:e,className:e.panelClass})},j=()=>Array.from(C().children).find(e=>e instanceof HTMLElement&&e.matches(`[data-ui-modal-trigger]`))??null,M=()=>Y.getCommittedSnapshot().props,N=()=>Y.matches(`opening`)||Y.matches(`open`),P=(e,t)=>{if(fe(e,N()),e.setAttribute(`aria-controls`,l),e.setAttribute(`data-ui-modal-trigger-target`,l),t||M().disabled){e.setAttribute(`aria-disabled`,`true`),e.setAttribute(`data-disabled`,``),e instanceof HTMLButtonElement&&(e.disabled=!0),e.tabIndex>=0&&(e.tabIndex=-1);return}e.removeAttribute(`aria-disabled`),e.removeAttribute(`data-disabled`),e instanceof HTMLButtonElement&&(e.disabled=!1),e.tabIndex<0&&(e.tabIndex=0)},F=()=>{let e=j();e&&S&&e.contains(S)?P(S,M().disabled):e&&$.schedule(),K.forEach(e=>e.sync())},I=()=>{let e=M(),t=w(),n=D(),r=O(),i=k();t.id=l,t.setAttribute(`role`,`dialog`),t.setAttribute(`aria-modal`,`true`),n.id||=`${l}-panel`,n.tabIndex=-1,r?(r.id||=`${l}-title`,t.setAttribute(`aria-labelledby`,r.id),t.removeAttribute(`aria-label`)):(t.removeAttribute(`aria-labelledby`),e.label?t.setAttribute(`aria-label`,e.label):t.removeAttribute(`aria-label`)),i&&(i.id||=`${l}-description`),e.descriptionId===`none`?t.removeAttribute(`aria-describedby`):e.descriptionId?t.setAttribute(`aria-describedby`,e.descriptionId):i?t.setAttribute(`aria-describedby`,i.id):t.removeAttribute(`aria-describedby`)},L=({syncOpen:e=!0}={})=>{let t=N(),n=q(t);e&&d({el:C(),schema:se,key:`open`,value:t}),[w(),T(),E(),D()].forEach(e=>{e.setAttribute(`data-state`,n)}),F()},R=e=>{if(e.trim())try{return s.evaluate(C(),e)}catch{return}},z=()=>{let e=R(M().initialFocus);if(e===!1){let e=w().ownerDocument.activeElement;e instanceof HTMLElement&&w().contains(e)&&e.blur();return}if(e instanceof HTMLElement&&h(e,{showIndicator:!1}))return;let t=D().querySelector(`[autofocus]`);h(t,{showIndicator:!1})||h(D(),{showIndicator:!1})},ae=()=>{let e=R(M().finalFocus);if(e===!1)return!1;if(e instanceof HTMLElement&&h(e,{showIndicator:!1})||h(u??f,{showIndicator:!1}))return!0;let t=C().parentElement?.closest(`[data-ui-modal-panel]`)??null;return h(t,{showIndicator:!1})},B=()=>{let e=w().ownerDocument.body,t=e.getAttribute(`tabindex`);e.tabIndex=-1,h(e,{showIndicator:!1}),t===null?e.removeAttribute(`tabindex`):e.setAttribute(`tabindex`,t)},oe=()=>{let e=D();e.style.removeProperty(`transform`),e.style.removeProperty(`translate`),e.style.removeProperty(`scale`),e.style.removeProperty(`rotate`)},ce=()=>{let e=w(),t=e.ownerDocument.activeElement;f=t instanceof HTMLElement?t:null,typeof e.showModal==`function`&&!m?(e.open&&e.removeAttribute(`open`),oe(),e.showModal(),m=!0):e.open||e.setAttribute(`open`,``),g??=ie(e.ownerDocument),I(),L(),queueMicrotask(()=>{c&&N()&&z()})},V=()=>{oe(),D().setAttribute(`data-ui-animate`,``),L(),e({el:w(),name:`ui:open`})},H=()=>{D().removeAttribute(`data-ui-animate`),L()},de=()=>{let t=w(),n=t.ownerDocument.activeElement;n instanceof HTMLElement&&t.contains(n)&&n.blur(),t.open&&t.close(),m=!1,g?.(),g=null,L(),D().removeAttribute(`data-ui-animate`);let r=ae(),i=t.ownerDocument.activeElement;i instanceof HTMLElement&&(t.contains(i)||!r&&(i===u||i===f))&&B(),queueMicrotask(()=>{let e=t.ownerDocument.activeElement;e instanceof HTMLElement&&t.contains(e)&&B()}),u=null,f=null,e({el:t,name:`ui:close`})},U=()=>{A(),I(),F()},Y=p({schema:se,hooks:le,createMachine:({props:t})=>ue({props:t,effects:{prepareOpen:ce,finishOpen:V,prepareClose:H,finishClose:de,syncProps:U,emitCancel:t=>{e({el:w(),name:`ui:cancel`,detail:{reason:t}})}}})}),Z=e=>{M().disabled||(u=e,Y.send(`OPEN`))},Q=(e,t)=>{t?.preventDefault(),Y.send({type:`CANCEL`,reason:e})},pe=()=>{x?.run(),x=null},me=e=>{pe(),S=e,x=new ee,b.addChild(x),P(e,M().disabled),t({target:e,event:`click`,handler:()=>Z(e),cleanup:x}),t({target:e,event:`keydown`,handler:t=>{t instanceof KeyboardEvent&&(e instanceof HTMLButtonElement||e instanceof HTMLAnchorElement||(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),Z(e)))},cleanup:x})},$=a({measure:()=>{let e=c?j():null;return e?X(e):null},apply:e=>{c&&e?.isConnected&&c.contains(e)&&me(e)}}),he=()=>{let e=w(),t=e.querySelector(`[data-ui-modal-trigger]`);t&&!t.dataset.name&&(C().insertBefore(t,e),$.schedule())},ge=()=>{let e=w();t({target:e,event:`cancel`,handler:t=>{t.target===e&&Q(`escape`,t)},cleanup:b}),t({target:e,event:`close`,handler:()=>{!e.open&&Y.hasTag(`visible`)&&Y.send(`CLOSE`)},cleanup:b}),t({target:e,event:`keydown`,handler:e=>{e instanceof KeyboardEvent&&Y.hasTag(`interactive`)&&re(e,D())},cleanup:b}),t({target:e,event:`click`,handler:t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-ui-modal-close]`);r&&r.closest(`[data-ui-modal]`)===e&&(t.preventDefault(),Y.send(`CLOSE`))},cleanup:b}),t({target:document,event:`ui:modal-close`,handler:e=>{let t=e.detail;t?.name&&t.name===M().name&&Y.send(`CLOSE`)},cleanup:b}),b.add(ne({isEnabled:()=>Y.hasTag(`interactive`),roots:()=>[D(),u,j()],onDismiss:e=>Q(`outside`,e)}))},_e,ve={get name(){return M().name},get isOpen(){return Y.matches(`open`)},get dialogId(){return l},openFrom:Z,close(e){e?.preventDefault(),Y.send(`CLOSE`)},syncExternalTrigger:P};return _e={...Y,get name(){return this.snapshot.current?.props.name??``},get isOpen(){return this.snapshot.current?.value===`open`},get isVisible(){return this.snapshot.current?.tags.includes(`visible`)??!1},get dialogId(){return l},init(){b=te(this),c=this.$el,Y.connect(this.$el,this.snapshot);let e=M();A();for(let e of[`opening`,`closing`])b.add(Y.onTransition(e,t=>{if(w().hasAttribute(`x-ui-transition:${e}`))return;let a=e===`opening`,o=M(),s=o.mode===`sheet`?i.sheet[o.side]:i.modal;return n(r(t,a?i.opacity.in:i.opacity.out,{target:E(),role:a?`presenceEmphasized`:`presenceEmphasizedExit`}),r(t,a?s.in:s.out,{target:D(),role:a?`presenceEmphasized`:`presenceEmphasizedExit`}))}));o(D(),`data-ui-animate`),l=w().id||this.$id(`modal${e.name?`-${e.name}`:``}`),o(w(),`open`),I(),G.add(ve),v=!0,he(),ge(),L({syncOpen:!1}),e.open&&queueMicrotask(()=>Y.send(`OPEN`))},destroy(){$.cancel(),x=null,S=null,v&&=(G.delete(ve),!1),Y.disconnect();let e=c?.querySelector(`[data-ui-modal]`);e?.open&&e.close(),g?.(),g=null,K.forEach(e=>e.sync()),c=null},get root(){return y({inputs:[_({part:W.parts.instance,props:{},className:``}),{"data-ui-modal-instance":``}]})},get dialog(){let e=this.snapshot,t=e.current?.props??M();return y({inputs:[_({part:W.parts.root,props:t,className:t.class}),{id:l,role:`dialog`,"aria-modal":`true`,":data-state":()=>q(J(e.current?.value)),":data-mode":()=>e.current?.props.mode,":data-side":()=>e.current?.props.side,":data-size":()=>e.current?.props.size}]})},get viewport(){let e=this.snapshot,t=e.current?.props??M();return y({inputs:[_({part:W.parts.viewport,props:t}),{":data-state":()=>q(J(e.current?.value)),":data-mode":()=>e.current?.props.mode,":data-side":()=>e.current?.props.side}]})},get overlay(){let e=this.snapshot,t=e.current?.props??M();return y({inputs:[_({part:W.parts.overlay,props:t,className:t.overlayClass}),{":data-state":()=>q(J(e.current?.value))}]})},get panel(){let e=this.snapshot,t=e.current?.props??M();return y({inputs:[_({part:W.parts.panel,props:t,className:t.panelClass}),{tabindex:-1,":data-state":()=>q(J(e.current?.value)),":data-mode":()=>e.current?.props.mode,":data-side":()=>e.current?.props.side,":data-size":()=>e.current?.props.size,":data-ui-surface":()=>e.current?.props.surface,":data-ui-elevation":()=>e.current?.props.elevation}]})},open(e){if(e?.preventDefault(),M().disabled)return;let t=j();t&&(u=S&&t.contains(S)?S:X(t)),Y.send(`OPEN`)},close(e){e?.preventDefault(),Y.send(`CLOSE`)}},_e},Q=()=>{let e=null,n=null,r=null,i,o=!1,s=()=>{if(!e)throw Error(`Modal trigger has not been initialized.`);return e},c=()=>{if(!r)throw Error(`Modal trigger has not been initialized.`);return r},l=()=>{let e=s().name;return e?Y(e):null},d=()=>{if(!r){e?.name&&h.schedule();return}let t=s(),n=r,i=l();if(i){i.syncExternalTrigger(n,t.disabled);return}fe(n,!1),t.disabled?(n.setAttribute(`aria-disabled`,`true`),n.setAttribute(`data-disabled`,``)):(n.removeAttribute(`aria-disabled`),n.removeAttribute(`data-disabled`))},f={get name(){return s().name},get target(){return c()},sync:d},p=e=>{e?.preventDefault(),n&&!s().disabled&&(r||(h.cancel(),m(X(n))),r&&l()?.openFrom(r))},m=e=>{n&&n.contains(e)&&!r&&(r=e,K.add(f),o=!0,d(),t({target:e,event:`click`,handler:p,cleanup:i}),t({target:e,event:`keydown`,handler:t=>{t instanceof KeyboardEvent&&(e instanceof HTMLButtonElement||e instanceof HTMLAnchorElement||(t.key===`Enter`||t.key===` `)&&p(t))},cleanup:i}))},h=a({measure:()=>n&&e?.name?X(n):null,apply:e=>{e?.isConnected&&m(e)}});return{init(){i=te(this),n=this.$el,e=u({el:this.$el,schema:ce,onChange:()=>{e?.name&&d()}}),e.name&&h.schedule()},destroy(){h.cancel(),e?.disconnect(),o&&K.delete(f),o=!1,e=null,r=null,n=null},get root(){let t=s();return y({inputs:[_({part:W.parts.trigger,props:{},className:t.class}),{"data-ui-modal-trigger":``,":data-name":()=>e?.name||void 0,":data-disabled":()=>e?.disabled?``:void 0}]})},open:p}},pe=e=>{g(`UiModal`,()=>Z(e))(e),g(`UiModalTrigger`,Q)(e)},me=new WeakSet,$=e=>{me.has(e)||(me.add(e),pe(e))};export{Z as UiModal,Q as UiModalTrigger,$ as default,$ as registerModal};
|
|
2
|
+
//# sourceMappingURL=modal-DYn805Mg.js.map
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-DYn805Mg.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal-DYn805Mg.js","names":[],"sources":["../../../../../../../../client/src/components/modal/contract.ts","../../../../../../../../client/src/components/modal/machine.ts","../../../../../../../../client/src/components/modal/styles.ts","../../../../../../../../client/src/components/modal/index.ts","../../../../../../../../client/src/components/modal/entry.generated.ts"],"sourcesContent":["import {layoutPadding, layoutGap, layoutHeight, type LayoutAlign} from '../layout';\nimport {bool, oneOf, string, type PropState, type SchemaToProps} from '../../runtime';\nimport {\n COMPONENT_RADII,\n LAYOUT_SPACES,\n EDGE_POSITIONS,\n ELEVATION_REFERENCES,\n HEADING_LEVELS,\n SURFACE_REFERENCES,\n type ComponentRadius,\n type LayoutSpace,\n type EdgePosition,\n type ElevationReference,\n type HeadingLevel,\n type SurfaceReference,\n} from '../common';\n\nconst MODAL_MODES = ['modal', 'sheet'] as const;\nconst MODAL_ALIGNS = ['start', 'center', 'end'] as const satisfies readonly LayoutAlign[];\nconst MODAL_SIDES = EDGE_POSITIONS;\nconst MODAL_INSETS = LAYOUT_SPACES;\nconst MODAL_RADII = COMPONENT_RADII;\nconst MODAL_SIZES = ['sm', 'md', 'lg', 'xl', 'full'] as const;\nconst MODAL_SURFACES = SURFACE_REFERENCES;\nconst MODAL_ELEVATIONS = ELEVATION_REFERENCES;\nconst MODAL_TITLE_AS_VALUES = HEADING_LEVELS;\n\ntype ModalMode = typeof MODAL_MODES[number];\ntype ModalAlign = typeof MODAL_ALIGNS[number];\ntype ModalSide = EdgePosition;\ntype ModalInset = LayoutSpace;\ntype ModalRadius = ComponentRadius;\ntype ModalSize = typeof MODAL_SIZES[number];\ntype ModalSurface = SurfaceReference;\ntype ModalElevation = ElevationReference;\ntype ModalTitleAs = HeadingLevel;\n\nconst modalSchema = {\n name: string,\n ...layoutPadding.schema,\n padding: oneOf(LAYOUT_SPACES, '5'),\n ...layoutGap.schema,\n gap: oneOf(LAYOUT_SPACES, '4'),\n ...layoutHeight.schema,\n open: bool,\n mode: oneOf(MODAL_MODES, 'modal'),\n align: oneOf(MODAL_ALIGNS, 'center'),\n side: oneOf(MODAL_SIDES, 'right'),\n inset: oneOf(MODAL_INSETS, '0'),\n radius: oneOf(MODAL_RADII, 'none'),\n size: oneOf(MODAL_SIZES, 'md'),\n surface: oneOf(MODAL_SURFACES, '1' as ModalSurface),\n elevation: oneOf(MODAL_ELEVATIONS, '5' as ModalElevation),\n dismissible: bool.default(true),\n closable: bool.default(true),\n disabled: bool,\n initialFocus: string,\n finalFocus: string,\n label: string,\n descriptionId: string,\n panelClass: string,\n overlayClass: string,\n class: string,\n};\n\nconst modalTriggerSchema = {\n name: string,\n disabled: bool,\n class: string,\n};\n\nconst modalOutletSchema = {\n id: string.default('ui-modal-root'),\n class: string,\n};\n\nconst modalTitleSchema = {\n as: oneOf(MODAL_TITLE_AS_VALUES, 'h2'),\n class: string,\n};\n\nconst modalDescriptionSchema = {\n class: string,\n};\n\nconst modalBodySchema = {\n ...layoutGap.schema,\n gap: oneOf(LAYOUT_SPACES, '3'),\n class: string,\n};\n\nconst modalFooterSchema = {\n ...layoutGap.schema,\n gap: oneOf(LAYOUT_SPACES, '2'),\n class: string,\n};\n\nconst modalCloseSchema = {\n label: string.default('Close'),\n class: string,\n};\n\ntype ModalProps = SchemaToProps<typeof modalSchema>;\ntype ModalTriggerProps = PropState<typeof modalTriggerSchema>;\n\nexport {\n MODAL_ALIGNS,\n MODAL_SIDES,\n MODAL_INSETS,\n MODAL_RADII,\n MODAL_SIZES,\n MODAL_ELEVATIONS,\n MODAL_SURFACES,\n MODAL_TITLE_AS_VALUES,\n MODAL_MODES,\n modalBodySchema,\n modalCloseSchema,\n modalDescriptionSchema,\n modalFooterSchema,\n modalOutletSchema,\n modalSchema,\n modalTitleSchema,\n modalTriggerSchema,\n};\nexport type {\n ModalAlign,\n ModalSide,\n ModalInset,\n ModalRadius,\n ModalProps,\n ModalSize,\n ModalSurface,\n ModalElevation,\n ModalTitleAs,\n ModalTriggerProps,\n ModalMode,\n};\n","import {\n createMachine,\n type Machine,\n} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport {defineControlledOpenProps} from '../shared/controlled-open';\nimport type {ModalProps} from './contract';\n\ntype ModalContext = Record<string, never>;\n\ntype ModalMachineEffects = {\n prepareOpen(): void;\n finishOpen(): void;\n prepareClose(): void;\n finishClose(): void;\n syncProps(): void;\n emitCancel(reason: 'escape' | 'outside'): void;\n};\n\ntype CreateModalMachineOptions = {\n props: ModalProps;\n effects: ModalMachineEffects;\n};\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'opening',\n project: () => ({}),\n onDone: 'OPENING_DONE',\n onError: 'OPENING_ERROR',\n} satisfies TransitionHookDefinition<ModalContext, ModalProps, Record<string, never>, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'closing',\n project: () => ({}),\n onDone: 'CLOSING_DONE',\n onError: 'CLOSING_ERROR',\n} satisfies TransitionHookDefinition<ModalContext, ModalProps, Record<string, never>, 'closing'>);\n\nconst modalHooks = [openingHook, closingHook] as const;\nconst controlledOpenProps = defineControlledOpenProps<ModalContext, ModalProps>();\n\nconst createModalMachine = ({\n props,\n effects,\n}: CreateModalMachineOptions): Machine<ModalContext, ModalProps> => createMachine<ModalContext, ModalProps>({\n initial: 'closed',\n states: {\n closed: {\n tags: ['closed'],\n on: {\n OPEN: {target: 'opening', guard: 'canOpen', effects: 'prepareOpen'},\n PROPS_CHANGED: [\n {\n target: 'opening',\n guard: controlledOpenProps.shouldOpen,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareOpen'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n opening: {\n tags: ['visible', 'interactive', 'transitioning'],\n on: {\n OPENING_DONE: {target: 'open', effects: 'finishOpen'},\n OPENING_ERROR: {target: 'open', effects: 'finishOpen'},\n CLOSE: {target: 'closing', effects: 'prepareClose'},\n CANCEL: {target: 'closing', guard: 'canDismiss', effects: ['emitCancel', 'prepareClose']},\n PROPS_CHANGED: [\n {\n target: 'closing',\n guard: controlledOpenProps.shouldClose,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareClose'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n open: {\n tags: ['visible', 'interactive', 'open'],\n on: {\n CLOSE: {target: 'closing', effects: 'prepareClose'},\n CANCEL: {target: 'closing', guard: 'canDismiss', effects: ['emitCancel', 'prepareClose']},\n PROPS_CHANGED: [\n {\n target: 'closing',\n guard: controlledOpenProps.shouldClose,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareClose'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n closing: {\n tags: ['visible', 'transitioning'],\n on: {\n CLOSING_DONE: {target: 'closed', effects: 'finishClose'},\n CLOSING_ERROR: {target: 'closed', effects: 'finishClose'},\n OPEN: {target: 'opening', guard: 'canOpen', effects: 'prepareOpen'},\n PROPS_CHANGED: [\n {\n target: 'opening',\n guard: controlledOpenProps.shouldOpen,\n reduce: 'replaceProps',\n effects: ['syncProps', 'prepareOpen'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n },\n}, {\n context: {},\n props,\n reducers: {\n replaceProps: controlledOpenProps.replace,\n },\n guards: {\n canOpen: ({props: currentProps}) => !currentProps.disabled,\n canDismiss: ({props: currentProps}) => currentProps.dismissible,\n },\n effects: {\n prepareOpen: effects.prepareOpen,\n finishOpen: effects.finishOpen,\n prepareClose: effects.prepareClose,\n finishClose: effects.finishClose,\n syncProps: effects.syncProps,\n emitCancel: ({event}) => {\n if (event.reason === 'escape' || event.reason === 'outside') effects.emitCancel(event.reason);\n },\n },\n});\n\nexport {createModalMachine, modalHooks};\nexport type {CreateModalMachineOptions, ModalContext, ModalMachineEffects};\n","import {layoutPadding, layoutGap, layoutHeight, LAYOUT_ALIGN_CLASSES, LAYOUT_MAX_HEIGHTS} from '../layout';\nimport {defineStyles} from '../../runtime';\nimport {COMPONENT_RADII, LAYOUT_SPACES, LAYOUT_PADDING_CLASSES, type ComponentRadius} from '../common';\nimport {MODAL_ALIGNS, MODAL_SIZES, type ModalSize} from './contract';\n\nconst PANEL_WIDTH_CLASSES = {\n sm: 'max-w-modal-sm',\n md: 'max-w-modal-md',\n lg: 'max-w-modal-lg',\n xl: 'max-w-modal-xl',\n full: 'max-w-full',\n} as const satisfies Record<ModalSize, string>;\n\nconst SHEET_RADIUS_CLASSES = {\n none: '',\n xs: 'rounded-overlay-xs',\n sm: 'rounded-overlay-sm',\n md: 'rounded-overlay-md',\n lg: 'rounded-overlay-lg',\n full: 'rounded-full',\n} as const satisfies Record<ComponentRadius, string>;\n\nconst EDGE_PANEL_LAYOUT_CLASSES = [\n 'grid-rows-[auto_auto_minmax(0,1fr)_auto]',\n '[&>[data-ui-modal-body]]:-mx-1 [&>[data-ui-modal-body]]:min-h-0 [&>[data-ui-modal-body]]:content-start',\n '[&>[data-ui-modal-body]]:overflow-x-hidden [&>[data-ui-modal-body]]:overflow-y-auto [&>[data-ui-modal-body]]:px-1',\n '[&>[data-ui-modal-footer]]:self-end',\n] as const;\n\nconst modalStyles = defineStyles({definition: {\n component: 'ui.modal',\n parts: {\n instance: {\n base: 'contents',\n },\n root: {\n base: [\n 'fixed inset-0 z-dialog m-0 h-auto max-h-none w-auto max-w-none overflow-visible border-0 bg-transparent p-0 text-surface-ink',\n 'backdrop:bg-transparent',\n ],\n },\n viewport: {\n base: 'fixed inset-0 z-dialog flex h-dvh',\n variants: {\n mode: {\n modal: 'justify-center overflow-y-auto p-4',\n sheet: '',\n },\n side: {\n top: '',\n right: '',\n bottom: '',\n left: '',\n },\n },\n compounds: [\n ...MODAL_ALIGNS.map((align) => ({\n when: {mode: 'modal', align},\n class: LAYOUT_ALIGN_CLASSES[align],\n })),\n ...LAYOUT_SPACES.map((inset) => ({\n when: {mode: 'sheet', inset},\n class: LAYOUT_PADDING_CLASSES[inset],\n })),\n {when: {mode: 'sheet', side: 'top'}, class: 'items-start justify-center'},\n {when: {mode: 'sheet', side: 'right'}, class: 'items-center justify-end overflow-hidden'},\n {when: {mode: 'sheet', side: 'bottom'}, class: 'items-end justify-center'},\n {when: {mode: 'sheet', side: 'left'}, class: 'items-center justify-start overflow-hidden'},\n ],\n defaults: {\n mode: 'modal',\n align: 'center',\n side: 'right',\n inset: '0',\n },\n },\n overlay: {\n base: 'fixed inset-0 bg-scrim',\n },\n panel: {\n base: [\n 'ui-content-edge relative z-dialog grid w-full min-w-0 overflow-auto outline-none',\n 'max-h-[min(var(--ui-modal-max-height,100%),100%)]',\n ],\n variants: {\n ...layoutPadding.variants,\n ...layoutGap.variants,\n ...layoutHeight.variants,\n maxHeight: Object.fromEntries(LAYOUT_MAX_HEIGHTS.map((size) => [size,\n `[--ui-modal-max-height:${size === 'none' || size === 'full' ? '100%' : `var(--container-${size})`}]`,\n ])),\n mode: {\n modal: 'rounded-overlay-md',\n sheet: '',\n },\n side: {\n top: '',\n right: '',\n bottom: '',\n left: '',\n },\n },\n compounds: [\n ...MODAL_SIZES.flatMap((size) => [\n {when: {mode: 'modal', size}, class: PANEL_WIDTH_CLASSES[size]},\n {when: {mode: 'sheet', side: 'right', size}, class: PANEL_WIDTH_CLASSES[size]},\n {when: {mode: 'sheet', side: 'left', size}, class: PANEL_WIDTH_CLASSES[size]},\n ]),\n {when: {mode: 'sheet', side: 'right'}, class: ['h-full', EDGE_PANEL_LAYOUT_CLASSES]},\n {when: {mode: 'sheet', side: 'left'}, class: ['h-full', EDGE_PANEL_LAYOUT_CLASSES]},\n {when: {mode: 'sheet', side: 'top'}, class: 'max-w-full'},\n {when: {mode: 'sheet', side: 'bottom'}, class: 'max-w-full'},\n ...COMPONENT_RADII.map((radius) => ({\n when: {mode: 'sheet', radius},\n class: SHEET_RADIUS_CLASSES[radius],\n })),\n {when: {mode: 'sheet', inset: '0', side: 'right'}, class: 'rounded-r-none'},\n {when: {mode: 'sheet', inset: '0', side: 'left'}, class: 'rounded-l-none'},\n {when: {mode: 'sheet', inset: '0', side: 'top'}, class: 'rounded-t-none'},\n {when: {mode: 'sheet', inset: '0', side: 'bottom'}, class: 'rounded-b-none'},\n ],\n defaults: {\n ...layoutPadding.defaults, padding: '5',\n ...layoutGap.defaults, gap: '4',\n ...layoutHeight.defaults,\n mode: 'modal',\n side: 'right',\n size: 'md',\n inset: '0',\n radius: 'none',\n },\n },\n trigger: {\n base: 'contents',\n },\n outlet: {\n base: '',\n },\n title: {\n base: 'pr-8',\n },\n description: {\n base: '-mt-3 pr-8 text-surface-ink-muted',\n },\n body: {\n base: 'grid min-w-0 text-sm',\n variants: layoutGap.variants,\n defaults: {...layoutGap.defaults, gap: '3'},\n },\n footer: {\n base: 'flex min-w-0 items-center justify-end pt-1',\n variants: layoutGap.variants,\n defaults: {...layoutGap.defaults, gap: '2'},\n },\n close: {\n base: 'absolute! right-3 top-3 rounded-dismiss',\n },\n closeIcon: {\n base: 'size-icon',\n },\n },\n}});\n\nexport {modalStyles};\n\nexport const styles = [modalStyles] as const;\n","import type Alpine from 'alpinejs';\n\nimport {animateProperties} from '@client/motion/properties';\nimport {parallel} from '@client/motion/animate';\nimport {presets} from '@client/motion/recipe';\nimport {\n type AlpineMachine,\n createAlpineMachine,\n defineAlpineData,\n reflectSchemaProp,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {cleanupManagerFor} from '@client/runtime/alpine-data';\nimport {defineProps} from '@client/runtime/codecs';\nimport {CleanupManager} from '@client/runtime/cleanup-manager';\nimport {addDismissableLayer} from '@client/runtime/dismissable-layer';\nimport {closestTabbable, trapFocus as trapFocusWithin} from '@client/runtime/focus-scope';\nimport {focusElement} from '@client/runtime/focus';\nimport {createLayoutTask} from '@client/runtime/layout-task';\nimport {mergeBindings, type BindingObject} from '@client/runtime/merge-bindings';\nimport {declareMorphAttributes} from '@client/runtime/morph';\nimport {acquireDocumentScrollLock} from '@client/runtime/scroll-lock';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {addListener, dispatch} from '@client/utils';\nimport {\n modalSchema,\n modalTriggerSchema,\n type ModalProps,\n type ModalTriggerProps,\n} from './contract';\nimport {createModalMachine, modalHooks, type ModalContext} from './machine';\nimport {modalStyles} from './styles';\n\ntype ModalTransitionName = (typeof modalHooks)[number]['name'];\ntype ModalTransition<TName extends ModalTransitionName = ModalTransitionName> = TransitionForHook<\n Extract<(typeof modalHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype CancelReason = 'escape' | 'outside';\n\ntype ModalCancelDetail = {\n reason: CancelReason;\n};\n\ntype ModalCloseEventDetail = {\n name?: string;\n};\n\ntype ModalController = {\n readonly name: string;\n readonly isOpen: boolean;\n readonly dialogId: string;\n openFrom(trigger: HTMLElement): void;\n close(event?: Event): void;\n syncExternalTrigger(trigger: HTMLElement, disabled: boolean): void;\n};\n\ntype ModalTriggerController = {\n readonly name: string;\n readonly target: HTMLElement;\n sync(): void;\n};\n\n/**\n * Public Alpine API for `ui.modal`.\n *\n * @public\n */\ninterface UiModalApi {\n /** Whether the modal has completed its opening transition. */\n readonly isOpen: boolean;\n\n /** Whether the modal is opening, open, or closing. */\n readonly isVisible: boolean;\n\n /** Opens the modal unless it is disabled. */\n open(event?: Event): void;\n\n /** Closes the modal. */\n close(event?: Event): void;\n}\n\n/**\n * Public Alpine API for `ui.modal.trigger`.\n *\n * @public\n */\ninterface UiModalTriggerApi {\n /** Opens the named modal unless the trigger or modal is disabled. */\n open(event?: Event): void;\n}\n\ntype ModalData = AlpineMachine<ModalContext, ModalProps, typeof modalHooks> & UiModalApi & {\n readonly name: string;\n readonly dialogId: string;\n readonly root: BindingObject;\n readonly dialog: BindingObject;\n readonly viewport: BindingObject;\n readonly overlay: BindingObject;\n readonly panel: BindingObject;\n init(): void;\n destroy(): void;\n};\n\ntype ModalTriggerData = UiModalTriggerApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n};\n\nconst modalControllers = new Set<ModalController>();\nconst modalTriggerControllers = new Set<ModalTriggerController>();\n\nconst stateFor = (open: boolean): 'open' | 'closed' => (open ? 'open' : 'closed');\nconst isExpandedState = (state: unknown): boolean => state === 'opening' || state === 'open';\n\nconst findNamedModal = (name: string): ModalController | null => (\n Array.from(modalControllers).find((controller) => controller.name === name) ?? null\n);\n\nconst setOpenAttributes = (el: HTMLElement, open: boolean): void => {\n el.setAttribute('data-state', stateFor(open));\n el.setAttribute('aria-expanded', open ? 'true' : 'false');\n};\n\nconst resolveTriggerTarget = (wrapper: HTMLElement): HTMLElement => {\n const target = closestTabbable(wrapper);\n // Inert or visibility-hidden ancestors temporarily exclude real controls from\n // tabbable's results. Trigger ownership must survive that presentation state.\n const control = 'button, input:not([type=\"hidden\"]), select, textarea, a[href], area[href], summary, [tabindex], [contenteditable]:not([contenteditable=\"false\"]), [role=\"button\"], [role=\"link\"]';\n if (target !== wrapper || wrapper.matches(control)) return target;\n return wrapper.querySelector<HTMLElement>(control) ?? wrapper;\n};\n\nconst UiModal = (AlpineInstance: Alpine.Alpine): TrellisAlpineComponent<ModalData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let dialogId = '';\n let activeTrigger: HTMLElement | null = null;\n let previouslyFocused: HTMLElement | null = null;\n let didShowModal = false;\n let releaseScrollLock: (() => void) | null = null;\n let isRegistered = false;\n let cleanup: CleanupManager;\n let localTriggerCleanup: CleanupManager | null = null;\n let localTriggerTarget: HTMLElement | null = null;\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Modal has not been initialized.');\n return rootEl;\n };\n\n const dialogEl = (): HTMLDialogElement => {\n const dialog = root().querySelector<HTMLDialogElement>('[data-ui-modal]');\n if (!(dialog instanceof HTMLDialogElement)) throw new Error('Modal requires a dialog element.');\n return dialog;\n };\n\n const viewportEl = (): HTMLElement => {\n const viewport = root().querySelector<HTMLElement>('[data-ui-modal-viewport]');\n if (!viewport) throw new Error('Modal requires a viewport element.');\n return viewport;\n };\n\n const overlayEl = (): HTMLElement => {\n const overlay = root().querySelector<HTMLElement>('[data-ui-modal-overlay]');\n if (!overlay) throw new Error('Modal requires an overlay element.');\n return overlay;\n };\n\n const panelEl = (): HTMLElement => {\n const panel = root().querySelector<HTMLElement>('[data-ui-modal-panel]');\n if (!panel) throw new Error('Modal requires a panel element.');\n return panel;\n };\n\n const titleEl = (): HTMLElement | null => root().querySelector<HTMLElement>('[data-ui-modal-title]');\n const descriptionEl = (): HTMLElement | null => root().querySelector<HTMLElement>('[data-ui-modal-description]');\n\n const syncPresentation = (): void => {\n const props = currentProps();\n dialogEl().className = resolveStyle({part: modalStyles.parts.root, props, className: props.class});\n viewportEl().className = resolveStyle({part: modalStyles.parts.viewport, props});\n overlayEl().className = resolveStyle({\n part: modalStyles.parts.overlay,\n props,\n className: props.overlayClass,\n });\n panelEl().className = resolveStyle({\n part: modalStyles.parts.panel,\n props,\n className: props.panelClass,\n });\n };\n\n const localTriggerEl = (): HTMLElement | null => (\n Array.from(root().children)\n .find((child) => child instanceof HTMLElement && child.matches('[data-ui-modal-trigger]')) as HTMLElement | undefined\n ?? null\n );\n\n const currentProps = (): Readonly<ModalProps> => bridge.getCommittedSnapshot().props;\n const isExpanded = (): boolean => bridge.matches('opening') || bridge.matches('open');\n\n const syncExternalTrigger = (trigger: HTMLElement, disabled: boolean): void => {\n const expanded = isExpanded();\n setOpenAttributes(trigger, expanded);\n trigger.setAttribute('aria-controls', dialogId);\n trigger.setAttribute('data-ui-modal-trigger-target', dialogId);\n\n if (disabled || currentProps().disabled) {\n trigger.setAttribute('aria-disabled', 'true');\n trigger.setAttribute('data-disabled', '');\n if (trigger instanceof HTMLButtonElement) trigger.disabled = true;\n if (trigger.tabIndex >= 0) trigger.tabIndex = -1;\n return;\n }\n\n trigger.removeAttribute('aria-disabled');\n trigger.removeAttribute('data-disabled');\n if (trigger instanceof HTMLButtonElement) trigger.disabled = false;\n if (trigger.tabIndex < 0) trigger.tabIndex = 0;\n };\n\n const syncTriggers = (): void => {\n const local = localTriggerEl();\n if (local && localTriggerTarget && local.contains(localTriggerTarget)) {\n syncExternalTrigger(localTriggerTarget, currentProps().disabled);\n } else if (local) localTriggerLayout.schedule();\n modalTriggerControllers.forEach((trigger) => trigger.sync());\n };\n\n const syncAccessibility = (): void => {\n const props = currentProps();\n const dialog = dialogEl();\n const panel = panelEl();\n const title = titleEl();\n const description = descriptionEl();\n\n dialog.id = dialogId;\n dialog.setAttribute('role', 'dialog');\n dialog.setAttribute('aria-modal', 'true');\n panel.id ||= `${dialogId}-panel`;\n panel.tabIndex = -1;\n\n if (title) {\n title.id ||= `${dialogId}-title`;\n dialog.setAttribute('aria-labelledby', title.id);\n dialog.removeAttribute('aria-label');\n } else {\n dialog.removeAttribute('aria-labelledby');\n if (props.label) dialog.setAttribute('aria-label', props.label);\n else dialog.removeAttribute('aria-label');\n }\n\n if (description) description.id ||= `${dialogId}-description`;\n if (props.descriptionId === 'none') dialog.removeAttribute('aria-describedby');\n else if (props.descriptionId) dialog.setAttribute('aria-describedby', props.descriptionId);\n else if (description) dialog.setAttribute('aria-describedby', description.id);\n else dialog.removeAttribute('aria-describedby');\n };\n\n const syncStateAttributes = ({syncOpen = true}: {syncOpen?: boolean} = {}): void => {\n const expanded = isExpanded();\n const state = stateFor(expanded);\n if (syncOpen) {\n reflectSchemaProp({el: root(), schema: modalSchema, key: 'open', value: expanded});\n }\n [dialogEl(), viewportEl(), overlayEl(), panelEl()].forEach((element) => {\n element.setAttribute('data-state', state);\n });\n syncTriggers();\n };\n\n const evaluateFocusExpression = (expression: string): unknown => {\n if (!expression.trim()) return undefined;\n try {\n return AlpineInstance.evaluate(root(), expression);\n } catch {\n return undefined;\n }\n };\n\n const focusInitial = (): void => {\n const configured = evaluateFocusExpression(currentProps().initialFocus);\n if (configured === false) {\n const active = dialogEl().ownerDocument.activeElement;\n if (active instanceof HTMLElement && dialogEl().contains(active)) active.blur();\n return;\n }\n if (configured instanceof HTMLElement && focusElement(configured, {showIndicator: false})) return;\n const autofocus = panelEl().querySelector<HTMLElement>('[autofocus]');\n if (focusElement(autofocus, {showIndicator: false})) return;\n focusElement(panelEl(), {showIndicator: false});\n };\n\n const restoreFocus = (): boolean => {\n const configured = evaluateFocusExpression(currentProps().finalFocus);\n if (configured === false) return false;\n if (configured instanceof HTMLElement && focusElement(configured, {showIndicator: false})) return true;\n const target = activeTrigger ?? previouslyFocused;\n if (focusElement(target, {showIndicator: false})) return true;\n const ownerFallback = root().parentElement?.closest<HTMLElement>('[data-ui-modal-panel]') ?? null;\n return focusElement(ownerFallback, {showIndicator: false});\n };\n\n const clearFocus = (): void => {\n const body = dialogEl().ownerDocument.body;\n const tabindex = body.getAttribute('tabindex');\n body.tabIndex = -1;\n focusElement(body, {showIndicator: false});\n if (tabindex === null) body.removeAttribute('tabindex');\n else body.setAttribute('tabindex', tabindex);\n };\n\n const clearPanelTransform = (): void => {\n const panel = panelEl();\n panel.style.removeProperty('transform');\n panel.style.removeProperty('translate');\n panel.style.removeProperty('scale');\n panel.style.removeProperty('rotate');\n };\n\n const prepareOpen = (): void => {\n const dialog = dialogEl();\n const active = dialog.ownerDocument.activeElement;\n previouslyFocused = active instanceof HTMLElement ? active : null;\n if (typeof dialog.showModal === 'function' && !didShowModal) {\n if (dialog.open) dialog.removeAttribute('open');\n // Native autofocus must see resting geometry rather than the previous\n // exit transform, which would scroll the sheet viewport off its edge.\n clearPanelTransform();\n dialog.showModal();\n didShowModal = true;\n } else if (!dialog.open) {\n dialog.setAttribute('open', '');\n }\n\n releaseScrollLock ??= acquireDocumentScrollLock(dialog.ownerDocument);\n syncAccessibility();\n syncStateAttributes();\n queueMicrotask(() => {\n if (rootEl && isExpanded()) focusInitial();\n });\n };\n\n const finishOpen = (): void => {\n clearPanelTransform();\n panelEl().setAttribute('data-ui-animate', '');\n syncStateAttributes();\n dispatch({el: dialogEl(), name: 'ui:open'});\n };\n\n const prepareClose = (): void => {\n panelEl().removeAttribute('data-ui-animate');\n syncStateAttributes();\n };\n\n const finishClose = (): void => {\n const dialog = dialogEl();\n const focusedBeforeClose = dialog.ownerDocument.activeElement;\n if (focusedBeforeClose instanceof HTMLElement && dialog.contains(focusedBeforeClose)) {\n focusedBeforeClose.blur();\n }\n if (dialog.open) dialog.close();\n didShowModal = false;\n releaseScrollLock?.();\n releaseScrollLock = null;\n syncStateAttributes();\n panelEl().removeAttribute('data-ui-animate');\n const restored = restoreFocus();\n const active = dialog.ownerDocument.activeElement;\n if (\n active instanceof HTMLElement\n && (\n dialog.contains(active)\n || (!restored && (active === activeTrigger || active === previouslyFocused))\n )\n ) clearFocus();\n queueMicrotask(() => {\n const retained = dialog.ownerDocument.activeElement;\n if (retained instanceof HTMLElement && dialog.contains(retained)) clearFocus();\n });\n activeTrigger = null;\n previouslyFocused = null;\n dispatch({el: dialog, name: 'ui:close'});\n };\n\n const syncProps = (): void => {\n syncPresentation();\n syncAccessibility();\n syncTriggers();\n };\n\n const bridge = createAlpineMachine({\n schema: modalSchema,\n hooks: modalHooks,\n createMachine: ({props}) => createModalMachine({\n props,\n effects: {\n prepareOpen,\n finishOpen,\n prepareClose,\n finishClose,\n syncProps,\n emitCancel: (reason) => {\n dispatch<ModalCancelDetail>({el: dialogEl(), name: 'ui:cancel', detail: {reason}});\n },\n },\n }),\n });\n\n const openFrom = (trigger: HTMLElement): void => {\n if (currentProps().disabled) return;\n activeTrigger = trigger;\n bridge.send('OPEN');\n };\n\n const cancel = (reason: CancelReason, event?: Event): void => {\n event?.preventDefault();\n bridge.send({type: 'CANCEL', reason});\n };\n\n const teardownLocalTrigger = (): void => {\n localTriggerCleanup?.run();\n localTriggerCleanup = null;\n };\n\n const setupLocalTrigger = (target: HTMLElement): void => {\n teardownLocalTrigger();\n localTriggerTarget = target;\n localTriggerCleanup = new CleanupManager();\n cleanup.addChild(localTriggerCleanup);\n syncExternalTrigger(target, currentProps().disabled);\n addListener({target, event: 'click', handler: () => openFrom(target), cleanup: localTriggerCleanup});\n addListener({target, event: 'keydown', handler: (event) => {\n if (!(event instanceof KeyboardEvent)) return;\n if (target instanceof HTMLButtonElement || target instanceof HTMLAnchorElement) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n openFrom(target);\n }, cleanup: localTriggerCleanup});\n };\n\n const localTriggerLayout = createLayoutTask({\n measure: () => {\n const trigger = rootEl ? localTriggerEl() : null;\n return trigger ? resolveTriggerTarget(trigger) : null;\n },\n apply: target => {\n if (rootEl && target?.isConnected && rootEl.contains(target)) setupLocalTrigger(target);\n },\n });\n\n const mountLocalTrigger = (): void => {\n const dialog = dialogEl();\n const inlineTrigger = dialog.querySelector<HTMLElement>('[data-ui-modal-trigger]');\n if (!inlineTrigger || inlineTrigger.dataset.name) return;\n root().insertBefore(inlineTrigger, dialog);\n localTriggerLayout.schedule();\n };\n\n const setupEvents = (): void => {\n const dialog = dialogEl();\n addListener({target: dialog, event: 'cancel', handler: (event) => {\n if (event.target !== dialog) return;\n cancel('escape', event);\n }, cleanup});\n addListener({target: dialog, event: 'close', handler: () => {\n // Native close events are queued and may arrive after a retained dialog reopens.\n if (!dialog.open && bridge.hasTag('visible')) bridge.send('CLOSE');\n }, cleanup});\n addListener({target: dialog, event: 'keydown', handler: (event) => {\n if (\n event instanceof KeyboardEvent\n && bridge.hasTag('interactive')\n ) trapFocusWithin(event, panelEl());\n }, cleanup});\n addListener({target: dialog, event: 'click', handler: (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n const close = target.closest('[data-ui-modal-close]');\n if (!close || close.closest('[data-ui-modal]') !== dialog) return;\n event.preventDefault();\n bridge.send('CLOSE');\n }, cleanup});\n addListener({target: document, event: 'ui:modal-close', handler: (event) => {\n const detail = (event as CustomEvent<ModalCloseEventDetail>).detail;\n if (!detail?.name || detail.name !== currentProps().name) return;\n bridge.send('CLOSE');\n }, cleanup});\n cleanup.add(addDismissableLayer({\n isEnabled: () => bridge.hasTag('interactive'),\n roots: () => [panelEl(), activeTrigger, localTriggerEl()],\n onDismiss: (event) => cancel('outside', event),\n }));\n };\n\n let component!: TrellisAlpineComponent<ModalData>;\n const controller: ModalController = {\n get name() {\n return currentProps().name;\n },\n get isOpen() {\n return bridge.matches('open');\n },\n get dialogId() {\n return dialogId;\n },\n openFrom,\n close(event?: Event) {\n event?.preventDefault();\n bridge.send('CLOSE');\n },\n syncExternalTrigger,\n };\n\n component = {\n ...bridge,\n get name(): string {\n return this.snapshot.current?.props.name ?? '';\n },\n get isOpen(): boolean {\n return this.snapshot.current?.value === 'open';\n },\n get isVisible(): boolean {\n return this.snapshot.current?.tags.includes('visible') ?? false;\n },\n get dialogId(): string {\n return dialogId;\n },\n init(): void {\n cleanup = cleanupManagerFor(this);\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n const props = currentProps();\n syncPresentation();\n for (const phase of ['opening', 'closing'] as const) {\n cleanup.add(bridge.onTransition(phase, (transition) => {\n if (dialogEl().hasAttribute(`x-ui-transition:${phase}`)) return;\n const opening = phase === 'opening';\n const current = currentProps();\n const panel = current.mode === 'sheet' ? presets.sheet[current.side] : presets.modal;\n return parallel(\n animateProperties(transition, opening ? presets.opacity.in : presets.opacity.out, {\n target: overlayEl(), role: opening ? 'presenceEmphasized' : 'presenceEmphasizedExit',\n }),\n animateProperties(transition, opening ? panel.in : panel.out, {\n target: panelEl(), role: opening ? 'presenceEmphasized' : 'presenceEmphasizedExit',\n }),\n );\n }));\n }\n declareMorphAttributes(panelEl(), 'data-ui-animate');\n dialogId = dialogEl().id || this.$id(`modal${props.name ? `-${props.name}` : ''}`);\n declareMorphAttributes(dialogEl(), 'open');\n syncAccessibility();\n modalControllers.add(controller);\n isRegistered = true;\n mountLocalTrigger();\n setupEvents();\n syncStateAttributes({syncOpen: false});\n if (props.open) queueMicrotask(() => bridge.send('OPEN'));\n },\n destroy(): void {\n localTriggerLayout.cancel();\n localTriggerCleanup = null;\n localTriggerTarget = null;\n if (isRegistered) {\n modalControllers.delete(controller);\n isRegistered = false;\n }\n bridge.disconnect();\n const dialog = rootEl?.querySelector<HTMLDialogElement>('[data-ui-modal]');\n if (dialog?.open) dialog.close();\n releaseScrollLock?.();\n releaseScrollLock = null;\n modalTriggerControllers.forEach((trigger) => trigger.sync());\n rootEl = null;\n },\n get root(): BindingObject {\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.instance, props: {}, className: ''}),\n {'data-ui-modal-instance': ''},\n ]});\n },\n get dialog(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.root, props, className: props.class}),\n {\n id: dialogId,\n role: 'dialog',\n 'aria-modal': 'true',\n ':data-state': () => stateFor(isExpandedState(snapshot.current?.value)),\n ':data-mode': () => snapshot.current?.props.mode,\n ':data-side': () => snapshot.current?.props.side,\n ':data-size': () => snapshot.current?.props.size,\n },\n ]});\n },\n get viewport(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.viewport, props}),\n {\n ':data-state': () => stateFor(isExpandedState(snapshot.current?.value)),\n ':data-mode': () => snapshot.current?.props.mode,\n ':data-side': () => snapshot.current?.props.side,\n },\n ]});\n },\n get overlay(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.overlay, props, className: props.overlayClass}),\n {':data-state': () => stateFor(isExpandedState(snapshot.current?.value))},\n ]});\n },\n get panel(): BindingObject {\n const snapshot = this.snapshot;\n const props = snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.panel, props, className: props.panelClass}),\n {\n tabindex: -1,\n ':data-state': () => stateFor(isExpandedState(snapshot.current?.value)),\n ':data-mode': () => snapshot.current?.props.mode,\n ':data-side': () => snapshot.current?.props.side,\n ':data-size': () => snapshot.current?.props.size,\n ':data-ui-surface': () => snapshot.current?.props.surface,\n ':data-ui-elevation': () => snapshot.current?.props.elevation,\n },\n ]});\n },\n open(event?: Event): void {\n event?.preventDefault();\n if (currentProps().disabled) return;\n const local = localTriggerEl();\n if (local) activeTrigger = localTriggerTarget && local.contains(localTriggerTarget)\n ? localTriggerTarget : resolveTriggerTarget(local);\n bridge.send('OPEN');\n },\n close(event?: Event): void {\n event?.preventDefault();\n bridge.send('CLOSE');\n },\n };\n\n return component;\n};\n\nconst UiModalTrigger = (): TrellisAlpineComponent<ModalTriggerData> => {\n let props: ModalTriggerProps | null = null;\n let rootEl: HTMLElement | null = null;\n let target: HTMLElement | null = null;\n let cleanup: CleanupManager;\n let isRegistered = false;\n\n const currentProps = (): ModalTriggerProps => {\n if (!props) throw new Error('Modal trigger has not been initialized.');\n return props;\n };\n\n const targetEl = (): HTMLElement => {\n if (!target) throw new Error('Modal trigger has not been initialized.');\n return target;\n };\n\n const modal = (): ModalController | null => {\n const name = currentProps().name;\n return name ? findNamedModal(name) : null;\n };\n\n const sync = (): void => {\n if (!target) {\n if (props?.name) targetLayout.schedule();\n return;\n }\n const triggerProps = currentProps();\n const trigger = target;\n const modalController = modal();\n if (modalController) {\n modalController.syncExternalTrigger(trigger, triggerProps.disabled);\n return;\n }\n\n setOpenAttributes(trigger, false);\n if (triggerProps.disabled) {\n trigger.setAttribute('aria-disabled', 'true');\n trigger.setAttribute('data-disabled', '');\n } else {\n trigger.removeAttribute('aria-disabled');\n trigger.removeAttribute('data-disabled');\n }\n };\n\n const controller: ModalTriggerController = {\n get name() {\n return currentProps().name;\n },\n get target() {\n return targetEl();\n },\n sync,\n };\n\n const open = (event?: Event): void => {\n event?.preventDefault();\n if (!rootEl || currentProps().disabled) return;\n // Explicit calls can precede the initial presentation frame.\n if (!target) {\n targetLayout.cancel();\n setupTarget(resolveTriggerTarget(rootEl));\n }\n if (target) modal()?.openFrom(target);\n };\n const setupTarget = (trigger: HTMLElement): void => {\n if (!rootEl || !rootEl.contains(trigger) || target) return;\n target = trigger;\n modalTriggerControllers.add(controller);\n isRegistered = true;\n sync();\n addListener({target: trigger, event: 'click', handler: open, cleanup});\n addListener({target: trigger, event: 'keydown', handler: (event) => {\n if (!(event instanceof KeyboardEvent)) return;\n if (trigger instanceof HTMLButtonElement || trigger instanceof HTMLAnchorElement) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n open(event);\n }, cleanup});\n };\n const targetLayout = createLayoutTask({\n measure: () => rootEl && props?.name ? resolveTriggerTarget(rootEl) : null,\n apply: trigger => { if (trigger?.isConnected) setupTarget(trigger); },\n });\n\n return {\n init(): void {\n cleanup = cleanupManagerFor(this);\n rootEl = this.$el;\n props = defineProps({\n el: this.$el,\n schema: modalTriggerSchema,\n onChange: () => {\n if (props?.name) sync();\n },\n });\n if (!props.name) return;\n targetLayout.schedule();\n },\n destroy(): void {\n targetLayout.cancel();\n props?.disconnect();\n if (isRegistered) modalTriggerControllers.delete(controller);\n isRegistered = false;\n props = null;\n target = null;\n rootEl = null;\n },\n get root(): BindingObject {\n const triggerProps = currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: modalStyles.parts.trigger, props: {}, className: triggerProps.class}),\n {\n 'data-ui-modal-trigger': '',\n ':data-name': () => props?.name || undefined,\n ':data-disabled': () => (props?.disabled ? '' : undefined),\n },\n ]});\n },\n open,\n };\n};\n\nconst registerModal = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiModal', () => UiModal(AlpineInstance))(AlpineInstance);\n defineAlpineData('UiModalTrigger', UiModalTrigger)(AlpineInstance);\n};\n\nexport {registerModal, UiModal, UiModalTrigger};\nexport type {ModalCancelDetail, ModalTransition, UiModalApi, UiModalTriggerApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\n\nimport {registerModal as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerModal = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerModal};\nexport default registerModal;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./modal-
|
|
2
|
-
export {default} from "./modal-
|
|
1
|
+
export * from "./modal-DYn805Mg.js";
|
|
2
|
+
export {default} from "./modal-DYn805Mg.js";
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels-C4TtKM8_.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e,r as t,s as n,t as r}from"../chunks/dom-DiTFTWeR.js";import{O as i}from"../chunks/properties-D8pFWF8g.js";import{t as a}from"../chunks/layout-task-B6P8q7BH.js";import{n as o}from"../chunks/morph-Cq3V_23_.js";import{a as s,f as c,l,n as u}from"../chunks/codecs-CQ7olTJL.js";import{a as d,n as ee,t as f}from"../chunks/machine-Do4tL7nc.js";import{n as p}from"../chunks/focus-BvBkrIcj.js";import{t as te}from"../chunks/preferences-BZyZ-kK6.js";import{t as ne}from"../chunks/cleanup-manager-D9QiZF_Q.js";import{n as m,t as re}from"../chunks/alpine-data-Dvc_bXq6.js";import{n as h,t as g}from"../chunks/styles-CX2j92ex.js";import{t as ie}from"../chunks/merge-bindings-BtqW3UgP.js";import{r as ae}from"../chunks/focus-scope-DYfME-Rk.js";import{t as oe}from"../chunks/semantic-observer-CIoriWtV.js";import{n as se,t as _}from"../chunks/capability-resizable-DPMSJ1AR.js";import{t as ce}from"../chunks/size-DAtboz8G.js";import{t as le}from"../chunks/resize-preview-hnUhGcMX.js";var ue=(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`],S=[`toggle`,`expand`,`collapse`],de={id:c.default(`ui-panels`),orientation:l(v,`horizontal`),persist:u,divider:u.default(!0),class:c},fe={id:c,as:l(y,`section`),size:l(b,`fill`),resize:l(x,`none`),collapsible:u,defaultCollapsed:u,class:c},C={target:c,action:l(S,`toggle`),icon:c.default(`menu`),label:c.default(`Expand`),class:c},pe=[d({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})}}),d({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})}}),d({name:`sizing`,state:`sizing`,projectEach:e=>e.context.sizing.changes,onDone:`SIZE_DONE`,onError:`SIZE_ERROR`}),d({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`})],w=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],T=e=>typeof e.panelId==`string`?e.panelId:``,E=e=>typeof e==`number`&&Number.isFinite(e)?e:null,D=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=E(t.from),i=E(t.to),a=t.reset===!0;return n&&r!==null&&i!==null&&(r!==i||a)?[{panelId:n,from:r,to:i,...a?{reset:!0}:{}}]:[]}),O=(e,t)=>typeof e.props==`object`&&e.props!==null?e.props:t,k=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),A=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},j=e=>new Map(e.map(e=>[e.id,e])),M=(e,t)=>Object.fromEntries(e.flatMap(e=>e.kind===`bounded`&&Object.hasOwn(t,e.id)?[[e.id,t[e.id]]]:[])),N=e=>{let t=T(e.event),n=e.context.layout.collapsedIds,r=e.context.collection,i=j(r).get(t);switch(e.event.type){case`RESIZE_END`: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}},P=e=>{let t=T(e.event);return j(e.context.collection).has(t)&&!k(e.context.layout.collapsedIds,N(e))},F=e=>{let t=T(e.event),n=j(e.context.collection).get(t);return n?.kind===`bounded`&&n.resizable&&!e.context.layout.collapsedIds.includes(t)&&E(e.event.size)!==null},I=e=>{let t=D(e.event),n=j(e.context.collection);return t.length>0&&t.every(({panelId:t})=>n.get(t)?.kind===`bounded`&&!e.context.layout.collapsedIds.includes(t))},me=e=>{let t=w(e.event.ids),n=j(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))},L=e=>{let t=D(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:M(e.context.collection,n)},sizing:{changes:t}}}},he=e=>{let t={...e.context.layout.committedSizes};return w(e.event.ids).forEach(e=>delete t[e]),{context:{...e.context,layout:{...e.context.layout,committedSizes:M(e.context.collection,t)}}}},R=e=>{let t=N(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))}}}},z=e=>{let t=A(e.event.collection),n=j(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=M(t,e.context.layout.committedSizes),a=j(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,previewCollapsed:!1}}}},B=e=>{let t=j(A(e.event.collection)).get(e.context.resize.activeId);return t?.kind!==`bounded`||!t.resizable},ge=({props:e,context:t,effects:n})=>f({initial:`stable`,on:{DOM_INVALIDATED:{effects:`sync`}},states:{stable:{tags:[`stable`],on:{COLLAPSE:{target:`changing`,guard:P,reduce:R,effects:`prepareChange`},EXPAND:{target:`changing`,guard:P,reduce:R,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:P,reduce:R,effects:`prepareChange`},SIZE:{target:`sizing`,guard:I,reduce:L,effects:`prepareSizing`},RESET_HIDDEN_SIZES:{target:`persisting`,guard:me,reduce:he,effects:[`sync`,`persist`]},RESIZE_START:{target:`resizing`,guard:F,reduce:`startResize`,effects:`beginResize`},PANELS_CHANGED:{reduce:z,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:P,reduce:R,effects:`prepareChange`},EXPAND:{target:`changing`,guard:P,reduce:R,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:P,reduce:R,effects:`prepareChange`},PANELS_CHANGED:{reduce:z,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:I,reduce:L,effects:`prepareSizing`},RESIZE_START:{target:`resizing`,guard:F,reduce:`startResize`,effects:`beginResize`},PANELS_CHANGED:{reduce:z,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},resizing:{tags:[`resizing`],on:{RESIZE:{guard:`activeResize`,reduce:`previewResize`,effects:`previewResize`},RESIZE_END:[{target:`persisting`,guard:e=>e.event.collapsed===!0&&T(e.event)===e.context.resize.activeId&&F(e)&&j(e.context.collection).get(T(e.event))?.collapsible===!0,reduce:e=>({context:{...R(e).context,resize:{activeId:``,initialSize:null,previewSize:null,previewCollapsed:!1}}}),effects:[`finishChange`,`persist`]},{target:`persisting`,guard:`activeResize`,reduce:`commitResize`,effects:[`commitResize`,`persist`]}],RESIZE_CANCEL:{target:`stable`,reduce:`clearResize`,effects:`cancelResize`},PANELS_CHANGED:[{target:`stable`,guard:B,reduce:z,effects:[`cancelResize`,`sync`]},{reduce:z,effects:`sync`}],PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},persisting:{tags:[`persisting`],on:{PERSIST_DONE:`stable`,PERSIST_ERROR:`stable`,COLLAPSE:{target:`changing`,guard:P,reduce:R,effects:`prepareChange`},EXPAND:{target:`changing`,guard:P,reduce:R,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:P,reduce:R,effects:`prepareChange`},SIZE:{target:`sizing`,guard:I,reduce:L,effects:`prepareSizing`},PANELS_CHANGED:{reduce:z,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}}}},{props:e,context:t,reducers:{replaceProps:e=>({props:O(e.event,e.props)}),startResize:e=>{let t=E(e.event.size);return{context:{...e.context,resize:{activeId:T(e.event),initialSize:t,previewSize:t,previewCollapsed:!1}}}},previewResize:e=>({context:{...e.context,resize:{...e.context.resize,previewSize:E(e.event.size),previewCollapsed:e.event.collapsed===!0}}}),commitResize:e=>{let t=T(e.event),n=E(e.event.size);if(n!==null)return{context:{...e.context,layout:{...e.context.layout,committedSizes:M(e.context.collection,{...e.context.layout.committedSizes,[t]:n})},resize:{activeId:``,initialSize:null,previewSize:null,previewCollapsed:!1}}}},clearResize:e=>({context:{...e.context,resize:{activeId:``,initialSize:null,previewSize:null,previewCollapsed:!1}}})},guards:{activeResize:e=>T(e.event)===e.context.resize.activeId&&E(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}}),V=g({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 border-separator`,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 outline-none`],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`}}}}),H=new Set,U=e=>e instanceof CustomEvent&&e.detail&&typeof e.detail==`object`?e.detail:{},_e=(()=>{let e=!1;return()=>{if(e||typeof document>`u`)return;let t=e=>t=>{let n=U(t);!n.__panelsNotification&&n.panelId&&H.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=U(e);!t.__panelsNotification&&t.panelId&&Number.isFinite(t.size)&&H.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=U(e);t.__panelsNotification||H.forEach(e=>{t.groupId&&t.groupId!==e.id||(!t.panelId||e.hasPanel(t.panelId))&&e.reset(t.panelId)})}),e=!0}})(),W=()=>{let c=null,l=null,u=null,d=null,f=null,m=new Map,g=new Map,_,v=null,y=new Set,b=new Map,x=new Map,S=new Map,C=new Map,w=()=>{if(!c)throw Error(`Panels has not been initialized.`);return c},T=e=>e.closest(`[data-ui-panels]`)===w(),E=()=>Array.from(w().children).flatMap(e=>{if(!(e instanceof HTMLElement)||!e.hasAttribute(`data-ui-panel`))return[];let t=e.querySelector(`:scope > [data-ui-panel-expanded]`);return!t||!T(t)?[]:[{panel:e,expanded:t,collapsed:e.querySelector(`:scope > [data-ui-panel-collapsed]`),handle:e.querySelector(`:scope > [data-ui-panel-resize-handle]`),props:s({el:e,schema:fe})}]}),D=e=>E().find(t=>t.props.id===e)??null,O=()=>Q.getCommittedSnapshot().context,k=()=>Q.getCommittedSnapshot().props,A=e=>O().layout.collapsedIds.includes(e),j=()=>k().orientation===`horizontal`&&d===`stacked`,M=()=>j()?`vertical`:k().orientation,N=()=>w().dataset.orientation===`vertical`?`vertical`:`horizontal`,P=e=>{let t=e.getBoundingClientRect();return N()===`horizontal`?t.width:t.height},F=()=>{let e=E(),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}})},I=e=>g.get(e)??0,me=()=>{let e=new Set([`--spacing-panel-collapsed`,`--spacing-panel-resize-handle`,`--spacing-panel-resize-handle-coarse`,...E().flatMap(({props:e})=>e.size===`fill`?[]:[`--spacing-panel-${e.size}`,`--spacing-panel-${e.size}-min`,`--spacing-panel-${e.size}-max`])]),t=document.createDocumentFragment();for(let n of e){if(m.has(n))continue;let e=document.createElement(`div`);e.setAttribute(`aria-hidden`,`true`),e.style.cssText=`position:absolute;visibility:hidden;pointer-events:none;width:var(${n});height:0;inset:0 auto auto 0;`,m.set(n,e),t.append(e),u?.observe(e)}w().append(t)},L=a({measure:()=>{if(!c)return null;let e=f??w().getBoundingClientRect().width;return e===0?null:{width:e,breakpoint:ue(w(),`sm`),lengths:[...m].map(([e,t])=>[e,t.getBoundingClientRect().width])}},apply:e=>{if(!e||!c)return;let t=e.lengths.some(([e,t])=>g.get(e)!==t);e.lengths.forEach(([e,t])=>g.set(e,t));let n=k().orientation===`horizontal`&&e.width<e.breakpoint?`stacked`:`wide`,r=d!==n;d=n,r&&q(),t||r?Me():je()}}),he=e=>e.props.size===`fill`?{minimum:0,maximum:1/0}:{minimum:I(`--spacing-panel-${e.props.size}-min`),maximum:I(`--spacing-panel-${e.props.size}-max`)},R=(e,t)=>{let{minimum:n,maximum:r}=he(e);return Math.min(r,Math.max(n,t))},z=()=>({collection:F(),layout:{collapsedIds:E().filter(({panel:e,props:t})=>t.collapsible&&e.dataset.state===`collapsed`).map(({props:e})=>e.id),committedSizes:Object.fromEntries(E().flatMap(({panel:e,props:t})=>{let n=Number(e.dataset.preferredSize);return t.size!==`fill`&&Number.isFinite(n)&&n>=0?[[t.id,n]]:[]}))},change:{openingIds:[],closingIds:[]},resize:{activeId:``,initialSize:null,previewSize:null,previewCollapsed:!1},sizing:{changes:[]}}),B=(e,t,n)=>{N()===`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=``)},U=e=>{e.style.flex=``,e.style.minWidth=``,e.style.maxWidth=``,e.style.minHeight=``,e.style.maxHeight=``},W=(e,t)=>{let n=O().layout.committedSizes[e.props.id];if(n===void 0?e.panel.style.removeProperty(`--ui-panel-preferred-size`):e.panel.style.setProperty(`--ui-panel-preferred-size`,`${n}px`),j()){U(e.panel);return}if(b.get(e.panel)?.preview?.moving)return;if(t!==void 0){e.panel.style.flex=`0 0 ${t}px`,B(e.panel,`0px`,`none`);return}if(O().resize.activeId===e.props.id&&O().resize.previewCollapsed){let t=e.collapsed?`var(--spacing-panel-collapsed)`:`0px`;e.panel.style.flex=`0 0 ${t}`,B(e.panel,t,t);return}if(A(e.props.id)){if(O().collection.find(({id:t})=>t===e.props.id)?.defaultCollapsed){U(e.panel);return}let t=e.collapsed?`var(--spacing-panel-collapsed)`:`0px`;e.panel.style.flex=`0 0 ${t}`,B(e.panel,t,t);return}if(e.props.size===`fill`){U(e.panel);return}let r=O().resize.activeId===e.props.id?O().resize.previewSize:O().layout.committedSizes[e.props.id];if(r==null){U(e.panel);return}let i=`${r}px`;e.panel.style.flex=`0 1 ${i}`,B(e.panel,`var(--spacing-panel-${e.props.size}-min)`,`var(--spacing-panel-${e.props.size}-max)`)},G=(e,t)=>{e.toggleAttribute(`inert`,t),e.setAttribute(`aria-hidden`,t?`true`:`false`)},K=e=>{let t=k(),r=M(),i=A(e.props.id),a=O().resize.activeId===e.props.id&&O().resize.previewCollapsed,o=b.get(e.panel)?.preview?.moving===!0;e.panel.toggleAttribute(`data-collapse-preview`,a);let s=Q.hasTag(`changing`)&&O().change.openingIds.includes(e.props.id),c=Q.hasTag(`changing`)&&O().change.closingIds.includes(e.props.id),l=o||!(i&&!c)&&!a,u=!o&&(a||i&&!c&&!s)&&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=h({part:V.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:O().resize.activeId===e.props.id}),W(e),e.expanded.hidden=!l,G(e.expanded,!l||a||i&&o),e.collapsed&&(e.collapsed.hidden=!u,G(e.collapsed,!u)),e.handle){let t=j()||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=t&&!o,!i&&!Q.hasTag(`transitioning`)&&b.get(e.panel)?.resize.refresh(),e.handle.className=h({part:V.parts.resizeHandle,props:{orientation:r,edge:e.props.resize},className:e.handle.dataset.class??``})}},ve=e=>{e.forEach((t,r)=>{let i=e[r+1];o(t.panel,`data-divider`),n({el:t.panel,attr:`data-divider`,present:k().divider&&i!==void 0})})},ye=e=>{let t=e.dataset.target||``;if(!t){let t=e.closest(`[data-ui-panel]`),n=t?.closest(`[data-ui-panels]`),r=[...H].find(e=>e.id===n?.id),i=t&&r===$?D(t.id):null;return i&&r?{record:i,controller:r}:null}let n=e.dataset.groupId||e.closest(`[data-ui-panels]`)?.id,r=[...H].filter(e=>!n||e.id===n).find(e=>e.hasPanel(t)),i=r===$?D(t):null;return i&&r?{record:i,controller:r}:null},be=()=>{document.querySelectorAll(`[data-ui-panel-toggle]`).forEach(e=>{let t=ye(e);if(!t||t.controller!==$)return;let n=A(t.record.props.id);e.dataset.target=t.record.props.id,e.dataset.groupId=k().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)})},q=()=>{let e=k(),t=M();d!==null&&(w().dataset.responsiveMode=d),w().dataset.layoutOrientation=t,w().style.flexDirection=d===null?``:t===`horizontal`?`row`:`column`,w().className=h({part:V.parts.root,props:{...e,orientation:t},className:e.class}),n({el:w(),attr:`data-resizing`,present:Q.hasTag(`resizing`)}),n({el:w(),attr:`data-transitioning`,present:Q.hasTag(`transitioning`)});let r=E();r.forEach(K),ve(r),be(),L.schedule()},xe=(e,t=!1,n=!0)=>{let r=document.activeElement;if(!t&&(!(r instanceof HTMLElement)||!e.collapsed?.contains(r)))return;let i=S.get(e.props.id);i?.isConnected&&e.expanded.contains(i)?p(i,{showIndicator:n}):(e.expanded.tabIndex=-1,p(e.expanded,{showIndicator:n}))},Se=(e,t=!1,n=!0)=>{let r=document.activeElement;if(!t&&(!(r instanceof HTMLElement)||!e.expanded.contains(r)))return;let i=e.collapsed?ae(e.collapsed)[0]:void 0,a=C.get(e.props.id),o=a?.isConnected&&!e.panel.contains(a)?a:void 0;i?p(i,{showIndicator:n}):o?p(o,{showIndicator:n}):(w().tabIndex=-1,p(w(),{showIndicator:n}))},J=new Map,Ce=()=>{J.clear(),O().change.closingIds.forEach(e=>{let t=D(e)?.handle;t&&document.activeElement===t&&J.set(e,t.matches(`:focus-visible`))});let e=[...O().change.openingIds,...O().change.closingIds],t=new Map(O().change.openingIds.flatMap(e=>{let t=D(e),n=document.activeElement;return t!==null&&t.collapsed!==null&&n instanceof HTMLElement&&t.collapsed.contains(n)?[[e,n.matches(`:focus-visible`)]]:[]})),n=new Map(e.flatMap(e=>{let t=D(e);if(!t)return[];if(O().change.closingIds.includes(e)){let n=document.activeElement;n instanceof HTMLElement&&t.expanded.contains(n)&&S.set(e,n)}return[[e,P(t.panel)]]}));e.forEach(e=>{let t=D(e);t&&b.get(t.panel)?.preview?.cancel()}),q(),O().change.openingIds.forEach(e=>{let n=D(e);n&&xe(n,t.has(e),t.get(e)??!0)}),e.flatMap(e=>{let t=D(e),r=n.get(e);return t&&r!==void 0?[{id:e,record:t,from:r,to:P(t.panel)}]:[]}).forEach(({id:e,record:t,from:n,to:r})=>{x.set(e,{from:n,to:r}),W(t,n)})},we=()=>{let e=[...O().change.openingIds],t=[...O().change.closingIds],n=new Map(t.flatMap(e=>{let t=D(e),n=document.activeElement,r=t!==null&&n instanceof HTMLElement&&(t.expanded.contains(n)||t.handle===n);return J.has(e)?[[e,J.get(e)]]:r?[[e,n.matches(`:focus-visible`)]]:[]}));E().forEach(e=>W(e)),q(),t.forEach(e=>{let t=D(e);t&&!b.get(t.panel)?.preview?.moving&&Se(t,n.has(e),n.get(e)??!0)}),J.clear(),e.forEach(e=>Y(`ui:panel-expand`,e)),t.forEach(e=>Y(`ui:panel-collapse`,e)),[...e,...t].forEach(e=>x.delete(e))},Y=(e,n,r={})=>{t({el:w(),name:e,detail:{groupId:k().id,panelId:n,__panelsNotification:!0,...r}})},Te=()=>{let e=O().layout;k().persist&&te(`panels`,k().id,{collapsed:[...e.collapsedIds],sizes:{...e.committedSizes}}),t({el:w(),name:`ui:panels-layout-change`,detail:{groupId:k().id,collapsed:[...e.collapsedIds],sizes:{...e.committedSizes},__panelsNotification:!0}})},X=e=>{if(!c)return;if(Q.hasTag(`stable`)){e();return}let t=window.setTimeout(()=>{y.delete(t),X(e)},16);y.add(t)},Ee=(e,t)=>{let n=e.find(e=>t(e)!==A(e));n&&(Q.send({type:t(n)?`COLLAPSE`:`EXPAND`,panelId:n}),X(()=>Ee(e,t)))},De=e=>{let t=F(),n=e?t.filter(({id:t})=>t===e):t;if(n.length===0)return;let r=()=>{Ee(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(O().layout.committedSizes,e));if(j()){i.length>0?(Q.send({type:`RESET_HIDDEN_SIZES`,ids:i}),X(r)):r();return}let a=i.filter(A);a.length>0&&Q.send({type:`RESET_HIDDEN_SIZES`,ids:a});let o=i.filter(e=>!A(e)).flatMap(e=>{let t=D(e);return!t||t.props.size===`fill`?[]:[{panelId:e,from:P(t.panel),to:I(`--spacing-panel-${t.props.size}`),reset:!0}]});if(o.length>0){Q.send({type:`SIZE`,changes:o}),X(r);return}r()},Oe=()=>{O().sizing.changes.forEach(({panelId:e,from:t})=>{let n=D(e);n&&W(n,t)})},ke=()=>{O().sizing.changes.forEach(({panelId:e,to:t})=>{let n=D(e);n&&(W(n),Y(`ui:panel-resize-end`,e,{size:t}))}),q()},Ae=t=>{if(M()===`vertical`)return t===`start`?`negative`:`positive`;let n=e({el:w()});return t===`start`?n?`positive`:`negative`:n?`negative`:`positive`},je=()=>{let e=v;if(!e||g.size===0)return;let t=new Set(E().map(({panel:e})=>e));b.forEach(({cleanup:e},n)=>{t.has(n)||(e.run(),b.delete(n))}),E().forEach(t=>{if(b.has(t.panel)||!t.handle||t.props.size===`fill`||t.props.resize===`none`)return;let n=he(t),r=I(`--spacing-panel-resize-handle`),i=I(`--spacing-panel-resize-handle-coarse`),a=new ne;e.addChild(a);let o=null,s=se({element:t.panel,handle:t.handle,axis:M()===`horizontal`?`x`:`y`,direction:Ae(t.props.resize),min:n.minimum,max:n.maximum,mode:`onChange`,collapseThreshold:t.props.collapsible?56:void 0,hitArea:r,coarseHitArea:i,disabled:()=>j()||A(t.props.id),onStart:e=>{o?.moving&&!o.collapsed?o.begin(Z(e)):(o?.cancel(),o=le({region:t.panel,content:t.expanded,axis:M()===`horizontal`?`x`:`y`,direction:Ae(t.props.resize),collapsedSize:t.collapsed?I(`--spacing-panel-collapsed`):0,track:{element:t.panel,property:`flexBasis`,value:e=>`${e}px`},render:()=>{if(!c||!t.panel.isConnected)return;let e=document.activeElement===t.handle,n=e&&t.handle?.matches(`:focus-visible:not([data-ui-focus-indicator="suppressed"])`)===!0;K(t),e&&A(t.props.id)&&!o?.moving&&Se(t,!0,n)}})),Q.send({type:`RESIZE_START`,panelId:t.props.id,size:Z(e)})},onResize:e=>{o?.update(Z(e),e.collapsed),Q.send({type:`RESIZE`,panelId:t.props.id,size:Z(e),collapsed:e.collapsed})},onEnd:e=>{o?.update(Z(e),e.collapsed),Q.send({type:`RESIZE_END`,panelId:t.props.id,size:Z(e),collapsed:e.collapsed}),o?.commit()},onCancel:()=>{Q.send({type:`RESIZE_CANCEL`}),o?.cancel()}});a.add(s),a.add(()=>o?.cancel()),b.set(t.panel,{cleanup:a,resize:s,get preview(){return o}})})},Me=()=>{v?.run(),b.clear(),v=new ne,_.addChild(v),je()},Z=e=>M()===`horizontal`?e.previewWidth:e.previewHeight,Q=ee({schema:de,hooks:pe,resolveTransitionElement:({data:e})=>{let t=e?.panelId;return t?D(t)?.panel??null:w()},createMachine:({props:e})=>ge({props:e,context:z(),effects:{prepareChange:Ce,finishChange:we,sync:()=>{q(),Me()},beginResize:()=>{q()},previewResize:()=>{let e=O().resize.activeId,t=D(e);t&&K(t);let n=O().resize.previewSize;n!==null&&Y(`ui:panel-resize`,e,{size:n})},commitResize:e=>{q();let t=typeof e.event.panelId==`string`?e.event.panelId:``,n=O().layout.committedSizes[t];t&&n!==void 0&&Y(`ui:panel-resize-end`,t,{size:n})},cancelResize:q,prepareSizing:Oe,finishSizing:ke,persist:Te}})}),Ne=()=>{let e=F();Q.send({type:`PANELS_CHANGED`,collection:e}),me(),L.schedule()},Pe=()=>{l=oe({targets:w(),read:F,onChange:Ne,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`id`,`data-size`,`data-resize`,`data-collapsible`,`data-default-collapsed`]}})},$;return $={...Q,get id(){return w().id||k().id},get orientation(){return M()},get collapsed(){return[...O().layout.collapsedIds]},get sizes(){return{...O().layout.committedSizes}},get root(){let e=this.snapshot.current?.props??k();return ie({inputs:[h({part:V.parts.root,props:e,className:e.class}),{"data-ui-panels":``}]})},init(){_=re(this),v=new ne,_.addChild(v),c=this.$el,Q.connect(this.$el,this.snapshot),w().id||=k().id,H.add($),_e(),me(),q(),L.schedule(),u=new ResizeObserver(e=>{let t=e.find(({target:e})=>e===c);t&&(f=t.contentRect.width),L.schedule()}),u.observe(w()),m.forEach(e=>u?.observe(e)),Pe(),r({target:w(),event:`keydown`,handler:()=>be(),cleanup:_})},destroy(){L.cancel(),m.forEach(e=>e.remove()),m.clear(),g.clear(),H.delete($),l?.(),l=null,u?.disconnect(),u=null,b.clear(),v=null,y.forEach(e=>window.clearTimeout(e)),y.clear(),Q.disconnect(),c=null},transitionPanel(e){let t=e.data.panelId,n=D(t),r=x.get(t);return!n||!r||r.from===r.to?(n&&W(n,r?.to),i()):ce(e,{target:n.panel,keyframes:{flexBasis:[`${r.from}px`,`${r.to}px`]},role:`layout`,cleanup:()=>W(n)})},transitionPanelSize(e){let{panelId:t,from:n,to:r}=e.data,a=D(t);return!a||n===r?(a&&W(a),i()):ce(e,{target:a.panel,keyframes:{flexBasis:[`${n}px`,`${r}px`]},role:`layoutQuick`,cleanup:()=>W(a)})},hasPanel(e){return D(e)!==null},isCollapsed:A,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=D(e);if(j()||!n||n.props.size===`fill`||A(e)||!Number.isFinite(t))return;let r=P(n.panel),i=R(n,t);Math.abs(r-i)<.5||Q.send({type:`SIZE`,panelId:e,from:r,to:i})},reset(e){De(e)},perform(e,t,n){n&&C.set(t,n),{collapse:this.collapse,expand:this.expand,toggle:this.toggle}[e](t)},syncToggles:be},$},G=()=>{let e={};return{get props(){return e},init(){e=s({el:this.$el,schema:C})},destroy(){},get root(){return ie({inputs:[h({part:V.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}}))}}},K=e=>{m(`UiPanels`,W)(e),m(`UiPanelToggle`,G)(e)},ve=new WeakSet,ye=e=>{ve.has(e)||(ve.add(e),_(e),K(e))};export{G as UiPanelToggle,W as UiPanels,ye as default,ye as registerPanels};
|
|
2
|
+
//# sourceMappingURL=panels-C4TtKM8_.js.map
|