@vireo-ai/trellis-ui 0.1.61 → 0.1.62
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 +14 -35
- 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 +905 -580
- 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 +19 -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/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 +2 -0
- 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 +1 -1
- 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/ui.d.ts +3 -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-CbIOS4Lm.js → sortable-Do3a0LA9.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{sortable-CbIOS4Lm.js.map → sortable-Do3a0LA9.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-Bm1phXnj.js +5 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bm1phXnj.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-CZ7fEQL2.js +4 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CZ7fEQL2.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-Dm3rQfQ_.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid-Dm3rQfQ_.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-CX4J7tsN.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core-CX4J7tsN.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 +297 -441
- package/packages/theme-engine/README.md +70 -18
- package/packages/theme-engine/THEME_AUTHORING.md +34 -0
- package/packages/theme-engine/dist/trellis.js +544 -279
- 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 +398 -85
- package/packages/theme-engine/generated/knobs/v1/manifest.json +16 -52
- 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/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 +57 -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/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":"dropdown-BEMZqp_I.js","names":[],"sources":["../../../../../../../../client/src/components/menu/styles.ts","../../../../../../../../client/src/components/dropdown/safe-area.ts","../../../../../../../../client/src/components/dropdown/contract.ts","../../../../../../../../client/src/components/dropdown/machine.ts","../../../../../../../../client/src/components/dropdown/styles.ts","../../../../../../../../client/src/components/dropdown/index.ts","../../../../../../../../client/src/components/dropdown/entry.generated.ts"],"sourcesContent":["import {layoutGap, layoutBleed} from '../layout';\nimport {defineStyles} from '../../runtime';\nimport {\n LAYOUT_PADDING_CLASSES,\n OPTION_ICON_CLASSES,\n OPTION_ITEM_CLASSES,\n OPTION_META_CLASSES,\n POPOVER_GEOMETRY_CLASSES,\n} from '../common';\n\nconst MENU_WIDTH_CLASSES = {\n auto: '',\n trigger: 'w-[var(--ui-popover-anchor-width)]',\n '3xs': 'w-[var(--container-3xs)]',\n '2xs': 'w-[var(--container-2xs)]',\n xs: 'w-[var(--container-xs)]',\n} as const;\n\nconst minimumWidth = (token: string): string => (\n `min-w-[min(var(${token}),var(--ui-popover-available-width,var(${token})))]`\n);\n\nconst MENU_MIN_WIDTH_CLASSES = {\n auto: minimumWidth('--spacing-menu-min-width'),\n trigger: minimumWidth('--ui-popover-anchor-width'),\n '3xs': minimumWidth('--container-3xs'),\n '2xs': minimumWidth('--container-2xs'),\n xs: minimumWidth('--container-xs'),\n} as const;\n\nconst MENU_PADDING_CLASSES = {auto: 'p-popover-padding', ...LAYOUT_PADDING_CLASSES} as const;\n\nconst menuStyles = defineStyles({definition: {\n component: 'ui.menu',\n parts: {\n menu: {\n base: [\n POPOVER_GEOMETRY_CLASSES,\n 'grid grid-rows-[auto_minmax(0,1fr)] max-h-[var(--ui-popover-available-height,none)] max-w-[var(--ui-popover-available-width,none)] overflow-hidden rounded-overlay-sm bg-surface',\n ],\n variants: {\n width: MENU_WIDTH_CLASSES,\n minWidth: MENU_MIN_WIDTH_CLASSES,\n },\n defaults: {\n width: 'auto',\n minWidth: 'auto',\n },\n },\n viewport: {\n base: 'row-start-2 min-h-0 min-w-0 max-w-full',\n },\n content: {\n base: 'grid min-w-0 auto-rows-min content-start',\n variants: {\n ...layoutGap.variants,\n padding: MENU_PADDING_CLASSES,\n },\n defaults: {\n ...layoutGap.defaults, gap: '1',\n padding: 'auto',\n },\n },\n searchHeader: {\n base: 'row-start-1',\n variants: {padding: MENU_PADDING_CLASSES},\n defaults: {padding: 'auto'},\n },\n search: {\n base: 'min-w-0',\n },\n searchEmpty: {\n base: 'px-menu-item-padding-inline py-2 text-sm text-surface-ink-muted',\n },\n item: {\n base: [\n OPTION_ITEM_CLASSES,\n ],\n variants: {\n ...layoutBleed.variants,\n variant: {\n default: '',\n subtle: '',\n filled: '',\n ghost: '',\n },\n color: {\n neutral: '',\n accent: '',\n success: '',\n warning: '',\n danger: '',\n },\n },\n defaults: {\n variant: 'default',\n color: 'neutral',\n },\n },\n itemLabel: {\n base: 'min-w-0 flex-1 truncate',\n },\n itemMeta: {\n base: OPTION_META_CLASSES,\n },\n itemIcon: {\n base: OPTION_ICON_CLASSES,\n variants: {\n position: {\n leading: '',\n trailing: 'ml-auto',\n },\n },\n defaults: {\n position: 'leading',\n },\n },\n submenu: {\n base: 'contents',\n },\n submenuPanel: {\n base: '',\n },\n group: {\n base: 'grid auto-rows-min content-start',\n variants: layoutGap.variants,\n defaults: {...layoutGap.defaults, gap: '1'},\n },\n label: {\n base: 'px-menu-item-padding-inline py-1 font-label text-label text-surface-ink-muted [font-weight:var(--font-weight-label)]',\n },\n separatorRoot: {\n variants: {\n orientation: {\n vertical: 'self-stretch self-center',\n horizontal: '-mx-popover my-popover h-[var(--border-width-edge-separator)]',\n },\n },\n defaults: {\n orientation: 'horizontal',\n },\n },\n separatorRule: {\n variants: {\n orientation: {\n vertical: 'h-full w-[var(--border-width-edge-separator)] border-0 bg-separator',\n horizontal: 'h-[var(--border-width-edge-separator)] w-full border-0 bg-separator',\n },\n },\n defaults: {\n orientation: 'horizontal',\n },\n },\n },\n}});\n\nexport {MENU_MIN_WIDTH_CLASSES, MENU_PADDING_CLASSES, MENU_WIDTH_CLASSES, menuStyles};\n\nexport const styles = [menuStyles] as const;\n","type Point = {x: number; y: number};\ntype PanelRect = {left: number; right: number; top: number; bottom: number};\ntype SubmenuSafeArea = {contains(point: Point): boolean};\n\nconst edge = (point: Point, start: Point, end: Point): number => (\n (point.x - end.x) * (start.y - end.y) - (start.x - end.x) * (point.y - end.y)\n);\n\nconst createSubmenuSafeArea = ({origin, panel}: {origin: Point; panel: PanelRect}): SubmenuSafeArea => {\n const nearX = panel.left >= origin.x ? panel.left : panel.right;\n const top = {x: nearX, y: panel.top};\n const bottom = {x: nearX, y: panel.bottom};\n const minX = Math.min(origin.x, nearX);\n const maxX = Math.max(origin.x, nearX);\n\n return {\n contains(point): boolean {\n if (point.x <= minX || point.x >= maxX) return false;\n const first = edge(point, origin, top);\n const second = edge(point, top, bottom);\n const third = edge(point, bottom, origin);\n const hasNegative = first < 0 || second < 0 || third < 0;\n const hasPositive = first > 0 || second > 0 || third > 0;\n return !(hasNegative && hasPositive);\n },\n };\n};\n\nexport {createSubmenuSafeArea};\nexport type {PanelRect, Point, SubmenuSafeArea};\n","import {bool, number, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {ALIGNMENTS, POSITIONS, type Alignment, type Position} from '../common';\n\nconst DROPDOWN_SIDES = POSITIONS;\n\nconst DROPDOWN_ALIGNS = ALIGNMENTS;\n\ntype DropdownSide = Position;\ntype DropdownAlign = Alignment;\n\nconst dropdownSchema = {\n side: oneOf(DROPDOWN_SIDES, 'bottom' as DropdownSide),\n align: oneOf(DROPDOWN_ALIGNS, 'start' as DropdownAlign),\n offset: number.clamp(-100, 100).default(0),\n gap: number.clamp(0, 50).default(4),\n open: bool,\n disabled: bool,\n class: string,\n};\n\ntype DropdownProps = SchemaToProps<typeof dropdownSchema>;\n\nexport {\n DROPDOWN_ALIGNS,\n DROPDOWN_SIDES,\n dropdownSchema,\n};\nexport type {DropdownAlign, DropdownSide, DropdownProps};\n","import {\n createMachine,\n type Machine,\n type MachineEventObject,\n type MachineSnapshot,\n} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport {defineControlledOpenProps} from '../shared/controlled-open';\nimport type {DropdownProps} from './contract';\n\ntype DropdownContext = {openSubmenuIds: string[]; query: string};\ntype DropdownFocus = 'menu' | 'first';\n\ntype DropdownMachineEffects = {\n prepareOpen(focus: DropdownFocus): void;\n finishOpen(): void;\n prepareClose(restoreFocus: boolean, reflectOpen: boolean): void;\n finishClose(): void;\n syncProps(): void;\n syncSubmenus(openSubmenuIds: string[]): void;\n syncSearch(): void;\n};\n\ntype CreateDropdownMachineOptions = {\n props: DropdownProps;\n effects: DropdownMachineEffects;\n};\n\nconst transitionData = (_snapshot: MachineSnapshot<DropdownContext, DropdownProps>): Record<string, never> => ({});\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'opening',\n project: transitionData,\n onDone: 'OPENING_DONE',\n onError: 'OPENING_ERROR',\n} satisfies TransitionHookDefinition<DropdownContext, DropdownProps, Record<string, never>, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'closing',\n project: transitionData,\n onDone: 'CLOSING_DONE',\n onError: 'CLOSING_ERROR',\n} satisfies TransitionHookDefinition<DropdownContext, DropdownProps, Record<string, never>, 'closing'>);\n\nconst dropdownHooks = [openingHook, closingHook] as const;\nconst controlledOpenProps = defineControlledOpenProps<DropdownContext, DropdownProps>();\n\nconst focusFrom = (event: MachineEventObject): DropdownFocus => event.focus === 'first' ? 'first' : 'menu';\nconst shouldRestoreFocus = (event: MachineEventObject): boolean => event.restoreFocus === true;\nconst submenuPathFrom = (event: MachineEventObject): string[] => (\n Array.isArray(event.path) ? event.path.filter((value): value is string => typeof value === 'string') : []\n);\n\nconst createDropdownMachine = ({\n props,\n effects,\n}: CreateDropdownMachineOptions): Machine<DropdownContext, DropdownProps> => createMachine<DropdownContext, DropdownProps>({\n initial: 'closed',\n states: {\n closed: {\n tags: ['closed'],\n on: {\n OPEN: {target: 'opening', guard: 'canOpen', effects: 'prepareOpen'},\n TOGGLE: {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', 'expanded', 'interactive', 'transitioning'],\n on: {\n OPENING_DONE: {target: 'open', effects: 'finishOpen'},\n OPENING_ERROR: {target: 'open', effects: 'finishOpen'},\n CLOSE: {target: 'closing', reduce: 'resetMenu', effects: ['syncSubmenus', 'prepareClose']},\n TOGGLE: {target: 'closing', reduce: 'resetMenu', effects: ['syncSubmenus', 'prepareClose']},\n SUBMENU_PATH_CHANGED: {reduce: 'replaceSubmenuPath', effects: 'syncSubmenus'},\n QUERY_CHANGED: {reduce: 'replaceQuery', effects: ['syncSubmenus', 'syncSearch']},\n PROPS_CHANGED: [\n {\n target: 'closing',\n guard: controlledOpenProps.shouldClose,\n reduce: 'replacePropsAndResetMenu',\n effects: ['syncSubmenus', 'prepareClose', 'syncProps'],\n },\n {reduce: 'replaceProps', effects: 'syncProps'},\n ],\n },\n },\n open: {\n tags: ['visible', 'expanded', 'interactive', 'open'],\n on: {\n CLOSE: {target: 'closing', reduce: 'resetMenu', effects: ['syncSubmenus', 'prepareClose']},\n TOGGLE: {target: 'closing', reduce: 'resetMenu', effects: ['syncSubmenus', 'prepareClose']},\n SUBMENU_PATH_CHANGED: {reduce: 'replaceSubmenuPath', effects: 'syncSubmenus'},\n QUERY_CHANGED: {reduce: 'replaceQuery', effects: ['syncSubmenus', 'syncSearch']},\n PROPS_CHANGED: [\n {\n target: 'closing',\n guard: controlledOpenProps.shouldClose,\n reduce: 'replacePropsAndResetMenu',\n effects: ['syncSubmenus', 'prepareClose', 'syncProps'],\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 TOGGLE: {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: {openSubmenuIds: [], query: ''},\n props,\n reducers: {\n replaceProps: controlledOpenProps.replace,\n replaceSubmenuPath: (scope) => ({context: {...scope.context, openSubmenuIds: submenuPathFrom(scope.event)}}),\n replaceQuery: ({context, event}) => ({context: {...context, openSubmenuIds: [], query: String(event.query ?? '')}}),\n resetMenu: (scope) => ({context: {...scope.context, openSubmenuIds: [], query: ''}}),\n replacePropsAndResetMenu: (scope) => {\n const next = controlledOpenProps.replace(scope);\n return next ? {...next, context: {...scope.context, openSubmenuIds: [], query: ''}} : undefined;\n },\n },\n guards: {\n canOpen: ({props: currentProps}) => !currentProps.disabled,\n },\n effects: {\n prepareOpen: ({event}) => effects.prepareOpen(focusFrom(event)),\n finishOpen: effects.finishOpen,\n prepareClose: ({event}) => effects.prepareClose(\n shouldRestoreFocus(event),\n event.type !== 'PROPS_CHANGED',\n ),\n finishClose: effects.finishClose,\n syncProps: effects.syncProps,\n syncSubmenus: ({context}) => effects.syncSubmenus(context.openSubmenuIds),\n syncSearch: effects.syncSearch,\n },\n});\n\nexport {createDropdownMachine, dropdownHooks};\nexport type {\n CreateDropdownMachineOptions,\n DropdownContext,\n DropdownFocus,\n DropdownMachineEffects,\n};\n","import {defineStyles} from '../../runtime';\n\nconst dropdownStyles = defineStyles({definition: {\n component: 'ui.dropdown',\n parts: {\n root: {\n base: 'contents',\n },\n },\n}});\n\nexport {dropdownStyles};\n\nexport const styles = [dropdownStyles] as const;\n","import type Alpine from 'alpinejs';\nimport {anchoredEntrance, anchoredExit} from '@client/motion/recipe';\nimport {animateProperties} from '@client/motion/properties';\n\nimport {menuStyles} from '@client/components/menu/styles';\nimport {\n type AlpineMachine,\n createAlpineMachine,\n defineAlpineData,\n focusElement,\n reflectSchemaProp,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {cleanupManagerFor} from '@client/runtime/alpine-data';\nimport type {CleanupManager} from '@client/runtime/cleanup-manager';\nimport {createAnchoredPopoverSurface, createPopoverVisibility, type AnchoredPopoverSurface} from '@client/runtime/anchored-popover';\nimport {collectionIndex, createCollectionNavigation, type CollectionNavigation} from '@client/runtime/collection-navigation';\nimport {addDismissableLayer} from '@client/runtime/dismissable-layer';\nimport {mergeBindings, type BindingObject} from '@client/runtime/merge-bindings';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {matchesOptionText} from '@client/runtime/option-data';\nimport {addListener, asBool, dispatch} from '@client/utils';\nimport {createSubmenuSafeArea, type SubmenuSafeArea, type Point} from './safe-area';\nimport {dropdownSchema, type DropdownProps} from './contract';\nimport {\n createDropdownMachine,\n dropdownHooks,\n type DropdownContext,\n type DropdownFocus,\n} from './machine';\nimport {dropdownStyles} from './styles';\n\ntype DropdownTransitionName = (typeof dropdownHooks)[number]['name'];\ntype DropdownTransition<TName extends DropdownTransitionName = DropdownTransitionName> = TransitionForHook<\n Extract<(typeof dropdownHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype PopoverElement = HTMLElement & {\n showPopover(): void;\n hidePopover(): void;\n};\n\ntype TriggerBaseline = {\n ariaDisabled: string | null;\n dataDisabled: string | null;\n disabled: boolean | null;\n tabIndex: string | null;\n};\n\ntype SubmenuResource = {\n id: string;\n root: HTMLElement;\n trigger: HTMLElement;\n panel: PopoverElement;\n popover: AnchoredPopoverSurface;\n collection: CollectionNavigation;\n};\n\ntype SubmenuElements = {\n trigger: HTMLElement;\n panel: HTMLElement;\n};\n\nconst INTERACTIVE_HTML_TAGS = new Set([\n 'BUTTON', 'DETAILS', 'EMBED', 'IFRAME', 'INPUT', 'LABEL', 'OBJECT', 'SELECT', 'SUMMARY', 'TEXTAREA',\n]);\n\nconst INTERACTIVE_ARIA_ROLES = new Set([\n 'button', 'checkbox', 'combobox', 'gridcell', 'link', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option',\n 'radio', 'scrollbar', 'searchbox', 'slider', 'spinbutton', 'switch', 'tab', 'textbox', 'treeitem',\n]);\n\nconst isInteractiveSubmenuContent = (element: HTMLElement): boolean => {\n const tag = element.tagName;\n const roles = element.getAttribute('role')?.trim().toLowerCase().split(/\\s+/) ?? [];\n return INTERACTIVE_HTML_TAGS.has(tag)\n || ((tag === 'A' || tag === 'AREA') && element.hasAttribute('href'))\n || ((tag === 'AUDIO' || tag === 'VIDEO') && element.hasAttribute('controls'))\n || (tag === 'IMG' && element.hasAttribute('usemap'))\n || element.hasAttribute('tabindex')\n || element.isContentEditable\n || element.hasAttribute('data-ui-interactive')\n || roles.some((role) => INTERACTIVE_ARIA_ROLES.has(role));\n};\n\nconst normalizedSubmenuTriggerText = (content: HTMLElement): string => {\n const walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT);\n const text: string[] = [];\n let node = walker.nextNode();\n while (node) {\n const parent = node.parentElement;\n const hiddenWithinContent = parent?.closest<HTMLElement>(\n '[aria-hidden=\"true\"], [hidden], script, style, template',\n );\n if (parent && (!hiddenWithinContent || !content.contains(hiddenWithinContent))) {\n text.push(node.textContent ?? '');\n }\n node = walker.nextNode();\n }\n return text.join(' ').replace(/\\s+/g, ' ').trim();\n};\n\nconst validateSubmenu = (submenuRoot: HTMLElement): SubmenuElements => {\n const trigger = submenuRoot.querySelector<HTMLElement>(':scope > [data-ui-submenu-trigger]');\n const panel = submenuRoot.querySelector<HTMLElement>(':scope > [data-ui-menu-submenu-panel]');\n if (!trigger || !panel) throw new Error('Menu submenu requires a trigger and nested menu panel.');\n\n const directChildren = Array.from(submenuRoot.children);\n if (directChildren.length !== 2 || directChildren[0] !== trigger || directChildren[1] !== panel) {\n throw new Error(\n 'Menu submenu trigger content produced invalid button structure; nested interactive content is not allowed.',\n );\n }\n\n const source = submenuRoot.dataset.uiSubmenuTriggerSource;\n if (!source || source === 'missing') throw new Error('Menu submenu requires heading or a trigger slot.');\n if (source === 'conflict') {\n throw new Error('Menu submenu accepts heading or a trigger slot, not both.');\n }\n\n const content = trigger.querySelector<HTMLElement>(':scope > [data-ui-submenu-trigger-content]');\n if (!content) throw new Error('Menu submenu requires an owned trigger-content wrapper.');\n if (Array.from(content.querySelectorAll<HTMLElement>('*')).some(isInteractiveSubmenuContent)) {\n throw new Error('Menu submenu trigger content must not contain interactive or focusable descendants.');\n }\n\n const explicitText = trigger.dataset.textValue?.trim() ?? '';\n if (!explicitText && !normalizedSubmenuTriggerText(content)) {\n throw new Error('Menu submenu trigger content requires accessible text or text_value.');\n }\n\n return {trigger, panel};\n};\n\nlet submenuId = 0;\n\n/**\n * Public Alpine API for `ui.dropdown`.\n *\n * @public\n */\ninterface UiDropdownApi {\n /** Whether the dropdown is opening or fully open. */\n readonly isOpen: boolean;\n\n /** Opens the dropdown unless it is disabled. */\n open(event?: Event): void;\n\n /** Closes the dropdown. Keyboard dismissal restores focus to the trigger. */\n close(event?: Event): void;\n\n /** Reverses the current dropdown lifecycle, including an in-flight transition. */\n toggle(event?: Event): void;\n}\n\ntype DropdownData = AlpineMachine<DropdownContext, DropdownProps, typeof dropdownHooks> & UiDropdownApi & {\n readonly root: BindingObject;\n readonly menu: BindingObject;\n init(): void;\n destroy(): void;\n};\n\nconst UiDropdown = (): TrellisAlpineComponent<DropdownData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let canReflectOpen = false;\n let reflectTransitionOpen = true;\n let triggerId = '';\n let menuId = '';\n let triggerBaseline: TriggerBaseline | null = null;\n let collection: CollectionNavigation | null = null;\n let popover: AnchoredPopoverSurface | null = null;\n const submenus = new Map<HTMLElement, SubmenuResource>();\n let submenuObserver: MutationObserver | null = null;\n let submenuReconciliationScheduled = false;\n let safeArea: SubmenuSafeArea | null = null;\n let pointerPoint: Point | null = null;\n let cleanup: CleanupManager;\n const visibility = createPopoverVisibility(() => menuEl());\n let openingFocus: DropdownFocus = 'menu';\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Dropdown has not been initialized.');\n return rootEl;\n };\n\n const triggerEl = (): HTMLElement => {\n const trigger = Array.from(root().children)\n .find((el) => el instanceof HTMLElement && !el.matches('[data-ui-menu]'));\n if (!(trigger instanceof HTMLElement)) throw new Error('Dropdown requires a trigger element before the menu.');\n return trigger;\n };\n\n const menuEl = (): PopoverElement => {\n const menu = Array.from(root().children).find((element) => element instanceof HTMLElement && element.matches('[data-ui-menu]'));\n if (!(menu instanceof HTMLElement)) throw new Error('Dropdown requires a menu element.');\n return menu as PopoverElement;\n };\n\n const currentProps = (): Readonly<DropdownProps> => bridge.getSnapshot().props;\n const isExpanded = (): boolean => bridge.hasTag('expanded');\n const isVisible = (): boolean => bridge.hasTag('visible');\n\n const itemFrom = (target: EventTarget | null): HTMLElement | null => {\n if (!(target instanceof Element)) return null;\n const item = target.closest<HTMLElement>('[data-ui-menu-item]');\n return item && root().contains(item) ? item : null;\n };\n\n const itemDisabled = (item: HTMLElement): boolean => (\n asBool({value: item.dataset.disabled})\n || item.getAttribute('aria-disabled') === 'true'\n || item.hasAttribute('disabled')\n );\n\n const collectionNav = (): CollectionNavigation => {\n if (!collection) throw new Error('Dropdown navigation has not been initialized.');\n return collection;\n };\n\n const menuContent = (menu: HTMLElement): HTMLElement => {\n const content = menu.querySelector<HTMLElement>(\n ':scope > [data-ui-menu-scroll-area] > [data-ui-scroll-area-viewport] > [data-ui-scroll-area-content] > [data-ui-menu-content]',\n );\n if (!content) throw new Error('Menu requires its authored content grid.');\n return content;\n };\n\n const searchInput = (): HTMLInputElement | null => (\n menuEl().querySelector<HTMLInputElement>(':scope > [data-ui-menu-search-header] > [data-ui-menu-search] [data-ui-input]')\n );\n\n const validateSearch = (): void => {\n const headers = Array.from(root().querySelectorAll<HTMLElement>('[data-ui-menu-search]'))\n .filter((header) => header.closest('[data-ui-dropdown]') === root());\n if (headers.length > 1 || headers.some((header) => header.parentElement !== menuEl().querySelector(':scope > [data-ui-menu-search-header]'))) {\n throw new Error('Menu search must be composed once in the search slot of the root Menu.');\n }\n };\n\n const focusSearch = (field: HTMLInputElement): void => {\n collectionNav().clearActiveItem();\n focusElement(field);\n };\n\n const syncSearch = (): void => {\n const field = searchInput();\n const query = field ? bridge.getCommittedSnapshot().context.query : '';\n if (field && field.value !== query) {\n field.value = query;\n field.dispatchEvent(new Event('input', {bubbles: true}));\n }\n const items = collectionNav().allItems();\n items.forEach((item) => {\n const label = item.dataset.textValue || item.querySelector<HTMLElement>(\n '[data-ui-menu-item-label], [data-ui-submenu-trigger-content]',\n )?.textContent || item.textContent || '';\n item.toggleAttribute('data-ui-menu-filtered', !matchesOptionText(label, query));\n });\n menuEl().querySelectorAll<HTMLElement>('[data-ui-menu-group]').forEach((group) => {\n if (group.closest('[data-ui-menu]') !== menuEl()) return;\n group.toggleAttribute('data-ui-menu-filtered', Boolean(query) && !items.some((item) => (\n group.contains(item) && !item.hasAttribute('data-ui-menu-filtered')\n )));\n });\n collectionNav().refresh();\n const empty = menuEl().querySelector<HTMLElement>('[data-ui-menu-search-empty]');\n if (empty) empty.hidden = !query || items.some((item) => !item.hasAttribute('data-ui-menu-filtered'));\n };\n\n const syncMenuItems = (): void => {\n root().querySelectorAll<HTMLElement>('[data-ui-menu-scroll-area] > [data-ui-scroll-area-viewport]').forEach((viewport) => {\n if (viewport.closest('[data-ui-dropdown]') === root()) viewport.tabIndex = -1;\n });\n collectionNav().reconcileItems(Array.from(menuEl().querySelectorAll<HTMLElement>('[data-ui-menu-item]'))\n .filter((item) => item.closest('[data-ui-menu]') === menuEl()));\n submenus.forEach(({panel, collection: nested}) => nested.reconcileItems(\n Array.from(panel.querySelectorAll<HTMLElement>('[data-ui-menu-item]'))\n .filter((item) => item.closest('[data-ui-menu]') === panel)));\n const items = [collectionNav(), ...Array.from(submenus.values(), ({collection: nested}) => nested)];\n items.forEach((navigation) => navigation.allItems().forEach((item) => {\n if (!item.hasAttribute('role')) item.setAttribute('role', 'menuitem');\n item.tabIndex = -1;\n if (itemDisabled(item)) item.setAttribute('aria-disabled', 'true');\n }));\n syncSearch();\n };\n\n const submenuForTrigger = (item: HTMLElement | null): SubmenuResource | null => {\n if (!item) return null;\n return Array.from(submenus.values()).find(({trigger}) => trigger === item) ?? null;\n };\n\n const submenuForId = (id: string): SubmenuResource | null => (\n Array.from(submenus.values()).find((resource) => resource.id === id) ?? null\n );\n\n const submenuForPanel = (panel: Element | null): SubmenuResource | null => {\n if (!panel) return null;\n return Array.from(submenus.values()).find(({panel: candidate}) => candidate === panel) ?? null;\n };\n\n const parentSubmenu = (resource: SubmenuResource): SubmenuResource | null => {\n const parentPanel = resource.root.parentElement?.closest<HTMLElement>('[data-ui-menu-submenu-panel]') ?? null;\n return submenuForPanel(parentPanel);\n };\n\n const pathTo = (resource: SubmenuResource): string[] => {\n const path: string[] = [];\n let current: SubmenuResource | null = resource;\n while (current) {\n path.unshift(current.id);\n current = parentSubmenu(current);\n }\n return path;\n };\n\n const currentSubmenuPath = (): string[] => bridge.getSnapshot().context.openSubmenuIds;\n\n const syncSubmenus = (openIds: string[]): void => {\n safeArea = null;\n if (openIds.length === 0) pointerPoint = null;\n submenus.forEach((resource) => {\n const open = openIds.includes(resource.id);\n resource.root.dataset.state = open ? 'open' : 'closed';\n resource.trigger.dataset.state = open ? 'open' : 'closed';\n resource.trigger.setAttribute('aria-expanded', open ? 'true' : 'false');\n resource.panel.dataset.state = open ? 'open' : 'closed';\n resource.panel.hidden = !open;\n if (open) resource.popover.open();\n else {\n resource.collection.clearActiveItem();\n resource.popover.close();\n }\n });\n };\n\n const syncSubmenuStructure = (resource: SubmenuResource): void => {\n const triggerIdForSubmenu = resource.trigger.id || `${resource.id}-trigger`;\n const panelId = resource.panel.id || `${resource.id}-menu`;\n resource.root.dataset.submenuId = resource.id;\n resource.trigger.id = triggerIdForSubmenu;\n resource.trigger.setAttribute('aria-controls', panelId);\n resource.panel.id = panelId;\n resource.panel.setAttribute('aria-labelledby', triggerIdForSubmenu);\n resource.panel.setAttribute('popover', 'manual');\n resource.panel.setAttribute('role', 'menu');\n resource.panel.tabIndex = -1;\n };\n\n const registerSubmenu = (submenuRoot: HTMLElement): void => {\n const {trigger, panel} = validateSubmenu(submenuRoot);\n const existing = submenus.get(submenuRoot);\n if (existing?.trigger === trigger && existing.panel === panel) {\n syncSubmenuStructure(existing);\n return;\n }\n\n const retainedId = existing?.id;\n if (existing) unregisterSubmenu(submenuRoot);\n\n const id = retainedId || submenuRoot.dataset.submenuId || `ui-submenu-${++submenuId}`;\n submenuRoot.dataset.state = 'closed';\n trigger.dataset.state = 'closed';\n trigger.setAttribute('aria-expanded', 'false');\n panel.dataset.state = 'closed';\n panel.hidden = true;\n\n const navigation = createCollectionNavigation({\n root: () => panel,\n isDisabled: itemDisabled,\n loop: () => asBool({value: panel.dataset.loop}),\n });\n const nestedPopover = createAnchoredPopoverSurface({\n reference: () => ({\n contextElement: trigger,\n getBoundingClientRect: () => {\n const row = trigger.getBoundingClientRect();\n const parent = trigger.closest<HTMLElement>('[data-ui-menu]')!.getBoundingClientRect();\n return new DOMRect(parent.left, row.top, parent.width, row.height);\n },\n }),\n floating: () => panel,\n position: () => 'right',\n align: () => 'start',\n shiftAxes: 'both',\n gap: () => currentProps().gap,\n offset: () => -Number.parseFloat(getComputedStyle(menuContent(panel)).paddingTop),\n });\n const resource = {\n id,\n root: submenuRoot,\n trigger,\n panel: panel as PopoverElement,\n popover: nestedPopover,\n collection: navigation,\n };\n submenus.set(submenuRoot, resource);\n syncSubmenuStructure(resource);\n };\n\n const unregisterSubmenu = (submenuRoot: HTMLElement): void => {\n const resource = submenus.get(submenuRoot);\n if (!resource) return;\n resource.collection.destroy();\n resource.popover.destroy();\n submenus.delete(submenuRoot);\n safeArea = null;\n };\n\n const reconcileOpenSubmenuPath = (): void => {\n const currentPath = currentSubmenuPath();\n let nextPath: string[] = [];\n for (let index = currentPath.length - 1; index >= 0; index -= 1) {\n const resource = submenuForId(currentPath[index] as string);\n if (!resource) continue;\n nextPath = pathTo(resource);\n break;\n }\n if (nextPath.length === currentPath.length\n && nextPath.every((id, index) => id === currentPath[index])) return;\n bridge.send({type: 'SUBMENU_PATH_CHANGED', path: nextPath});\n };\n\n const reconcileSubmenus = (): void => {\n validateSearch();\n const submenuRoots = Array.from(root().querySelectorAll<HTMLElement>('[data-ui-menu-submenu]'));\n const connectedRoots = new Set(submenuRoots);\n let removed = false;\n\n Array.from(submenus.keys()).forEach((submenuRoot) => {\n if (connectedRoots.has(submenuRoot)) return;\n unregisterSubmenu(submenuRoot);\n removed = true;\n });\n if (removed) reconcileOpenSubmenuPath();\n\n // querySelectorAll returns ancestors before their descendants.\n submenuRoots.forEach(registerSubmenu);\n reconcileOpenSubmenuPath();\n syncSubmenus(currentSubmenuPath());\n syncMenuItems();\n };\n\n const scheduleSubmenuReconciliation = (): void => {\n if (submenuReconciliationScheduled) return;\n submenuReconciliationScheduled = true;\n queueMicrotask(() => {\n submenuReconciliationScheduled = false;\n if (!rootEl) return;\n reconcileSubmenus();\n });\n };\n\n const handleSubmenuMutations = (records: MutationRecord[]): void => {\n const relevant = records.some((record) => (\n record.type === 'childList'\n || (record.target instanceof Element\n && record.target.closest('[data-ui-submenu-trigger-content]') !== null)\n ));\n if (relevant) scheduleSubmenuReconciliation();\n };\n\n const activateCommittedItem = (navigation: CollectionNavigation): boolean => {\n const selected = navigation.items().find((item) => (\n item.hasAttribute('data-selected')\n || ['true', 'mixed'].includes(item.getAttribute('aria-checked') ?? '')\n ));\n if (!selected) return false;\n navigation.activateItem({el: selected});\n return true;\n };\n\n const openSubmenu = (resource: SubmenuResource, focusFirst = false): void => {\n if (itemDisabled(resource.trigger)) return;\n bridge.send({type: 'SUBMENU_PATH_CHANGED', path: pathTo(resource)});\n queueMicrotask(() => {\n if (focusFirst) resource.collection.focusFirst();\n else activateCommittedItem(resource.collection);\n });\n };\n\n const closeSubmenu = (resource: SubmenuResource, restoreFocus = false): void => {\n const path = pathTo(resource);\n bridge.send({type: 'SUBMENU_PATH_CHANGED', path: path.slice(0, -1)});\n if (restoreFocus) focusElement(resource.trigger, {showIndicator: false});\n };\n\n const captureTriggerBaseline = (): void => {\n const trigger = triggerEl();\n const explicitTabIndex = trigger.getAttribute('tabindex');\n triggerBaseline = {\n ariaDisabled: trigger.getAttribute('aria-disabled'),\n dataDisabled: trigger.getAttribute('data-disabled'),\n disabled: trigger instanceof HTMLButtonElement ? trigger.disabled : null,\n tabIndex: explicitTabIndex ?? (trigger.tabIndex < 0 ? '0' : null),\n };\n };\n\n const restoreAttribute = (el: HTMLElement, name: string, value: string | null): void => {\n if (value === null) el.removeAttribute(name);\n else el.setAttribute(name, value);\n };\n\n const syncTrigger = (): void => {\n if (canReflectOpen && (isExpanded() || reflectTransitionOpen)) {\n reflectSchemaProp({el: root(), schema: dropdownSchema, key: 'open', value: isExpanded()});\n }\n const trigger = triggerEl();\n const baseline = triggerBaseline;\n if (!baseline) return;\n\n trigger.id ||= triggerId;\n trigger.setAttribute('data-ui-dropdown-trigger', '');\n trigger.setAttribute('aria-expanded', isExpanded() ? 'true' : 'false');\n trigger.setAttribute('aria-controls', menuId);\n trigger.setAttribute('data-state', isExpanded() ? 'open' : 'closed');\n\n if (currentProps().disabled) {\n trigger.setAttribute('aria-disabled', 'true');\n trigger.setAttribute('data-disabled', '');\n trigger.tabIndex = -1;\n if (trigger instanceof HTMLButtonElement) trigger.disabled = true;\n return;\n }\n\n restoreAttribute(trigger, 'aria-disabled', baseline.ariaDisabled);\n restoreAttribute(trigger, 'data-disabled', baseline.dataDisabled);\n restoreAttribute(trigger, 'tabindex', baseline.tabIndex);\n if (trigger instanceof HTMLButtonElement && baseline.disabled !== null) trigger.disabled = baseline.disabled;\n };\n\n const syncMenu = (): void => {\n const menu = menuEl();\n menu.id = menuId;\n menu.setAttribute('popover', 'manual');\n menu.setAttribute('role', 'menu');\n menu.tabIndex = -1;\n menu.hidden = !isVisible();\n menu.setAttribute('data-state', isExpanded() ? 'open' : 'closed');\n syncMenuItems();\n };\n\n const prepareOpen = (focus: DropdownFocus): void => {\n openingFocus = focus;\n if (!popover?.opened()) visibility.defer();\n reflectTransitionOpen = true;\n syncTrigger();\n syncMenu();\n popover?.open();\n };\n\n const focusMenu = (): void => {\n if (!bridge.hasTag('interactive')) return;\n const field = searchInput();\n if (field) focusSearch(field);\n else if (openingFocus === 'first') collectionNav().focusFirst();\n else {\n activateCommittedItem(collectionNav());\n focusElement(menuEl());\n }\n };\n\n const finishOpen = (): void => {\n if (visibility.reveal()) focusMenu();\n syncTrigger();\n syncMenu();\n dispatch({el: root(), name: 'ui:open'});\n };\n\n const prepareClose = (restoreFocus: boolean, reflectOpen: boolean): void => {\n reflectTransitionOpen = reflectOpen;\n collectionNav().clearActiveItem();\n syncTrigger();\n syncMenu();\n if (restoreFocus) focusElement(triggerEl(), {showIndicator: false});\n };\n\n const finishClose = (): void => {\n popover?.close();\n visibility.reveal();\n syncTrigger();\n syncMenu();\n reflectTransitionOpen = true;\n dispatch({el: root(), name: 'ui:close'});\n };\n\n const syncProps = (): void => {\n syncTrigger();\n syncMenu();\n popover?.sync();\n };\n\n const bridge = createAlpineMachine({\n schema: dropdownSchema,\n hooks: dropdownHooks,\n createMachine: ({props}) => createDropdownMachine({\n props,\n effects: {prepareOpen, finishOpen, prepareClose, finishClose, syncProps, syncSubmenus, syncSearch},\n }),\n });\n\n const open = (focus: DropdownFocus = 'menu', event?: Event): void => {\n event?.preventDefault();\n if (currentProps().disabled) return;\n if (bridge.hasTag('expanded')) {\n if (focus === 'first') collectionNav().focusFirst();\n return;\n }\n bridge.send({type: 'OPEN', focus});\n };\n\n const close = (restoreFocus: boolean, event?: Event): void => {\n event?.preventDefault();\n bridge.send({type: 'CLOSE', restoreFocus});\n };\n\n const selectItem = (item: HTMLElement, event: Event): void => {\n if (itemDisabled(item)) {\n event.preventDefault();\n return;\n }\n\n const menuKeepOpen = asBool({value: menuEl().dataset.keepOpen});\n const itemKeepOpen = item.dataset.keepOpen === undefined || item.dataset.keepOpen === ''\n ? menuKeepOpen\n : asBool({value: item.dataset.keepOpen});\n if (!itemKeepOpen) close(false);\n };\n\n const handleClick = (event: Event): void => {\n const item = itemFrom(event.target);\n if (item) {\n const submenu = submenuForTrigger(item);\n if (submenu) {\n event.preventDefault();\n openSubmenu(submenu);\n return;\n }\n selectItem(item, event);\n return;\n }\n\n const target = event.target;\n if (target instanceof Node && triggerEl().contains(target)) {\n event.preventDefault();\n if (!currentProps().disabled) bridge.send('TOGGLE');\n }\n };\n\n const handleSearchInput = (event: Event): void => {\n const field = searchInput();\n if (field && event.target === field && field.value !== bridge.getCommittedSnapshot().context.query) {\n bridge.send({type: 'QUERY_CHANGED', query: field.value});\n }\n };\n\n const redirectSearch = (event: Event): void => {\n if (!(event instanceof KeyboardEvent) || event.isComposing || event.keyCode === 229\n || event.ctrlKey || event.metaKey || event.altKey) return;\n const field = searchInput();\n const item = itemFrom(event.target);\n if (!field || !item || item.closest('[data-ui-menu]') !== menuEl()\n || !(event.key === 'Backspace' || (event.key.length === 1 && event.key !== ' '))) return;\n event.preventDefault();\n event.stopPropagation();\n focusSearch(field);\n field.value = event.key === 'Backspace' ? Array.from(field.value).slice(0, -1).join('') : field.value + event.key;\n field.dispatchEvent(new Event('input', {bubbles: true}));\n field.setSelectionRange(field.value.length, field.value.length);\n };\n\n const handleKeydown = (event: Event): void => {\n if (!(event instanceof KeyboardEvent)) return;\n const field = searchInput();\n if (field && (event.isComposing || event.keyCode === 229)) return;\n if (event.key === 'Escape' && isVisible()) {\n event.preventDefault();\n event.stopPropagation();\n const deepest = submenuForId(currentSubmenuPath().at(-1) ?? '');\n if (deepest) {\n closeSubmenu(deepest, true);\n return;\n }\n close(true);\n return;\n }\n\n const target = event.target;\n if (target instanceof Node && triggerEl().contains(target)) {\n if (event.key === 'ArrowDown') {\n open('first', event);\n return;\n }\n const trigger = triggerEl();\n if (!(trigger instanceof HTMLButtonElement) && !(trigger instanceof HTMLAnchorElement)\n && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n if (!currentProps().disabled) bridge.send('TOGGLE');\n }\n return;\n }\n\n const item = itemFrom(event.target);\n if (field && (event.target === field || item?.closest('[data-ui-menu]') === menuEl())) {\n if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) return;\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n const items = collectionNav().items();\n const current = event.target === field ? 0 : items.indexOf(item!) + 1;\n const next = collectionIndex(current, items.length + 1, event.key === 'ArrowDown' ? 1 : -1,\n asBool({value: menuEl().dataset.loop}));\n if (next === 0) focusSearch(field);\n else collectionNav().focusItem({el: items[next - 1]!});\n return;\n }\n if (event.target === field) {\n if (event.key === 'Enter') event.preventDefault();\n return;\n }\n }\n const submenu = submenuForTrigger(item);\n if (submenu && (event.key === 'ArrowRight' || event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n openSubmenu(submenu, true);\n return;\n }\n\n const containingPanel = event.target instanceof Element\n ? event.target.closest<HTMLElement>('[data-ui-menu-submenu-panel]')\n : null;\n const containingSubmenu = submenuForPanel(containingPanel);\n if (containingSubmenu && event.key === 'ArrowLeft') {\n event.preventDefault();\n closeSubmenu(containingSubmenu, true);\n return;\n }\n\n if (item && (event.key === 'Enter' || event.key === ' ')\n && item.matches('[role=\"menuitemcheckbox\"], [role=\"menuitemradio\"]')) {\n event.preventDefault();\n item.querySelector<HTMLInputElement>('input[type=\"checkbox\"], input[type=\"radio\"]')?.click();\n return;\n }\n\n if (containingSubmenu) containingSubmenu.collection.handleKeydown({event});\n else if (menuEl().contains(event.target as Node)) collectionNav().handleKeydown({event});\n };\n\n const handleFocus = (event: Event): void => {\n if (event.target === searchInput()) {\n collectionNav().clearActiveItem();\n return;\n }\n const item = itemFrom(event.target);\n if (item && !itemDisabled(item)) collectionNav().activateItem({el: item});\n };\n\n const handlePointer = (event: Event): void => {\n if (!(event instanceof PointerEvent)) return;\n pointerPoint = {x: event.clientX, y: event.clientY};\n if (safeArea?.contains({x: event.clientX, y: event.clientY})) return;\n const item = itemFrom(event.target);\n if (!item || itemDisabled(item)) return;\n safeArea = null;\n const submenu = submenuForTrigger(item);\n const containingPanel = item.closest<HTMLElement>('[data-ui-menu-submenu-panel]');\n const containingSubmenu = submenuForPanel(containingPanel);\n const navigation = containingSubmenu?.collection ?? collectionNav();\n navigation.activateItem({el: item});\n if (submenu) {\n openSubmenu(submenu);\n return;\n }\n bridge.send({type: 'SUBMENU_PATH_CHANGED', path: containingSubmenu ? pathTo(containingSubmenu) : []});\n };\n\n const handlePointerOut = (event: Event): void => {\n if (!(event instanceof PointerEvent)) return;\n if (!window.matchMedia('(hover: hover) and (pointer: fine)').matches) return;\n const item = itemFrom(event.target);\n const submenu = submenuForTrigger(item);\n if (!submenu || !currentSubmenuPath().includes(submenu.id)) return;\n if (event.relatedTarget instanceof Node && submenu.panel.contains(event.relatedTarget)) return;\n const panel = submenu.panel.getBoundingClientRect();\n safeArea = createSubmenuSafeArea({\n origin: pointerPoint ?? {x: event.clientX, y: event.clientY},\n panel: {left: panel.left, right: panel.right, top: panel.top, bottom: panel.bottom},\n });\n };\n\n const handleNativeToggle = (event: Event): void => {\n if (!('newState' in event)) return;\n if (event.newState === 'open') {\n if (!isVisible()) bridge.send('OPEN');\n return;\n }\n if (isVisible()) bridge.send('CLOSE');\n };\n\n let component!: TrellisAlpineComponent<DropdownData>;\n component = {\n ...bridge,\n get isOpen(): boolean {\n return this.snapshot.current?.tags.includes('expanded') ?? false;\n },\n init(): void {\n cleanup = cleanupManagerFor(this);\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n triggerId = triggerEl().id || this.$id('dropdown-trigger');\n menuId = menuEl().id || this.$id('dropdown-menu');\n captureTriggerBaseline();\n collection = createCollectionNavigation({\n root: () => menuEl(),\n isDisabled: itemDisabled,\n loop: () => asBool({value: menuEl().dataset.loop}),\n });\n popover = createAnchoredPopoverSurface({\n reference: () => {\n const trigger = triggerEl();\n if (!trigger.hasAttribute('data-ui-button')) return trigger;\n return {\n contextElement: trigger,\n getBoundingClientRect: () => {\n const rect = trigger.getBoundingClientRect();\n const style = getComputedStyle(trigger);\n const scaleX = trigger.offsetWidth ? rect.width / trigger.offsetWidth : 1;\n const scaleY = trigger.offsetHeight ? rect.height / trigger.offsetHeight : 1;\n // Button inset expands its hit area beyond the ordinary layout box.\n // Physical margins also describe the right geometry in RTL.\n const left = Math.min(0, Number.parseFloat(style.marginLeft) || 0) * scaleX;\n const right = Math.min(0, Number.parseFloat(style.marginRight) || 0) * scaleX;\n const top = Math.min(0, Number.parseFloat(style.marginTop) || 0) * scaleY;\n const bottom = Math.min(0, Number.parseFloat(style.marginBottom) || 0) * scaleY;\n return new DOMRect(rect.x - left, rect.y - top,\n Math.max(0, rect.width + left + right), Math.max(0, rect.height + top + bottom));\n },\n };\n },\n floating: menuEl,\n position: () => currentProps().side,\n align: () => currentProps().align,\n gap: () => currentProps().gap,\n offset: () => currentProps().offset,\n });\n cleanup.add(bridge.onTransition('opening', (transition) => {\n const animate = (): unknown => {\n if (transition.signal.aborted) return;\n visibility.reveal();\n focusMenu();\n if (root().hasAttribute('x-ui-transition:opening')) return;\n const surface = menuEl();\n return animateProperties(transition, anchoredEntrance(surface), {target: surface, role: 'feedback'});\n };\n const positioned = visibility.pending() ? popover?.positioned() : null;\n return positioned ? positioned.then(animate) : animate();\n }));\n cleanup.add(bridge.onTransition('closing', (transition) => {\n const animate = (): unknown => {\n if (transition.signal.aborted) return;\n visibility.reveal();\n if (root().hasAttribute('x-ui-transition:closing')) return;\n return animateProperties(transition, anchoredExit, {target: menuEl(), role: 'feedbackExit'});\n };\n const positioned = visibility.pending() ? popover?.positioned() : null;\n return positioned ? positioned.then(animate) : animate();\n }));\n reconcileSubmenus();\n submenuObserver = new MutationObserver(handleSubmenuMutations);\n submenuObserver.observe(root(), {\n attributeFilter: [\n 'contenteditable', 'controls', 'data-ui-interactive', 'href', 'role', 'tabindex', 'usemap',\n ],\n attributes: true,\n childList: true,\n subtree: true,\n });\n cleanup.add(addDismissableLayer({\n isEnabled: () => bridge.hasTag('interactive'),\n roots: () => [root(), menuEl()],\n onDismiss: () => close(false),\n }));\n const clearSafeArea = (): void => { safeArea = null; pointerPoint = null; };\n addListener({target: window, event: 'blur', handler: clearSafeArea, cleanup});\n addListener({target: window, event: 'resize', handler: clearSafeArea, cleanup});\n addListener({target: window, event: 'scroll', handler: clearSafeArea, cleanup, options: {capture: true}});\n syncTrigger();\n syncMenu();\n syncSubmenus([]);\n canReflectOpen = true;\n if (currentProps().open) queueMicrotask(() => bridge.send('OPEN'));\n },\n destroy(): void {\n submenuObserver?.disconnect();\n submenuObserver = null;\n submenuReconciliationScheduled = false;\n bridge.disconnect();\n visibility.reveal();\n popover?.destroy();\n Array.from(submenus.keys()).forEach(unregisterSubmenu);\n safeArea = null;\n pointerPoint = null;\n popover = null;\n collection?.destroy();\n collection = null;\n triggerBaseline = null;\n rootEl = null;\n },\n get root(): BindingObject {\n const props = this.snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: dropdownStyles.parts.root, props, className: props.class}),\n {\n 'data-ui-dropdown': '',\n ':data-state': () => (bridge.hasTag('expanded') ? 'open' : 'closed'),\n '@click': handleClick,\n '@keydown.capture': redirectSearch,\n '@keydown': handleKeydown,\n '@input': handleSearchInput,\n '@focusin': handleFocus,\n '@pointermove': handlePointer,\n '@pointerout': handlePointerOut,\n },\n ]});\n },\n get menu(): BindingObject {\n const menu = menuEl();\n return mergeBindings({inputs: [\n resolveStyle({\n part: menuStyles.parts.menu,\n props: {\n width: menu.dataset.width,\n minWidth: menu.dataset.minWidth,\n },\n className: menu.dataset.class,\n }),\n {\n id: menuId,\n popover: 'manual',\n role: 'menu',\n tabindex: '-1',\n 'data-ui-menu': '',\n ':hidden': () => !bridge.hasTag('visible'),\n ':data-state': () => (bridge.hasTag('expanded') ? 'open' : 'closed'),\n '@toggle': handleNativeToggle,\n },\n ]});\n },\n open(event?: Event): void {\n open('menu', event);\n },\n close(event?: Event): void {\n close(event instanceof KeyboardEvent, event);\n },\n toggle(event?: Event): void {\n event?.preventDefault();\n if (currentProps().disabled) return;\n bridge.send({type: 'TOGGLE', restoreFocus: event instanceof KeyboardEvent});\n },\n };\n\n return component;\n};\n\nconst registerDropdown = defineAlpineData('UiDropdown', UiDropdown);\n\nexport {registerDropdown, UiDropdown};\nexport type {DropdownData, DropdownTransition, UiDropdownApi};\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 {registerAnchorCapability} from '../../capabilities/anchor';\nimport {registerDropdown as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerDropdown = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerAnchorCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerDropdown};\nexport default registerDropdown;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./dropdown-
|
|
2
|
-
export {default} from "./dropdown-
|
|
1
|
+
export * from "./dropdown-BEMZqp_I.js";
|
|
2
|
+
export {default} from "./dropdown-BEMZqp_I.js";
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field-BeqlTp38.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{o as e,s as t}from"../chunks/dom-DiTFTWeR.js";import{l as n,n as r,t as i}from"../chunks/codecs-CQ7olTJL.js";import{n as a,t as o}from"../chunks/machine-Do4tL7nc.js";import{n as s}from"../chunks/alpine-data-Dvc_bXq6.js";import{n as c}from"../chunks/props-change-2xfsIAEN.js";import{P as l}from"../chunks/common-DnEHZCqy.js";var u=[`stack`,`grid`,`inline`];n(l,`vertical`),i(n(u,`stack`),`ui-layout-mode`),n([`default`,`trailing`],`default`),i(n([`stack`,`row`,`grid`],`stack`),`ui-layout-mode`),i(n(u,`stack`),`ui-layout-mode`);var d={invalid:i(r,`prop-invalid`)},f=[],p=e=>({event:t})=>c(t)?.props.invalid===e,m=e=>{let t=c(e.event)?.props;return t?{props:t}:void 0},h=({props:e,effects:t})=>o({initial:e.invalid?`invalid`:`valid`,on:{PROPS_CHANGED:[{target:`invalid`,guard:p(!0),reduce:`reconcileProps`,effects:`sync`},{target:`valid`,guard:p(!1),reduce:`reconcileProps`,effects:`sync`}],CONTENT_CHANGED:{effects:`sync`}},states:{valid:{tags:[`valid`]},invalid:{tags:[`invalid`]}}},{context:{},props:e,reducers:{reconcileProps:m},effects:t}),g=`input:not([type="hidden"]), textarea, select, button, [data-ui-control-target]`,_=(e,t)=>{let n=new Set((e??``).split(/\s+/).filter(Boolean));return n.add(t),Array.from(n).join(` `)},v=(e,t)=>(e??``).split(/\s+/).filter(e=>e&&!t.has(e)).join(` `),y=(e,t)=>(e.id||=`ui-${t}-${crypto.randomUUID()}`,e.id),b=()=>{let n=null,r=null,i=new WeakMap,o=new WeakMap,s=()=>{if(!n)throw Error(`Field has not been initialized.`);return n},c=()=>m.getCommittedSnapshot(),l=(t,n)=>{let r=i.get(t)??new Set,a=v(t.getAttribute(`aria-describedby`),r);n.forEach(e=>{a=_(a,e)}),a?e({el:t,attr:`aria-describedby`,value:a}):t.removeAttribute(`aria-describedby`),i.set(t,new Set(n))},u=(e,t)=>{if(t){e.hasAttribute(`data-ui-field-aria-invalid`)||(o.set(e,e.getAttribute(`aria-invalid`)),e.setAttribute(`data-ui-field-aria-invalid`,``)),e.setAttribute(`aria-invalid`,`true`);return}if(!e.hasAttribute(`data-ui-field-aria-invalid`))return;let n=o.get(e)??null;n===null?e.removeAttribute(`aria-invalid`):e.setAttribute(`aria-invalid`,n),e.removeAttribute(`data-ui-field-aria-invalid`),o.delete(e)},p=()=>{let n=s(),r=c().props.invalid;t({el:n,attr:`data-invalid`,present:r,value:`true`});let i=Array.from(n.querySelectorAll(g)).filter(e=>!e.closest(`[data-ui-field], [data-ui-fieldset]`)||e.closest(`[data-ui-field], [data-ui-fieldset]`)===n)[0],a=n.querySelector(`:scope > [data-ui-field-label]`),o=n.querySelector(`:scope > [data-ui-fieldset-legend]`),d=Array.from(n.querySelectorAll(`:scope > [data-ui-field-description]`)),f=Array.from(n.querySelectorAll(`:scope > [data-ui-field-error]`)),p=[...d,...f].filter(e=>!e.hasAttribute(`hidden`)).map(e=>y(e,e.hasAttribute(`data-ui-field-error`)?`field-error`:`field-description`));if(i){let t=y(i,`control`);if(a&&!a.htmlFor&&(a.htmlFor=t),o){let t=y(o,`fieldset-legend`);e({el:i,attr:`aria-labelledby`,value:_(i.getAttribute(`aria-labelledby`),t)})}l(i,p),u(i,r)}n.matches(`fieldset`)&&l(n,p)},m=a({schema:d,hooks:f,createMachine:({props:e})=>h({props:e,effects:{sync:p}})});return{...m,init(){n=this.$el,m.connect(n,this.snapshot),r=new MutationObserver(()=>m.send(`CONTENT_CHANGED`)),r.observe(s(),{childList:!0,subtree:!0}),p()},destroy(){r?.disconnect(),r=null,m.disconnect(),n=null}}},x=s(`UiField`,b),S=new WeakSet,C=e=>{S.has(e)||(S.add(e),x(e))};export{b as UiField,C as default,C as registerField};
|
|
2
|
+
//# sourceMappingURL=field-BeqlTp38.js.map
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field-BeqlTp38.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-BeqlTp38.js","names":[],"sources":["../../../../../../../../client/src/components/field/contract.ts","../../../../../../../../client/src/components/field/machine.ts","../../../../../../../../client/src/components/field/index.ts","../../../../../../../../client/src/components/field/entry.generated.ts"],"sourcesContent":["import {attribute, bool, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {ORIENTATIONS, type Orientation} from '../common';\n\nconst FIELD_LAYOUTS = ['stack', 'grid', 'inline'] as const;\nconst FIELD_GROUP_LAYOUTS = ['stack', 'row', 'grid'] as const;\nconst FIELD_ORIENTATIONS = ORIENTATIONS;\n\ntype FieldLayout = typeof FIELD_LAYOUTS[number];\ntype FieldGroupLayout = typeof FIELD_GROUP_LAYOUTS[number];\ntype FieldOrientation = Orientation;\n\nconst fieldSchema = {\n name: string,\n controlId: string,\n label: string,\n description: string,\n descriptionTrailing: string,\n error: string,\n errors: string,\n badge: string,\n orientation: oneOf(FIELD_ORIENTATIONS, 'vertical' as FieldOrientation),\n layout: attribute(oneOf(FIELD_LAYOUTS, 'stack' as FieldLayout), 'ui-layout-mode'),\n disabled: bool,\n required: bool,\n invalid: bool,\n class: string,\n};\n\nconst fieldLabelSchema = {\n controlId: string,\n badge: string,\n required: bool,\n class: string,\n};\n\nconst fieldDescriptionSchema = {\n id: string,\n placement: oneOf(['default', 'trailing'] as const, 'default'),\n class: string,\n};\n\nconst fieldErrorSchema = {\n id: string,\n message: string,\n errors: string,\n class: string,\n};\n\nconst fieldGroupSchema = {\n layout: attribute(oneOf(FIELD_GROUP_LAYOUTS, 'stack' as FieldGroupLayout), 'ui-layout-mode'),\n class: string,\n};\n\nconst fieldsetSchema = {\n name: string,\n legend: string,\n description: string,\n error: string,\n errors: string,\n layout: attribute(oneOf(FIELD_LAYOUTS, 'stack' as FieldLayout), 'ui-layout-mode'),\n disabled: bool,\n required: bool,\n invalid: bool,\n class: string,\n};\n\nconst fieldsetLegendSchema = {\n badge: string,\n required: bool,\n class: string,\n};\n\nconst fieldRuntimeSchema = {\n invalid: attribute(bool, 'prop-invalid'),\n};\n\ntype FieldProps = SchemaToProps<typeof fieldSchema>;\ntype FieldGroupProps = SchemaToProps<typeof fieldGroupSchema>;\ntype FieldRuntimeProps = SchemaToProps<typeof fieldRuntimeSchema>;\ntype FieldsetProps = SchemaToProps<typeof fieldsetSchema>;\n\nexport {\n FIELD_GROUP_LAYOUTS,\n FIELD_LAYOUTS,\n FIELD_ORIENTATIONS,\n fieldDescriptionSchema,\n fieldErrorSchema,\n fieldGroupSchema,\n fieldLabelSchema,\n fieldRuntimeSchema,\n fieldSchema,\n fieldsetLegendSchema,\n fieldsetSchema,\n};\nexport type {FieldGroupLayout, FieldGroupProps, FieldLayout, FieldOrientation, FieldProps, FieldRuntimeProps, FieldsetProps};\n","import {createMachine, propsChangedEvent, type Machine, type MachineScope} from '../../runtime/state-machine';\nimport type {FieldRuntimeProps} from './contract';\n\ntype FieldContext = Record<string, never>;\ntype FieldEffects = {sync(scope: MachineScope<FieldContext, FieldRuntimeProps>): void};\nconst fieldHooks = [] as const;\nconst nextInvalidIs = (invalid: boolean) => ({event}: MachineScope<FieldContext, FieldRuntimeProps>): boolean => (\n propsChangedEvent<FieldRuntimeProps>(event)?.props.invalid === invalid\n);\nconst reconcileProps = (scope: MachineScope<FieldContext, FieldRuntimeProps>) => {\n const next = propsChangedEvent<FieldRuntimeProps>(scope.event)?.props;\n return next ? {props: next} : undefined;\n};\n\nconst createFieldMachine = ({props, effects}: {props: FieldRuntimeProps; effects: FieldEffects}): Machine<FieldContext, FieldRuntimeProps> => createMachine<FieldContext, FieldRuntimeProps>({\n initial: props.invalid ? 'invalid' : 'valid',\n on: {\n PROPS_CHANGED: [\n {target: 'invalid', guard: nextInvalidIs(true), reduce: 'reconcileProps', effects: 'sync'},\n {target: 'valid', guard: nextInvalidIs(false), reduce: 'reconcileProps', effects: 'sync'},\n ],\n CONTENT_CHANGED: {effects: 'sync'},\n },\n states: {valid: {tags: ['valid']}, invalid: {tags: ['invalid']}},\n}, {context: {}, props, reducers: {reconcileProps}, effects});\n\nexport {createFieldMachine, fieldHooks};\nexport type {FieldContext, FieldEffects};\n","import type Alpine from 'alpinejs';\n\nimport {type AlpineMachine, createAlpineMachine, defineAlpineData, type MachineSnapshot, type TrellisAlpineComponent} from '@client/runtime';\nimport {setAttribute, setPresence} from '@client/utils';\nimport {fieldRuntimeSchema, type FieldRuntimeProps} from './contract';\nimport {createFieldMachine, fieldHooks, type FieldContext} from './machine';\n\ntype FieldData = AlpineMachine<FieldContext, FieldRuntimeProps, typeof fieldHooks> & {\n init(): void;\n destroy(): void;\n};\n\nconst controlSelector = 'input:not([type=\"hidden\"]), textarea, select, button, [data-ui-control-target]';\nconst appendId = (value: string | null, id: string): string => {\n const tokens = new Set((value ?? '').split(/\\s+/).filter(Boolean));\n tokens.add(id);\n return Array.from(tokens).join(' ');\n};\nconst withoutIds = (value: string | null, ids: Set<string>): string => (\n (value ?? '').split(/\\s+/).filter((token) => token && !ids.has(token)).join(' ')\n);\nconst ensureId = (el: HTMLElement, prefix: string): string => {\n if (el.id) return el.id;\n el.id = `ui-${prefix}-${crypto.randomUUID()}`;\n return el.id;\n};\n\nconst UiField = (): TrellisAlpineComponent<FieldData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let observer: MutationObserver | null = null;\n const ownedDescriptions = new WeakMap<HTMLElement, Set<string>>();\n const originalInvalid = new WeakMap<HTMLElement, string | null>();\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('Field has not been initialized.');\n return rootEl;\n };\n const snapshot = (): MachineSnapshot<FieldContext, FieldRuntimeProps> => bridge.getCommittedSnapshot();\n const applyDescriptions = (el: HTMLElement, ids: string[]): void => {\n const previous = ownedDescriptions.get(el) ?? new Set<string>();\n let value = withoutIds(el.getAttribute('aria-describedby'), previous);\n ids.forEach((id) => { value = appendId(value, id); });\n if (value) setAttribute({el, attr: 'aria-describedby', value});\n else el.removeAttribute('aria-describedby');\n ownedDescriptions.set(el, new Set(ids));\n };\n const applyInvalid = (control: HTMLElement, invalid: boolean): void => {\n if (invalid) {\n if (!control.hasAttribute('data-ui-field-aria-invalid')) {\n originalInvalid.set(control, control.getAttribute('aria-invalid'));\n control.setAttribute('data-ui-field-aria-invalid', '');\n }\n control.setAttribute('aria-invalid', 'true');\n return;\n }\n if (!control.hasAttribute('data-ui-field-aria-invalid')) return;\n const original = originalInvalid.get(control) ?? null;\n if (original === null) control.removeAttribute('aria-invalid');\n else control.setAttribute('aria-invalid', original);\n control.removeAttribute('data-ui-field-aria-invalid');\n originalInvalid.delete(control);\n };\n const syncDom = (): void => {\n const field = root();\n const invalid = snapshot().props.invalid;\n setPresence({el: field, attr: 'data-invalid', present: invalid, value: 'true'});\n\n const controls = Array.from(field.querySelectorAll<HTMLElement>(controlSelector)).filter((control) => (\n !control.closest('[data-ui-field], [data-ui-fieldset]')\n || control.closest('[data-ui-field], [data-ui-fieldset]') === field\n ));\n const control = controls[0];\n const label = field.querySelector<HTMLLabelElement>(':scope > [data-ui-field-label]');\n const legend = field.querySelector<HTMLElement>(':scope > [data-ui-fieldset-legend]');\n const descriptions = Array.from(field.querySelectorAll<HTMLElement>(':scope > [data-ui-field-description]'));\n const errors = Array.from(field.querySelectorAll<HTMLElement>(':scope > [data-ui-field-error]'));\n const describedBy = [...descriptions, ...errors]\n .filter((el) => !el.hasAttribute('hidden'))\n .map((el) => ensureId(el, el.hasAttribute('data-ui-field-error') ? 'field-error' : 'field-description'));\n\n if (control) {\n const controlId = ensureId(control, 'control');\n if (label && !label.htmlFor) label.htmlFor = controlId;\n if (legend) {\n const legendId = ensureId(legend, 'fieldset-legend');\n setAttribute({el: control, attr: 'aria-labelledby', value: appendId(control.getAttribute('aria-labelledby'), legendId)});\n }\n applyDescriptions(control, describedBy);\n applyInvalid(control, invalid);\n }\n if (field.matches('fieldset')) applyDescriptions(field, describedBy);\n };\n const bridge = createAlpineMachine({\n schema: fieldRuntimeSchema,\n hooks: fieldHooks,\n createMachine: ({props}) => createFieldMachine({props, effects: {sync: syncDom}}),\n });\n\n return {\n ...bridge,\n init(): void {\n rootEl = this.$el;\n bridge.connect(rootEl, this.snapshot);\n observer = new MutationObserver(() => bridge.send('CONTENT_CHANGED'));\n observer.observe(root(), {childList: true, subtree: true});\n syncDom();\n },\n destroy(): void {\n observer?.disconnect();\n observer = null;\n bridge.disconnect();\n rootEl = null;\n },\n };\n};\n\nconst registerField = defineAlpineData('UiField', UiField);\n\nexport {registerField, UiField};\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 {registerField as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerField = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerField};\nexport default registerField;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./field-
|
|
2
|
-
export {default} from "./field-
|
|
1
|
+
export * from "./field-BeqlTp38.js";
|
|
2
|
+
export {default} from "./field-BeqlTp38.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,b as t,d as n,f as r,l as i,p as a,u as o,v as s}from"../chunks/element-adapter-native-data-key-zFOeeob-.js";import{r as c,s as l,t as u}from"../chunks/dom-DiTFTWeR.js";import{c as d,f,l as p,n as m,t as h}from"../chunks/codecs-CQ7olTJL.js";import{a as g,n as _,t as v}from"../chunks/machine-Do4tL7nc.js";import{n as y,t as b}from"../chunks/alpine-data-Dvc_bXq6.js";import{n as ee,t as x}from"../chunks/styles-CX2j92ex.js";import{n as S,r as C}from"../chunks/form-control-DL1Hkox3.js";import{n as w,t as te}from"../chunks/item-template-DSfME41Q.js";function T(e){return e.source.types.includes(`Files`)}function ne(e){return e.source.items.filter(function(e){return e.kind===`file`}).map(function(e){return e.getAsFile()}).filter(function(e){return e!=null})}var E=t();function D(e){var t=e.dragEnter,i=t.type,s=t.relatedTarget;return i===`dragenter`?r()?n({dragEnter:t}):s==null?!0:a()?o(s):s instanceof HTMLIFrameElement:!1}function O(e){var t=e.type,n=e.value;return!(t===`application/vnd.pdnd`||t===`text/plain`&&n===`pdnd:android-fallback`)}function k(e){return Array.from(e.types).filter(function(t){return O({type:t,value:e.getData(t)})})}function A(e){return Array.from(e.items).filter(function(t){return t.kind===`file`||O({type:t.type,value:e.getData(t.type)})})}var j=!1,M=e({typeKey:`external`,defaultDropEffect:`copy`,mount:function(e){return(0,E.bind)(window,{type:`dragenter`,listener:function(t){if(!j&&t.dataTransfer&&e.canStart(t)&&D({dragEnter:t})){var n=k(t.dataTransfer);if(n.length){var r={types:n,items:[],getStringData:function(){return null}};e.start({event:t,dragType:{type:`external`,startedFrom:`external`,payload:r,getDropPayload:function(e){if(!e.dataTransfer)return r;var t=A(e.dataTransfer),i=e.dataTransfer.getData.bind(e.dataTransfer);return{types:n,items:t,getStringData:function(e){if(!n.includes(e))return null;var t=i(e);return O({type:e,value:t})?t:null}}}}})}}}})}});function N(e){return M.dropTarget(e)}function re(e){return M.monitor(e)}(function(){if(typeof window>`u`)return;M.registerUsage();var e={type:`idle`},t=e;function n(){t.type===`dragging`&&(j=!1,t.cleanup(),t=e)}function r(){return(0,E.bindAll)(window,[{type:`dragend`,listener:n}].concat(s(i({onDragEnd:n}))),{capture:!0})}(0,E.bind)(window,{type:`dragstart`,listener:function(){t.type===`idle`&&(j=!0,t={type:`dragging`,cleanup:r()})},options:{capture:!0}})})();var P=[`stack`,`inline`],F=[`auto`,`image`,`none`],I=[`sm`,`md`,`lg`],ie={name:f,accept:f,capture:f,multiple:m,required:m,disabled:m,invalid:m,preview:p(F,`auto`),layout:h(p(P,`stack`),`ui-layout-mode`),size:p(I,`md`),heading:f.default(`Drop files here or browse`),text:f,browseLabel:f,empty:h(f,`empty-label`),maxItems:d.min(0).default(0),clearable:m.default(!0),transport:p([`native`,`direct`],`native`),rootClass:f,dropzoneClass:f,listClass:f,itemClass:f,class:f};f.default(`Drop files here or browse`),f.default(`cloud__upload`),h(p(P,`stack`),`ui-layout-mode`),p(I,`md`),f.default(`document__blank`),f.default(`Remove file`);var ae=[g({name:`uploading`,state:`transfer.direct.uploading`,project:e=>({files:e.context.selection.records.filter(({status:e})=>e===`uploading`)}),onDone:`UPLOADING_DONE`,onError:`UPLOADING_ERROR`,required:!0,sends:{progress:(e,t,n)=>({type:`UPLOAD_PROGRESS`,id:e,loaded:t,total:n}),cancel:()=>({type:`CANCEL_UPLOAD`}),fail:e=>({type:`UPLOADING_ERROR`,error:e})}})],L=e=>e,oe=e=>{let t=e.id;return typeof t==`string`?t:``},R=e=>{let t=e.source;return t===`picker`||t===`drop`||t===`remove`||t===`props`?t:`clear`},se=(e,t)=>{let n=t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(n.length===0)return!0;let r=e.name.toLowerCase(),i=e.type.toLowerCase();return n.some(e=>e===`*/*`?!0:e.startsWith(`.`)?r.endsWith(e):e.endsWith(`/*`)?i.startsWith(e.slice(0,-1)):e.includes(`/`)&&i===e)},z=(e,t,n)=>{let r=L(n).records??[],i=r.filter(e=>se(e,t.accept)),a=L(n).append&&t.multiple?[...e.selection.records]:[],o=t.multiple?[...a,...i]:i.slice(0,1),s=t.maxItems>0?o.slice(0,t.maxItems):o,c=new Map(e.selection.records.map(e=>[e.id,e])),l=t.transport===`direct`&&(R(n)===`picker`||R(n)===`drop`),u=s.map(e=>c.get(e.id)??{...e,status:l?`uploading`:`selected`,progress:0});return{records:u,limitReached:t.maxItems>0&&u.length>=t.maxItems,rejectedCount:r.length-i.length+o.length-u.length,limitRejectedCount:o.length-u.length,source:R(n)}},B=({context:e,props:t,event:n})=>z(e,t,n).records,V=e=>B(e).length===0,H=({context:e,props:t,event:n})=>z(e,t,n).limitReached,U=({context:e,props:t})=>!t.disabled&&e.transfer.status!==`uploading`,W=({props:e})=>e.transport===`direct`,G=({props:e})=>e.transport===`native`,K=e=>W(e)&&(R(e.event)===`picker`||R(e.event)===`drop`)&&B(e).some(({status:e})=>e===`uploading`),ce=({context:e,props:t,event:n})=>({context:{selection:z(e,t,n)}}),le=({context:e})=>({context:{selection:{...e.selection,records:[],limitReached:!1,rejectedCount:0,limitRejectedCount:0,source:`clear`}}}),ue=({context:e})=>({context:{transfer:{...e.transfer,status:`uploading`,error:``}}}),q=(e,t,n=``)=>({...e.transfer,status:t,error:n}),J=(e,t)=>e.selection.records.map(e=>e.status===`uploading`?{...e,status:t,progress:t===`complete`?1:e.progress}:e),de=({context:e})=>({context:{selection:{...e.selection,records:J(e,`complete`)},existing:[],transfer:q(e,`complete`)}}),fe=({context:e,event:t})=>({context:{selection:{...e.selection,records:J(e,`failed`)},transfer:q(e,`failed`,t.error instanceof Error?t.error.message:String(t.error??`Upload failed.`))}}),pe=({context:e})=>({context:{selection:{...e.selection,records:J(e,`canceled`)},transfer:q(e,`canceled`)}}),me=({context:e,event:t})=>{let n=typeof t.id==`string`?t.id:``,r=Number(t.loaded),i=Number(t.total),a=Number.isFinite(r)&&Number.isFinite(i)&&i>0?Math.min(1,Math.max(0,r/i)):0;if(e.selection.records.find(e=>e.id===n)?.status===`uploading`)return{context:{selection:{...e.selection,records:e.selection.records.map(e=>e.id===n?{...e,progress:a}:e)}}}},he=e=>U(e)&&V(e),ge=e=>U(e)&&H(e),Y=e=>[{target:`#inventory-empty`,guard:he,reduce:`planSelection`,effects:e},{target:`#inventory-capped`,guard:ge,reduce:`planSelection`,effects:e},{target:`#inventory-populated`,guard:U,reduce:`planSelection`,effects:e}],_e=({props:e,context:t,effects:n})=>v({type:`parallel`,on:{PROPS_CHANGED:{reduce:`replaceProps`,effects:`syncProps`}},states:{interaction:{initial:`idle`,states:{idle:{on:{DRAG_ENTER:{target:`dragging`,guard:U,effects:`syncDragging`}}},dragging:{tags:[`dragging`],on:{DRAG_LEAVE:{target:`idle`,effects:`syncDragging`},DROP:{target:`idle`,effects:`syncDragging`},RECONCILE:{target:`idle`,guard:({props:e})=>e.disabled,effects:`syncDragging`}}}}},inventory:{initial:`empty`,on:{FILES_CHANGED:Y(`commitSelection`),RECONCILE:Y(`reconcileSelection`),FILES_RESET:{target:`#inventory-empty`,guard:U,reduce:`clearSelection`,effects:`resetSelection`},REMOVE_EXISTING:{guard:U,reduce:`removeExisting`,effects:`clearExisting`},CLEAR_EXISTING:{guard:U,reduce:`clearExisting`,effects:`clearExisting`}},states:{empty:{id:`inventory-empty`,tags:[`empty`]},populated:{id:`inventory-populated`,tags:[`has-files`]},capped:{id:`inventory-capped`,tags:[`has-files`,`limit-reached`]}}},transfer:{initial:`inactive`,states:{inactive:{on:{RECONCILE:[{target:`#transfer-direct-idle`,guard:W,reduce:`setDirectIdle`,effects:`syncTransfer`},{target:`#transfer-native`,reduce:`setNative`,effects:`syncTransfer`}]}},native:{id:`transfer-native`,on:{RECONCILE:{target:`#transfer-direct-idle`,guard:W,reduce:`setDirectIdle`,effects:`syncTransfer`}}},direct:{initial:`idle`,on:{RECONCILE:{target:`#transfer-native`,guard:G,reduce:`setNative`,effects:`syncTransfer`}},states:{idle:{id:`transfer-direct-idle`,on:{FILES_CHANGED:{target:`uploading`,guard:K,reduce:`beginUpload`,effects:`syncTransfer`}}},uploading:{id:`transfer-uploading`,tags:[`uploading`],on:{UPLOAD_PROGRESS:{reduce:`updateProgress`,effects:`syncTransfer`},UPLOADING_DONE:{target:`complete`,reduce:`finishUpload`,effects:[`commitExistingReplacement`,`syncTransfer`,`emitComplete`]},UPLOADING_ERROR:{target:`failed`,reduce:`failUpload`,effects:[`syncTransfer`,`emitError`]},CANCEL_UPLOAD:{target:`canceled`,reduce:`cancelUpload`,effects:[`syncTransfer`,`emitCancel`]},RECONCILE:{target:`canceled`,guard:({props:e})=>e.disabled||e.transport!==`direct`,reduce:`cancelUpload`,effects:[`syncTransfer`,`emitCancel`]}}},complete:{on:{FILES_CHANGED:[{target:`uploading`,guard:K,reduce:`beginUpload`,effects:`syncTransfer`},{target:`#transfer-direct-idle`,guard:V,reduce:`setDirectIdle`,effects:`syncTransfer`}]}},failed:{tags:[`upload-failed`],on:{RETRY_UPLOAD:{target:`uploading`,reduce:`retryUpload`,effects:`syncTransfer`},FILES_CHANGED:[{target:`uploading`,guard:K,reduce:`beginUpload`,effects:`syncTransfer`},{target:`#transfer-direct-idle`,guard:V,reduce:`setDirectIdle`,effects:`syncTransfer`}]}},canceled:{on:{RETRY_UPLOAD:{target:`uploading`,reduce:`retryUpload`,effects:`syncTransfer`},FILES_CHANGED:[{target:`uploading`,guard:K,reduce:`beginUpload`,effects:`syncTransfer`},{target:`#transfer-direct-idle`,guard:V,reduce:`setDirectIdle`,effects:`syncTransfer`}]}}}}}}}},{context:t,props:e,reducers:{replaceProps:({event:e,props:t})=>({props:e.props??t}),planSelection:ce,clearSelection:le,removeExisting:({context:e,event:t})=>({context:{existing:e.existing.filter(e=>e!==oe(t))}}),clearExisting:()=>({context:{existing:[]}}),beginUpload:ue,retryUpload:({context:e})=>({context:{selection:{...e.selection,records:e.selection.records.map(e=>e.status===`failed`||e.status===`canceled`?{...e,status:`uploading`,progress:0}:e)},transfer:{...e.transfer,status:`uploading`,error:``}}}),finishUpload:de,failUpload:fe,cancelUpload:pe,updateProgress:me,setNative:({context:e})=>({context:{transfer:q(e,`native`)}}),setDirectIdle:({context:e})=>({context:{transfer:q(e,`idle`)}})},effects:{commitSelection:n.commitSelection,reconcileSelection:n.reconcileSelection,resetSelection:n.resetSelection,syncProps:n.syncProps,syncDragging:n.syncDragging,clearExisting:n.clearExisting,commitExistingReplacement:n.commitExistingReplacement,syncTransfer:n.syncTransfer,emitComplete:n.emitComplete,emitError:n.emitError,emitCancel:n.emitCancel}}),ve=x({definition:{component:`ui.file-upload`,parts:{root:{base:[`grid w-full min-w-0 gap-3`]},control:{base:`relative grid min-w-0 gap-3`},input:{base:`sr-only`},dropzone:{base:[`relative grid min-w-0 overflow-hidden rounded-surface-md text-inherit outline-none`],variants:{layout:{stack:`justify-items-center text-center`,inline:`grid-cols-[auto_minmax(0,1fr)_auto] items-center text-left`},size:{sm:`gap-2 p-3`,md:`gap-3 p-4`,lg:`gap-3 p-5`}},defaults:{layout:`stack`,size:`md`}},icon:{base:`size-icon-lg shrink-0 text-surface-ink-muted`},body:{base:`grid min-w-0 gap-1`},heading:{base:`text-sm font-medium text-inherit`},text:{base:`text-xs font-normal text-surface-ink-muted`},browse:{base:[`inline-flex min-w-0 items-center justify-center rounded-control-md px-2 py-1 text-xs font-medium`]},list:{base:`grid min-w-0 gap-2`},empty:{base:`text-xs text-surface-ink-muted`},item:{base:[`grid min-w-0 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-3 rounded-surface-sm px-3 py-2`]},preview:{base:`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-surface-xs bg-interaction-hover text-surface-ink-muted`},previewImage:{base:`size-full`},itemIcon:{base:`size-icon`},itemBody:{base:`grid min-w-0 gap-0.5`},itemName:{base:`truncate text-sm font-medium text-inherit`},itemMeta:{base:`truncate text-xs font-normal text-surface-ink-muted`},itemError:{base:`truncate text-xs font-normal text-intent-danger-text`},remove:{base:[`relative z-20 inline-flex size-control-sm shrink-0 items-center justify-center rounded-control-md border-0 bg-transparent`,`text-surface-ink-muted outline-none`]},removeIcon:{base:`size-icon-xs leading-none`},clear:{base:`sr-only`}}}}),ye=e=>{if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`],n=Math.min(Math.floor(Math.log(e)/Math.log(1024)),t.length-1),r=e/1024**n;return`${r>=10||n===0?Math.round(r):Number(r.toFixed(1))} ${t[n]}`},X=e=>e?Array.from(e):[],be=e=>e.type.startsWith(`image/`),xe=(e,t)=>t!==`none`&&(t===`image`||be(e)),Se=e=>{if(typeof DataTransfer>`u`)return null;let t=new DataTransfer;return e.forEach(e=>t.items.add(e)),t.files},Ce=(e,t)=>{let n=Se(t);if(!n)return!1;try{return e.files=n,!0}catch{return!1}},Z=e=>{let t=null,n,r=!1,i=0,a=new Map,o=new Map,s=new Map,d=()=>{if(!t)throw Error(`File upload has not been initialized.`);return t},f=()=>{let e=d().querySelector(`[data-ui-file-upload-input]`);if(!e)throw Error(`File upload requires a native file input.`);return e},p=()=>d().querySelector(`[data-ui-file-upload-dropzone]`),m=()=>d().querySelector(`[data-ui-file-upload-list]`),h=()=>F.getSnapshot().props,g=()=>F.getSnapshot().context,v=e=>({id:`file-${++i}`,name:e.name,bytes:e.size,size:ye(e.size),type:e.type||`File`}),y=e=>e.map(e=>{let t=v(e);return o.set(t.id,e),t}),x=e=>{let t=s.get(e);t&&URL.revokeObjectURL(t),s.delete(e)},E=e=>{let t=o.get(e);if(!t||!xe(t,h().preview))return null;let n=s.get(e);if(n)return n;let r=URL.createObjectURL(t);return s.set(e,r),r},D=()=>{h().transport!==`direct`&&(r=!0,f().dispatchEvent(new Event(`input`,{bubbles:!0})),f().dispatchEvent(new Event(`change`,{bubbles:!0})))},O=(e,t,n=!1)=>{h().disabled||F.hasTag(`uploading`)||F.send({type:`FILES_CHANGED`,records:e,source:t,append:n})},k=()=>{let e=new Set;return[...d().querySelectorAll(`[data-ui-file-upload-item][data-existing-file]`)].map((t,n)=>{let r=t.dataset.fileId||t.dataset.uploadKey||`existing-${n+1}`,i=r,a=2;for(;e.has(i);)i=`${r}-${a++}`;return e.add(i),t.dataset.fileId=i,t.querySelectorAll(`[data-ui-file-upload-remove][data-existing-file]`).forEach(e=>{e.dataset.fileId=i}),i})},A=(t,n)=>{let r=m();if(!r)return;let i=w(d(),`data-ui-file-upload-item-template`);if(!i)throw Error(`File upload requires an item template.`);let c=t.selection.records,l=new Set(c.map(({id:e})=>e));a.forEach((e,t)=>{(!l.has(t)||e.template!==i||e.element.parentElement!==r)&&(e.destroy(),a.delete(t))}),[...s.keys()].filter(e=>!l.has(e)).forEach(x),[...o.keys()].filter(e=>!l.has(e)).forEach(e=>o.delete(e));let u=new Set(t.existing);r.querySelectorAll(`[data-ui-file-upload-item][data-existing-file]`).forEach(e=>{e.hidden=!u.has(e.dataset.fileId??``)});let f=r.querySelector(`[data-ui-file-upload-empty]`);f&&(f.hidden=c.length>0||t.existing.length>0);let p=Object.fromEntries(Object.entries(ve.parts).map(([e,t])=>[e,ee({part:t,className:e===`item`?n.itemClass:``})]));c.forEach(t=>{let n={$file:t,$styles:p},o=a.get(t.id);if(o)o.update(n);else{o=te(e,i,n);let r=o.element;r.dataset.uiFileUploadItem=``,r.dataset.uiFileUploadPending=``,r.dataset.fileId=t.id,a.set(t.id,o)}o.element.dataset.status=t.status,o.element.dataset.progress=String(t.progress),o.element.parentElement!==r&&o.mount(r)})},j=(e=g(),t=h())=>{let n=e.selection.records,r=e.existing.length>0,i=n.length>0||r,a=t.disabled||e.selection.limitReached||e.transfer.status===`uploading`,o=f();C({input:o,state:{disabled:t.disabled,required:t.required,invalid:t.invalid}}),t.transport===`native`&&t.name?o.name=t.name:o.removeAttribute(`name`),o.multiple=t.multiple,t.accept?o.setAttribute(`accept`,t.accept):o.removeAttribute(`accept`),t.capture?o.setAttribute(`capture`,t.capture):o.removeAttribute(`capture`),a&&!t.disabled?(o.setAttribute(`aria-disabled`,`true`),o.tabIndex=-1):t.disabled||(o.removeAttribute(`aria-disabled`),o.removeAttribute(`tabindex`)),o.form&&(o.form.enctype=`multipart/form-data`),S({el:d(),state:t,value:`true`}),l({el:d(),attr:`data-empty`,present:!i,value:`true`}),l({el:d(),attr:`data-has-files`,present:i,value:`true`}),l({el:d(),attr:`data-multiple`,present:t.multiple,value:`true`}),l({el:d(),attr:`data-max-items-reached`,present:e.selection.limitReached,value:`true`}),l({el:d(),attr:`data-has-existing-file`,present:r,value:`true`}),d().dataset.transport=t.transport,d().dataset.transferState=e.transfer.status;let s=p();s&&(S({el:s,state:{disabled:a,invalid:t.invalid},value:`true`}),l({el:s,attr:`data-multiple`,present:t.multiple,value:`true`}),l({el:s,attr:`data-has-files`,present:i,value:`true`}),l({el:s,attr:`data-max-items-reached`,present:e.selection.limitReached,value:`true`})),A(e,t)},M=e=>({selection:{records:[],limitReached:!1,rejectedCount:0,limitRejectedCount:0,source:`clear`},existing:k(),transfer:{status:e.transport===`native`?`native`:`idle`,error:``}}),P=e=>{let t=e.context.selection.records.flatMap(({id:e})=>o.get(e)??[]);return Ce(f(),t)?(j(e.context,e.props),!0):(f().value=``,F.send(`FILES_RESET`),!1)},F=_({schema:ie,hooks:ae,createMachine:({props:e})=>_e({props:e,context:M(e),effects:{commitSelection:e=>{P(e)&&(e.context.selection.limitRejectedCount>0&&c({el:d(),name:`ui:file-upload-limit`,detail:{rejectedCount:e.context.selection.limitRejectedCount}}),e.context.selection.source!==`picker`&&D(),c({el:d(),name:`ui:file-upload-change`,detail:{files:e.context.selection.records,source:e.context.selection.source}}))},reconcileSelection:e=>{P(e)},resetSelection:e=>{f().value=``,j(e.context,e.props)},syncProps:e=>{j(e.context,e.props),F.send({type:`RECONCILE`,records:e.context.selection.records,source:`props`})},syncDragging:e=>{let t=e.snapshot.tags.includes(`dragging`);l({el:d(),attr:`data-dragging`,present:t,value:`true`});let n=p();n&&l({el:n,attr:`data-dragging`,present:t,value:`true`})},clearExisting:e=>{let t=new Set(e.context.existing),n=[...d().querySelectorAll(`[data-ui-file-upload-item][data-existing-file]:not([hidden])`)].flatMap(e=>{let n=e.dataset.fileId;return!n||t.has(n)?[]:(e.querySelectorAll(`[data-ui-file-upload-clear]`).forEach(e=>{e.checked=!0,e.dispatchEvent(new Event(`change`,{bubbles:!0}))}),[n])});j(e.context,e.props),c({el:d(),name:`ui:file-upload-change`,detail:{files:e.context.selection.records,source:e.context.selection.source,removedExistingIds:n}})},commitExistingReplacement:e=>{let t=[...d().querySelectorAll(`[data-ui-file-upload-item][data-existing-file]:not([hidden])`)].flatMap(e=>e.dataset.fileId??[]);j(e.context,e.props),t.length!==0&&c({el:d(),name:`ui:file-upload-change`,detail:{files:e.context.selection.records,source:e.context.selection.source,removedExistingIds:t}})},syncTransfer:e=>j(e.context,e.props),emitComplete:e=>c({el:d(),name:`ui:file-upload-complete`,detail:{files:e.context.selection.records}}),emitError:e=>c({el:d(),name:`ui:file-upload-error`,detail:{files:e.context.selection.records,error:e.context.transfer.error}}),emitCancel:e=>c({el:d(),name:`ui:file-upload-cancel`,detail:{files:e.context.selection.records}})}})}),I={...F,get files(){return this.snapshot.current?.context.selection.records??[]},get hasFiles(){return(this.snapshot.current?.context.selection.records.length??0)>0||(this.snapshot.current?.context.existing.length??0)>0},get isDragging(){return this.snapshot.current?.tags.includes(`dragging`)??!1},get isUploading(){return this.snapshot.current?.tags.includes(`uploading`)??!1},get isLimitReached(){return this.snapshot.current?.context.selection.limitReached??!1},init(){n=b(this),t=this.$el,F.connect(this.$el,this.snapshot);let e=f();u({target:e,event:`input`,handler:e=>{h().transport===`direct`&&e.stopPropagation()},cleanup:n}),u({target:e,event:`change`,handler:t=>{if(h().transport===`direct`&&t.stopPropagation(),r){r=!1;return}O(y(X(e.files)),`picker`)},cleanup:n}),u({target:d(),event:`click`,handler:e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-ui-file-upload-remove][data-existing-file][data-file-id]`);if(n?.dataset.fileId){e.preventDefault(),F.send({type:`REMOVE_EXISTING`,id:n.dataset.fileId});return}let r=t.closest(`[data-ui-file-upload-remove][data-file-id]`);r?.dataset.fileId&&(e.preventDefault(),I.remove(r.dataset.fileId))},cleanup:n}),u({target:d(),event:`trellis:file-upload-clear-existing`,handler:()=>{F.send(`CLEAR_EXISTING`)},cleanup:n});let i=p();i&&(n.add(N({element:i,canDrop:({source:e})=>!h().disabled&&!F.hasTag(`uploading`)&&T({source:e}),getDropEffect:()=>`copy`,onDragEnter:()=>F.send(`DRAG_ENTER`),onDragLeave:()=>F.send(`DRAG_LEAVE`),onDrop:({source:e})=>{F.send(`DROP`),T({source:e})&&O(y(ne({source:e})),`drop`,h().multiple)}})),n.add(re({canMonitor:({source:e})=>T({source:e}),onDrop:()=>F.send(`DRAG_LEAVE`)}))),j(),F.send({type:`RECONCILE`,records:[],source:`props`})},destroy(){a.forEach(e=>e.destroy()),a.clear(),s.forEach(e=>URL.revokeObjectURL(e)),s.clear(),o.clear(),F.disconnect(),t=null},browse(){!h().disabled&&!F.hasTag(`uploading`)&&f().click()},remove(e){if(h().disabled||F.hasTag(`uploading`)||!o.has(e))return;let t=g().selection.records.filter(t=>t.id!==e);O(t,`remove`)},retry(){F.send(`RETRY_UPLOAD`)},cancel(){F.send(`CANCEL_UPLOAD`)},file(e){return o.get(e)??null},preview(e){return E(e)}};return I},we=e=>{y(`UiFileUpload`,()=>Z(e))(e)},Q=new WeakSet,$=e=>{Q.has(e)||(Q.add(e),we(e))};export{Z as UiFileUpload,$ as default,$ as registerFileUpload};
|
|
2
|
+
//# sourceMappingURL=file-upload-DCluNmYW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-upload-DCluNmYW.js","names":["bind","bindAll"],"sources":["../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.2/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/public-utils/external/file.js","../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.2/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/util/changing-window/is-entering-window.js","../../../../../../../../../node_modules/.pnpm/@atlaskit+pragmatic-drag-and-drop@2.0.2/node_modules/@atlaskit/pragmatic-drag-and-drop/dist/esm/adapter/external-adapter.js","../../../../../../../../client/src/components/file-upload/contract.ts","../../../../../../../../client/src/components/file-upload/machine.ts","../../../../../../../../client/src/components/file-upload/styles.ts","../../../../../../../../client/src/components/file-upload/index.ts","../../../../../../../../client/src/components/file-upload/entry.generated.ts"],"sourcesContent":["export function containsFiles(_ref) {\n var source = _ref.source;\n return source.types.includes('Files');\n}\n\n/** Obtain an array of the dragged `File`s */\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport function getFiles(_ref2) {\n var source = _ref2.source;\n return source.items\n // unlike other media types, for files:\n // item.kind is 'file'\n // item.type is the type of file eg 'image/jpg'\n // for other media types, item.type is the mime format\n .filter(function (item) {\n return item.kind === 'file';\n }).map(function (item) {\n return item.getAsFile();\n }).filter(function (file) {\n return file != null;\n });\n}","import { isFirefox } from '../is-firefox';\nimport { isSafari } from '../is-safari';\nimport { isEnteringWindowInSafari } from './count-events-for-safari';\nimport { isFromAnotherWindow } from './is-from-another-window';\nexport function isEnteringWindow(_ref) {\n var dragEnter = _ref.dragEnter;\n var type = dragEnter.type,\n relatedTarget = dragEnter.relatedTarget;\n if (type !== 'dragenter') {\n return false;\n }\n if (isSafari()) {\n return isEnteringWindowInSafari({\n dragEnter: dragEnter\n });\n }\n\n // standard check\n if (relatedTarget == null) {\n return true;\n }\n\n /**\n * 🦊 Exception: `iframe` in Firefox (`125.0`)\n *\n * Case 1: parent `window` → child `iframe`\n * `relatedTarget` is the `iframe` element in the parent `window`\n * (foreign element)\n *\n * Case 2: child `iframe` → parent `window`\n * `relatedTarget` is an element inside the child `iframe`\n * (foreign element)\n */\n\n if (isFirefox()) {\n return isFromAnotherWindow(relatedTarget);\n }\n\n /**\n * 🌏 Exception: `iframe` in Chrome (`124.0`)\n *\n * Case 1: parent `window` → child `iframe`\n * `relatedTarget` is `null` *(standard check)*\n *\n * Case 2: child `iframe` → parent `window`\n * `relatedTarget` is the `iframe` element in the parent `window`\n */\n\n // Case 2\n // Using `instanceof` check as the element will be in the same `window`\n return relatedTarget instanceof HTMLIFrameElement;\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport { bind, bindAll } from 'bind-event-listener';\nimport { makeAdapter } from '../make-adapter/make-adapter';\nimport { androidFallbackText } from '../util/android';\nimport { isEnteringWindow } from '../util/changing-window/is-entering-window';\nimport { getBindingsForBrokenDrags } from '../util/detect-broken-drag';\nimport { textMediaType } from '../util/media-types/text-media-type';\nimport { elementAdapterNativeDataKey } from './element-adapter-native-data-key';\nexport function isAnAvailableType(_ref) {\n var type = _ref.type,\n value = _ref.value;\n // We don't want to expose our private elementAdapter key / value\n if (type === elementAdapterNativeDataKey) {\n return false;\n }\n // Not exposing \"text/plain\" if it contains the android fallback text\n // We _could_ add an `isAndroid()` check, but it's probably safest\n // to trim this data out, regardless of what OS we see it on.\n if (type === textMediaType && value === androidFallbackText) {\n return false;\n }\n return true;\n}\n\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport function getAvailableTypes(transfer) {\n return Array.from(transfer.types).filter(function (type) {\n return isAnAvailableType({\n type: type,\n value: transfer.getData(type)\n });\n });\n}\n\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport function getAvailableItems(dataTransfer) {\n // item.kind is 'string' | 'file'\n // For 'string' item.type is the mimeType (eg 'text/plain')\n // For 'file' item.type is the file type (eg 'image/jpg')\n\n return Array.from(dataTransfer.items).filter(function (item) {\n return item.kind === 'file' || isAnAvailableType({\n type: item.type,\n value: dataTransfer.getData(item.type)\n });\n });\n}\nvar didDragStartLocally = false;\nvar adapter = makeAdapter({\n typeKey: 'external',\n // for external drags, we are generally making a copy of something that is being dragged\n defaultDropEffect: 'copy',\n mount: function mount(api) {\n // Binding to the `window` so that the element adapter\n // has a chance to get in first on the`document`.\n // We are giving preference to the element adapter.\n return bind(window, {\n type: 'dragenter',\n listener: function listener(event) {\n // drag operation was started within the document, it won't be an \"external\" drag\n if (didDragStartLocally) {\n return;\n }\n\n // Note: not checking if event was cancelled (`event.defaultPrevented`) as\n // cancelling a \"dragenter\" accepts the drag operation (not prevent it)\n\n // Something has gone wrong with our drag event\n if (!event.dataTransfer) {\n // Including this code on \"test\" and \"development\" environments:\n // - Browser tests commonly run against \"development\" builds\n // - Unit tests commonly run in \"test\"\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\"\\n It appears as though you have are not testing DragEvents correctly.\\n\\n - If you are unit testing, ensure you have polyfilled DragEvent.\\n - If you are browser testing, ensure you are dispatching drag events correctly.\\n\\n Please see our testing guides for more information:\\n https://atlassian.design/components/pragmatic-drag-and-drop/core-package/testing\\n \".replace(/ {2}/g, ''));\n }\n return;\n }\n if (!api.canStart(event)) {\n return;\n }\n if (!isEnteringWindow({\n dragEnter: event\n })) {\n return;\n }\n\n // Note: not checking types for `elementAdapterNativeDataKey` as we expect to see that\n // key when pdnd started the drag in another document\n var types = getAvailableTypes(event.dataTransfer);\n if (!types.length) {\n return;\n }\n var locked = {\n types: types,\n items: [],\n getStringData: function getStringData() {\n return null;\n }\n };\n api.start({\n event: event,\n dragType: {\n type: 'external',\n startedFrom: 'external',\n payload: locked,\n getDropPayload: function getDropPayload(event) {\n // this would be a platform error\n // trying to handle it gracefully rather than throwing (for now)\n if (!event.dataTransfer) {\n return locked;\n }\n var items = getAvailableItems(event.dataTransfer);\n // need to use `.bind` as `getData` is required\n // to be run with `event.dataTransfer` as the \"this\" context\n var nativeGetData = event.dataTransfer.getData.bind(event.dataTransfer);\n return {\n types: types,\n items: items,\n // return `null` if there is no result, otherwise string\n getStringData: function getStringData(mediaType) {\n // not dragging the requested type\n // return `null` (no result)\n if (!types.includes(mediaType)) {\n return null;\n }\n\n // nativeGetData will return `\"\"` when there is no value,\n // but at this point we know we will only get explicitly set\n // values back as we have checked the `types`.\n // `\"\"` can be an explicitly set value.\n var value = nativeGetData(mediaType);\n\n // not exposing data for unavailable types\n if (!isAnAvailableType({\n type: mediaType,\n value: value\n })) {\n return null;\n }\n return value;\n }\n };\n }\n }\n });\n }\n });\n }\n});\n\n/**\n * Some events don't make sense for the external adapter\n *\n * `onGenerateDragPreview`\n * The browser creates the drag preview for external drags, so we don't\n * need an event to generate the preview for _monitors_ or the _dropTarget_\n *\n * `onDragStart`\n * An external drag can never start from in the `window`, so _dropTarget_'s\n * don't need `onDragStart`\n */\n\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport function dropTargetForExternal(args) {\n // not removing unused events, just leaning on the type system\n return adapter.dropTarget(args);\n}\n\n// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports\nexport function monitorForExternal(args) {\n // not removing unused events, just leaning on the type system\n return adapter.monitor(args);\n}\n(function startup() {\n // server side rendering check\n if (typeof window === 'undefined') {\n return;\n }\n\n // A shared single usage registration as we want to capture\n // all external drag operations, even if there are no drop targets\n // on the page yet\n adapter.registerUsage();\n // independent of pdnd, we need to keep track of\n // all drag operations so that we can know if a drag operation\n // has started locally\n\n var idle = {\n type: 'idle'\n };\n var state = idle;\n function clear() {\n if (state.type !== 'dragging') {\n return;\n }\n didDragStartLocally = false;\n state.cleanup();\n state = idle;\n }\n function bindEndEvents() {\n return bindAll(window, [{\n type: 'dragend',\n listener: clear\n }].concat(_toConsumableArray(getBindingsForBrokenDrags({\n onDragEnd: clear\n }))),\n // we want to make sure we get all the events,\n // and this helps avoid not seeing events when folks stop\n // them later on the event path\n {\n capture: true\n });\n }\n\n // we always keep this event listener active\n bind(window, {\n type: 'dragstart',\n listener: function listener() {\n // something bad has happened if this is true!\n if (state.type !== 'idle') {\n return;\n }\n // set our global flag\n didDragStartLocally = true;\n state = {\n type: 'dragging',\n cleanup: bindEndEvents()\n };\n },\n // binding in the capture phase so these listeners are called\n // before our listeners in the adapters `mount` function\n options: {\n capture: true\n }\n });\n})();\n\n/** Common event payload for all events */\n\n/** A map containing payloads for all events */\n\n/** Common event payload for all drop target events */\n\n/** A map containing payloads for all events on drop targets */\n\n/** Arguments given to all feedback functions (eg `canDrop()`) on a `dropTargetForExternal` */\n\n/** Arguments given to all monitor feedback functions (eg `canMonitor()`) for a `monitorForExternal` */","import {attribute, bool, number, oneOf, string, type SchemaToProps} from '../../runtime';\n\nconst FILE_UPLOAD_LAYOUTS = ['stack', 'inline'] as const;\nconst FILE_UPLOAD_PREVIEWS = ['auto', 'image', 'none'] as const;\nconst FILE_UPLOAD_SIZES = ['sm', 'md', 'lg'] as const;\nconst FILE_UPLOAD_TRANSPORTS = ['native', 'direct'] as const;\n\ntype FileUploadLayout = (typeof FILE_UPLOAD_LAYOUTS)[number];\ntype FileUploadPreview = (typeof FILE_UPLOAD_PREVIEWS)[number];\ntype FileUploadSize = (typeof FILE_UPLOAD_SIZES)[number];\ntype FileUploadTransport = (typeof FILE_UPLOAD_TRANSPORTS)[number];\n\nconst fileUploadSchema = {\n name: string,\n accept: string,\n capture: string,\n multiple: bool,\n required: bool,\n disabled: bool,\n invalid: bool,\n preview: oneOf(FILE_UPLOAD_PREVIEWS, 'auto' as FileUploadPreview),\n layout: attribute(oneOf(FILE_UPLOAD_LAYOUTS, 'stack' as FileUploadLayout), 'ui-layout-mode'),\n size: oneOf(FILE_UPLOAD_SIZES, 'md' as FileUploadSize),\n heading: string.default('Drop files here or browse'),\n text: string,\n browseLabel: string,\n empty: attribute(string, 'empty-label'),\n maxItems: number.min(0).default(0),\n clearable: bool.default(true),\n transport: oneOf(FILE_UPLOAD_TRANSPORTS, 'native' as FileUploadTransport),\n rootClass: string,\n dropzoneClass: string,\n listClass: string,\n itemClass: string,\n class: string,\n};\n\nconst fileUploadDropzoneSchema = {\n heading: string.default('Drop files here or browse'),\n text: string,\n icon: string.default('cloud__upload'),\n layout: attribute(oneOf(FILE_UPLOAD_LAYOUTS, 'stack' as FileUploadLayout), 'ui-layout-mode'),\n size: oneOf(FILE_UPLOAD_SIZES, 'md' as FileUploadSize),\n disabled: bool,\n invalid: bool,\n class: string,\n};\n\nconst fileUploadListSchema = {\n class: string,\n};\n\nconst fileUploadItemSchema = {\n filename: string,\n filesize: string,\n mime: string,\n preview: string,\n icon: string.default('document__blank'),\n invalid: bool,\n error: string,\n class: string,\n};\n\nconst fileUploadRemoveSchema = {\n label: string.default('Remove file'),\n class: string,\n};\n\ntype FileUploadProps = SchemaToProps<typeof fileUploadSchema>;\n\nexport {\n FILE_UPLOAD_LAYOUTS,\n FILE_UPLOAD_PREVIEWS,\n FILE_UPLOAD_SIZES,\n FILE_UPLOAD_TRANSPORTS,\n fileUploadDropzoneSchema,\n fileUploadItemSchema,\n fileUploadListSchema,\n fileUploadRemoveSchema,\n fileUploadSchema,\n};\nexport type {\n FileUploadLayout,\n FileUploadPreview,\n FileUploadProps,\n FileUploadSize,\n FileUploadTransport,\n};\n","import {\n createMachine,\n type Machine,\n type MachineEventObject,\n type MachineScope,\n} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {FileUploadProps} from './contract';\n\ntype FileSelectionSource = 'picker' | 'drop' | 'remove' | 'props' | 'clear';\ntype FileTransferStatus = 'selected' | 'uploading' | 'complete' | 'failed' | 'canceled';\n\ntype FileUploadMetadata = {\n id: string;\n name: string;\n bytes: number;\n size: string;\n type: string;\n};\n\ntype FileUploadRecord = FileUploadMetadata & {\n status: FileTransferStatus;\n progress: number;\n};\n\ntype FileUploadContext = {\n selection: {\n records: FileUploadRecord[];\n limitReached: boolean;\n rejectedCount: number;\n limitRejectedCount: number;\n source: FileSelectionSource;\n };\n existing: string[];\n transfer: {\n status: 'native' | 'idle' | 'uploading' | 'complete' | 'failed' | 'canceled';\n error: string;\n };\n};\n\ntype FileUploadMachineEffects = {\n commitSelection(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n reconcileSelection(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n resetSelection(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n syncProps(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n syncDragging(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n clearExisting(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n commitExistingReplacement(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n syncTransfer(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n emitComplete(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n emitError(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n emitCancel(scope: MachineScope<FileUploadContext, FileUploadProps>): void;\n};\n\ntype CreateFileUploadMachineOptions = {\n props: FileUploadProps;\n context: FileUploadContext;\n effects: FileUploadMachineEffects;\n};\n\ntype FileRecordsEvent = MachineEventObject & {\n records: FileUploadMetadata[];\n append?: boolean;\n source?: FileSelectionSource;\n};\n\ntype ExistingFileEvent = MachineEventObject & {id?: unknown};\n\nconst uploadingHook = defineHook({\n name: 'uploading',\n state: 'transfer.direct.uploading',\n project: (snapshot) => ({\n files: snapshot.context.selection.records.filter(({status}) => status === 'uploading'),\n }),\n onDone: 'UPLOADING_DONE',\n onError: 'UPLOADING_ERROR',\n required: true,\n sends: {\n progress: (id: string, loaded: number, total: number) => ({type: 'UPLOAD_PROGRESS', id, loaded, total}),\n cancel: () => ({type: 'CANCEL_UPLOAD'}),\n fail: (error: unknown) => ({type: 'UPLOADING_ERROR', error}),\n },\n} satisfies TransitionHookDefinition<\n FileUploadContext,\n FileUploadProps,\n {files: FileUploadMetadata[]},\n 'uploading'\n>);\n\nconst fileUploadHooks = [uploadingHook] as const;\n\nconst recordsEvent = (event: MachineEventObject): FileRecordsEvent => event as FileRecordsEvent;\nconst existingFileId = (event: MachineEventObject): string => {\n const id = (event as ExistingFileEvent).id;\n return typeof id === 'string' ? id : '';\n};\nconst eventSource = (event: MachineEventObject): FileSelectionSource => {\n const source = event.source;\n return source === 'picker' || source === 'drop' || source === 'remove' || source === 'props' ? source : 'clear';\n};\n\nconst acceptedByAccept = (file: FileUploadMetadata, accept: string): boolean => {\n const tokens = accept.split(',').map((token) => token.trim().toLowerCase()).filter(Boolean);\n if (tokens.length === 0) return true;\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return tokens.some((token) => {\n if (token === '*/*') return true;\n if (token.startsWith('.')) return name.endsWith(token);\n if (token.endsWith('/*')) return type.startsWith(token.slice(0, -1));\n return token.includes('/') && type === token;\n });\n};\n\nconst selectionPlan = (\n context: Readonly<FileUploadContext>,\n props: Readonly<FileUploadProps>,\n event: MachineEventObject,\n): FileUploadContext['selection'] => {\n const candidate = recordsEvent(event).records ?? [];\n const accepted = candidate.filter((file) => acceptedByAccept(file, props.accept));\n const base = recordsEvent(event).append && props.multiple ? [...context.selection.records] : [];\n const combined = props.multiple ? [...base, ...accepted] : accepted.slice(0, 1);\n const selected = props.maxItems > 0 ? combined.slice(0, props.maxItems) : combined;\n const currentById = new Map(context.selection.records.map((record) => [record.id, record]));\n const startsUpload = props.transport === 'direct'\n && (eventSource(event) === 'picker' || eventSource(event) === 'drop');\n const records = selected.map((file) => currentById.get(file.id) ?? {\n ...file,\n status: startsUpload ? 'uploading' as const : 'selected' as const,\n progress: 0,\n });\n return {\n records,\n limitReached: props.maxItems > 0 && records.length >= props.maxItems,\n rejectedCount: candidate.length - accepted.length + combined.length - records.length,\n limitRejectedCount: combined.length - records.length,\n source: eventSource(event),\n };\n};\n\nconst plannedRecords = ({context, props, event}: MachineScope<FileUploadContext, FileUploadProps>): FileUploadRecord[] => (\n selectionPlan(context, props, event).records\n);\nconst planIsEmpty = (scope: MachineScope<FileUploadContext, FileUploadProps>): boolean => plannedRecords(scope).length === 0;\nconst planIsCapped = ({context, props, event}: MachineScope<FileUploadContext, FileUploadProps>): boolean => (\n selectionPlan(context, props, event).limitReached\n);\nconst canMutate = ({context, props}: MachineScope<FileUploadContext, FileUploadProps>): boolean => (\n !props.disabled && context.transfer.status !== 'uploading'\n);\nconst isDirect = ({props}: MachineScope<FileUploadContext, FileUploadProps>): boolean => props.transport === 'direct';\nconst isNative = ({props}: MachineScope<FileUploadContext, FileUploadProps>): boolean => props.transport === 'native';\nconst shouldUpload = (scope: MachineScope<FileUploadContext, FileUploadProps>): boolean => (\n isDirect(scope)\n && (eventSource(scope.event) === 'picker' || eventSource(scope.event) === 'drop')\n && plannedRecords(scope).some(({status}) => status === 'uploading')\n);\n\nconst planSelection = ({context, props, event}: MachineScope<FileUploadContext, FileUploadProps>) => ({\n context: {selection: selectionPlan(context, props, event)},\n});\nconst clearSelection = ({context}: MachineScope<FileUploadContext, FileUploadProps>) => ({\n context: {selection: {...context.selection, records: [], limitReached: false, rejectedCount: 0, limitRejectedCount: 0, source: 'clear' as const}},\n});\nconst beginUpload = ({context}: MachineScope<FileUploadContext, FileUploadProps>) => {\n return {context: {transfer: {\n ...context.transfer,\n status: 'uploading' as const,\n error: '',\n }}};\n};\nconst setTransferStatus = (\n context: Readonly<FileUploadContext>,\n status: 'native' | 'idle' | 'complete' | 'failed' | 'canceled',\n error = '',\n): FileUploadContext['transfer'] => ({...context.transfer, status, error});\nconst updateUploadingRecords = (\n context: Readonly<FileUploadContext>,\n status: Extract<FileTransferStatus, 'complete' | 'failed' | 'canceled'>,\n): FileUploadRecord[] => context.selection.records.map((record) => record.status === 'uploading' ? {\n ...record,\n status,\n progress: status === 'complete' ? 1 : record.progress,\n} : record);\nconst finishUpload = ({context}: MachineScope<FileUploadContext, FileUploadProps>) => ({context: {\n selection: {...context.selection, records: updateUploadingRecords(context, 'complete')},\n existing: [],\n transfer: setTransferStatus(context, 'complete'),\n}});\nconst failUpload = ({context, event}: MachineScope<FileUploadContext, FileUploadProps>) => ({context: {\n selection: {...context.selection, records: updateUploadingRecords(context, 'failed')},\n transfer: setTransferStatus(context, 'failed', event.error instanceof Error ? event.error.message : String(event.error ?? 'Upload failed.')),\n}});\nconst cancelUpload = ({context}: MachineScope<FileUploadContext, FileUploadProps>) => ({context: {\n selection: {...context.selection, records: updateUploadingRecords(context, 'canceled')},\n transfer: setTransferStatus(context, 'canceled'),\n}});\nconst updateProgress = ({context, event}: MachineScope<FileUploadContext, FileUploadProps>) => {\n const id = typeof event.id === 'string' ? event.id : '';\n const loaded = Number(event.loaded);\n const total = Number(event.total);\n const progress = Number.isFinite(loaded) && Number.isFinite(total) && total > 0 ? Math.min(1, Math.max(0, loaded / total)) : 0;\n const record = context.selection.records.find((candidate) => candidate.id === id);\n if (record?.status !== 'uploading') return;\n return {context: {selection: {\n ...context.selection,\n records: context.selection.records.map((candidate) => candidate.id === id ? {...candidate, progress} : candidate),\n }}};\n};\n\nconst canMutateToEmpty = (scope: MachineScope<FileUploadContext, FileUploadProps>): boolean => canMutate(scope) && planIsEmpty(scope);\nconst canMutateToCapped = (scope: MachineScope<FileUploadContext, FileUploadProps>): boolean => canMutate(scope) && planIsCapped(scope);\n\nconst inventoryTransitions = (effect: 'commitSelection' | 'reconcileSelection') => [\n {target: '#inventory-empty', guard: canMutateToEmpty, reduce: 'planSelection', effects: effect},\n {target: '#inventory-capped', guard: canMutateToCapped, reduce: 'planSelection', effects: effect},\n {target: '#inventory-populated', guard: canMutate, reduce: 'planSelection', effects: effect},\n];\n\nconst createFileUploadMachine = ({props, context, effects}: CreateFileUploadMachineOptions): Machine<FileUploadContext, FileUploadProps> => createMachine<FileUploadContext, FileUploadProps>({\n type: 'parallel',\n on: {PROPS_CHANGED: {reduce: 'replaceProps', effects: 'syncProps'}},\n states: {\n interaction: {\n initial: 'idle',\n states: {\n idle: {on: {DRAG_ENTER: {target: 'dragging', guard: canMutate, effects: 'syncDragging'}}},\n dragging: {tags: ['dragging'], on: {\n DRAG_LEAVE: {target: 'idle', effects: 'syncDragging'},\n DROP: {target: 'idle', effects: 'syncDragging'},\n RECONCILE: {target: 'idle', guard: ({props: currentProps}) => currentProps.disabled, effects: 'syncDragging'},\n }},\n },\n },\n inventory: {\n initial: 'empty',\n on: {\n FILES_CHANGED: inventoryTransitions('commitSelection'),\n RECONCILE: inventoryTransitions('reconcileSelection'),\n FILES_RESET: {target: '#inventory-empty', guard: canMutate, reduce: 'clearSelection', effects: 'resetSelection'},\n REMOVE_EXISTING: {guard: canMutate, reduce: 'removeExisting', effects: 'clearExisting'},\n CLEAR_EXISTING: {guard: canMutate, reduce: 'clearExisting', effects: 'clearExisting'},\n },\n states: {\n empty: {id: 'inventory-empty', tags: ['empty']},\n populated: {id: 'inventory-populated', tags: ['has-files']},\n capped: {id: 'inventory-capped', tags: ['has-files', 'limit-reached']},\n },\n },\n transfer: {\n initial: 'inactive',\n states: {\n inactive: {on: {\n RECONCILE: [{target: '#transfer-direct-idle', guard: isDirect, reduce: 'setDirectIdle', effects: 'syncTransfer'}, {target: '#transfer-native', reduce: 'setNative', effects: 'syncTransfer'}],\n }},\n native: {id: 'transfer-native', on: {\n RECONCILE: {target: '#transfer-direct-idle', guard: isDirect, reduce: 'setDirectIdle', effects: 'syncTransfer'},\n }},\n direct: {\n initial: 'idle',\n on: {RECONCILE: {target: '#transfer-native', guard: isNative, reduce: 'setNative', effects: 'syncTransfer'}},\n states: {\n idle: {id: 'transfer-direct-idle', on: {FILES_CHANGED: {target: 'uploading', guard: shouldUpload, reduce: 'beginUpload', effects: 'syncTransfer'}}},\n uploading: {id: 'transfer-uploading', tags: ['uploading'], on: {\n UPLOAD_PROGRESS: {reduce: 'updateProgress', effects: 'syncTransfer'},\n UPLOADING_DONE: {target: 'complete', reduce: 'finishUpload', effects: ['commitExistingReplacement', 'syncTransfer', 'emitComplete']},\n UPLOADING_ERROR: {target: 'failed', reduce: 'failUpload', effects: ['syncTransfer', 'emitError']},\n CANCEL_UPLOAD: {target: 'canceled', reduce: 'cancelUpload', effects: ['syncTransfer', 'emitCancel']},\n RECONCILE: {target: 'canceled', guard: ({props: currentProps}) => currentProps.disabled || currentProps.transport !== 'direct', reduce: 'cancelUpload', effects: ['syncTransfer', 'emitCancel']},\n }},\n complete: {on: {FILES_CHANGED: [\n {target: 'uploading', guard: shouldUpload, reduce: 'beginUpload', effects: 'syncTransfer'},\n {target: '#transfer-direct-idle', guard: planIsEmpty, reduce: 'setDirectIdle', effects: 'syncTransfer'},\n ]}},\n failed: {tags: ['upload-failed'], on: {\n RETRY_UPLOAD: {target: 'uploading', reduce: 'retryUpload', effects: 'syncTransfer'},\n FILES_CHANGED: [\n {target: 'uploading', guard: shouldUpload, reduce: 'beginUpload', effects: 'syncTransfer'},\n {target: '#transfer-direct-idle', guard: planIsEmpty, reduce: 'setDirectIdle', effects: 'syncTransfer'},\n ],\n }},\n canceled: {on: {\n RETRY_UPLOAD: {target: 'uploading', reduce: 'retryUpload', effects: 'syncTransfer'},\n FILES_CHANGED: [\n {target: 'uploading', guard: shouldUpload, reduce: 'beginUpload', effects: 'syncTransfer'},\n {target: '#transfer-direct-idle', guard: planIsEmpty, reduce: 'setDirectIdle', effects: 'syncTransfer'},\n ],\n }},\n },\n },\n },\n },\n },\n}, {\n context,\n props,\n reducers: {\n replaceProps: ({event, props: currentProps}) => ({props: event.props as FileUploadProps ?? currentProps}),\n planSelection,\n clearSelection,\n removeExisting: ({context: current, event}) => ({\n context: {existing: current.existing.filter((id) => id !== existingFileId(event))},\n }),\n clearExisting: () => ({context: {existing: []}}),\n beginUpload,\n retryUpload: ({context: current}) => ({context: {\n selection: {\n ...current.selection,\n records: current.selection.records.map((record) => (\n record.status === 'failed' || record.status === 'canceled'\n ? {...record, status: 'uploading' as const, progress: 0}\n : record\n )),\n },\n transfer: {...current.transfer, status: 'uploading', error: ''},\n }}),\n finishUpload,\n failUpload,\n cancelUpload,\n updateProgress,\n setNative: ({context: current}) => ({context: {transfer: setTransferStatus(current, 'native')}}),\n setDirectIdle: ({context: current}) => ({context: {transfer: setTransferStatus(current, 'idle')}}),\n },\n effects: {\n commitSelection: effects.commitSelection,\n reconcileSelection: effects.reconcileSelection,\n resetSelection: effects.resetSelection,\n syncProps: effects.syncProps,\n syncDragging: effects.syncDragging,\n clearExisting: effects.clearExisting,\n commitExistingReplacement: effects.commitExistingReplacement,\n syncTransfer: effects.syncTransfer,\n emitComplete: effects.emitComplete,\n emitError: effects.emitError,\n emitCancel: effects.emitCancel,\n },\n});\n\nexport {createFileUploadMachine, fileUploadHooks};\nexport type {\n CreateFileUploadMachineOptions,\n FileSelectionSource,\n FileTransferStatus,\n FileUploadContext,\n FileUploadMachineEffects,\n FileUploadMetadata,\n FileUploadRecord,\n};\n","import {defineStyles} from '../../runtime';\n\nconst fileUploadStyles = defineStyles({definition: {\n component: 'ui.file-upload',\n parts: {\n root: {\n base: [\n 'grid w-full min-w-0 gap-3',\n ],\n },\n control: {\n base: 'relative grid min-w-0 gap-3',\n },\n input: {\n base: 'sr-only',\n },\n dropzone: {\n base: [\n 'relative grid min-w-0 overflow-hidden rounded-surface-md text-inherit outline-none',\n ],\n variants: {\n layout: {\n stack: 'justify-items-center text-center',\n inline: 'grid-cols-[auto_minmax(0,1fr)_auto] items-center text-left',\n },\n size: {\n sm: 'gap-2 p-3',\n md: 'gap-3 p-4',\n lg: 'gap-3 p-5',\n },\n },\n defaults: {\n layout: 'stack',\n size: 'md',\n },\n },\n icon: {\n base: 'size-icon-lg shrink-0 text-surface-ink-muted',\n },\n body: {\n base: 'grid min-w-0 gap-1',\n },\n heading: {\n base: 'text-sm font-medium text-inherit',\n },\n text: {\n base: 'text-xs font-normal text-surface-ink-muted',\n },\n browse: {\n base: [\n 'inline-flex min-w-0 items-center justify-center rounded-control-md px-2 py-1 text-xs font-medium',\n ],\n },\n list: {\n base: 'grid min-w-0 gap-2',\n },\n empty: {\n base: 'text-xs text-surface-ink-muted',\n },\n item: {\n base: [\n 'grid min-w-0 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-3 rounded-surface-sm px-3 py-2',\n ],\n },\n preview: {\n base: 'flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-surface-xs bg-interaction-hover text-surface-ink-muted',\n },\n previewImage: {\n base: 'size-full',\n },\n itemIcon: {\n base: 'size-icon',\n },\n itemBody: {\n base: 'grid min-w-0 gap-0.5',\n },\n itemName: {\n base: 'truncate text-sm font-medium text-inherit',\n },\n itemMeta: {\n base: 'truncate text-xs font-normal text-surface-ink-muted',\n },\n itemError: {\n base: 'truncate text-xs font-normal text-intent-danger-text',\n },\n remove: {\n base: [\n 'relative z-20 inline-flex size-control-sm shrink-0 items-center justify-center rounded-control-md border-0 bg-transparent',\n 'text-surface-ink-muted outline-none',\n ],\n },\n removeIcon: {\n base: 'size-icon-xs leading-none',\n },\n clear: {\n base: 'sr-only',\n },\n },\n}});\n\nexport {fileUploadStyles};\n\nexport const styles = [fileUploadStyles] as const;\n","import {containsFiles, getFiles} from '@atlaskit/pragmatic-drag-and-drop/external/file';\nimport {dropTargetForExternal, monitorForExternal, type ExternalDropTargetEventPayloadMap} from '@atlaskit/pragmatic-drag-and-drop/external/adapter';\nimport type Alpine from 'alpinejs';\n\nimport {\n createAlpineMachine,\n defineAlpineData,\n type AlpineMachine,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} 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 {resolveStyle} from '@client/runtime/styles';\nimport {createTemplateInstance, findItemTemplate, type TemplateInstance} from '@client/runtime/item-template';\nimport {addListener, dispatch, setPresence} from '@client/utils';\nimport {fileUploadSchema, type FileUploadProps} from './contract';\nimport {\n createFileUploadMachine,\n fileUploadHooks,\n type FileSelectionSource,\n type FileTransferStatus,\n type FileUploadContext,\n type FileUploadMetadata,\n type FileUploadRecord,\n} from './machine';\nimport {fileUploadStyles} from './styles';\n\ntype FileUploadTransitionName = (typeof fileUploadHooks)[number]['name'];\ntype FileUploadTransition<TName extends FileUploadTransitionName = FileUploadTransitionName> = TransitionForHook<\n Extract<(typeof fileUploadHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\n/**\n * Public Alpine API for `ui.file-upload`.\n *\n * @public\n */\ninterface UiFileUploadApi {\n /** Serializable metadata for the current pending or transferred files. */\n readonly files: readonly FileUploadRecord[];\n /** Whether pending or existing file content is present. */\n readonly hasFiles: boolean;\n /** Whether an external file is over the drop target. */\n readonly isDragging: boolean;\n /** Whether the direct transport hook is pending. */\n readonly isUploading: boolean;\n /** Whether the configured client-side item limit is full. */\n readonly isLimitReached: boolean;\n /** Opens the native file picker when interaction is available. */\n browse(): void;\n /** Removes a pending file by its stable record id. */\n remove(id: string): void;\n /** Retries failed or canceled direct-upload records. */\n retry(): void;\n /** Cancels the active direct-upload batch. */\n cancel(): void;\n /** Returns the original browser File for transport code without cloning it. */\n file(id: string): File | null;\n /** Returns a component-managed preview URL when the selected file is previewable. */\n preview(id: string): string | null;\n}\n\ntype FileUploadData = AlpineMachine<FileUploadContext, FileUploadProps, typeof fileUploadHooks> & UiFileUploadApi & {\n init(): void;\n destroy(): void;\n};\n\nconst formatBytes = (bytes: number): string => {\n if (bytes === 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB'];\n const unitIndex = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);\n const value = bytes / (1024 ** unitIndex);\n const display = value >= 10 || unitIndex === 0 ? Math.round(value) : Number(value.toFixed(1));\n return `${display} ${units[unitIndex]}`;\n};\n\nconst filesFromList = (list: FileList | null): File[] => list ? Array.from(list) : [];\nconst isImageFile = (file: File): boolean => file.type.startsWith('image/');\nconst canPreviewFile = (file: File, preview: FileUploadProps['preview']): boolean => preview !== 'none' && (preview === 'image' || isImageFile(file));\n\nconst toFileList = (files: File[]): FileList | null => {\n if (typeof DataTransfer === 'undefined') return null;\n const transfer = new DataTransfer();\n files.forEach((file) => transfer.items.add(file));\n return transfer.files;\n};\n\nconst setInputFiles = (input: HTMLInputElement, files: File[]): boolean => {\n const list = toFileList(files);\n if (!list) return false;\n try {\n input.files = list;\n return true;\n } catch {\n return false;\n }\n};\n\nconst UiFileUpload = (AlpineInstance: Alpine.Alpine): TrellisAlpineComponent<FileUploadData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let cleanup: CleanupManager;\n let ignoreNativeChange = false;\n let fileSequence = 0;\n const items = new Map<string, TemplateInstance<Record<string, unknown>>>();\n const rawFiles = new Map<string, File>();\n const previewUrls = new Map<string, string>();\n\n const root = (): HTMLElement => {\n if (!rootEl) throw new Error('File upload has not been initialized.');\n return rootEl;\n };\n const input = (): HTMLInputElement => {\n const control = root().querySelector<HTMLInputElement>('[data-ui-file-upload-input]');\n if (!control) throw new Error('File upload requires a native file input.');\n return control;\n };\n const dropzone = (): HTMLElement | null => root().querySelector<HTMLElement>('[data-ui-file-upload-dropzone]');\n const list = (): HTMLElement | null => root().querySelector<HTMLElement>('[data-ui-file-upload-list]');\n const currentProps = (): Readonly<FileUploadProps> => bridge.getSnapshot().props;\n const currentContext = (): Readonly<FileUploadContext> => bridge.getSnapshot().context;\n\n const metadataFor = (file: File): FileUploadMetadata => ({\n id: `file-${++fileSequence}`,\n name: file.name,\n bytes: file.size,\n size: formatBytes(file.size),\n type: file.type || 'File',\n });\n const registerFiles = (files: File[]): FileUploadMetadata[] => files.map((file) => {\n const metadata = metadataFor(file);\n rawFiles.set(metadata.id, file);\n return metadata;\n });\n const revokePreview = (id: string): void => {\n const url = previewUrls.get(id);\n if (url) URL.revokeObjectURL(url);\n previewUrls.delete(id);\n };\n const previewFor = (id: string): string | null => {\n const file = rawFiles.get(id);\n if (!file || !canPreviewFile(file, currentProps().preview)) return null;\n const existing = previewUrls.get(id);\n if (existing) return existing;\n const url = URL.createObjectURL(file);\n previewUrls.set(id, url);\n return url;\n };\n const dispatchNativeChange = (): void => {\n if (currentProps().transport === 'direct') return;\n ignoreNativeChange = true;\n input().dispatchEvent(new Event('input', {bubbles: true}));\n input().dispatchEvent(new Event('change', {bubbles: true}));\n };\n const sendFiles = (records: FileUploadMetadata[], source: FileSelectionSource, append = false): void => {\n if (currentProps().disabled || bridge.hasTag('uploading')) return;\n bridge.send({type: 'FILES_CHANGED', records, source, append});\n };\n\n const identifyExistingItems = (): string[] => {\n const used = new Set<string>();\n return [...root().querySelectorAll<HTMLElement>('[data-ui-file-upload-item][data-existing-file]')]\n .map((item, index) => {\n const authored = item.dataset.fileId || item.dataset.uploadKey || `existing-${index + 1}`;\n let id = authored;\n let suffix = 2;\n while (used.has(id)) id = `${authored}-${suffix++}`;\n used.add(id);\n item.dataset.fileId = id;\n item.querySelectorAll<HTMLElement>('[data-ui-file-upload-remove][data-existing-file]')\n .forEach((remove) => { remove.dataset.fileId = id; });\n return id;\n });\n };\n\n const renderFiles = (context: Readonly<FileUploadContext>, props: Readonly<FileUploadProps>): void => {\n const container = list();\n if (!container) return;\n const template = findItemTemplate(root(), 'data-ui-file-upload-item-template');\n if (!template) throw new Error('File upload requires an item template.');\n const records = context.selection.records;\n const selectedIds = new Set(records.map(({id}) => id));\n items.forEach((instance, id) => {\n if (!selectedIds.has(id) || instance.template !== template || instance.element.parentElement !== container) {\n instance.destroy();\n items.delete(id);\n }\n });\n [...previewUrls.keys()].filter((id) => !selectedIds.has(id)).forEach(revokePreview);\n [...rawFiles.keys()].filter((id) => !selectedIds.has(id)).forEach((id) => rawFiles.delete(id));\n const activeExistingIds = new Set(context.existing);\n container.querySelectorAll<HTMLElement>('[data-ui-file-upload-item][data-existing-file]')\n .forEach((item) => { item.hidden = !activeExistingIds.has(item.dataset.fileId ?? ''); });\n const empty = container.querySelector<HTMLElement>('[data-ui-file-upload-empty]');\n if (empty) empty.hidden = records.length > 0 || context.existing.length > 0;\n\n const styles = Object.fromEntries(Object.entries(fileUploadStyles.parts).map(([name, part]) => [\n name, resolveStyle({part, className: name === 'item' ? props.itemClass : ''}),\n ]));\n records.forEach((record) => {\n const scope = {$file: record, $styles: styles};\n let instance = items.get(record.id);\n if (!instance) {\n instance = createTemplateInstance(AlpineInstance, template, scope);\n const item = instance.element;\n item.dataset.uiFileUploadItem = '';\n item.dataset.uiFileUploadPending = '';\n item.dataset.fileId = record.id;\n items.set(record.id, instance);\n } else instance.update(scope);\n instance.element.dataset.status = record.status;\n instance.element.dataset.progress = String(record.progress);\n if (instance.element.parentElement !== container) instance.mount(container);\n });\n };\n\n const syncDom = (\n context: Readonly<FileUploadContext> = currentContext(),\n props: Readonly<FileUploadProps> = currentProps(),\n ): void => {\n const records = context.selection.records;\n const existing = context.existing.length > 0;\n const hasFiles = records.length > 0 || existing;\n const unavailable = props.disabled || context.selection.limitReached || context.transfer.status === 'uploading';\n const control = input();\n syncNativeControl({input: control, state: {disabled: props.disabled, required: props.required, invalid: props.invalid}});\n if (props.transport === 'native' && props.name) control.name = props.name;\n else control.removeAttribute('name');\n control.multiple = props.multiple;\n props.accept ? control.setAttribute('accept', props.accept) : control.removeAttribute('accept');\n props.capture ? control.setAttribute('capture', props.capture) : control.removeAttribute('capture');\n if (unavailable && !props.disabled) {\n control.setAttribute('aria-disabled', 'true');\n control.tabIndex = -1;\n } else if (!props.disabled) {\n control.removeAttribute('aria-disabled');\n control.removeAttribute('tabindex');\n }\n if (control.form) control.form.enctype = 'multipart/form-data';\n\n syncControlPresence({el: root(), state: props, value: 'true'});\n setPresence({el: root(), attr: 'data-empty', present: !hasFiles, value: 'true'});\n setPresence({el: root(), attr: 'data-has-files', present: hasFiles, value: 'true'});\n setPresence({el: root(), attr: 'data-multiple', present: props.multiple, value: 'true'});\n setPresence({el: root(), attr: 'data-max-items-reached', present: context.selection.limitReached, value: 'true'});\n setPresence({el: root(), attr: 'data-has-existing-file', present: existing, value: 'true'});\n root().dataset.transport = props.transport;\n root().dataset.transferState = context.transfer.status;\n const zone = dropzone();\n if (zone) {\n syncControlPresence({el: zone, state: {disabled: unavailable, invalid: props.invalid}, value: 'true'});\n setPresence({el: zone, attr: 'data-multiple', present: props.multiple, value: 'true'});\n setPresence({el: zone, attr: 'data-has-files', present: hasFiles, value: 'true'});\n setPresence({el: zone, attr: 'data-max-items-reached', present: context.selection.limitReached, value: 'true'});\n }\n renderFiles(context, props);\n };\n\n const initialContext = (props: FileUploadProps): FileUploadContext => ({\n selection: {records: [], limitReached: false, rejectedCount: 0, limitRejectedCount: 0, source: 'clear'},\n existing: identifyExistingItems(),\n transfer: {status: props.transport === 'native' ? 'native' : 'idle', error: ''},\n });\n const syncSelection = (scope: {context: Readonly<FileUploadContext>; props: Readonly<FileUploadProps>}): boolean => {\n const selectedFiles = scope.context.selection.records.flatMap(({id}) => rawFiles.get(id) ?? []);\n if (!setInputFiles(input(), selectedFiles)) {\n input().value = '';\n bridge.send('FILES_RESET');\n return false;\n }\n syncDom(scope.context, scope.props);\n return true;\n };\n\n const bridge = createAlpineMachine({\n schema: fileUploadSchema,\n hooks: fileUploadHooks,\n createMachine: ({props}) => createFileUploadMachine({\n props,\n context: initialContext(props),\n effects: {\n commitSelection: (scope) => {\n if (!syncSelection(scope)) return;\n if (scope.context.selection.limitRejectedCount > 0) {\n dispatch({el: root(), name: 'ui:file-upload-limit', detail: {rejectedCount: scope.context.selection.limitRejectedCount}});\n }\n if (scope.context.selection.source !== 'picker') dispatchNativeChange();\n dispatch({\n el: root(),\n name: 'ui:file-upload-change',\n detail: {files: scope.context.selection.records, source: scope.context.selection.source},\n });\n },\n reconcileSelection: (scope) => { syncSelection(scope); },\n resetSelection: (scope) => { input().value = ''; syncDom(scope.context, scope.props); },\n syncProps: (scope) => {\n syncDom(scope.context, scope.props);\n bridge.send({type: 'RECONCILE', records: scope.context.selection.records, source: 'props'});\n },\n syncDragging: (scope) => {\n const dragging = scope.snapshot.tags.includes('dragging');\n setPresence({el: root(), attr: 'data-dragging', present: dragging, value: 'true'});\n const zone = dropzone();\n if (zone) setPresence({el: zone, attr: 'data-dragging', present: dragging, value: 'true'});\n },\n clearExisting: (scope) => {\n const activeIds = new Set(scope.context.existing);\n const removedIds = [...root().querySelectorAll<HTMLElement>(\n '[data-ui-file-upload-item][data-existing-file]:not([hidden])',\n )].flatMap((item) => {\n const id = item.dataset.fileId;\n if (!id || activeIds.has(id)) return [];\n item.querySelectorAll<HTMLInputElement>('[data-ui-file-upload-clear]')\n .forEach((clear) => {\n clear.checked = true;\n clear.dispatchEvent(new Event('change', {bubbles: true}));\n });\n return [id];\n });\n syncDom(scope.context, scope.props);\n dispatch({\n el: root(),\n name: 'ui:file-upload-change',\n detail: {\n files: scope.context.selection.records,\n source: scope.context.selection.source,\n removedExistingIds: removedIds,\n },\n });\n },\n commitExistingReplacement: (scope) => {\n const removedIds = [...root().querySelectorAll<HTMLElement>(\n '[data-ui-file-upload-item][data-existing-file]:not([hidden])',\n )].flatMap((item) => item.dataset.fileId ?? []);\n syncDom(scope.context, scope.props);\n if (removedIds.length === 0) return;\n dispatch({\n el: root(),\n name: 'ui:file-upload-change',\n detail: {\n files: scope.context.selection.records,\n source: scope.context.selection.source,\n removedExistingIds: removedIds,\n },\n });\n },\n syncTransfer: (scope) => syncDom(scope.context, scope.props),\n emitComplete: (scope) => dispatch({el: root(), name: 'ui:file-upload-complete', detail: {files: scope.context.selection.records}}),\n emitError: (scope) => dispatch({el: root(), name: 'ui:file-upload-error', detail: {files: scope.context.selection.records, error: scope.context.transfer.error}}),\n emitCancel: (scope) => dispatch({el: root(), name: 'ui:file-upload-cancel', detail: {files: scope.context.selection.records}}),\n },\n }),\n });\n\n const component: TrellisAlpineComponent<FileUploadData> = {\n ...bridge,\n get files() { return this.snapshot.current?.context.selection.records ?? []; },\n get hasFiles() { return (this.snapshot.current?.context.selection.records.length ?? 0) > 0 || (this.snapshot.current?.context.existing.length ?? 0) > 0; },\n get isDragging() { return this.snapshot.current?.tags.includes('dragging') ?? false; },\n get isUploading() { return this.snapshot.current?.tags.includes('uploading') ?? false; },\n get isLimitReached() { return this.snapshot.current?.context.selection.limitReached ?? false; },\n init() {\n cleanup = cleanupManagerFor(this);\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n const control = input();\n addListener({target: control, event: 'input', handler: (event) => {\n if (currentProps().transport === 'direct') event.stopPropagation();\n }, cleanup});\n addListener({target: control, event: 'change', handler: (event) => {\n if (currentProps().transport === 'direct') event.stopPropagation();\n if (ignoreNativeChange) { ignoreNativeChange = false; return; }\n sendFiles(registerFiles(filesFromList(control.files)), 'picker');\n }, cleanup});\n addListener({target: root(), event: 'click', handler: (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n const existing = target.closest<HTMLElement>('[data-ui-file-upload-remove][data-existing-file][data-file-id]');\n if (existing?.dataset.fileId) {\n event.preventDefault();\n bridge.send({type: 'REMOVE_EXISTING', id: existing.dataset.fileId});\n return;\n }\n const remove = target.closest<HTMLElement>('[data-ui-file-upload-remove][data-file-id]');\n if (remove?.dataset.fileId) { event.preventDefault(); component.remove(remove.dataset.fileId); }\n }, cleanup});\n addListener({target: root(), event: 'trellis:file-upload-clear-existing', handler: () => {\n bridge.send('CLEAR_EXISTING');\n }, cleanup});\n const zone = dropzone();\n if (zone) {\n cleanup.add(dropTargetForExternal({\n element: zone,\n canDrop: ({source}) => !currentProps().disabled && !bridge.hasTag('uploading') && containsFiles({source}),\n getDropEffect: () => 'copy',\n onDragEnter: () => bridge.send('DRAG_ENTER'),\n onDragLeave: () => bridge.send('DRAG_LEAVE'),\n onDrop: ({source}: ExternalDropTargetEventPayloadMap['onDrop']) => {\n bridge.send('DROP');\n if (!containsFiles({source})) return;\n sendFiles(registerFiles(getFiles({source})), 'drop', currentProps().multiple);\n },\n }));\n cleanup.add(monitorForExternal({canMonitor: ({source}) => containsFiles({source}), onDrop: () => bridge.send('DRAG_LEAVE')}));\n }\n syncDom();\n bridge.send({type: 'RECONCILE', records: [], source: 'props'});\n },\n destroy() {\n items.forEach((instance) => instance.destroy());\n items.clear();\n previewUrls.forEach((url) => URL.revokeObjectURL(url));\n previewUrls.clear();\n rawFiles.clear();\n bridge.disconnect();\n rootEl = null;\n },\n browse() { if (!currentProps().disabled && !bridge.hasTag('uploading')) input().click(); },\n remove(id) {\n if (currentProps().disabled || bridge.hasTag('uploading') || !rawFiles.has(id)) return;\n const records = currentContext().selection.records.filter((record) => record.id !== id);\n sendFiles(records, 'remove');\n },\n retry() { bridge.send('RETRY_UPLOAD'); },\n cancel() { bridge.send('CANCEL_UPLOAD'); },\n file(id) { return rawFiles.get(id) ?? null; },\n preview(id) { return previewFor(id); },\n };\n return component;\n};\n\nconst registerFileUpload = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiFileUpload', () => UiFileUpload(AlpineInstance))(AlpineInstance);\n};\n\nexport {registerFileUpload, UiFileUpload};\nexport type {\n FileTransferStatus,\n FileUploadData,\n FileUploadMetadata,\n FileUploadRecord,\n FileUploadTransition,\n UiFileUploadApi,\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 {registerFileUpload as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerFileUpload = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n\n registerComponent(AlpineInstance);\n};\n\nexport {registerFileUpload};\nexport default registerFileUpload;\nexport * from './index';\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./file-upload-
|
|
2
|
-
export {default} from "./file-upload-
|
|
1
|
+
export * from "./file-upload-DCluNmYW.js";
|
|
2
|
+
export {default} from "./file-upload-DCluNmYW.js";
|
package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset-DkPKkwlt.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e,t}from"../chunks/dom-DiTFTWeR.js";import{t as n}from"../chunks/morph-Cq3V_23_.js";import{c as r,f as i,n as a,s 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{r as p}from"../chunks/focus-scope-DYfME-Rk.js";var m={prefix:i.trim,minForms:r.min(0).step(1).default(0),maxForms:o(null),disabled:a},h=e=>f(e.event)?.props??e.props,g=({props:e,context:t,effects:n})=>c({initial:`ready`,states:{ready:{tags:[`ready`],on:{ADD:[{guard:`canIncrease`,effects:`add`},{guard:`atMax`,effects:`maxLimit`}],REMOVE:[{guard:`canRemove`,effects:`remove`},{guard:`atMin`,effects:`minLimit`}],RESTORE:[{guard:`canIncrease`,effects:`restore`},{guard:`atMax`,effects:`maxLimit`}],REFRESH:{effects:`refresh`},DOM_INVALIDATED:{effects:`refresh`},RECONCILED:{reduce:`reconcile`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`refresh`}}}}},{context:t,props:e,reducers:{reconcile:e=>({context:{activeCount:typeof e.event.activeCount==`number`?e.event.activeCount:e.context.activeCount}}),replaceProps:e=>({props:h(e)})},guards:{canIncrease:({context:e,props:t})=>!t.disabled&&(t.maxForms===null||e.activeCount<t.maxForms),atMax:({context:e,props:t})=>!t.disabled&&t.maxForms!==null&&e.activeCount>=t.maxForms,canRemove:({context:e,props:t})=>!t.disabled&&e.activeCount>t.minForms,atMin:({context:e,props:t})=>!t.disabled&&e.activeCount<=t.minForms},effects:n}),_=[],v=`[data-ui-formset-item]`,y=[`data-can-add`,`data-can-remove`,`data-active-count`],b=r=>{let i=null,a=null,o=null,c=null,u=null,f=!1,h,b=0,x=()=>{if(!i)throw Error(`Formset has not been initialized.`);return i},S=()=>{if(!a)throw Error(`Formset template is unavailable.`);return a},C=()=>{if(!o)throw Error(`Formset container is unavailable.`);return o},w=()=>{if(!c)throw Error(`Formset management inputs are unavailable.`);return c},T=()=>J.getCommittedSnapshot().props,E=()=>J.getCommittedSnapshot().context,D=e=>e.closest(`[data-ui-formset]`)===x(),O=e=>Array.from(x().querySelectorAll(e)).find(D)??null,k=()=>{if(a=O(`template[data-ui-formset-template]`),o=O(`[data-ui-formset-container]`),!a||!o)throw Error(`ui.formset requires one template and live item container.`)},A=e=>Array.from(x().querySelectorAll(`input[name]`)).find(t=>t.name===e&&D(t))??null,j=e=>{let t=Number(e.dataset.formIndex);return Number.isInteger(t)&&t>=0?t:null},M=()=>Array.from(C().querySelectorAll(v)).filter(e=>D(e)&&e.closest(v)===e),N=(e,t=T().prefix)=>{let n=j(e);if(n===null)return null;let r=`${t}-${n}-DELETE`;return Array.from(e.querySelectorAll(`input[name]`)).find(e=>e.name===r&&e.type===`checkbox`)??null},P=()=>{let e=Array.from(S().content.querySelectorAll(v)).filter(e=>!e.parentElement?.closest(v));if(e.length!==1)throw Error(`ui.formset empty slot must contain exactly one ui.formset.item.`);return e[0]},F=e=>{let t={total:`${e}-TOTAL_FORMS`,initial:`${e}-INITIAL_FORMS`,min:`${e}-MIN_NUM_FORMS`,max:`${e}-MAX_NUM_FORMS`},n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,A(t)]));if(!n.total||!n.initial||!n.min||!n.max)throw Error(`ui.formset requires a complete Django management form.`);return n},I=e=>{if(k(),!e.prefix||e.prefix.includes(`__prefix__`))throw Error(`ui.formset requires a safe, non-empty prefix.`);if(e.maxForms!==null&&(!Number.isInteger(e.maxForms)||e.maxForms<0))throw Error(`ui.formset maxForms must be null or a non-negative integer.`);let t=P();if(t.dataset.formIndex!==`__prefix__`)throw Error(`ui.formset empty item requires the __prefix__ form index.`);let n=`${e.prefix}-__prefix__-DELETE`;if(!Array.from(t.querySelectorAll(`input[name]`)).find(e=>e.name===n&&e.type===`checkbox`))throw Error(`ui.formset empty item requires a Boolean DELETE input.`);let r=F(e.prefix);if(Object.values(r).map(e=>Number(e.value)).some(e=>!Number.isInteger(e)||e<0))throw Error(`ui.formset management counts must be non-negative integers.`);let i=Number(r.total.value),a=new Set,o=0;for(let t of M()){let n=j(t);if(n===null||a.has(n)||n>=i)throw Error(`ui.formset items require unique indexes below TOTAL_FORMS.`);a.add(n);let r=N(t,e.prefix);if(!r)throw Error(`ui.formset requires a Boolean DELETE input for every row.`);r.checked||(o+=1)}return c=r,{activeCount:o}},L=e=>{let t=N(e);if(!t)throw Error(`ui.formset requires a Boolean DELETE input for every row.`);t.setAttribute(`data-ui-formset-delete`,``);let n=t.checked;e.dataset.formState=n?`deleted`:`active`,e.hidden=n},R=()=>{let e=T();c=F(e.prefix);let t=M();t.forEach(L);let n=t.filter(e=>e.dataset.formState!==`deleted`).length;J.send({type:`RECONCILED`,activeCount:n});let r=!e.disabled&&(e.maxForms===null||n<e.maxForms),i=!e.disabled&&n>e.minForms;return x().dataset.activeCount=String(n),x().dataset.canAdd=String(r),x().dataset.canRemove=String(i),x().querySelectorAll(`[data-ui-formset-empty]`).forEach(e=>{D(e)&&(e.hidden=n!==0)}),n},z=e=>{if(x().dataset.announce===`false`)return;let t=O(`[data-ui-formset-status]`);t&&(t.textContent=e)},B=(t,n,r,i)=>{e({el:x(),name:`ui:formset-${t}`,detail:{index:n,item:r,activeCount:i},composed:!0}),e({el:x(),name:`ui:formset-change`,detail:{operation:t,index:n,activeCount:i},composed:!0})},V=(e,t)=>{[e,...Array.from(e.querySelectorAll(`*`))].forEach(e=>Array.from(e.attributes).forEach(n=>{n.value.includes(`__prefix__`)&&e.setAttribute(n.name,n.value.replaceAll(`__prefix__`,String(t)))}))},H=e=>{let t=x().dataset.focus,n=null;if(t)try{n=e.matches(t)?e:e.querySelector(t)}catch{n=null}n??=p(e)[0]??null,l(n)},U=e=>{if(e instanceof HTMLElement){let t=e.matches(v)?e:e.closest(v);return t&&M().includes(t)?t:null}if(typeof e==`number`&&Number.isInteger(e))return M().find(t=>j(t)===e)??null;let t=x().ownerDocument.activeElement;return t instanceof HTMLElement?U(t):null},W=e=>{let t=M(),n=t.indexOf(e),r=t.filter(e=>e.dataset.formState!==`deleted`),i=r.find(e=>t.indexOf(e)>n),a=[...r].reverse().find(e=>t.indexOf(e)<n),o=i??a;if(o)return p(o)[0]??null;let s=O(`[data-ui-formset-add]`);return s?s.tabIndex>=0?s:p(s)[0]??null:null},G=e=>{let t=new Set((x().getAttribute(`data-ui-preserve-attr`)??``).split(/\s+/).filter(Boolean));y.forEach(n=>e?t.add(n):t.delete(n)),t.size>0?x().setAttribute(n,[...t].join(` `)):x().removeAttribute(n)},K=e=>{let t=e.detail?.source;return t instanceof Element&&(t.contains(x())||x().contains(t))},q,J=s({schema:m,hooks:_,createMachine:({props:t})=>g({props:t,context:I(t),effects:{add(){f=!1,u=null;let e=Number(w().total.value),t=P().cloneNode(!0);V(t,e);let n=N(t);if(!n)throw Error(`ui.formset empty item requires a Boolean DELETE input.`);n.checked=!1,L(t),C().append(t);try{r.initTree(t)}catch(e){throw r.destroyTree(t),t.remove(),e}w().total.value=String(e+1);let i=R();H(t),u=t,f=!0,z(`Row ${e+1} added.`),B(`add`,e,t,i)},remove(e){f=!1;let t=e.event.item;if(!(t instanceof HTMLElement)||!M().includes(t))return;let n=N(t),r=j(t);if(!n||r===null||n.checked)return;let i=W(t);n.checked=!0,L(t);let a=R();l(i),f=!0,z(`Row ${r+1} removed.`),B(`remove`,r,t,a)},restore(e){f=!1;let t=e.event.item;if(!(t instanceof HTMLElement)||!M().includes(t))return;let n=N(t),r=j(t);if(!n||r===null||!n.checked)return;n.checked=!1,L(t);let i=R();f=!0,B(`restore`,r,t,i)},refresh(){I(T()),R()},maxLimit(){e({el:x(),name:`ui:formset-limit`,detail:{limit:`max`,activeCount:E().activeCount},composed:!0})},minLimit(){e({el:x(),name:`ui:formset-limit`,detail:{limit:`min`,activeCount:E().activeCount},composed:!0})}}})});return q={...J,get activeCount(){return this.snapshot.current?.context.activeCount??0},get canAdd(){let e=this.snapshot.current;return!!(e&&!e.props.disabled&&(e.props.maxForms===null||e.context.activeCount<e.props.maxForms))},get canRemove(){let e=this.snapshot.current;return!!(e&&!e.props.disabled&&e.context.activeCount>e.props.minForms)},init(){h=d(this),i=this.$el,J.connect(this.$el,this.snapshot),R(),t({target:x().ownerDocument,event:`ui:request:start`,cleanup:h,handler:e=>{K(e)&&(b+=1,G(!0))}}),t({target:x().ownerDocument,event:`ui:request:finish`,cleanup:h,handler:e=>{K(e)&&(b=Math.max(0,b-1),b===0&&G(!1),J.send(`REFRESH`))}})},destroy(){b>0&&G(!1),b=0,J.disconnect(),c=null,o=null,a=null,i=null,u=null},add(){return u=null,J.send(`ADD`),u},remove(e){let t=U(e);return f=!1,!t||t.dataset.formState===`deleted`?!1:(J.send({type:`REMOVE`,item:t}),f)},restore(e){let t=U(e);return f=!1,!t||t.dataset.formState!==`deleted`?!1:(J.send({type:`RESTORE`,item:t}),f)},refresh(){J.send(`REFRESH`)}},q},x=e=>{u(`UiFormset`,()=>b(e))(e)},S=new WeakSet,C=e=>{S.has(e)||(S.add(e),x(e))};export{b as UiFormset,C as default,C as registerFormset};
|
|
2
|
+
//# sourceMappingURL=formset-DkPKkwlt.js.map
|