@vireo-ai/trellis-ui 0.1.59 → 0.1.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/THIRD_PARTY_NOTICES.md +2 -0
- package/package.json +49 -40
- package/packages/client/src/components/field/styles.css +2 -1
- package/packages/client/src/styles/components.css +1 -0
- package/packages/client/src/styles/static.css +0 -1
- package/packages/client/types/assets/full-runtime.generated.d.ts +1 -1
- package/packages/client/types/capabilities/anchor.d.ts +7 -0
- package/packages/client/types/capabilities/anchor.entry.generated.d.ts +3 -0
- package/packages/client/types/components/accordion/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/checkbox/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/data-grid/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/date-picker/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/direct-upload/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/dropdown/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/entry.generated.d.ts +1 -0
- package/packages/client/types/components/field/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/file-upload/index.d.ts +3 -2
- package/packages/client/types/components/file-upload/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/formset/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/image/contract.d.ts +1 -1
- package/packages/client/types/components/modal/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/panels/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/radio/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/scroll-area/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/select/index.d.ts +3 -2
- package/packages/client/types/components/select/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/sidebar/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/slider/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/switch/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/tabs/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/toast/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/tooltip/runtime-docs.d.ts +1 -0
- package/packages/client/types/components/virtualizer/runtime-docs.d.ts +1 -0
- package/packages/client/types/directives/anchor.d.ts +26 -0
- package/packages/client/types/directives/index.d.ts +1 -0
- package/packages/client/types/runtime/anchored-popover.d.ts +4 -2
- package/packages/client/types/runtime/item-template.d.ts +13 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis-103fb43eb5e1.css +14030 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +23 -23
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min-584dec82495c.css +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge-COxhbtRZ.js +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 +386 -346
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/anchor-B-CbpFFU.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/anchor-B-CbpFFU.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/anchor.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion-CKiK3BQA.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion-CKiK3BQA.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable-Ctqx_OoS.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable-Ctqx_OoS.js.map +1 -0
- 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-D2NgvMgw.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut-D2NgvMgw.js.map +1 -0
- 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 +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable-CbIOS4Lm.js.map +1 -0
- 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-lhqk7hfo.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-lhqk7hfo.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-B32HePGn.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-D_BJBnwB.js.map → capability-motion-B32HePGn.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bl6ng6Hd.js +5 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-BDbURlVO.js.map → capability-sortable-Bl6ng6Hd.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-C8xqwkr0.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-BxNepYBE.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-Ybm_WmKr.js.map → core-BxNepYBE.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-7hdXmBLE.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-7hdXmBLE.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DDrayI_M.js → entry.generated-BRaKxvab.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DDrayI_M.js.map → entry.generated-BRaKxvab.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BnqcHAaF.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-OT_bt7F2.js → entry.generated-BzLNUDzF.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BzLNUDzF.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CEfr2bmw.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CEfr2bmw.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CL4bjCqf.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CL4bjCqf.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BgGSoQFS.js → entry.generated-Cbyseoex.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cbyseoex.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cf2hKkwA.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cf2hKkwA.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CfYgsDun.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cl8rInnJ.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cl8rInnJ.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-dcqwycC7.js → entry.generated-Ct9H8Hlf.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Ct9H8Hlf.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D2es_Wi2.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DQtFqG0K.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DQtFqG0K.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-FCDgmA0s.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-FCDgmA0s.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-J0oGNBzS.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-J0oGNBzS.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{flip-crNQSZEa.js → flip-BKThFI4L.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{flip-crNQSZEa.js.map → flip-BKThFI4L.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/item-template-DSfME41Q.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/item-template-DSfME41Q.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-B90yNOaV.js → motion-RwlK04Cy.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-B90yNOaV.js.map → motion-RwlK04Cy.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/styles-CQDZhwd_.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{ui-CTQoglp3.js → ui-Bg44ZmC3.js} +4 -4
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-Bg44ZmC3.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/warn-BbGtqbh1.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/warn-BbGtqbh1.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion-DpoqsP_I.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button-Dnf0aKac.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox-BpFFtrfY.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid-CCPYnOuT.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker-BCkP5gtC.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload-DaT6-YFL.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown-Cc84envj.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field-CtQbyblj.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload-DARtpJDT.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset-CPO4XZkB.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper-C-3lKsKm.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DRH3gncZ.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DRH3gncZ.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input-BKEbDkKa.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding-RIi2q1IT.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-MUHGUsup.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels-DNAroAhk.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio-DrGFMWGq.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area-CyUCAbgG.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select-BjLF548F.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar-GpvEBW3K.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider-OztnTlqr.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch-CZ7aiASg.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table-G3G5d2Eo.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs-bq7j1uwx.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast-DkP0-rBO.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip-OITEWczP.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer-CkRX2qVO.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core-Z4zMCScs.js +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +2 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-DAz_hKiB.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-DAz_hKiB.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +160 -132
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis-ecb43dfd3b7b.js +11 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +7 -7
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min-ecb43dfd3b7b.js +11 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +7 -7
- package/packages/theme-engine/README.md +221 -0
- package/packages/theme-engine/THEME_AUTHORING.md +44 -0
- package/packages/theme-engine/dist/trellis.js +16935 -0
- package/packages/theme-engine/generated/knobs/v1/color-alpha.json +2426 -0
- package/packages/theme-engine/generated/knobs/v1/color-foundations.json +1582 -0
- package/packages/theme-engine/generated/knobs/v1/color-ink.json +6541 -0
- package/packages/theme-engine/generated/knobs/v1/color-lighting.json +3056 -0
- package/packages/theme-engine/generated/knobs/v1/color-normalization.json +1685 -0
- package/packages/theme-engine/generated/knobs/v1/color-ramps.json +14304 -0
- package/packages/theme-engine/generated/knobs/v1/composition.json +881 -0
- package/packages/theme-engine/generated/knobs/v1/depth.json +1705 -0
- package/packages/theme-engine/generated/knobs/v1/edges.json +326 -0
- package/packages/theme-engine/generated/knobs/v1/index.json +20096 -0
- package/packages/theme-engine/generated/knobs/v1/manifest.json +719 -0
- package/packages/theme-engine/generated/knobs/v1/motion.json +128 -0
- package/packages/theme-engine/generated/knobs/v1/radii.json +331 -0
- package/packages/theme-engine/generated/knobs/v1/semantic-actions.json +1814 -0
- package/packages/theme-engine/generated/knobs/v1/semantic-disabled.json +759 -0
- package/packages/theme-engine/generated/knobs/v1/semantic-disclosure.json +59 -0
- package/packages/theme-engine/generated/knobs/v1/semantic-intents.json +4841 -0
- package/packages/theme-engine/generated/knobs/v1/semantic-scrim.json +308 -0
- package/packages/theme-engine/generated/knobs/v1/semantic-selection.json +940 -0
- package/packages/theme-engine/generated/knobs/v1/semantic-structure.json +365 -0
- package/packages/theme-engine/generated/knobs/v1/sizing-anatomy.json +3112 -0
- package/packages/theme-engine/generated/knobs/v1/sizing-controls.json +599 -0
- package/packages/theme-engine/generated/knobs/v1/sizing-measures.json +1089 -0
- package/packages/theme-engine/generated/knobs/v1/spacing.json +1246 -0
- package/packages/theme-engine/generated/knobs/v1/substrates.json +315 -0
- package/packages/theme-engine/generated/knobs/v1/surfaces.json +870 -0
- package/packages/theme-engine/generated/knobs/v1/typography-anatomy.json +1754 -0
- package/packages/theme-engine/generated/knobs/v1/typography-fonts.json +711 -0
- package/packages/theme-engine/generated/knobs/v1/typography-scale.json +329 -0
- package/packages/theme-engine/generated/schemas/theme-config-v1.json +3987 -0
- package/packages/theme-engine/generated/schemas/theme-manifest-v1.json +79 -0
- package/packages/theme-engine/skills/create-trellis-theme/SKILL.md +108 -0
- package/packages/client/types/components/runtime-docs.d.ts +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/anchored-popover-BwQbt4V2.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/anchored-popover-BwQbt4V2.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-D_BJBnwB.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-BDbURlVO.js +0 -5
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-Ybm_WmKr.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-18lXAVBg.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-18lXAVBg.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-2YvnuzOD.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-2YvnuzOD.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BITa8xFV.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BITa8xFV.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BSVJpGWu.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BSVJpGWu.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BgGSoQFS.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Bp3Npe3t.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Bp3Npe3t.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Ce_fpT15.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Ce_fpT15.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DDJEGHq-.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DDJEGHq-.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-OT_bt7F2.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-WRveW7p9.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-WRveW7p9.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-dcqwycC7.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CTQoglp3.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entry.generated-Bp3Npe3t.js","names":[],"sources":["../../../../../../../../client/src/components/data-grid/contract.ts","../../../../../../../../client/src/components/data-grid/model.ts","../../../../../../../../client/src/components/data-grid/index.ts","../../../../../../../../client/src/components/data-grid/entry.generated.ts"],"sourcesContent":["import {bool, json, number, oneOf, string, type SchemaToProps} from '../../runtime';\nimport {INTERACTION_TREATMENTS, SELECTION_COLORS} from '../common';\n\nconst DATA_GRID_SELECTIONS = ['none', 'single', 'multiple'] as const;\nconst DATA_GRID_DENSITIES = ['compact', 'default', 'comfortable'] as const;\nconst DATA_GRID_BORDERS = ['none', 'row', 'grid'] as const;\nconst DATA_GRID_RESIZE_MODES = ['onChange', 'onEnd'] as const;\nconst DATA_GRID_PINS = ['', 'left', 'right'] as const;\nconst DATA_GRID_SORTS = ['none', 'ascending', 'descending', 'other'] as const;\nconst DATA_GRID_ALIGNS = ['start', 'center', 'end'] as const;\n\ntype DataGridSelectionValue =\n | {mode: 'ids'; ids: string[]}\n | {mode: 'query'; token: string; total: number; except: string[]};\n\nconst dataGridSchema = {\n fetchUrl: string,\n cursor: bool,\n query: json<unknown>(null),\n totalRows: number.min(0).default(0),\n rowHeight: number.min(Number.EPSILON).default(36),\n bufferSize: number.min(1).default(50),\n overscan: number.min(0).default(0),\n initialIndex: number.min(0).default(0),\n startParam: string.default('start'),\n countParam: string.default('count'),\n totalParam: string.default('total'),\n totalHeader: string.default('X-Trellis-Total-Items'),\n assetsHeader: string.default('X-Trellis-Assets'),\n metaSelector: string.default('template[data-ui-virtualizer-meta]'),\n selection: oneOf(DATA_GRID_SELECTIONS, 'none'),\n selectionValue: json<DataGridSelectionValue>({mode: 'ids', ids: []}),\n selectOnRowClick: bool,\n rowKey: string.default('id'),\n stickyHeader: bool.default(true),\n resizableColumns: bool.default(true),\n reorderableColumns: bool.default(true),\n sortableColumns: bool.default(true),\n minColumnWidth: number.min(0).default(60),\n defaultColumnWidth: number.min(Number.EPSILON).default(180),\n maxColumnWidth: json<number | null>(null),\n resizeMode: oneOf(DATA_GRID_RESIZE_MODES, 'onChange'),\n color: oneOf(SELECTION_COLORS, 'neutral'),\n interaction: oneOf(INTERACTION_TREATMENTS, 'edge'),\n dragPreviewPosition: string.trim.default('preserve'),\n density: oneOf(DATA_GRID_DENSITIES, 'default'),\n border: oneOf(DATA_GRID_BORDERS, 'row'),\n empty: string.default('No rows found.'),\n class: string,\n controlsClass: string,\n viewportClass: string,\n headerClass: string,\n rowClass: string,\n cellClass: string,\n footerClass: string,\n emptyClass: string,\n};\n\nconst dataGridColumnSchema = {\n key: string,\n label: string,\n width: number.min(Number.EPSILON).default(180),\n minWidth: number.min(0).default(60),\n maxWidth: json<number | null>(null),\n hidden: bool,\n pinned: oneOf(DATA_GRID_PINS, ''),\n sortable: bool,\n sort: oneOf(DATA_GRID_SORTS, 'none'),\n resizable: bool.default(true),\n reorderable: bool.default(true),\n align: oneOf(DATA_GRID_ALIGNS, 'start'),\n class: string,\n headerClass: string,\n labelClass: string,\n resizeHandleClass: string,\n};\n\nconst dataGridRowsSchema = {\n rows: json<unknown[]>([]),\n columns: json<Array<Record<string, unknown>>>([]),\n startIndex: number.min(0).default(0),\n rowKey: string.default('id'),\n rowComponent: string.default('ui.data-grid.row'),\n cellComponent: string.default('ui.data-grid.cell'),\n class: string,\n};\nconst dataGridRowSchema = {key: string, index: number.min(0).default(0), class: string};\nconst dataGridCellSchema = {column: string, index: number.min(1).default(1), align: oneOf(DATA_GRID_ALIGNS, 'start'), class: string};\nconst dataGridEmptySchema = {class: string};\n\ntype DataGridProps = SchemaToProps<typeof dataGridSchema>;\ntype DataGridColumnProps = SchemaToProps<typeof dataGridColumnSchema>;\ntype DataGridRowsProps = SchemaToProps<typeof dataGridRowsSchema>;\ntype DataGridSelection = typeof DATA_GRID_SELECTIONS[number];\ntype DataGridPin = Exclude<typeof DATA_GRID_PINS[number], ''> | null;\ntype DataGridSort = typeof DATA_GRID_SORTS[number];\ntype DataGridAlign = typeof DATA_GRID_ALIGNS[number];\n\nexport {\n DATA_GRID_ALIGNS,\n DATA_GRID_BORDERS,\n DATA_GRID_DENSITIES,\n DATA_GRID_PINS,\n DATA_GRID_RESIZE_MODES,\n DATA_GRID_SELECTIONS,\n DATA_GRID_SORTS,\n dataGridCellSchema,\n dataGridColumnSchema,\n dataGridEmptySchema,\n dataGridRowSchema,\n dataGridRowsSchema,\n dataGridSchema,\n};\nexport type {\n DataGridAlign,\n DataGridColumnProps,\n DataGridPin,\n DataGridProps,\n DataGridRowsProps,\n DataGridSelection,\n DataGridSelectionValue,\n DataGridSort,\n};\n","import type {DataGridAlign, DataGridPin, DataGridSelection, DataGridSelectionValue, DataGridSort} from './contract';\n\ntype DataGridColumn = {\n key: string;\n label: string;\n width: number;\n minWidth: number;\n maxWidth: number | null;\n hidden: boolean;\n pinned: DataGridPin;\n sortable: boolean;\n sort: DataGridSort;\n resizable: boolean;\n reorderable: boolean;\n align: DataGridAlign;\n cellClass: string;\n element: HTMLElement;\n};\n\ntype DataGridColumnDefaults = {\n width: number;\n minWidth: number;\n maxWidth: number | null;\n resizable: boolean;\n reorderable: boolean;\n};\n\ntype DataGridColumnSnapshot = Omit<DataGridColumn, 'element'>;\n\ntype DataGridPinnedOffsets = {left: Map<string, number>; right: Map<string, number>};\ntype SelectionChange = {selection: DataGridSelectionValue; added: string[]; removed: string[]};\n\nconst numberAttribute = (element: HTMLElement, name: string, fallback: number): number => {\n const raw = element.getAttribute(name);\n if (raw === null || raw.trim() === '') return fallback;\n const value = Number(raw);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst optionalNumberAttribute = (element: HTMLElement, name: string, fallback: number | null): number | null => {\n const raw = element.getAttribute(name);\n if (raw === null || raw.trim() === '') return fallback;\n const value = Number(raw);\n return Number.isFinite(value) && value > 0 ? value : null;\n};\n\nconst boolAttribute = (element: HTMLElement, name: string, fallback: boolean): boolean => {\n if (!element.hasAttribute(name)) return fallback;\n const raw = element.getAttribute(name) ?? '';\n return raw === '' || ['true', '1', 'yes', 'on'].includes(raw.toLowerCase());\n};\n\nconst normalizeDataGridColumns = (\n elements: readonly HTMLElement[],\n defaults: DataGridColumnDefaults,\n): DataGridColumn[] => {\n const seen = new Set<string>();\n return elements.flatMap((element) => {\n const key = (element.dataset.column ?? '').trim();\n if (!key) throw new Error('Data Grid columns require a non-empty key.');\n if (element.hasAttribute('data-hidden')) return [];\n if (seen.has(key)) throw new Error(`Data Grid column key \"${key}\" is duplicated.`);\n seen.add(key);\n const minWidth = Math.max(0, numberAttribute(element, 'data-min-width', defaults.minWidth));\n const maxWidth = optionalNumberAttribute(element, 'data-max-width', defaults.maxWidth);\n const unclamped = numberAttribute(element, 'data-width', defaults.width);\n const width = Math.min(maxWidth ?? Number.POSITIVE_INFINITY, Math.max(minWidth, unclamped));\n const pinned = element.dataset.pinned === 'left' || element.dataset.pinned === 'right'\n ? element.dataset.pinned\n : null;\n const sort = ['ascending', 'descending', 'other'].includes(element.dataset.sort ?? '')\n ? element.dataset.sort as DataGridSort\n : 'none';\n const align = ['center', 'end'].includes(element.dataset.align ?? '')\n ? element.dataset.align as DataGridAlign\n : 'start';\n return [{\n key,\n label: element.dataset.label ?? element.textContent?.trim() ?? key,\n width,\n minWidth,\n maxWidth,\n hidden: false,\n pinned,\n sortable: boolAttribute(element, 'data-sortable', false),\n sort,\n resizable: boolAttribute(element, 'data-resizable', defaults.resizable),\n reorderable: boolAttribute(element, 'data-reorderable', defaults.reorderable),\n align,\n cellClass: element.dataset.cellClass ?? '',\n element,\n }];\n });\n};\n\nconst columnTemplate = (columns: readonly DataGridColumn[]): string => (\n columns.map(({width}) => `${width}px`).join(' ')\n);\n\nconst dataGridColumnSnapshots = (columns: readonly DataGridColumn[]): DataGridColumnSnapshot[] => (\n columns.map(({element: _element, ...column}) => column)\n);\n\nconst pinnedOffsets = (columns: readonly DataGridColumn[]): DataGridPinnedOffsets => {\n const left = new Map<string, number>();\n const right = new Map<string, number>();\n let offset = 0;\n columns.forEach((column) => {\n if (column.pinned !== 'left') return;\n left.set(column.key, offset);\n offset += column.width;\n });\n offset = 0;\n [...columns].reverse().forEach((column) => {\n if (column.pinned !== 'right') return;\n right.set(column.key, offset);\n offset += column.width;\n });\n return {left, right};\n};\n\nconst cssEscape = (value: string): string => (\n globalThis.CSS?.escape ? globalThis.CSS.escape(value) : value.replace(/[^a-zA-Z0-9_-]/g, (character) => `\\\\${character}`)\n);\n\nconst dataGridLayoutCss = (scope: string, columns: readonly DataGridColumn[]): string => {\n const offsets = pinnedOffsets(columns);\n const pinnedPlane = 'z-index:2;background-color:var(--ui-surface-color);';\n return columns.map((column, index) => {\n const owner = `[data-ui-data-grid-scope=\"${cssEscape(scope)}\"]`;\n const columnSelector = `[data-column=\"${cssEscape(column.key)}\"]`;\n const selector = `${owner} [data-ui-data-grid-column-header]${columnSelector},${owner} [data-ui-data-grid-cell]${columnSelector}`;\n const pin = column.pinned === 'left'\n ? `position:sticky;left:${offsets.left.get(column.key) ?? 0}px;${pinnedPlane}`\n : column.pinned === 'right'\n ? `position:sticky;right:${offsets.right.get(column.key) ?? 0}px;${pinnedPlane}`\n : '';\n return `${selector}{grid-column:${index + 1};${pin}}`;\n }).join('');\n};\n\nconst normalizeSelection = (value: unknown, mode: DataGridSelection): DataGridSelectionValue => {\n if (mode === 'multiple' && typeof value === 'object' && value !== null && (value as {mode?: unknown}).mode === 'query') {\n const query = value as Partial<Extract<DataGridSelectionValue, {mode: 'query'}>>;\n if (typeof query.token === 'string' && Number.isFinite(query.total)) return {\n mode: 'query',\n token: query.token,\n total: Math.max(0, Math.floor(query.total ?? 0)),\n except: [...new Set(Array.isArray(query.except) ? query.except.filter((key): key is string => typeof key === 'string') : [])],\n };\n }\n const ids = typeof value === 'object' && value !== null && (value as {mode?: unknown}).mode === 'ids'\n && Array.isArray((value as {ids?: unknown}).ids)\n ? (value as {ids: unknown[]}).ids.filter((key): key is string => typeof key === 'string')\n : [];\n const unique = [...new Set(ids)];\n return {mode: 'ids', ids: mode === 'single' ? unique.slice(0, 1) : mode === 'none' ? [] : unique};\n};\n\nconst isRowSelected = (selection: DataGridSelectionValue, key: string): boolean => (\n selection.mode === 'query' ? !selection.except.includes(key) : selection.ids.includes(key)\n);\n\nconst toggleSelection = (\n current: DataGridSelectionValue,\n key: string,\n mode: DataGridSelection,\n selected?: boolean,\n): SelectionChange => {\n const normalized = normalizeSelection(current, mode);\n if (mode === 'none') return {selection: normalized, added: [], removed: []};\n const wasSelected = isRowSelected(normalized, key);\n const nextSelected = selected ?? !wasSelected;\n if (wasSelected === nextSelected) return {selection: normalized, added: [], removed: []};\n if (normalized.mode === 'query') {\n const except = nextSelected\n ? normalized.except.filter((value) => value !== key)\n : [...normalized.except, key];\n return {selection: {...normalized, except}, added: nextSelected ? [key] : [], removed: nextSelected ? [] : [key]};\n }\n const ids = mode === 'single' && nextSelected\n ? [key]\n : nextSelected\n ? [...normalized.ids, key]\n : normalized.ids.filter((value) => value !== key);\n return {selection: {mode: 'ids', ids}, added: nextSelected ? [key] : [], removed: nextSelected ? [] : [key]};\n};\n\nconst reorderColumns = (columns: readonly DataGridColumn[], key: string, toIndex: number): DataGridColumn[] | null => {\n const from = columns.findIndex((column) => column.key === key);\n if (from < 0 || !columns[from]?.reorderable) return null;\n const region = columns[from]?.pinned ?? null;\n const regionIndexes = columns.flatMap((column, index) => column.pinned === region ? [index] : []);\n if (!regionIndexes.includes(toIndex)) return null;\n const next = [...columns];\n const [column] = next.splice(from, 1);\n if (!column) return null;\n next.splice(toIndex, 0, column);\n return next;\n};\n\nexport {\n columnTemplate,\n dataGridColumnSnapshots,\n dataGridLayoutCss,\n isRowSelected,\n normalizeDataGridColumns,\n normalizeSelection,\n pinnedOffsets,\n reorderColumns,\n toggleSelection,\n};\nexport type {DataGridColumn, DataGridColumnDefaults, DataGridColumnSnapshot, DataGridPinnedOffsets, SelectionChange};\n","import type Alpine from 'alpinejs';\n\nimport {\n createResizable,\n createVirtualWindowController,\n defineAlpineData,\n defineProps,\n fixedAxisWindowAdapter,\n parseVirtualizerFragmentResponse,\n registerDomInvalidationOwner,\n reflectSchemaProp,\n replaceFragmentChildren,\n type FixedAxisWindow,\n type PropState,\n type ResizeEvent,\n type TrellisAlpineComponent,\n type VirtualScrollAlign,\n type VirtualWindowRequest,\n} from '@client/runtime';\nimport {cleanupManagerFor} from '@client/runtime/alpine-data';\nimport {CleanupManager} from '@client/runtime/cleanup-manager';\nimport {\n UiVirtualizer,\n type CursorVirtualizerOptions,\n type UiVirtualizerApi,\n type VirtualizerData,\n} from '../../runtime/virtualizer';\nimport {serverCursorOptions} from '../../runtime/cursor-data-source';\nimport {cloneSerializable, isSerializableEqual} from '../../utils';\nimport {dataGridSchema, type DataGridSelectionValue} from './contract';\nimport {\n columnTemplate,\n dataGridColumnSnapshots,\n dataGridLayoutCss,\n isRowSelected,\n normalizeDataGridColumns,\n normalizeSelection,\n reorderColumns,\n toggleSelection,\n type DataGridColumn,\n type DataGridColumnSnapshot,\n} from './model';\n\n/** Options for resetting an indexed or cursor-backed Data Grid. @public */\ninterface DataGridResetOptions {\n /** Scroll offset restored after the first page loads. */\n scrollTop?: number;\n}\n\n/** Options for replacing an indexed Data Grid endpoint. @public */\ninterface DataGridSetUrlOptions {\n /** Whether to discard loaded rows and reload immediately. */\n reset?: boolean;\n}\n\n/** Public Alpine API for `ui.data-grid`. @public */\ninterface UiDataGridApi {\n /** Whether the active cursor data source supports server-side index seeking. */\n readonly supportsSeek: boolean;\n /** Discard loaded rows and request the current indexed range or first cursor page again. */\n reload(options?: DataGridResetOptions): void;\n /** Return the grid to its initial indexed range or first cursor page. */\n reset(options?: DataGridResetOptions): void;\n /** Scroll to a row and seek through the server when its cursor page is not loaded. */\n scrollToIndex(index: number, align?: VirtualScrollAlign): void;\n /** Replace the indexed endpoint, optionally resetting loaded rows. */\n setUrl(url: string, options?: DataGridSetUrlOptions): void;\n /** Reflect the authoritative total-row attribute without requesting or replacing rows. */\n setTotalRows(count: number): void;\n /** Reflect the authoritative query attribute; meaningful cursor-query changes reset to the first page. */\n setQuery<Query>(query: Query): void;\n /** Activate cursor mode; a rendered query attribute takes precedence over the option query. */\n useCursor<Query, Content>(options: CursorVirtualizerOptions<Query, Content>): void;\n /** Resize a column to a pixel width. */\n resizeColumn(key: string, width: number): void;\n /** Move a column to a new zero-based position. */\n reorderColumn(key: string, toIndex: number): void;\n /** Add a row key to the explicit selection. */\n selectRow(key: string): void;\n /** Remove a row key from the explicit selection. */\n deselectRow(key: string): void;\n /** Toggle a row key in the current selection. */\n toggleRow(key: string): void;\n /** Replace the complete row selection value. */\n setSelection(value: DataGridSelectionValue): void;\n /** Select all rows represented by a server-owned query token. */\n selectQuery(token: string, total: number, except?: string[]): void;\n /** Clear explicit and query-backed row selection. */\n clearSelection(): void;\n}\n\ntype DataGridData = UiDataGridApi & {\n props: PropState<typeof dataGridSchema>;\n init(): void;\n destroy(): void;\n};\n\ntype BlockRecord = {key: string; element: HTMLElement};\ntype CursorDelegate = TrellisAlpineComponent<VirtualizerData<unknown>> & UiVirtualizerApi<unknown>;\n\nconst integer = (value: number, minimum = 0): number => (\n Math.max(minimum, Math.floor(Number.isFinite(value) ? value : minimum))\n);\n\nconst interactiveSelector = 'a,button,input,select,textarea,[contenteditable],[role=\"button\"],[role=\"link\"]';\n\nconst UiDataGrid = (AlpineInstance: Alpine.Alpine): TrellisAlpineComponent<DataGridData> => {\n let root: HTMLElement | null = null;\n let viewport: HTMLElement | null = null;\n let table: HTMLElement | null = null;\n let body: HTMLElement | null = null;\n let spacer: HTMLElement | null = null;\n let styleElement: HTMLStyleElement | null = null;\n let columns: DataGridColumn[] = [];\n let blocks: BlockRecord[] = [];\n let totalRows = 0;\n let selection: DataGridSelectionValue = {mode: 'ids', ids: []};\n let currentWindowKey = '';\n let latestScrollTop: number | null = null;\n let scrollFrame = 0;\n let destroyed = false;\n let listenerAborter: AbortController | null = null;\n let suppressPropChange = false;\n let cursorDelegate: CursorDelegate | null = null;\n let cursorOptionQuery: unknown = null;\n let appliedCursorQuery: unknown = null;\n let previousColumnSnapshots: DataGridColumnSnapshot[] = [];\n let columnObserver: MutationObserver | null = null;\n let headerSizeObserver: ResizeObserver | null = null;\n let unregisterColumnInvalidation: (() => void) | null = null;\n let declarativeFlushQueued = false;\n let forceColumnRefresh = false;\n let cleanup: CleanupManager;\n let resizeCleanup: CleanupManager | null = null;\n const requestAborters = new Map<string, AbortController>();\n const appliedRowClasses = new WeakMap<HTMLElement, string[]>();\n const appliedCellClasses = new WeakMap<HTMLElement, string[]>();\n const controller = createVirtualWindowController(fixedAxisWindowAdapter);\n\n const dispatch = (name: string, detail: Record<string, unknown>): void => {\n root?.dispatchEvent(new CustomEvent(name, {bubbles: true, composed: true, detail}));\n };\n const syncOwnedClasses = (element: HTMLElement, value: string, owned: WeakMap<HTMLElement, string[]>): void => {\n const previous = owned.get(element) ?? [];\n if (previous.length) element.classList.remove(...previous);\n const names = [...new Set(value.split(/\\s+/).filter(Boolean))];\n if (names.length) element.classList.add(...names);\n owned.set(element, names);\n };\n const columnDefaults = () => ({\n width: component.props.defaultColumnWidth,\n minWidth: component.props.minColumnWidth,\n maxWidth: component.props.maxColumnWidth,\n resizable: component.props.resizableColumns,\n reorderable: component.props.reorderableColumns,\n });\n const declaredColumns = (): DataGridColumn[] => normalizeDataGridColumns(\n Array.from(root?.querySelectorAll<HTMLElement>('[data-ui-data-grid-column-header]') ?? []),\n columnDefaults(),\n );\n const syncSortableHeader = (column: DataGridColumn): void => {\n const label = column.element.querySelector<HTMLElement>('[data-ui-data-grid-column-label]');\n const currentButton = column.element.querySelector<HTMLButtonElement>('[data-ui-data-grid-sort-button]');\n if (!label) return;\n if (column.sortable && !currentButton) {\n const button = document.createElement('button');\n button.type = 'button';\n button.setAttribute('data-ui-data-grid-sort-button', '');\n button.className = column.element.dataset.sortButtonClass ?? '';\n const indicator = document.createElement('span');\n indicator.setAttribute('data-ui-data-grid-sort-indicator', '');\n indicator.setAttribute('aria-hidden', 'true');\n label.replaceWith(button);\n button.append(label, indicator);\n } else if (!column.sortable && currentButton) {\n currentButton.replaceWith(label);\n }\n };\n const rows = (): HTMLElement[] => Array.from(root?.querySelectorAll<HTMLElement>('[data-ui-data-grid-row]') ?? []);\n const syncBodyWidth = (headerRow: HTMLElement): void => {\n body?.style.setProperty('width', `${headerRow.getBoundingClientRect().width}px`);\n };\n const reflectMountedSelection = (): void => {\n rows().forEach((row) => {\n const key = row.dataset.rowKey ?? '';\n const selected = component.props.selection !== 'none' && key !== '' && isRowSelected(selection, key);\n row.toggleAttribute('data-selected', selected);\n if (component.props.selection === 'none') row.removeAttribute('aria-selected');\n else row.setAttribute('aria-selected', String(selected));\n });\n };\n const syncColumnGeometry = (): void => {\n if (!root || !styleElement) return;\n root.style.setProperty('--ui-data-grid-template', columnTemplate(columns));\n const scope = root.dataset.uiDataGridScope ?? '';\n styleElement.textContent = dataGridLayoutCss(scope, columns);\n const headerRow = root.querySelector<HTMLElement>('[data-ui-data-grid-header-row]');\n if (headerRow) syncBodyWidth(headerRow);\n };\n const reconcileColumnStructure = (): void => {\n if (!root) return;\n const columnsByKey = new Map(columns.map((column, index) => [column.key, {column, index}]));\n table?.setAttribute('aria-colcount', String(columns.length));\n const headerRow = root.querySelector<HTMLElement>('[data-ui-data-grid-header-row]');\n const indicator = headerRow?.querySelector<HTMLElement>('[data-ui-data-grid-column-indicator]');\n if (indicator) headerRow?.append(indicator);\n const mountedRows = rows();\n mountedRows.forEach((row) => {\n const cells = Array.from(row.children).filter((element): element is HTMLElement => (\n element instanceof HTMLElement && element.hasAttribute('data-ui-data-grid-cell')\n ));\n const cellsByKey = new Map(cells.flatMap((element) => (\n element instanceof HTMLElement && element.hasAttribute('data-ui-data-grid-cell')\n ? [[element.dataset.column ?? '', element] as const]\n : []\n )));\n columns.forEach(({key}) => {\n const cell = cellsByKey.get(key);\n if (!cell) return;\n cell.hidden = false;\n row.append(cell);\n });\n cells.forEach((cell) => {\n if (columnsByKey.has(cell.dataset.column ?? '')) return;\n cell.hidden = true;\n cell.removeAttribute('aria-colindex');\n cell.removeAttribute('data-pinned');\n row.append(cell);\n });\n });\n columns.forEach((column, index) => {\n syncSortableHeader(column);\n column.element.setAttribute('aria-colindex', String(index + 1));\n if (column.pinned) column.element.dataset.pinned = column.pinned;\n else column.element.removeAttribute('data-pinned');\n if (column.sortable) column.element.setAttribute('aria-sort', column.sort);\n else column.element.removeAttribute('aria-sort');\n column.element.dataset.disabled = String(!column.reorderable || !component.props.reorderableColumns);\n const ownedLabel = column.element.querySelector<HTMLElement>('[data-ui-data-grid-column-label-owned]');\n if (ownedLabel) ownedLabel.textContent = column.label;\n const previewLabel = column.element.querySelector<HTMLElement>('[data-ui-data-grid-column-preview-label]');\n if (previewLabel) previewLabel.textContent = column.label;\n const sortIndicator = column.element.querySelector<HTMLElement>('[data-ui-data-grid-sort-indicator]');\n if (sortIndicator) {\n sortIndicator.textContent = column.sort === 'ascending' ? '↑' : column.sort === 'descending' ? '↓' : '';\n }\n column.element.querySelector<HTMLElement>('[data-ui-data-grid-resize-handle]')\n ?.setAttribute('aria-label', `Resize ${column.label || column.key} column`);\n });\n mountedRows.forEach((row) => syncOwnedClasses(row, component.props.rowClass, appliedRowClasses));\n root.querySelectorAll<HTMLElement>('[data-ui-data-grid-cell]').forEach((cell) => {\n const entry = columnsByKey.get(cell.dataset.column ?? '');\n if (!entry) return;\n cell.setAttribute('aria-colindex', String(entry.index + 1));\n cell.dataset.align = entry.column.align;\n syncOwnedClasses(cell, `${component.props.cellClass} ${entry.column.cellClass}`, appliedCellClasses);\n if (entry.column.pinned) cell.dataset.pinned = entry.column.pinned;\n else cell.removeAttribute('data-pinned');\n });\n };\n const columnChangeDetail = (\n previous: readonly DataGridColumnSnapshot[],\n next: readonly DataGridColumnSnapshot[],\n ): Record<string, unknown> => {\n const previousByKey = new Map(previous.map((column) => [column.key, column]));\n const nextByKey = new Map(next.map((column) => [column.key, column]));\n const added = next.filter(({key}) => !previousByKey.has(key)).map(({key}) => key);\n const removed = previous.filter(({key}) => !nextByKey.has(key)).map(({key}) => key);\n const changed = next.flatMap((column) => {\n const before = previousByKey.get(column.key);\n if (!before) return [];\n const fields = Object.keys(column).filter((field) => (\n field !== 'key'\n && !isSerializableEqual(before[field as keyof DataGridColumnSnapshot], column[field as keyof DataGridColumnSnapshot])\n ));\n return fields.length ? [{key: column.key, fields}] : [];\n });\n return {previous, columns: next, added, removed, changed};\n };\n const flushDeclarativeState = (): void => {\n declarativeFlushQueued = false;\n if (!root || destroyed) return;\n\n const nextColumns = declaredColumns();\n const nextSnapshots = dataGridColumnSnapshots(nextColumns);\n const semanticColumnChange = !isSerializableEqual(previousColumnSnapshots, nextSnapshots);\n const elementChange = columns.length !== nextColumns.length\n || columns.some((column, index) => column.element !== nextColumns[index]?.element);\n const resizeBoundaryChange = elementChange || columns.some((column, index) => {\n const next = nextColumns[index];\n return !next\n || column.key !== next.key\n || column.resizable !== next.resizable\n || column.minWidth !== next.minWidth\n || column.maxWidth !== next.maxWidth;\n });\n if (semanticColumnChange || elementChange || forceColumnRefresh) {\n const previous = previousColumnSnapshots;\n columns = nextColumns;\n previousColumnSnapshots = nextSnapshots;\n const refreshResizeHandles = resizeBoundaryChange || forceColumnRefresh;\n forceColumnRefresh = false;\n reconcileColumnStructure();\n syncColumnGeometry();\n if (refreshResizeHandles) registerResizeHandles();\n if (semanticColumnChange) {\n dispatch('ui:data-grid-columns-change', columnChangeDetail(previous, nextSnapshots));\n }\n }\n\n if (component.props.totalRows !== totalRows) {\n updateTotal(component.props.totalRows);\n if (cursorDelegate) root.dataset.totalItems = String(totalRows);\n }\n\n if (cursorDelegate) {\n const nextQuery = root.hasAttribute('data-query') ? component.props.query : cursorOptionQuery;\n if (!isSerializableEqual(appliedCursorQuery, nextQuery)) {\n appliedCursorQuery = cloneSerializable(nextQuery);\n cursorDelegate.setQuery(nextQuery);\n }\n }\n };\n const scheduleDeclarativeState = (): void => {\n if (declarativeFlushQueued) return;\n declarativeFlushQueued = true;\n queueMicrotask(flushDeclarativeState);\n };\n const syncState = (): void => {\n if (!root || !spacer) return;\n if (!cursorDelegate) {\n root.toggleAttribute('data-loading', requestAborters.size > 0);\n root.toggleAttribute('data-empty', totalRows === 0);\n }\n root.dataset.selection = component.props.selection;\n table?.setAttribute('aria-rowcount', String(totalRows + 1));\n root.style.setProperty('--ui-data-grid-row-height', `${component.props.rowHeight}px`);\n root.style.setProperty('--ui-data-grid-total-height', `${Math.max(totalRows * component.props.rowHeight, component.props.rowHeight)}px`);\n if (!cursorDelegate || totalRows > 0) spacer.style.height = `var(--ui-data-grid-total-height)`;\n reflectMountedSelection();\n };\n const updateTotal = (next: number): void => {\n const normalized = integer(next);\n if (normalized === totalRows) return;\n totalRows = normalized;\n syncState();\n dispatch('ui:data-grid-total-change', {totalRows});\n };\n const blockWindow = (start: number): FixedAxisWindow => fixedAxisWindowAdapter.compute({axes: {y: {\n total: totalRows,\n itemSize: component.props.rowHeight,\n viewportSize: component.props.bufferSize * component.props.rowHeight,\n scrollOffset: start * component.props.rowHeight,\n buffer: 0,\n }}});\n const desiredWindows = (scrollTop: number): FixedAxisWindow[] => {\n if (totalRows === 0) return [];\n const size = integer(component.props.bufferSize, 1);\n const index = Math.min(totalRows - 1, Math.floor(Math.max(0, scrollTop) / component.props.rowHeight));\n const center = Math.floor(index / size) * size;\n const last = Math.floor((totalRows - 1) / size) * size;\n const starts = [center - size, center, center + size].map((start) => Math.min(last, Math.max(0, start)));\n if (center === 0 && last > size) starts.splice(0, 3, 0, size, Math.min(last, size * 2));\n else if (center === last && last > size) starts.splice(0, 3, Math.max(0, last - (size * 2)), last - size, last);\n return [...new Set(starts)].map(blockWindow);\n };\n const requestUrl = (window: FixedAxisWindow): string => {\n const axis = window.axes.y;\n if (!axis) throw new Error('Data Grid requires a vertical virtual window.');\n const url = new URL(component.props.fetchUrl, document.baseURI);\n url.searchParams.set(component.props.startParam, String(axis.start));\n url.searchParams.set(component.props.countParam, String(axis.count));\n url.searchParams.set(component.props.totalParam, String(axis.total));\n return /^[a-z][a-z\\d+.-]*:/i.test(component.props.fetchUrl) || component.props.fetchUrl.startsWith('//')\n ? url.href\n : `${url.pathname}${url.search}${url.hash}`;\n };\n const settle = (blockKey: string, aborter: AbortController): void => {\n if (requestAborters.get(blockKey) !== aborter) return;\n requestAborters.delete(blockKey);\n syncState();\n if (requestAborters.size > 0 || latestScrollTop === null || destroyed) return;\n const scrollTop = latestScrollTop;\n latestScrollTop = null;\n reconcile(scrollTop);\n };\n const load = async (\n block: BlockRecord,\n window: FixedAxisWindow,\n request: VirtualWindowRequest<FixedAxisWindow>,\n ): Promise<void> => {\n const axis = window.axes.y;\n if (!axis) return;\n const aborter = new AbortController();\n requestAborters.set(block.key, aborter);\n syncState();\n root?.removeAttribute('data-error');\n dispatch('ui:data-grid-load-start', {window});\n try {\n const requestId = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${request.requestGeneration}`;\n const response = await fetch(requestUrl(window), {method: 'GET', headers: {\n Accept: 'text/html',\n 'X-Trellis-Virtualizer': 'true',\n 'X-Trellis-Request-ID': requestId,\n }, signal: aborter.signal});\n if (!response.ok && response.status !== 204) {\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:data-grid-error', {window, status: response.status});\n return;\n }\n const payload = await parseVirtualizerFragmentResponse(response, component.props);\n if (controller.pending(block.key) !== request || destroyed) return;\n const replaced = await replaceFragmentChildren(AlpineInstance, block.element, payload.html, {\n assets: payload.assets,\n shouldReplace: () => controller.pending(block.key) === request && !destroyed,\n });\n if (!replaced) return;\n if (payload.totalItems !== null) updateTotal(payload.totalItems);\n if (!controller.commit(request, window)) return;\n block.element.style.height = `${axis.count * component.props.rowHeight}px`;\n block.element.style.transform = `translateY(${axis.translateOffset}px)`;\n reconcileColumnStructure();\n reflectMountedSelection();\n dispatch('ui:data-grid-load', {window, start: axis.start, count: axis.count, end: axis.start + axis.count});\n } catch (error) {\n if (aborter.signal.aborted) return;\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:data-grid-error', {window, status: 0, error});\n } finally {\n settle(block.key, aborter);\n }\n };\n const reconcile = (scrollTop: number): void => {\n if (cursorDelegate || component.props.cursor) return;\n if (requestAborters.size > 0) {\n latestScrollTop = scrollTop;\n return;\n }\n const desired = desiredWindows(scrollTop);\n const logicalIndex = Math.min(Math.max(0, totalRows - 1), Math.floor(Math.max(0, scrollTop) / component.props.rowHeight));\n const center = desired.find((window) => {\n const axis = window.axes.y;\n return axis && logicalIndex >= axis.start && logicalIndex < axis.start + axis.count;\n }) ?? desired[0];\n if (center && currentWindowKey !== center.key) {\n currentWindowKey = center.key;\n const axis = center.axes.y!;\n dispatch('ui:data-grid-range', {start: axis.start, count: axis.count, end: axis.start + axis.count, window: center});\n }\n if (desired.length === 0) {\n blocks.forEach((block) => void replaceFragmentChildren(AlpineInstance, block.element, ''));\n return;\n }\n const preserved = new Set<BlockRecord>();\n desired.forEach((window) => {\n const existing = blocks.find((block) => controller.mounted(block.key)?.key === window.key);\n if (existing) preserved.add(existing);\n });\n const available = blocks.filter((block) => !preserved.has(block));\n desired.forEach((window) => {\n if (blocks.some((block) => controller.mounted(block.key)?.key === window.key)) return;\n const block = available.shift();\n if (!block) return;\n const request = controller.begin(block.key, window);\n if (request) void load(block, window, request);\n });\n };\n const invalidate = (): void => {\n requestAborters.forEach((aborter) => aborter.abort());\n requestAborters.clear();\n latestScrollTop = null;\n currentWindowKey = '';\n controller.invalidate();\n blocks.forEach((block) => {\n block.element.style.height = '';\n block.element.style.transform = '';\n void replaceFragmentChildren(AlpineInstance, block.element, '');\n });\n syncState();\n };\n const setSelection = (value: DataGridSelectionValue, detail?: {added: string[]; removed: string[]}): void => {\n selection = normalizeSelection(value, component.props.selection);\n suppressPropChange = true;\n component.props.selectionValue = selection;\n if (root) reflectSchemaProp({el: root, schema: dataGridSchema, key: 'selectionValue', value: selection});\n suppressPropChange = false;\n reflectMountedSelection();\n dispatch('ui:data-grid-selection-change', {selection, added: detail?.added ?? [], removed: detail?.removed ?? []});\n };\n const changeRow = (key: string, selected?: boolean): void => {\n const change = toggleSelection(selection, String(key), component.props.selection, selected);\n if (change.added.length === 0 && change.removed.length === 0) return;\n setSelection(change.selection, change);\n };\n const updateColumnWidth = (column: DataGridColumn, width: number, phase: 'start' | 'resize' | 'end'): void => {\n column.width = Math.min(column.maxWidth ?? Number.POSITIVE_INFINITY, Math.max(column.minWidth, width));\n column.element.dataset.width = String(column.width);\n previousColumnSnapshots = dataGridColumnSnapshots(columns);\n syncColumnGeometry();\n dispatch('ui:data-grid-column-resize', {column: column.key, width: column.width, phase});\n };\n const registerResizeHandles = (): void => {\n resizeCleanup?.run();\n resizeCleanup = new CleanupManager();\n cleanup.addChild(resizeCleanup);\n columns.forEach((column) => {\n const handle = column.element.querySelector<HTMLElement>('[data-ui-data-grid-resize-handle]');\n if (!handle) return;\n const enabled = column.resizable && component.props.resizableColumns;\n handle.hidden = !column.resizable;\n if (enabled) handle.removeAttribute('aria-disabled');\n else handle.setAttribute('aria-disabled', 'true');\n handle.tabIndex = enabled ? 0 : -1;\n if (!enabled) return;\n const onResize = (event: ResizeEvent): void => updateColumnWidth(column, event.previewWidth, event.phase);\n resizeCleanup?.add(createResizable({\n element: column.element,\n handle,\n axis: 'x',\n min: column.minWidth,\n max: column.maxWidth,\n mode: component.props.resizeMode,\n disabled: () => !component.props.resizableColumns || !column.resizable,\n onStart: onResize,\n onResize,\n onEnd: onResize,\n }));\n });\n };\n\n const component: TrellisAlpineComponent<DataGridData> = {\n get supportsSeek(): boolean { return cursorDelegate?.supportsSeek ?? false; },\n props: null as unknown as PropState<typeof dataGridSchema>,\n init(): void {\n cleanup = cleanupManagerFor(this);\n root = this.$el;\n destroyed = false;\n const scope = globalThis.crypto?.randomUUID?.() ?? `grid-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n root.dataset.uiDataGridScope = scope;\n root.querySelector<HTMLElement>('[data-ui-data-grid-header-row]')?.setAttribute('data-sortable-scope', scope);\n this.props = defineProps({el: root, schema: dataGridSchema, onChange: (_state, changes) => {\n if (suppressPropChange) return;\n const keys = changes.map(({key}) => key);\n if (keys.includes('selectionValue') || keys.includes('selection')) {\n selection = normalizeSelection(this.props.selectionValue, this.props.selection);\n reflectMountedSelection();\n }\n if (keys.some((key) => [\n 'resizableColumns', 'reorderableColumns', 'minColumnWidth', 'defaultColumnWidth', 'maxColumnWidth',\n ].includes(key))) forceColumnRefresh = true;\n if (keys.some((key) => [\n 'query', 'totalRows', 'resizableColumns', 'reorderableColumns', 'minColumnWidth',\n 'defaultColumnWidth', 'maxColumnWidth',\n ].includes(key))) scheduleDeclarativeState();\n if (keys.some((key) => ['fetchUrl', 'rowHeight', 'bufferSize'].includes(key))) this.reload();\n }});\n totalRows = integer(this.props.totalRows);\n selection = normalizeSelection(this.props.selectionValue, this.props.selection);\n viewport = root.querySelector<HTMLElement>('[data-ui-data-grid-viewport]')\n ?? root.querySelector<HTMLElement>('[data-ui-scroll-area-viewport]');\n table = root.querySelector<HTMLElement>('[data-ui-data-grid-inner]');\n body = root.querySelector<HTMLElement>('[data-ui-data-grid-body]');\n spacer = root.querySelector<HTMLElement>('[data-ui-data-grid-spacer]');\n styleElement = root.querySelector<HTMLStyleElement>('style[data-ui-data-grid-layout]');\n blocks = Array.from(root.querySelectorAll<HTMLElement>('[data-ui-data-grid-block]')).slice(0, 3)\n .map((element, index) => ({element, key: `block-${index + 1}`}));\n if (!viewport || !table || !body || !spacer || !styleElement || blocks.length !== 3) {\n throw new Error('Data Grid requires one viewport, table owner, body, spacer, layout style, and three row blocks.');\n }\n viewport.setAttribute('data-ui-data-grid-viewport', '');\n columns = declaredColumns();\n previousColumnSnapshots = dataGridColumnSnapshots(columns);\n reconcileColumnStructure();\n syncColumnGeometry();\n registerResizeHandles();\n const headerRow = root.querySelector<HTMLElement>('[data-ui-data-grid-header-row]');\n if (headerRow) {\n if (typeof ResizeObserver !== 'undefined') {\n headerSizeObserver = new ResizeObserver(() => syncBodyWidth(headerRow));\n headerSizeObserver.observe(headerRow);\n }\n columnObserver = new MutationObserver(scheduleDeclarativeState);\n columnObserver.observe(headerRow, {\n attributes: true,\n childList: true,\n subtree: true,\n attributeFilter: [\n 'data-column', 'data-label', 'data-width', 'data-min-width', 'data-max-width', 'data-hidden',\n 'data-pinned', 'data-sortable', 'data-sort', 'data-resizable', 'data-reorderable', 'data-align',\n 'data-cell-class', 'hidden',\n ],\n });\n }\n unregisterColumnInvalidation = registerDomInvalidationOwner(root, {invalidateDom: scheduleDeclarativeState});\n listenerAborter = new AbortController();\n viewport.addEventListener('scroll', () => {\n if (scrollFrame) return;\n scrollFrame = requestAnimationFrame(() => {\n scrollFrame = 0;\n if (viewport) reconcile(viewport.scrollTop);\n });\n }, {passive: true, signal: listenerAborter.signal});\n root.addEventListener('click', (event) => {\n const target = event.target as HTMLElement;\n const sortButton = target.closest<HTMLElement>('[data-ui-data-grid-sort-button]');\n if (sortButton && this.props.sortableColumns) {\n const header = sortButton.closest<HTMLElement>('[data-ui-data-grid-column-header]');\n const column = columns.find(({key}) => key === header?.dataset.column);\n if (column?.sortable) {\n const direction = column.sort === 'ascending' ? 'descending' : 'ascending';\n dispatch('ui:data-grid-sort', {column: column.key, direction, additive: event.shiftKey});\n }\n return;\n }\n const row = target.closest<HTMLElement>('[data-ui-data-grid-row]');\n if (!row || !root?.contains(row)) return;\n const key = row.dataset.rowKey ?? '';\n if (this.props.selectOnRowClick && !target.closest(interactiveSelector)) changeRow(key);\n dispatch('ui:data-grid-row-activate', {rowKey: key, row});\n }, {signal: listenerAborter.signal});\n root.addEventListener('dblclick', (event) => {\n const cell = (event.target as HTMLElement).closest<HTMLElement>('[data-ui-data-grid-cell]');\n const row = cell?.closest<HTMLElement>('[data-ui-data-grid-row]');\n if (cell && row) dispatch('ui:data-grid-cell-activate', {\n rowKey: row.dataset.rowKey ?? '', column: cell.dataset.column ?? '', cell,\n });\n }, {signal: listenerAborter.signal});\n root.addEventListener('ui:sortable-drop', ((event: CustomEvent) => {\n const source = event.detail?.source;\n if (source?.type !== 'data-grid-column') return;\n const to = Number(event.detail?.index ?? event.detail?.anchor?.index);\n if (Number.isInteger(to)) this.reorderColumn(String(source.id), to);\n }) as EventListener, {signal: listenerAborter.signal});\n root.addEventListener('ui:virtualizer-total-change', ((event: CustomEvent) => {\n if (!cursorDelegate || event.target !== root) return;\n updateTotal(Number(event.detail?.totalItems ?? 0));\n }) as EventListener, {signal: listenerAborter.signal});\n root.addEventListener('ui:virtualizer-load-start', ((event: CustomEvent) => {\n if (!cursorDelegate || event.target !== root) return;\n dispatch('ui:data-grid-load-start', {mode: 'cursor'});\n }) as EventListener, {signal: listenerAborter.signal});\n root.addEventListener('ui:virtualizer-load', ((event: CustomEvent) => {\n if (!cursorDelegate || event.target !== root) return;\n reconcileColumnStructure();\n reflectMountedSelection();\n dispatch('ui:data-grid-load', {...event.detail, mode: 'cursor'});\n }) as EventListener, {signal: listenerAborter.signal});\n root.addEventListener('ui:virtualizer-error', ((event: CustomEvent) => {\n if (!cursorDelegate || event.target !== root) return;\n dispatch('ui:data-grid-error', {...event.detail, mode: 'cursor'});\n }) as EventListener, {signal: listenerAborter.signal});\n viewport.style.overscrollBehavior = 'contain';\n viewport.style.overflowAnchor = 'none';\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalRows, itemSize: this.props.rowHeight, viewportSize: viewport.clientHeight,\n scrollOffset: 0, buffer: this.props.bufferSize,\n }, {axis: 'y', index: this.props.initialIndex});\n syncState();\n if (this.props.cursor) this.useCursor(serverCursorOptions(() => {\n if (!root) throw new Error('Data Grid is not mounted.');\n return root;\n }));\n else reconcile(viewport.scrollTop);\n },\n destroy(): void {\n destroyed = true;\n if (scrollFrame) cancelAnimationFrame(scrollFrame);\n listenerAborter?.abort();\n listenerAborter = null;\n columnObserver?.disconnect();\n columnObserver = null;\n headerSizeObserver?.disconnect();\n headerSizeObserver = null;\n unregisterColumnInvalidation?.();\n unregisterColumnInvalidation = null;\n resizeCleanup = null;\n cursorDelegate?.destroy();\n cursorDelegate = null;\n invalidate();\n this.props.disconnect();\n root = null;\n viewport = null;\n table = null;\n body = null;\n spacer = null;\n styleElement = null;\n columns = [];\n previousColumnSnapshots = [];\n blocks = [];\n },\n scrollToIndex(index, align = 'start'): void {\n if (cursorDelegate) {\n cursorDelegate.scrollToIndex(index, align);\n return;\n }\n if (!viewport) return;\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalRows, itemSize: this.props.rowHeight, viewportSize: viewport.clientHeight,\n scrollOffset: viewport.scrollTop, buffer: this.props.bufferSize,\n }, {axis: 'y', index, align});\n reconcile(viewport.scrollTop);\n },\n setTotalRows(count): void {\n if (root) reflectSchemaProp({el: root, schema: dataGridSchema, key: 'totalRows', value: integer(count)});\n },\n setQuery(query): void {\n if (root) reflectSchemaProp({el: root, schema: dataGridSchema, key: 'query', value: query});\n },\n useCursor(options): void {\n if (!root || !viewport || !spacer) return;\n cursorDelegate?.destroy();\n cursorDelegate = null;\n invalidate();\n root.dataset.totalItems = String(totalRows);\n root.dataset.itemSize = String(this.props.rowHeight);\n spacer.setAttribute('data-ui-virtualizer-spacer', '');\n blocks.forEach(({element}) => element.setAttribute('data-ui-virtualizer-block', ''));\n cursorOptionQuery = options.query;\n const initialQuery = root.hasAttribute('data-query') ? this.props.query : cursorOptionQuery;\n appliedCursorQuery = cloneSerializable(initialQuery);\n const delegate = UiVirtualizer<unknown, unknown>(AlpineInstance, {\n cursor: {...options, query: initialQuery} as unknown as CursorVirtualizerOptions<unknown, unknown>,\n }) as CursorDelegate;\n cursorDelegate = delegate;\n Object.assign(delegate, {$el: root});\n delegate.init();\n },\n setUrl(url, options = {}): void {\n suppressPropChange = true;\n this.props.fetchUrl = String(url);\n if (root) reflectSchemaProp({el: root, schema: dataGridSchema, key: 'fetchUrl', value: String(url)});\n suppressPropChange = false;\n if (options.reset ?? true) this.reset();\n else this.reload();\n },\n reset(options = {}): void {\n if (cursorDelegate) {\n cursorDelegate.reset({scrollTop: options.scrollTop ?? 0});\n return;\n }\n this.reload({scrollTop: options.scrollTop ?? 0});\n },\n reload(options = {}): void {\n if (cursorDelegate) {\n cursorDelegate.reload(options);\n return;\n }\n const scrollTop = options.scrollTop ?? viewport?.scrollTop ?? 0;\n invalidate();\n if (viewport) viewport.scrollTop = Math.max(0, scrollTop);\n reconcile(scrollTop);\n },\n resizeColumn(key, width): void {\n const column = columns.find((candidate) => candidate.key === key);\n if (column) updateColumnWidth(column, Number(width), 'end');\n },\n reorderColumn(key, toIndex): void {\n const from = columns.findIndex((column) => column.key === key);\n const next = reorderColumns(columns, key, integer(toIndex));\n if (!next) return;\n columns = next;\n previousColumnSnapshots = dataGridColumnSnapshots(columns);\n const headerRow = root?.querySelector<HTMLElement>('[data-ui-data-grid-header-row]');\n const indicator = headerRow?.querySelector<HTMLElement>('[data-ui-data-grid-column-indicator]') ?? null;\n columns.forEach((column) => headerRow?.insertBefore(column.element, indicator));\n reconcileColumnStructure();\n syncColumnGeometry();\n dispatch('ui:data-grid-column-reorder', {column: key, from, to: integer(toIndex), columns: columns.map(({key: columnKey}) => columnKey)});\n },\n selectRow(key): void { changeRow(String(key), true); },\n deselectRow(key): void { changeRow(String(key), false); },\n toggleRow(key): void { changeRow(String(key)); },\n setSelection(value): void { setSelection(value); },\n selectQuery(token, total, except = []): void {\n setSelection({mode: 'query', token: String(token), total: integer(total), except: except.map(String)});\n },\n clearSelection(): void { setSelection({mode: 'ids', ids: []}); },\n };\n return component;\n};\n\nconst registerDataGrid = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiDataGrid', () => UiDataGrid(AlpineInstance))(AlpineInstance);\n};\n\nexport {registerDataGrid, UiDataGrid};\nexport type {DataGridData, DataGridResetOptions, DataGridSetUrlOptions, UiDataGridApi};\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 {registerResizableCapability} from '../../capabilities/resizable';\nimport {registerMotionCapability} from '../../capabilities/motion';\nimport {registerSortableCapability} from '../../capabilities/sortable';\nimport {registerDataGrid as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerDataGrid = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerResizableCapability(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerSortableCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerDataGrid};\nexport default registerDataGrid;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,t}from"./dom-DiTFTWeR.js";import{C as n,_ as r,d as i,g as a,h as o,o as s,s as c}from"./motion-B90yNOaV.js";import{t as l}from"./capability-motion-D_BJBnwB.js";import{c as u,f as d,l as f,n as p,o as m}from"./codecs-CQ7olTJL.js";import{i as h,t as g}from"./alpine-machine-CE2UN4Qu.js";import{n as _,t as v}from"./alpine-data-Dvc_bXq6.js";import{n as y,t as b}from"./styles-CX2j92ex.js";import{t as x}from"./machine-CNnHDbyo.js";var S={x:!1,y:!1};function C(){return S.x||S.y}function w(e,t){let n=a(e),r=new AbortController;return[n,{passive:!0,...t,signal:r.signal},()=>r.abort()]}function T(e){return!(e.pointerType===`touch`||C())}function E(e,t,n={}){let[r,i,a]=w(e,n);return r.forEach(e=>{let n=!1,r=!1,a,o=()=>{e.removeEventListener(`pointerleave`,u)},s=e=>{a&&=(a(e),void 0),o()},c=e=>{n=!1,window.removeEventListener(`pointerup`,c),window.removeEventListener(`pointercancel`,c),r&&(r=!1,s(e))},l=()=>{n=!0,window.addEventListener(`pointerup`,c,i),window.addEventListener(`pointercancel`,c,i)},u=e=>{if(e.pointerType!==`touch`){if(n){r=!0;return}s(e)}};e.addEventListener(`pointerenter`,n=>{if(!T(n))return;r=!1;let o=t(e,n);typeof o==`function`&&(a=o,e.addEventListener(`pointerleave`,u,i))},i),e.addEventListener(`pointerdown`,l,i)}),a}var D=[`info`,`success`,`warning`,`danger`,`debug`],ee=[`auto`,`neutral`,`accent`,`success`,`warning`,`danger`],O=[`default`,`soft`,`surface`,`solid`,`outline`],k=[`top-right`,`top-left`,`top-center`,`bottom-right`,`bottom-left`,`bottom-center`],A={level:f(D,`info`),color:f(ee,`auto`),variant:f(O,`default`),title:d,description:d,duration:u.default(5e3).min(0),dismissible:p.default(!0),class:d,contentClass:d,closeClass:d},te={id:d.default(`ui-toast-root`),position:f(k,`top-right`),duration:u.default(5e3).min(0),includeMessages:p.default(!0),maxItems:u.default(3).min(0),class:d},ne=[h({name:`opening`,state:`opening`,project:()=>({}),onDone:`OPENING_DONE`,onError:`OPENING_ERROR`}),h({name:`closing`,state:`closing`,project:({context:e})=>({reason:e.dismissal.reason}),onDone:`CLOSING_DONE`,onError:`CLOSING_ERROR`})],j=e=>e===`outlet`||e===`visibility`||e===`consumer`||e===`gesture`?e:null,M=(e,t)=>e.props??t,N=({event:e,props:t})=>M(e,t).duration!==t.duration,P=({event:e,props:t})=>N({event:e,props:t})&&M(e,t).duration===0,F=({event:e,props:t})=>N({event:e,props:t})&&M(e,t).duration>0,I=(e,t)=>x({initial:`idle`,states:{idle:{on:{OPEN:{target:`opening`,effects:`prepareOpen`},PAUSE:{guard:`addsPauseSource`,reduce:`addPauseSource`},RESUME:{guard:`hasPauseSource`,reduce:`removePauseSource`},PROPS_CHANGED:{reduce:`reconcileProps`,effects:`syncProps`}}},opening:{tags:[`visible`,`expanded`,`transitioning`],on:{OPENING_DONE:[{target:`open.persistent`,guard:`isPersistent`,effects:`finishOpen`},{target:`open.paused`,guard:`isPaused`,effects:`finishOpen`},{target:`open.running`,effects:`finishOpen`}],OPENING_ERROR:[{target:`open.persistent`,guard:`isPersistent`,effects:`finishOpen`},{target:`open.paused`,guard:`isPaused`,effects:`finishOpen`},{target:`open.running`,effects:`finishOpen`}],PAUSE:{guard:`addsPauseSource`,reduce:`addPauseSource`},RESUME:{guard:`hasPauseSource`,reduce:`removePauseSource`},PROPS_CHANGED:{reduce:`reconcileProps`,effects:`syncProps`},DISMISS:{target:`closing`,reduce:`dismiss`,effects:`prepareClose`}}},open:{id:`open`,initial:`running`,tags:[`visible`,`expanded`,`open`],on:{DISMISS:{target:`closing`,reduce:`dismiss`,effects:`prepareClose`}},states:{persistent:{on:{PAUSE:{guard:`addsPauseSource`,reduce:`addPauseSource`},RESUME:{guard:`hasPauseSource`,reduce:`removePauseSource`},PROPS_CHANGED:[{target:`paused`,guard:`becomesTimedWhilePaused`,reduce:`reconcileProps`,effects:`syncProps`},{target:`running`,guard:`becomesTimed`,reduce:`reconcileProps`,effects:`syncProps`},{reduce:`reconcileProps`,effects:`syncProps`}]}},running:{entry:`startTimer`,exit:`stopTimer`,on:{PAUSE:{target:`paused`,guard:`addsPauseSource`,reduce:`addPauseSource`},TICK:{reduce:`tick`},PROPS_CHANGED:[{target:`persistent`,guard:`becomesPersistent`,reduce:`reconcileProps`,effects:`syncProps`},{target:`running`,guard:`durationChanges`,reduce:`reconcileProps`,effects:`syncProps`},{reduce:`reconcileProps`,effects:`syncProps`}]}},paused:{tags:[`paused`],on:{PAUSE:{guard:`addsPauseSource`,reduce:`addPauseSource`},RESUME:[{target:`running`,guard:`releasesFinalPauseSource`,reduce:`removePauseSource`},{guard:`hasPauseSource`,reduce:`removePauseSource`}],PROPS_CHANGED:[{target:`persistent`,guard:`becomesPersistent`,reduce:`reconcileProps`,effects:`syncProps`},{reduce:`reconcileProps`,effects:`syncProps`}]}}}},closing:{tags:[`visible`,`transitioning`],on:{PROPS_CHANGED:{reduce:`reconcileProps`,effects:`syncProps`},CLOSING_DONE:{target:`removed`,effects:`finishClose`},CLOSING_ERROR:{target:`removed`,effects:`finishClose`}}},removed:{tags:[`removed`],on:{PROPS_CHANGED:{reduce:`reconcileProps`,effects:`syncProps`}}}}},{context:{timer:{remaining:e.duration,pauseSources:[]},dismissal:{reason:`api`}},props:e,reducers:{reconcileProps:({context:e,event:t,props:n})=>{let r=M(t,n);return{context:r.duration===n.duration?e:{...e,timer:{...e.timer,remaining:r.duration}},props:r}},addPauseSource:({context:e,event:t})=>({context:{...e,timer:{remaining:e.timer.pauseSources.length===0&&typeof t.remaining==`number`?t.remaining:e.timer.remaining,pauseSources:[...e.timer.pauseSources,j(t.source)]}}}),removePauseSource:({context:e,event:t})=>({context:{...e,timer:{...e.timer,pauseSources:e.timer.pauseSources.filter(e=>e!==t.source)}}}),tick:({context:e,event:t})=>({context:{...e,timer:{...e.timer,remaining:Math.max(0,Number(t.remaining)||0)}}}),dismiss:({context:e,event:t})=>({context:{...e,dismissal:{reason:t.reason===`timeout`||t.reason===`close`||t.reason===`swipe`?t.reason:`api`}}})},guards:{isPersistent:({props:e})=>e.duration===0,isPaused:({context:e})=>e.timer.pauseSources.length>0,addsPauseSource:({context:e,event:t})=>{let n=j(t.source);return n!==null&&!e.timer.pauseSources.includes(n)},hasPauseSource:({context:e,event:t})=>{let n=j(t.source);return n!==null&&e.timer.pauseSources.includes(n)},releasesFinalPauseSource:({context:e,event:t})=>{let n=j(t.source);return n!==null&&e.timer.pauseSources.length===1&&e.timer.pauseSources[0]===n},durationChanges:N,becomesPersistent:P,becomesTimed:F,becomesTimedWhilePaused:e=>F(e)&&e.context.timer.pauseSources.length>0},effects:{prepareOpen:({props:e})=>t.prepareOpen(e),finishOpen:t.finishOpen,startTimer:({context:e})=>t.startTimer(e.timer.remaining),stopTimer:t.stopTimer,prepareClose:t.prepareClose,syncProps:({props:e})=>t.syncProps(e),finishClose:({context:e})=>t.finishClose(e.dismissal.reason)}}),L=b({definition:{component:`ui.toast`,parts:{root:{base:[`group/toast pointer-events-auto relative grid w-full min-w-0 items-center gap-x-3 gap-y-1 overflow-hidden rounded-overlay-md px-3 py-2.5 outline-none`,`data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0`],variants:{variant:{default:``,soft:``,surface:``,solid:``,outline:``},color:{neutral:``,accent:``,success:``,warning:``,danger:``},hasMarker:{true:`grid-cols-[auto_minmax(0,1fr)_auto]`,false:`grid-cols-[minmax(0,1fr)_auto]`},hasDescription:{true:``,false:``}},defaults:{variant:`default`,color:`neutral`,hasMarker:!1,hasDescription:!1}},marker:{base:`size-2 self-center rounded-full`,variants:{color:{neutral:`hidden`,accent:``,success:``,warning:``,danger:``},variant:{default:`hidden`,soft:``,surface:``,solid:`hidden`,outline:``}},defaults:{color:`neutral`,variant:`default`}},content:{base:`grid min-w-0 gap-0.5 self-center`},title:{base:`min-w-0`},description:{base:`min-w-0`},close:{base:[`-mr-1 inline-flex size-control-md shrink-0 items-center justify-center self-center rounded-full outline-none`]},closeIcon:{base:`size-icon fill-current`},outlet:{base:[`pointer-events-none fixed z-toast flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2`],variants:{position:{"top-right":`right-4 top-4 justify-items-end`,"top-left":`left-4 top-4 justify-items-start`,"top-center":`left-1/2 top-4 -translate-x-1/2 justify-items-center`,"bottom-right":`bottom-4 right-4 justify-items-end`,"bottom-left":`bottom-4 left-4 justify-items-start`,"bottom-center":`bottom-4 left-1/2 -translate-x-1/2 justify-items-center`}},defaults:{position:`top-right`}}}}}),R=e=>[`info`,`success`,`warning`,`danger`,`debug`].includes(String(e)),z=e=>[`auto`,`neutral`,`accent`,`success`,`warning`,`danger`].includes(String(e)),B=e=>[`default`,`soft`,`surface`,`solid`,`outline`].includes(String(e)),V=e=>e===`info`?`accent`:e===`success`||e===`warning`||e===`danger`?e:`neutral`,H=(e,t)=>z(e)&&e!==`auto`?e:V(t),U=(e,t)=>{let n=typeof e==`number`?e:Number(e);return Number.isFinite(n)&&n>=0?n:t},W=e=>{let t=e.style;return`translateY(${Number.parseFloat(t.getPropertyValue(`--ui-toast-stack-offset`))||0}px) scale(${Number.parseFloat(t.getPropertyValue(`--ui-toast-stack-scale`))||1})`},G=e=>Array.from(e.querySelectorAll(`:scope > [data-ui-toast]`)).filter(e=>e.dataset.state!==`closing`&&e.dataset.state!==`closed`),K=e=>{i(e)},q=(e,t=!1,n)=>{let r=n??e.getBoundingClientRect().height;K(e);let i=Array.from(e.querySelectorAll(`:scope > [data-ui-toast]`));e.dataset.stack=i.length>1?`collapsed`:`single`;let a=getComputedStyle(e),o=Number.parseFloat(a.rowGap||a.gap||`0`)||0,l=i.map(e=>Math.ceil(e.scrollHeight||e.getBoundingClientRect().height)),u=Number.parseFloat(a.getPropertyValue(`--ui-toast-stack-peek`))||8,d=e.dataset.position?.startsWith(`bottom`)?-1:1,f=e.dataset.stackExpanded===`true`,p=Math.min(Math.max(0,i.length-1),3);e.style.setProperty(`--ui-toast-front-height`,`${l[0]??0}px`),e.style.setProperty(`--ui-toast-stack-height`,`${(l[0]??0)+p*u}px`),e.style.setProperty(`--ui-toast-stack-expanded-height`,`${l.reduce((e,t)=>e+t,0)+Math.max(0,i.length-1)*o}px`);let m=e.getBoundingClientRect().height;if(t&&Math.abs(r-m)>=1){let t=e.style.height;c(e,{keyframes:{height:[`${r}px`,`${m}px`]},role:`layout`,cleanup:()=>{e.style.height=t}})}let h=0;i.forEach((n,r)=>{let a=Math.min(r,3),c=f?h*d:a*u*d,p=f?1:Math.max(.91,1-a*.03),m=f?1:Math.max(.72,1-a*.08);f&&(h+=(l[r]??0)+o),n.dataset.stackIndex=String(r),n.dataset.swipeAxis=e.dataset.position?.endsWith(`left`)||e.dataset.position?.endsWith(`right`)?`x`:`y`,n.style.setProperty(`--ui-toast-stack-index`,String(r)),n.style.setProperty(`--ui-toast-stack-depth`,String(a)),n.style.setProperty(`--ui-toast-stack-direction`,String(d)),n.style.setProperty(`--ui-toast-outside`,d>0?`-100%`:`100%`),n.style.setProperty(`--ui-toast-stack-offset`,`${c}px`),n.style.setProperty(`--ui-toast-stack-scale`,String(p)),n.style.setProperty(`--ui-toast-stack-opacity`,String(m)),n.style.zIndex=String(i.length-r);let g=`translateY(${c}px) scale(${p})`;n.dataset.swiping!==`true`&&(t&&n.dataset.state===`open`?s(n).animate({opacity:m,transform:g}).role(`layout`).play():n.dataset.state===`open`&&(n.style.opacity=String(m),n.style.transform=g))})},J=(e,t)=>{e.dispatchEvent(new CustomEvent(`ui:toast-dismiss-request`,{detail:{reason:t}}))},Y=(e,t)=>{t!==0&&G(e).slice(t).forEach(e=>J(e,`api`))},X=(e,t)=>{let n=H(t.color,t.level),r=e.dataset.description===`true`||!!t.description.trim(),i=n!==`neutral`&&t.variant!==`solid`&&t.variant!=="default",a=t.level===`danger`||t.level===`warning`;Object.entries({level:t.level,color:n,variant:t.variant,duration:String(t.duration),dismissible:String(t.dismissible)}).forEach(([t,n])=>{e.dataset[t]!==n&&(e.dataset[t]=n)}),e.setAttribute(`role`,a?`alert`:`status`),e.setAttribute(`aria-live`,a?`assertive`:`polite`);let o=y({part:L.parts.root,props:{variant:t.variant,color:n,hasDescription:r,hasMarker:i},className:t.class});e.className!==o&&(e.className=o),e.querySelector(`[data-ui-toast-marker]`)?.setAttribute(`class`,y({part:L.parts.marker,props:{variant:t.variant,color:n}})),e.querySelectorAll(`[data-ui-toast-content]`).forEach(e=>{e.className=y({part:L.parts.content,className:t.contentClass})}),e.querySelectorAll(`[data-ui-toast-title]`).forEach(e=>{e.className=`text-sm font-medium ${y({part:L.parts.title})}`}),e.querySelectorAll(`[data-ui-toast-description]`).forEach(e=>{e.className=`text-sm ${y({part:L.parts.description})}`}),e.querySelectorAll(`[data-ui-toast-close]`).forEach(e=>{e.hidden=!t.dismissible,e.className=y({part:L.parts.close,className:t.closeClass})})},Z=()=>{let a=null,s,c=0,l=null,u=null,d=!1,f=null,p=()=>{if(!a)throw Error(`Toast has not been initialized.`);return a},m=()=>p().parentElement?.matches(`[data-ui-toast-outlet]`)?p().parentElement:null,h=()=>l===null?y.getSnapshot().context.timer.remaining:Math.max(0,c-performance.now()),_=()=>{l!==null&&clearTimeout(l),u!==null&&clearInterval(u),l=u=null},y=g({schema:A,hooks:ne,createMachine:({props:t})=>I(t,{prepareOpen:e=>{p().dataset.state=`opening`,X(p(),e),m()&&q(m(),!0)},finishOpen:()=>{p().dataset.state=`open`,m()&&q(m(),!0)},startTimer:e=>{e<=0||(c=performance.now()+e,l=window.setTimeout(()=>y.send({type:`DISMISS`,reason:`timeout`}),e),u=window.setInterval(()=>y.send({type:`TICK`,remaining:h()}),100))},stopTimer:_,prepareClose:()=>{_(),p().dataset.state=`closing`,m()&&q(m(),!0)},finishClose:t=>{let n=p(),r=m();n.dataset.state=`closed`,e({el:n,name:`ui:dismiss`,detail:{reason:t}}),n.remove(),r&&q(r,!0)},syncProps:e=>{X(p(),e),m()&&q(m())}})}),b=e=>{d||y.send({type:`PAUSE`,source:e,remaining:h()})},x=e=>{d||y.send({type:`RESUME`,source:e})};return{...y,get isOpen(){return this.snapshot.current?.tags.includes(`open`)??!1},get isPaused(){return(this.snapshot.current?.context.timer.pauseSources.length??0)>0},get remaining(){return this.snapshot.current?.context.timer.remaining??0},init(){s=v(this),a=this.$el,y.connect(this.$el,this.snapshot),document.hidden&&b(`visibility`),t({target:p(),event:`click`,handler:e=>{let t=e.target;y.getSnapshot().props.dismissible&&t instanceof Element&&t.closest(`[data-ui-toast-close]`)&&y.send({type:`DISMISS`,reason:`close`})},cleanup:s}),t({target:p(),event:`ui:toast-dismiss-request`,handler:e=>{let t=e instanceof CustomEvent?e.detail?.reason:`api`;y.send({type:`DISMISS`,reason:t})},cleanup:s}),t({target:p(),event:`ui:toast-pause-request`,handler:e=>{e instanceof CustomEvent&&e.detail?.paused===!0?b(`outlet`):x(`outlet`)},cleanup:s}),t({target:document,event:`visibilitychange`,handler:()=>document.hidden?b(`visibility`):x(`visibility`),cleanup:s}),t({target:p(),event:`pointerdown`,handler:e=>{if(!(e instanceof PointerEvent)||!e.isPrimary||e.button!==0||!y.getSnapshot().props.dismissible||e.target instanceof Element&&e.target.closest(`button, a, input, select, textarea`))return;let t=p(),a=m()?.dataset.position??`bottom-right`,s=a.endsWith(`left`)||a.endsWith(`right`),c=s?a.endsWith(`left`)?-1:1:a.startsWith(`top`)?-1:1,l=s?e.clientX:e.clientY,u=performance.now(),h=W(t),g=Number.parseFloat(t.style.getPropertyValue(`--ui-toast-stack-opacity`))||1,_=r(0);f?.(),i(t),b(`gesture`),t.dataset.swiping=`true`,t.setPointerCapture(e.pointerId);let v=_.on(`change`,e=>{let n=s?`translateX(${e}px)`:`translateY(${e}px)`;t.style.transform=`${h} ${n}`;let r=Math.abs(e),i=s?t.offsetWidth:t.offsetHeight;t.style.opacity=String(Math.max(.35,g*(1-r/Math.max(i*2,1))))}),S=!1,C=()=>{window.removeEventListener(`pointermove`,T),window.removeEventListener(`pointerup`,E),window.removeEventListener(`pointercancel`,D)},w=()=>{S||(S=!0,C(),v(),delete t.dataset.swiping,f===w&&(f=null))},T=t=>{if(t.pointerId!==e.pointerId)return;t.preventDefault();let n=(s?t.clientX:t.clientY)-l;_.set(n*c>=0?n:n*.2)},E=(r,i=!1)=>{if(r.pointerId!==e.pointerId)return;C();let a=_.get(),l=Math.max(1,performance.now()-u),f=Math.abs(a)/l,p=!i&&a*c>0&&(Math.abs(a)>=45||f>.11),m=p?o(_,c*(s?window.innerWidth:window.innerHeight),n.gestureExit):o(_,0,{type:`spring`,...n.gestureSettle}),v=o(t,{opacity:p?0:g},n.gestureExit);Promise.allSettled([m.finished,v.finished]).then(()=>{w(),!d&&(x(`gesture`),p?J(t,`swipe`):(t.style.opacity=String(g),t.style.transform=h))})},D=e=>E(e,!0);f=w,window.addEventListener(`pointermove`,T),window.addEventListener(`pointerup`,E),window.addEventListener(`pointercancel`,D)},cleanup:s}),y.send(`OPEN`)},destroy(){d=!0,f?.(),_(),y.disconnect(),a=null},dismiss(){y.send({type:`DISMISS`,reason:`api`})},pause(){b(`consumer`)},resume(){x(`consumer`)}}},re=e=>{let t=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);t.setAttribute(`viewBox`,`0 0 32 32`),t.setAttribute(`aria-hidden`,`true`),t.dataset.uiToastCloseIcon=``,t.setAttribute(`class`,e);let n=document.createElementNS(`http://www.w3.org/2000/svg`,`polygon`);return n.setAttribute(`points`,`17.4141 16 24 9.4141 22.5859 8 16 14.5859 9.4143 8 8 9.4141 14.5859 16 8 22.5859 9.4143 24 16 17.4141 22.5859 24 24 22.5859 17.4141 16`),t.append(n),t},ie=(e,t)=>{let n=R(e.level)?e.level:`info`,r=B(e.variant)?e.variant:`default`,i=typeof e.title==`string`?e.title:``,a=typeof e.description==`string`?e.description:``,o=U(e.duration,t),s=typeof e.dismissible!=`boolean`||e.dismissible,c=document.createElement(`div`);c.setAttribute(`x-data`,`UiToast`),c.setAttribute(`x-ui-transition:opening`,`$ui.motion($transition).animate($ui.motion.presets.toast.in).role('presence').play()`),c.setAttribute(`x-ui-transition:closing`,`$transition.data.reason === 'swipe' ? null : $ui.motion($transition).animate($ui.motion.presets.toast.out).role('presence').play()`),Object.assign(c.dataset,{uiToast:``,uiToastRecipe:``,uiSurface:`+3`,uiElevation:`4`,level:n,color:z(e.color)?e.color:`auto`,variant:r,duration:String(o),dismissible:String(s),description:String(!!a.trim()),state:`closed`}),c.setAttribute(`aria-atomic`,`true`),c.style.opacity=`0`;let l=document.createElement(`span`);l.dataset.uiToastMarker=``,l.setAttribute(`aria-hidden`,`true`),c.append(l);let u=document.createElement(`div`);if(u.dataset.uiToastContent=``,i){let e=document.createElement(`strong`);e.dataset.uiToastTitle=``,e.textContent=i,u.append(e)}if(a){let e=document.createElement(`div`);e.dataset.uiToastDescription=``,e.textContent=a,u.append(e)}if(c.append(u),s){let e=document.createElement(`button`);e.type=`button`,e.dataset.uiToastClose=``,e.setAttribute(`aria-label`,`Dismiss notification`),e.append(re(y({part:L.parts.closeIcon}))),c.append(e)}return c},Q=e=>{let n=new Set,r=null,i,a=e=>{r?.querySelectorAll(`:scope > [data-ui-toast]`).forEach(t=>{t.dispatchEvent(new CustomEvent(`ui:toast-pause-request`,{detail:{paused:e}}))})},o=e=>{let t=n.size===0;if(n.add(e),!r||!t)return;let i=r.getBoundingClientRect().height;r.dataset.stackExpanded=`true`,a(!0),q(r,!0,i)},s=e=>{if(n.delete(e),!r||n.size>0)return;let t=r.getBoundingClientRect().height;delete r.dataset.stackExpanded,a(!1),q(r,!0,t)};return{props:null,init(){i=v(this),this.props=m({el:this.$el,schema:te,onChange:()=>this.sync()});let e=this.$el;r=e,this.sync(),i.add(E(e,()=>(o(`pointer`),()=>s(`pointer`)))),t({target:e,event:`focusin`,handler:()=>o(`focus`),cleanup:i}),t({target:e,event:`focusout`,handler:()=>queueMicrotask(()=>{e.contains(document.activeElement)||s(`focus`)}),cleanup:i}),t({target:document,event:`ui:toast`,handler:e=>this.add(e instanceof CustomEvent?e.detail:{}),cleanup:i}),queueMicrotask(()=>Y(e,this.props.maxItems))},destroy(){r&&K(r),this.props.disconnect(),n.clear(),r=null},sync(){let e=this.$el;e.id=this.props.id,e.dataset.position=this.props.position,e.dataset.duration=String(this.props.duration),e.dataset.maxItems=String(this.props.maxItems),e.className=y({part:L.parts.outlet,props:{position:this.props.position},className:this.props.class}),q(e),Y(e,this.props.maxItems)},add(t){let r=typeof t.title==`string`?t.title:``,i=typeof t.description==`string`?t.description:``;if(!r.trim()&&!i.trim())return;let a=this.$el,o=ie(t,this.props.duration);a.prepend(o),e.initTree(o),n.size>0&&o.dispatchEvent(new CustomEvent(`ui:toast-pause-request`,{detail:{paused:!0}})),q(a),Y(a,this.props.maxItems)}}},ae=e=>{_(`UiToast`,Z)(e),_(`UiToastOutlet`,()=>Q(e))(e)},$=new WeakSet,oe=e=>{$.has(e)||($.add(e),l(e),ae(e))};export{Z as n,Q as r,oe as t};
|
|
2
|
-
//# sourceMappingURL=entry.generated-Ce_fpT15.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entry.generated-Ce_fpT15.js","names":[],"sources":["../../../../../../../../../node_modules/.pnpm/motion-dom@12.43.0/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.mjs","../../../../../../../../../node_modules/.pnpm/motion-dom@12.43.0/node_modules/motion-dom/dist/es/gestures/utils/setup.mjs","../../../../../../../../../node_modules/.pnpm/motion-dom@12.43.0/node_modules/motion-dom/dist/es/gestures/hover.mjs","../../../../../../../../client/src/components/toast/contract.ts","../../../../../../../../client/src/components/toast/machine.ts","../../../../../../../../client/src/components/toast/styles.ts","../../../../../../../../client/src/components/toast/index.ts","../../../../../../../../client/src/components/toast/entry.generated.ts"],"sourcesContent":["const isDragging = {\n x: false,\n y: false,\n};\nfunction isDragActive() {\n return isDragging.x || isDragging.y;\n}\n\nexport { isDragActive, isDragging };\n//# sourceMappingURL=is-active.mjs.map\n","import { resolveElements } from '../../utils/resolve-elements.mjs';\n\nfunction setupGesture(elementOrSelector, options) {\n const elements = resolveElements(elementOrSelector);\n const gestureAbortController = new AbortController();\n const eventOptions = {\n passive: true,\n ...options,\n signal: gestureAbortController.signal,\n };\n const cancel = () => gestureAbortController.abort();\n return [elements, eventOptions, cancel];\n}\n\nexport { setupGesture };\n//# sourceMappingURL=setup.mjs.map\n","import { isDragActive } from './drag/state/is-active.mjs';\nimport { setupGesture } from './utils/setup.mjs';\n\nfunction isValidHover(event) {\n return !(event.pointerType === \"touch\" || isDragActive());\n}\n/**\n * Create a hover gesture. hover() is different to .addEventListener(\"pointerenter\")\n * in that it has an easier syntax, filters out polyfilled touch events, interoperates\n * with drag gestures, and automatically removes the \"pointerennd\" event listener when the hover ends.\n *\n * @public\n */\nfunction hover(elementOrSelector, onHoverStart, options = {}) {\n const [elements, eventOptions, cancel] = setupGesture(elementOrSelector, options);\n elements.forEach((element) => {\n let isPressed = false;\n let deferredHoverEnd = false;\n let hoverEndCallback;\n const removePointerLeave = () => {\n element.removeEventListener(\"pointerleave\", onPointerLeave);\n };\n const endHover = (event) => {\n if (hoverEndCallback) {\n hoverEndCallback(event);\n hoverEndCallback = undefined;\n }\n removePointerLeave();\n };\n const onPointerUp = (event) => {\n isPressed = false;\n window.removeEventListener(\"pointerup\", onPointerUp);\n window.removeEventListener(\"pointercancel\", onPointerUp);\n if (deferredHoverEnd) {\n deferredHoverEnd = false;\n endHover(event);\n }\n };\n const onPointerDown = () => {\n isPressed = true;\n window.addEventListener(\"pointerup\", onPointerUp, eventOptions);\n window.addEventListener(\"pointercancel\", onPointerUp, eventOptions);\n };\n const onPointerLeave = (leaveEvent) => {\n if (leaveEvent.pointerType === \"touch\")\n return;\n if (isPressed) {\n deferredHoverEnd = true;\n return;\n }\n endHover(leaveEvent);\n };\n const onPointerEnter = (enterEvent) => {\n if (!isValidHover(enterEvent))\n return;\n deferredHoverEnd = false;\n const onHoverEnd = onHoverStart(element, enterEvent);\n if (typeof onHoverEnd !== \"function\")\n return;\n hoverEndCallback = onHoverEnd;\n element.addEventListener(\"pointerleave\", onPointerLeave, eventOptions);\n };\n element.addEventListener(\"pointerenter\", onPointerEnter, eventOptions);\n element.addEventListener(\"pointerdown\", onPointerDown, eventOptions);\n });\n return cancel;\n}\n\nexport { hover };\n//# sourceMappingURL=hover.mjs.map\n","import {bool, number, oneOf, string, type PropState, type SchemaToProps} from '../../runtime';\n\nconst TOAST_LEVELS = ['info', 'success', 'warning', 'danger', 'debug'] as const;\nconst TOAST_COLORS = ['auto', 'neutral', 'accent', 'success', 'warning', 'danger'] as const;\nconst TOAST_RESOLVED_COLORS = ['neutral', 'accent', 'success', 'warning', 'danger'] as const;\nconst TOAST_VARIANTS = ['default', 'soft', 'surface', 'solid', 'outline'] as const;\nconst TOAST_POSITIONS = ['top-right', 'top-left', 'top-center', 'bottom-right', 'bottom-left', 'bottom-center'] as const;\n\nconst toastSchema = {\n level: oneOf(TOAST_LEVELS, 'info'),\n color: oneOf(TOAST_COLORS, 'auto'),\n variant: oneOf(TOAST_VARIANTS, 'default'),\n title: string,\n description: string,\n duration: number.default(5000).min(0),\n dismissible: bool.default(true),\n class: string,\n contentClass: string,\n closeClass: string,\n};\n\nconst toastOutletSchema = {\n id: string.default('ui-toast-root'),\n position: oneOf(TOAST_POSITIONS, 'top-right'),\n duration: number.default(5000).min(0),\n includeMessages: bool.default(true),\n maxItems: number.default(3).min(0),\n class: string,\n};\n\ntype ToastLevel = typeof TOAST_LEVELS[number];\ntype ToastColor = typeof TOAST_COLORS[number];\ntype ToastResolvedColor = typeof TOAST_RESOLVED_COLORS[number];\ntype ToastVariant = typeof TOAST_VARIANTS[number];\ntype ToastPosition = typeof TOAST_POSITIONS[number];\ntype ToastProps = SchemaToProps<typeof toastSchema>;\ntype ToastOutletProps = PropState<typeof toastOutletSchema>;\n\nexport {TOAST_COLORS, TOAST_LEVELS, TOAST_POSITIONS, TOAST_RESOLVED_COLORS, TOAST_VARIANTS, toastOutletSchema, toastSchema};\nexport type {ToastColor, ToastLevel, ToastOutletProps, ToastPosition, ToastProps, ToastResolvedColor, ToastVariant};\n","import {createMachine, type Machine, type MachineEventObject} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {ToastProps} from './contract';\n\ntype ToastDismissReason = 'timeout' | 'close' | 'api' | 'swipe';\ntype ToastPauseSource = 'outlet' | 'visibility' | 'consumer' | 'gesture';\n\ntype ToastContext = {\n timer: {remaining: number; pauseSources: ToastPauseSource[]};\n dismissal: {reason: ToastDismissReason};\n};\n\ntype ToastMachineEffects = {\n prepareOpen(props: ToastProps): void;\n finishOpen(): void;\n startTimer(remaining: number): void;\n stopTimer(): void;\n prepareClose(): void;\n finishClose(reason: ToastDismissReason): void;\n syncProps(props: ToastProps): void;\n};\n\nconst openingHook = defineHook({\n name: 'opening', state: 'opening', project: () => ({}), onDone: 'OPENING_DONE', onError: 'OPENING_ERROR',\n} satisfies TransitionHookDefinition<ToastContext, ToastProps, Record<string, never>, 'opening'>);\nconst closingHook = defineHook({\n name: 'closing', state: 'closing', project: ({context}) => ({reason: context.dismissal.reason}),\n onDone: 'CLOSING_DONE', onError: 'CLOSING_ERROR',\n} satisfies TransitionHookDefinition<ToastContext, ToastProps, {reason: ToastDismissReason}, 'closing'>);\nconst toastHooks = [openingHook, closingHook] as const;\n\nconst pauseSourceFrom = (value: unknown): ToastPauseSource | null => (\n value === 'outlet' || value === 'visibility' || value === 'consumer' || value === 'gesture' ? value : null\n);\nconst nextPropsFrom = (event: MachineEventObject, current: ToastProps): ToastProps => (\n (event.props as ToastProps | undefined) ?? current\n);\nconst durationChanges = ({event, props}: {event: MachineEventObject; props: Readonly<ToastProps>}): boolean => (\n nextPropsFrom(event, props).duration !== props.duration\n);\nconst becomesPersistent = ({event, props}: {event: MachineEventObject; props: Readonly<ToastProps>}): boolean => (\n durationChanges({event, props}) && nextPropsFrom(event, props).duration === 0\n);\nconst becomesTimed = ({event, props}: {event: MachineEventObject; props: Readonly<ToastProps>}): boolean => (\n durationChanges({event, props}) && nextPropsFrom(event, props).duration > 0\n);\n\nconst createToastMachine = (props: ToastProps, effects: ToastMachineEffects): Machine<ToastContext, ToastProps> => createMachine<ToastContext, ToastProps>({\n initial: 'idle',\n states: {\n idle: {on: {\n OPEN: {target: 'opening', effects: 'prepareOpen'},\n PAUSE: {guard: 'addsPauseSource', reduce: 'addPauseSource'},\n RESUME: {guard: 'hasPauseSource', reduce: 'removePauseSource'},\n PROPS_CHANGED: {reduce: 'reconcileProps', effects: 'syncProps'},\n }},\n opening: {\n tags: ['visible', 'expanded', 'transitioning'],\n on: {\n OPENING_DONE: [\n {target: 'open.persistent', guard: 'isPersistent', effects: 'finishOpen'},\n {target: 'open.paused', guard: 'isPaused', effects: 'finishOpen'},\n {target: 'open.running', effects: 'finishOpen'},\n ],\n OPENING_ERROR: [\n {target: 'open.persistent', guard: 'isPersistent', effects: 'finishOpen'},\n {target: 'open.paused', guard: 'isPaused', effects: 'finishOpen'},\n {target: 'open.running', effects: 'finishOpen'},\n ],\n PAUSE: {guard: 'addsPauseSource', reduce: 'addPauseSource'},\n RESUME: {guard: 'hasPauseSource', reduce: 'removePauseSource'},\n PROPS_CHANGED: {reduce: 'reconcileProps', effects: 'syncProps'},\n DISMISS: {target: 'closing', reduce: 'dismiss', effects: 'prepareClose'},\n },\n },\n open: {\n id: 'open', initial: 'running', tags: ['visible', 'expanded', 'open'],\n on: {DISMISS: {target: 'closing', reduce: 'dismiss', effects: 'prepareClose'}},\n states: {\n persistent: {on: {\n PAUSE: {guard: 'addsPauseSource', reduce: 'addPauseSource'},\n RESUME: {guard: 'hasPauseSource', reduce: 'removePauseSource'},\n PROPS_CHANGED: [\n {target: 'paused', guard: 'becomesTimedWhilePaused', reduce: 'reconcileProps', effects: 'syncProps'},\n {target: 'running', guard: 'becomesTimed', reduce: 'reconcileProps', effects: 'syncProps'},\n {reduce: 'reconcileProps', effects: 'syncProps'},\n ],\n }},\n running: {entry: 'startTimer', exit: 'stopTimer', on: {\n PAUSE: {target: 'paused', guard: 'addsPauseSource', reduce: 'addPauseSource'},\n TICK: {reduce: 'tick'},\n PROPS_CHANGED: [\n {target: 'persistent', guard: 'becomesPersistent', reduce: 'reconcileProps', effects: 'syncProps'},\n {target: 'running', guard: 'durationChanges', reduce: 'reconcileProps', effects: 'syncProps'},\n {reduce: 'reconcileProps', effects: 'syncProps'},\n ],\n }},\n paused: {tags: ['paused'], on: {\n PAUSE: {guard: 'addsPauseSource', reduce: 'addPauseSource'},\n RESUME: [\n {target: 'running', guard: 'releasesFinalPauseSource', reduce: 'removePauseSource'},\n {guard: 'hasPauseSource', reduce: 'removePauseSource'},\n ],\n PROPS_CHANGED: [\n {target: 'persistent', guard: 'becomesPersistent', reduce: 'reconcileProps', effects: 'syncProps'},\n {reduce: 'reconcileProps', effects: 'syncProps'},\n ],\n }},\n },\n },\n closing: {\n tags: ['visible', 'transitioning'],\n on: {\n PROPS_CHANGED: {reduce: 'reconcileProps', effects: 'syncProps'},\n CLOSING_DONE: {target: 'removed', effects: 'finishClose'},\n CLOSING_ERROR: {target: 'removed', effects: 'finishClose'},\n },\n },\n removed: {tags: ['removed'], on: {PROPS_CHANGED: {reduce: 'reconcileProps', effects: 'syncProps'}}},\n },\n}, {\n context: {timer: {remaining: props.duration, pauseSources: []}, dismissal: {reason: 'api'}}, props,\n reducers: {\n reconcileProps: ({context, event, props: currentProps}) => {\n const nextProps = nextPropsFrom(event, currentProps);\n return {\n context: nextProps.duration === currentProps.duration\n ? context\n : {...context, timer: {...context.timer, remaining: nextProps.duration}},\n props: nextProps,\n };\n },\n addPauseSource: ({context, event}) => ({context: {...context, timer: {\n remaining: context.timer.pauseSources.length === 0 && typeof event.remaining === 'number'\n ? event.remaining\n : context.timer.remaining,\n pauseSources: [...context.timer.pauseSources, pauseSourceFrom(event.source) as ToastPauseSource],\n }}}),\n removePauseSource: ({context, event}) => ({context: {...context, timer: {\n ...context.timer,\n pauseSources: context.timer.pauseSources.filter((source) => source !== event.source),\n }}}),\n tick: ({context, event}) => ({context: {...context, timer: {...context.timer, remaining: Math.max(0, Number(event.remaining) || 0)}}}),\n dismiss: ({context, event}) => ({context: {...context, dismissal: {\n reason: event.reason === 'timeout' || event.reason === 'close' || event.reason === 'swipe'\n ? event.reason\n : 'api' as ToastDismissReason,\n }}}),\n },\n guards: {\n isPersistent: ({props: currentProps}) => currentProps.duration === 0,\n isPaused: ({context}) => context.timer.pauseSources.length > 0,\n addsPauseSource: ({context, event}) => {\n const source = pauseSourceFrom(event.source);\n return source !== null && !context.timer.pauseSources.includes(source);\n },\n hasPauseSource: ({context, event}) => {\n const source = pauseSourceFrom(event.source);\n return source !== null && context.timer.pauseSources.includes(source);\n },\n releasesFinalPauseSource: ({context, event}) => {\n const source = pauseSourceFrom(event.source);\n return source !== null && context.timer.pauseSources.length === 1 && context.timer.pauseSources[0] === source;\n },\n durationChanges,\n becomesPersistent,\n becomesTimed,\n becomesTimedWhilePaused: (scope) => becomesTimed(scope) && scope.context.timer.pauseSources.length > 0,\n },\n effects: {\n prepareOpen: ({props: currentProps}) => effects.prepareOpen(currentProps),\n finishOpen: effects.finishOpen,\n startTimer: ({context}) => effects.startTimer(context.timer.remaining),\n stopTimer: effects.stopTimer,\n prepareClose: effects.prepareClose,\n syncProps: ({props: currentProps}) => effects.syncProps(currentProps),\n finishClose: ({context}) => effects.finishClose(context.dismissal.reason),\n },\n});\n\nexport {createToastMachine, toastHooks};\nexport type {ToastContext, ToastDismissReason, ToastMachineEffects, ToastPauseSource};\n","import {defineStyles} from '../../runtime';\n\nconst toastStyles = defineStyles({definition: {\n component: 'ui.toast',\n parts: {\n root: {\n base: [\n 'group/toast pointer-events-auto relative grid w-full min-w-0 items-center gap-x-3 gap-y-1 overflow-hidden rounded-overlay-md px-3 py-2.5 outline-none',\n 'data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0',\n ],\n variants: {\n variant: {\n default: '',\n soft: '',\n surface: '',\n solid: '',\n outline: '',\n },\n color: {\n neutral: '',\n accent: '',\n success: '',\n warning: '',\n danger: '',\n },\n hasMarker: {\n true: 'grid-cols-[auto_minmax(0,1fr)_auto]',\n false: 'grid-cols-[minmax(0,1fr)_auto]',\n },\n hasDescription: {\n true: '',\n false: '',\n },\n },\n defaults: {\n variant: 'default',\n color: 'neutral',\n hasMarker: false,\n hasDescription: false,\n },\n },\n marker: {\n base: 'size-2 self-center rounded-full',\n variants: {\n color: {\n neutral: 'hidden',\n accent: '',\n success: '',\n warning: '',\n danger: '',\n },\n variant: {\n default: 'hidden',\n soft: '',\n surface: '',\n solid: 'hidden',\n outline: '',\n },\n },\n defaults: {\n color: 'neutral',\n variant: 'default',\n },\n },\n content: {\n base: 'grid min-w-0 gap-0.5 self-center',\n },\n title: {\n base: 'min-w-0',\n },\n description: {\n base: 'min-w-0',\n },\n close: {\n base: [\n '-mr-1 inline-flex size-control-md shrink-0 items-center justify-center self-center rounded-full outline-none',\n ],\n },\n closeIcon: {\n base: 'size-icon fill-current',\n },\n outlet: {\n base: [\n 'pointer-events-none fixed z-toast flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2',\n ],\n variants: {\n position: {\n 'top-right': 'right-4 top-4 justify-items-end',\n 'top-left': 'left-4 top-4 justify-items-start',\n 'top-center': 'left-1/2 top-4 -translate-x-1/2 justify-items-center',\n 'bottom-right': 'bottom-4 right-4 justify-items-end',\n 'bottom-left': 'bottom-4 left-4 justify-items-start',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2 justify-items-center',\n },\n },\n defaults: {\n position: 'top-right',\n },\n },\n },\n}});\n\nexport {toastStyles};\n","import type Alpine from 'alpinejs';\nimport {animate, hover, motionValue} from 'motion';\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 {defineProps} from '@client/runtime/codecs';\nimport type {CleanupManager} from '@client/runtime/cleanup-manager';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {animateSize, createMotionPlan, roles} from '@client/motion';\nimport {stopOwnedMotion} from '@client/motion/owned';\nimport {addListener, dispatch} from '@client/utils';\nimport {\n toastOutletSchema, toastSchema, type ToastColor, type ToastLevel, type ToastOutletProps,\n type ToastProps, type ToastResolvedColor, type ToastVariant,\n} from './contract';\nimport {\n createToastMachine, toastHooks, type ToastContext, type ToastDismissReason, type ToastPauseSource,\n} from './machine';\nimport {toastStyles} from './styles';\n\ntype ToastTransitionName = (typeof toastHooks)[number]['name'];\ntype ToastTransition<TName extends ToastTransitionName = ToastTransitionName> = TransitionForHook<\n Extract<(typeof toastHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype ToastDetail = {description?: unknown; title?: unknown; color?: unknown; level?: unknown; variant?: unknown; duration?: unknown; dismissible?: unknown};\n\n/**\n * Public Alpine API for `ui.toast`.\n *\n * @public\n */\ninterface UiToastApi {\n /** Whether the opening transition has settled. */\n readonly isOpen: boolean;\n /** Whether any pause source currently holds the lifetime timer. */\n readonly isPaused: boolean;\n /** Auto-dismiss lifetime remaining in milliseconds. */\n readonly remaining: number;\n /** Dismisses the notification through its closing transition. */\n dismiss(): void;\n /** Adds the consumer pause source. */\n pause(): void;\n /** Releases the consumer pause source. */\n resume(): void;\n}\n\n/**\n * Public Alpine API for `ui.toast.outlet`.\n *\n * @public\n */\ninterface UiToastOutletApi {\n /** Adds a notification using the same lifecycle as server-rendered markup. */\n add(detail: ToastDetail): void;\n}\n\ntype ToastData = AlpineMachine<ToastContext, ToastProps, typeof toastHooks> & UiToastApi & {init(): void; destroy(): void};\ntype ToastOutletData = UiToastOutletApi & {props: ToastOutletProps; sync(): void; init(): void; destroy(): void};\n\nconst isToastLevel = (value: unknown): value is ToastLevel => ['info', 'success', 'warning', 'danger', 'debug'].includes(String(value));\nconst isToastColor = (value: unknown): value is ToastColor => ['auto', 'neutral', 'accent', 'success', 'warning', 'danger'].includes(String(value));\nconst isToastVariant = (value: unknown): value is ToastVariant => ['default', 'soft', 'surface', 'solid', 'outline'].includes(String(value));\nconst toastColorForLevel = (level: ToastLevel): ToastResolvedColor => level === 'info' ? 'accent' : level === 'success' || level === 'warning' || level === 'danger' ? level : 'neutral';\nconst resolveToastColor = (color: unknown, level: ToastLevel): ToastResolvedColor => isToastColor(color) && color !== 'auto' ? color : toastColorForLevel(level);\nconst normalizedDuration = (value: unknown, fallback: number): number => {\n const duration = typeof value === 'number' ? value : Number(value);\n return Number.isFinite(duration) && duration >= 0 ? duration : fallback;\n};\n\nconst toastRestTransform = (toast: HTMLElement): string => {\n const style = toast.style;\n const offset = Number.parseFloat(style.getPropertyValue('--ui-toast-stack-offset')) || 0;\n const scale = Number.parseFloat(style.getPropertyValue('--ui-toast-stack-scale')) || 1;\n return `translateY(${offset}px) scale(${scale})`;\n};\n\nconst activeToasts = (outlet: HTMLElement): HTMLElement[] => Array.from(outlet.querySelectorAll<HTMLElement>(':scope > [data-ui-toast]'))\n .filter((toast) => toast.dataset.state !== 'closing' && toast.dataset.state !== 'closed');\n\nconst stopToastStackHeightMotion = (outlet: HTMLElement): void => {\n stopOwnedMotion(outlet);\n};\n\nconst syncToastStack = (outlet: HTMLElement, animateStack = false, fromHeight?: number): void => {\n const renderedHeight = fromHeight ?? outlet.getBoundingClientRect().height;\n stopToastStackHeightMotion(outlet);\n const toasts = Array.from(outlet.querySelectorAll<HTMLElement>(':scope > [data-ui-toast]'));\n outlet.dataset.stack = toasts.length > 1 ? 'collapsed' : 'single';\n const style = getComputedStyle(outlet);\n const gap = Number.parseFloat(style.rowGap || style.gap || '0') || 0;\n const heights = toasts.map((toast) => Math.ceil(toast.scrollHeight || toast.getBoundingClientRect().height));\n const peek = Number.parseFloat(style.getPropertyValue('--ui-toast-stack-peek')) || 8;\n const direction = outlet.dataset.position?.startsWith('bottom') ? -1 : 1;\n const expanded = outlet.dataset.stackExpanded === 'true';\n const depth = Math.min(Math.max(0, toasts.length - 1), 3);\n outlet.style.setProperty('--ui-toast-front-height', `${heights[0] ?? 0}px`);\n outlet.style.setProperty('--ui-toast-stack-height', `${(heights[0] ?? 0) + depth * peek}px`);\n outlet.style.setProperty('--ui-toast-stack-expanded-height', `${heights.reduce((sum, height) => sum + height, 0) + Math.max(0, toasts.length - 1) * gap}px`);\n const targetHeight = outlet.getBoundingClientRect().height;\n if (animateStack && Math.abs(renderedHeight - targetHeight) >= 1) {\n const baseline = outlet.style.height;\n animateSize(outlet, {\n keyframes: {height: [`${renderedHeight}px`, `${targetHeight}px`]},\n role: 'layout',\n cleanup: () => { outlet.style.height = baseline; },\n });\n }\n let expandedOffset = 0;\n toasts.forEach((toast, index) => {\n const itemDepth = Math.min(index, 3);\n const offset = expanded ? expandedOffset * direction : itemDepth * peek * direction;\n const scale = expanded ? 1 : Math.max(0.91, 1 - itemDepth * 0.03);\n const opacity = expanded ? 1 : Math.max(0.72, 1 - itemDepth * 0.08);\n if (expanded) expandedOffset += (heights[index] ?? 0) + gap;\n toast.dataset.stackIndex = String(index);\n toast.dataset.swipeAxis = outlet.dataset.position?.endsWith('left') || outlet.dataset.position?.endsWith('right') ? 'x' : 'y';\n toast.style.setProperty('--ui-toast-stack-index', String(index));\n toast.style.setProperty('--ui-toast-stack-depth', String(itemDepth));\n toast.style.setProperty('--ui-toast-stack-direction', String(direction));\n toast.style.setProperty('--ui-toast-outside', direction > 0 ? '-100%' : '100%');\n toast.style.setProperty('--ui-toast-stack-offset', `${offset}px`);\n toast.style.setProperty('--ui-toast-stack-scale', String(scale));\n toast.style.setProperty('--ui-toast-stack-opacity', String(opacity));\n toast.style.zIndex = String(toasts.length - index);\n const transform = `translateY(${offset}px) scale(${scale})`;\n if (toast.dataset.swiping === 'true') return;\n if (animateStack && toast.dataset.state === 'open') {\n createMotionPlan(toast).animate({opacity, transform}).role('layout').play();\n } else if (toast.dataset.state === 'open') {\n toast.style.opacity = String(opacity);\n toast.style.transform = transform;\n }\n });\n};\n\nconst requestDismiss = (toast: HTMLElement, reason: ToastDismissReason): void => {\n toast.dispatchEvent(new CustomEvent('ui:toast-dismiss-request', {detail: {reason}}));\n};\n\nconst enforceLimit = (outlet: HTMLElement, maxItems: number): void => {\n if (maxItems === 0) return;\n const active = activeToasts(outlet);\n active.slice(maxItems).forEach((toast) => requestDismiss(toast, 'api'));\n};\n\nconst syncToast = (root: HTMLElement, props: ToastProps): void => {\n const color = resolveToastColor(props.color, props.level);\n const hasDescription = root.dataset.description === 'true' || Boolean(props.description.trim());\n const hasMarker = color !== 'neutral' && props.variant !== 'solid' && props.variant !== 'default';\n const urgent = props.level === 'danger' || props.level === 'warning';\n Object.entries({\n level: props.level,\n color,\n variant: props.variant,\n duration: String(props.duration),\n dismissible: String(props.dismissible),\n }).forEach(([key, value]) => {\n if (root.dataset[key] !== value) root.dataset[key] = value;\n });\n root.setAttribute('role', urgent ? 'alert' : 'status');\n root.setAttribute('aria-live', urgent ? 'assertive' : 'polite');\n const className = resolveStyle({part: toastStyles.parts.root, props: {variant: props.variant, color, hasDescription, hasMarker}, className: props.class});\n if (root.className !== className) root.className = className;\n root.querySelector<HTMLElement>('[data-ui-toast-marker]')?.setAttribute('class', resolveStyle({part: toastStyles.parts.marker, props: {variant: props.variant, color}}));\n root.querySelectorAll<HTMLElement>('[data-ui-toast-content]').forEach((el) => { el.className = resolveStyle({part: toastStyles.parts.content, className: props.contentClass}); });\n root.querySelectorAll<HTMLElement>('[data-ui-toast-title]').forEach((el) => { el.className = `text-sm font-medium ${resolveStyle({part: toastStyles.parts.title})}`; });\n root.querySelectorAll<HTMLElement>('[data-ui-toast-description]').forEach((el) => { el.className = `text-sm ${resolveStyle({part: toastStyles.parts.description})}`; });\n root.querySelectorAll<HTMLElement>('[data-ui-toast-close]').forEach((el) => { el.hidden = !props.dismissible; el.className = resolveStyle({part: toastStyles.parts.close, className: props.closeClass}); });\n};\n\nconst UiToast = (): TrellisAlpineComponent<ToastData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let cleanup: CleanupManager;\n let deadline = 0;\n let timeout: number | null = null;\n let ticker: number | null = null;\n let destroyed = false;\n let activeGestureCleanup: (() => void) | null = null;\n const root = (): HTMLElement => { if (!rootEl) throw new Error('Toast has not been initialized.'); return rootEl; };\n const outlet = (): HTMLElement | null => root().parentElement?.matches('[data-ui-toast-outlet]') ? root().parentElement : null;\n const remainingNow = (): number => timeout === null ? bridge.getSnapshot().context.timer.remaining : Math.max(0, deadline - performance.now());\n const stopTimer = (): void => {\n if (timeout !== null) clearTimeout(timeout);\n if (ticker !== null) clearInterval(ticker);\n timeout = ticker = null;\n };\n const bridge = createAlpineMachine({\n schema: toastSchema, hooks: toastHooks,\n createMachine: ({props}) => createToastMachine(props, {\n prepareOpen: (props) => { root().dataset.state = 'opening'; syncToast(root(), props); outlet() && syncToastStack(outlet()!, true); },\n finishOpen: () => { root().dataset.state = 'open'; outlet() && syncToastStack(outlet()!, true); },\n startTimer: (remaining) => {\n if (remaining <= 0) return;\n deadline = performance.now() + remaining;\n timeout = window.setTimeout(() => bridge.send({type: 'DISMISS', reason: 'timeout'}), remaining);\n ticker = window.setInterval(() => bridge.send({type: 'TICK', remaining: remainingNow()}), 100);\n },\n stopTimer,\n prepareClose: () => { stopTimer(); root().dataset.state = 'closing'; outlet() && syncToastStack(outlet()!, true); },\n finishClose: (reason) => {\n const el = root();\n const parent = outlet();\n el.dataset.state = 'closed';\n dispatch({el, name: 'ui:dismiss', detail: {reason}});\n el.remove();\n if (parent) syncToastStack(parent, true);\n },\n syncProps: (props) => {\n syncToast(root(), props);\n outlet() && syncToastStack(outlet()!);\n },\n }),\n });\n const addPause = (source: ToastPauseSource): void => {\n if (destroyed) return;\n bridge.send({type: 'PAUSE', source, remaining: remainingNow()});\n };\n const removePause = (source: ToastPauseSource): void => {\n if (destroyed) return;\n bridge.send({type: 'RESUME', source});\n };\n const component: TrellisAlpineComponent<ToastData> = {\n ...bridge,\n get isOpen() { return this.snapshot.current?.tags.includes('open') ?? false; },\n get isPaused() { return (this.snapshot.current?.context.timer.pauseSources.length ?? 0) > 0; },\n get remaining() { return this.snapshot.current?.context.timer.remaining ?? 0; },\n init() {\n cleanup = cleanupManagerFor(this);\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n if (document.hidden) addPause('visibility');\n addListener({target: root(), event: 'click', handler: (event) => { const target = event.target; if (bridge.getSnapshot().props.dismissible && target instanceof Element && target.closest('[data-ui-toast-close]')) bridge.send({type: 'DISMISS', reason: 'close'}); }, cleanup});\n addListener({target: root(), event: 'ui:toast-dismiss-request', handler: (event) => { const reason = event instanceof CustomEvent ? event.detail?.reason : 'api'; bridge.send({type: 'DISMISS', reason}); }, cleanup});\n addListener({target: root(), event: 'ui:toast-pause-request', handler: (event) => {\n const paused = event instanceof CustomEvent && event.detail?.paused === true;\n paused ? addPause('outlet') : removePause('outlet');\n }, cleanup});\n addListener({target: document, event: 'visibilitychange', handler: () => document.hidden ? addPause('visibility') : removePause('visibility'), cleanup});\n addListener({target: root(), event: 'pointerdown', handler: (event) => {\n if (!(event instanceof PointerEvent) || !event.isPrimary || event.button !== 0) return;\n if (!bridge.getSnapshot().props.dismissible) return;\n if (event.target instanceof Element && event.target.closest('button, a, input, select, textarea')) return;\n const toast = root();\n const position = outlet()?.dataset.position ?? 'bottom-right';\n const horizontal = position.endsWith('left') || position.endsWith('right');\n const sign = horizontal\n ? position.endsWith('left') ? -1 : 1\n : position.startsWith('top') ? -1 : 1;\n const start = horizontal ? event.clientX : event.clientY;\n const startedAt = performance.now();\n const base = toastRestTransform(toast);\n const stackOpacity = Number.parseFloat(toast.style.getPropertyValue('--ui-toast-stack-opacity')) || 1;\n const delta = motionValue(0);\n activeGestureCleanup?.();\n stopOwnedMotion(toast);\n addPause('gesture');\n toast.dataset.swiping = 'true';\n toast.setPointerCapture(event.pointerId);\n const unsubscribe = delta.on('change', (value) => {\n const translation = horizontal ? `translateX(${value}px)` : `translateY(${value}px)`;\n toast.style.transform = `${base} ${translation}`;\n const distance = Math.abs(value);\n const extent = horizontal ? toast.offsetWidth : toast.offsetHeight;\n toast.style.opacity = String(Math.max(0.35, stackOpacity * (1 - distance / Math.max(extent * 2, 1))));\n });\n let gestureCleaned = false;\n const removeGestureListeners = (): void => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', finish);\n window.removeEventListener('pointercancel', cancel);\n };\n const cleanupGesture = (): void => {\n if (gestureCleaned) return;\n gestureCleaned = true;\n removeGestureListeners();\n unsubscribe();\n delete toast.dataset.swiping;\n if (activeGestureCleanup === cleanupGesture) activeGestureCleanup = null;\n };\n const move = (moveEvent: PointerEvent): void => {\n if (moveEvent.pointerId !== event.pointerId) return;\n moveEvent.preventDefault();\n const positionNow = horizontal ? moveEvent.clientX : moveEvent.clientY;\n const raw = positionNow - start;\n delta.set(raw * sign >= 0 ? raw : raw * 0.2);\n };\n const finish = (endEvent: PointerEvent, cancelled = false): void => {\n if (endEvent.pointerId !== event.pointerId) return;\n removeGestureListeners();\n const distance = delta.get();\n const elapsed = Math.max(1, performance.now() - startedAt);\n const velocity = Math.abs(distance) / elapsed;\n const dismiss = !cancelled && distance * sign > 0 && (Math.abs(distance) >= 45 || velocity > 0.11);\n const settle = dismiss\n ? animate(delta, sign * (horizontal ? window.innerWidth : window.innerHeight), roles.gestureExit)\n : animate(delta, 0, {type: 'spring', ...roles.gestureSettle});\n const opacity = animate(toast, {opacity: dismiss ? 0 : stackOpacity}, roles.gestureExit);\n void Promise.allSettled([settle.finished, opacity.finished]).then(() => {\n cleanupGesture();\n if (destroyed) return;\n removePause('gesture');\n if (dismiss) requestDismiss(toast, 'swipe');\n else {\n toast.style.opacity = String(stackOpacity);\n toast.style.transform = base;\n }\n });\n };\n const cancel = (cancelEvent: PointerEvent): void => finish(cancelEvent, true);\n activeGestureCleanup = cleanupGesture;\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', finish);\n window.addEventListener('pointercancel', cancel);\n }, cleanup});\n bridge.send('OPEN');\n },\n destroy() { destroyed = true; activeGestureCleanup?.(); stopTimer(); bridge.disconnect(); rootEl = null; },\n dismiss() { bridge.send({type: 'DISMISS', reason: 'api'}); },\n pause() { addPause('consumer'); },\n resume() { removePause('consumer'); },\n };\n return component;\n};\n\nconst closeIconSvg = (className: string): SVGSVGElement => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('viewBox', '0 0 32 32'); svg.setAttribute('aria-hidden', 'true'); svg.dataset.uiToastCloseIcon = ''; svg.setAttribute('class', className);\n const polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');\n polygon.setAttribute('points', '17.4141 16 24 9.4141 22.5859 8 16 14.5859 9.4143 8 8 9.4141 14.5859 16 8 22.5859 9.4143 24 16 17.4141 22.5859 24 24 22.5859 17.4141 16'); svg.append(polygon);\n return svg;\n};\n\nconst buildToast = (detail: ToastDetail, fallbackDuration: number): HTMLElement => {\n const level = isToastLevel(detail.level) ? detail.level : 'info';\n const variant = isToastVariant(detail.variant) ? detail.variant : 'default';\n const title = typeof detail.title === 'string' ? detail.title : '';\n const description = typeof detail.description === 'string' ? detail.description : '';\n const duration = normalizedDuration(detail.duration, fallbackDuration);\n const dismissible = typeof detail.dismissible === 'boolean' ? detail.dismissible : true;\n const root = document.createElement('div');\n root.setAttribute('x-data', 'UiToast');\n root.setAttribute('x-ui-transition:opening', \"$ui.motion($transition).animate($ui.motion.presets.toast.in).role('presence').play()\");\n root.setAttribute('x-ui-transition:closing', \"$transition.data.reason === 'swipe' ? null : $ui.motion($transition).animate($ui.motion.presets.toast.out).role('presence').play()\");\n Object.assign(root.dataset, {uiToast: '', uiToastRecipe: '', uiSurface: '+3', uiElevation: '4', level, color: isToastColor(detail.color) ? detail.color : 'auto', variant, duration: String(duration), dismissible: String(dismissible), description: String(Boolean(description.trim())), state: 'closed'});\n root.setAttribute('aria-atomic', 'true');\n root.style.opacity = '0';\n const marker = document.createElement('span'); marker.dataset.uiToastMarker = ''; marker.setAttribute('aria-hidden', 'true'); root.append(marker);\n const content = document.createElement('div'); content.dataset.uiToastContent = '';\n if (title) { const el = document.createElement('strong'); el.dataset.uiToastTitle = ''; el.textContent = title; content.append(el); }\n if (description) { const el = document.createElement('div'); el.dataset.uiToastDescription = ''; el.textContent = description; content.append(el); }\n root.append(content);\n if (dismissible) { const close = document.createElement('button'); close.type = 'button'; close.dataset.uiToastClose = ''; close.setAttribute('aria-label', 'Dismiss notification'); close.append(closeIconSvg(resolveStyle({part: toastStyles.parts.closeIcon}))); root.append(close); }\n return root;\n};\n\nconst UiToastOutlet = (AlpineInstance: Alpine.Alpine): TrellisAlpineComponent<ToastOutletData> => {\n const expandedSources = new Set<'pointer' | 'focus'>();\n let rootEl: HTMLElement | null = null;\n let cleanup: CleanupManager;\n const broadcastPause = (paused: boolean): void => {\n rootEl?.querySelectorAll<HTMLElement>(':scope > [data-ui-toast]').forEach((toast) => {\n toast.dispatchEvent(new CustomEvent('ui:toast-pause-request', {detail: {paused}}));\n });\n };\n const addExpandedSource = (source: 'pointer' | 'focus'): void => {\n const wasEmpty = expandedSources.size === 0;\n expandedSources.add(source);\n if (!rootEl || !wasEmpty) return;\n const fromHeight = rootEl.getBoundingClientRect().height;\n rootEl.dataset.stackExpanded = 'true';\n broadcastPause(true);\n syncToastStack(rootEl, true, fromHeight);\n };\n const removeExpandedSource = (source: 'pointer' | 'focus'): void => {\n expandedSources.delete(source);\n if (!rootEl || expandedSources.size > 0) return;\n const fromHeight = rootEl.getBoundingClientRect().height;\n delete rootEl.dataset.stackExpanded;\n broadcastPause(false);\n syncToastStack(rootEl, true, fromHeight);\n };\n return ({\n props: null as unknown as ToastOutletProps,\n init() {\n cleanup = cleanupManagerFor(this);\n this.props = defineProps({el: this.$el, schema: toastOutletSchema, onChange: () => this.sync()});\n const root = this.$el as HTMLElement;\n rootEl = root;\n this.sync();\n cleanup.add(hover(root, () => {\n addExpandedSource('pointer');\n return () => removeExpandedSource('pointer');\n }));\n addListener({target: root, event: 'focusin', handler: () => addExpandedSource('focus'), cleanup});\n addListener({target: root, event: 'focusout', handler: () => queueMicrotask(() => { if (!root.contains(document.activeElement)) removeExpandedSource('focus'); }), cleanup});\n addListener({target: document, event: 'ui:toast', handler: (event) => this.add(event instanceof CustomEvent ? event.detail as ToastDetail : {}), cleanup});\n queueMicrotask(() => enforceLimit(root, this.props.maxItems));\n },\n destroy() {\n if (rootEl) stopToastStackHeightMotion(rootEl);\n this.props.disconnect();\n expandedSources.clear();\n rootEl = null;\n },\n sync() {\n const root = this.$el as HTMLElement;\n root.id = this.props.id; root.dataset.position = this.props.position; root.dataset.duration = String(this.props.duration); root.dataset.maxItems = String(this.props.maxItems);\n root.className = resolveStyle({part: toastStyles.parts.outlet, props: {position: this.props.position}, className: this.props.class});\n syncToastStack(root); enforceLimit(root, this.props.maxItems);\n },\n add(detail) {\n const title = typeof detail.title === 'string' ? detail.title : '';\n const description = typeof detail.description === 'string' ? detail.description : '';\n if (!title.trim() && !description.trim()) return;\n const root = this.$el as HTMLElement;\n const toast = buildToast(detail, this.props.duration);\n root.prepend(toast);\n AlpineInstance.initTree(toast as HTMLElement & Alpine.ElementWithXAttributes);\n if (expandedSources.size > 0) toast.dispatchEvent(new CustomEvent('ui:toast-pause-request', {detail: {paused: true}}));\n syncToastStack(root); enforceLimit(root, this.props.maxItems);\n },\n });\n};\n\nconst registerToast = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiToast', UiToast)(AlpineInstance);\n defineAlpineData(\n 'UiToastOutlet',\n () => UiToastOutlet(AlpineInstance),\n )(AlpineInstance);\n};\n\nexport {registerToast, UiToast, UiToastOutlet};\nexport type {ToastData, ToastDetail, ToastOutletData, ToastTransition, UiToastApi, UiToastOutletApi};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\nimport {registerMotionCapability} from '../../capabilities/motion';\nimport {registerToast as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerToast = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerToast};\nexport default registerToast;\nexport * from './index';\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e,b as t,d as n,f as r,h as i,m as a,p as o,u as s}from"./element-adapter-native-data-key-DrqJDAVH.js";import{r as c,s as l,t as u}from"./dom-DiTFTWeR.js";import{c as d,f,l as p,n as m,t as h}from"./codecs-CQ7olTJL.js";import{i as g,t as _}from"./alpine-machine-CE2UN4Qu.js";import{n as v,t as y}from"./alpine-data-Dvc_bXq6.js";import{n as b,t as x}from"./styles-CX2j92ex.js";import{t as S}from"./machine-CNnHDbyo.js";import{n as C,r as ee}from"./form-control-DL1Hkox3.js";function w(e){return e.source.types.includes(`Files`)}function te(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 T=t();function E(e){var t=e.dragEnter,i=t.type,s=t.relatedTarget;return i===`dragenter`?o()?r({dragEnter:t}):s==null?!0:a()?n(s):s instanceof HTMLIFrameElement:!1}function D(e){var t=e.type,n=e.value;return!(t===`application/vnd.pdnd`||t===`text/plain`&&n===`pdnd:android-fallback`)}function O(e){return Array.from(e.types).filter(function(t){return D({type:t,value:e.getData(t)})})}function k(e){return Array.from(e.items).filter(function(t){return t.kind===`file`||D({type:t.type,value:e.getData(t.type)})})}var A=!1,j=e({typeKey:`external`,defaultDropEffect:`copy`,mount:function(e){return(0,T.bind)(window,{type:`dragenter`,listener:function(t){if(!A&&t.dataTransfer&&e.canStart(t)&&E({dragEnter:t})){var n=O(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=k(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 D({type:e,value:t})?t:null}}}}})}}}})}});function M(e){return j.dropTarget(e)}function N(e){return j.monitor(e)}(function(){if(typeof window>`u`)return;j.registerUsage();var e={type:`idle`},t=e;function n(){t.type===`dragging`&&(A=!1,t.cleanup(),t=e)}function r(){return(0,T.bindAll)(window,[{type:`dragend`,listener:n}].concat(i(s({onDragEnd:n}))),{capture:!0})}(0,T.bind)(window,{type:`dragstart`,listener:function(){t.type===`idle`&&(A=!0,t={type:`dragging`,cleanup:r()})},options:{capture:!0}})})();var P=[`stack`,`inline`],F=[`auto`,`image`,`none`],I=[`sm`,`md`,`lg`],ne={name:f,accept:f,capture:f,multiple:m,required:m,disabled:m,invalid:m,preview:p(F,`auto`),layout:p(P,`stack`),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`),p(P,`stack`),p(I,`md`),f.default(`document__blank`),f.default(`Remove file`);var re=[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,ie=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`},ae=(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=>ae(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,oe=({context:e,props:t,event:n})=>z(e,t,n).limitReached,H=({context:e,props:t})=>!t.disabled&&e.transfer.status!==`uploading`,U=({props:e})=>e.transport===`direct`,W=({props:e})=>e.transport===`native`,G=e=>U(e)&&(R(e.event)===`picker`||R(e.event)===`drop`)&&B(e).some(({status:e})=>e===`uploading`),K=({context:e,props:t,event:n})=>({context:{selection:z(e,t,n)}}),se=({context:e})=>({context:{selection:{...e.selection,records:[],limitReached:!1,rejectedCount:0,limitRejectedCount:0,source:`clear`}}}),ce=({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),le=({context:e})=>({context:{selection:{...e.selection,records:J(e,`complete`)},existing:[],transfer:q(e,`complete`)}}),ue=({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.`))}}),de=({context:e})=>({context:{selection:{...e.selection,records:J(e,`canceled`)},transfer:q(e,`canceled`)}}),fe=({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)}}}},pe=e=>H(e)&&V(e),me=e=>H(e)&&oe(e),Y=e=>[{target:`#inventory-empty`,guard:pe,reduce:`planSelection`,effects:e},{target:`#inventory-capped`,guard:me,reduce:`planSelection`,effects:e},{target:`#inventory-populated`,guard:H,reduce:`planSelection`,effects:e}],he=({props:e,context:t,effects:n})=>S({type:`parallel`,on:{PROPS_CHANGED:{reduce:`replaceProps`,effects:`syncProps`}},states:{interaction:{initial:`idle`,states:{idle:{on:{DRAG_ENTER:{target:`dragging`,guard:H,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:H,reduce:`clearSelection`,effects:`resetSelection`},REMOVE_EXISTING:{guard:H,reduce:`removeExisting`,effects:`clearExisting`},CLEAR_EXISTING:{guard:H,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:U,reduce:`setDirectIdle`,effects:`syncTransfer`},{target:`#transfer-native`,reduce:`setNative`,effects:`syncTransfer`}]}},native:{id:`transfer-native`,on:{RECONCILE:{target:`#transfer-direct-idle`,guard:U,reduce:`setDirectIdle`,effects:`syncTransfer`}}},direct:{initial:`idle`,on:{RECONCILE:{target:`#transfer-native`,guard:W,reduce:`setNative`,effects:`syncTransfer`}},states:{idle:{id:`transfer-direct-idle`,on:{FILES_CHANGED:{target:`uploading`,guard:G,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:G,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:G,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:G,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:K,clearSelection:se,removeExisting:({context:e,event:t})=>({context:{existing:e.existing.filter(e=>e!==ie(t))}}),clearExisting:()=>({context:{existing:[]}}),beginUpload:ce,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:le,failUpload:ue,cancelUpload:de,updateProgress:fe,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}}),X=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 fill-current 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 fill-current`},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 fill-current leading-none`},clear:{base:`sr-only`}}}}),ge=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]}`},_e=e=>e?Array.from(e):[],ve=e=>e.type.startsWith(`image/`),ye=(e,t)=>t!==`none`&&(t===`image`||ve(e)),Z=e=>{if(typeof DataTransfer>`u`)return null;let t=new DataTransfer;return e.forEach(e=>t.items.add(e)),t.files},be=(e,t)=>{let n=Z(t);if(!n)return!1;try{return e.files=n,!0}catch{return!1}},xe=(e,t)=>{let n=`http://www.w3.org/2000/svg`,r=document.createElementNS(n,`svg`),i=document.createElementNS(n,`path`);return r.setAttribute(`viewBox`,`0 0 32 32`),r.setAttribute(`aria-hidden`,`true`),r.setAttribute(`class`,t),i.setAttribute(`d`,e),r.append(i),r},Se=e=>{let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`),r=document.createElementNS(t,`polygon`);return n.setAttribute(`viewBox`,`0 0 32 32`),n.setAttribute(`aria-hidden`,`true`),n.setAttribute(`class`,e),r.setAttribute(`points`,`17.4141 16 24 9.4141 22.5859 8 16 14.5859 9.4143 8 8 9.4141 14.5859 16 8 22.5859 9.4143 24 16 17.4141 22.5859 24 24 22.5859 17.4141 16`),n.append(r),n},Q=()=>{let e=null,t,n=!1,r=0,i=new Map,a=new Map,o=()=>{if(!e)throw Error(`File upload has not been initialized.`);return e},s=()=>{let e=o().querySelector(`[data-ui-file-upload-input]`);if(!e)throw Error(`File upload requires a native file input.`);return e},d=()=>o().querySelector(`[data-ui-file-upload-dropzone]`),f=()=>o().querySelector(`[data-ui-file-upload-list]`),p=()=>j.getSnapshot().props,m=()=>j.getSnapshot().context,h=e=>({id:`file-${++r}`,name:e.name,bytes:e.size,size:ge(e.size),type:e.type||`File`}),g=e=>e.map(e=>{let t=h(e);return i.set(t.id,e),t}),v=e=>{let t=a.get(e);t&&URL.revokeObjectURL(t),a.delete(e)},x=e=>{let t=i.get(e);if(!t||!ye(t,p().preview))return null;let n=a.get(e);if(n)return n;let r=URL.createObjectURL(t);return a.set(e,r),r},S=()=>{p().transport!==`direct`&&(n=!0,s().dispatchEvent(new Event(`input`,{bubbles:!0})),s().dispatchEvent(new Event(`change`,{bubbles:!0})))},T=(e,t,n=!1)=>{p().disabled||j.hasTag(`uploading`)||j.send({type:`FILES_CHANGED`,records:e,source:t,append:n})},E=()=>{let e=new Set;return[...o().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})},D=(e,t)=>{let n=f();if(!n)return;n.querySelectorAll(`[data-ui-file-upload-pending]`).forEach(e=>e.remove());let r=e.selection.records,o=new Set(r.map(({id:e})=>e));[...a.keys()].filter(e=>!o.has(e)).forEach(v),[...i.keys()].filter(e=>!o.has(e)).forEach(e=>i.delete(e));let s=new Set(e.existing);n.querySelectorAll(`[data-ui-file-upload-item][data-existing-file]`).forEach(e=>{e.hidden=!s.has(e.dataset.fileId??``)});let c=n.querySelector(`[data-ui-file-upload-empty]`);c&&(c.hidden=r.length>0||e.existing.length>0);let l=b({part:X.parts.item,className:t.itemClass}),u=b({part:X.parts.preview}),d=b({part:X.parts.previewImage}),p=b({part:X.parts.itemBody}),m=b({part:X.parts.itemName}),h=b({part:X.parts.itemMeta}),g=b({part:X.parts.remove}),_=b({part:X.parts.removeIcon}),y=b({part:X.parts.itemIcon});r.forEach(e=>{let t=document.createElement(`li`);t.dataset.uiFileUploadItem=``,t.dataset.uiFileUploadPending=``,t.dataset.fileId=e.id,t.dataset.status=e.status,t.dataset.progress=String(e.progress),t.className=l;let r=document.createElement(`span`);r.dataset.uiFileUploadPreview=``,r.className=u,r.setAttribute(`aria-hidden`,`true`);let i=x(e.id);if(i){let e=document.createElement(`img`);e.src=i,e.alt=``,e.loading=`lazy`,e.decoding=`async`,e.className=`outline outline-1 -outline-offset-1 outline-black/10 dark:outline-white/10 block size-full object-cover ${d}`,r.append(e)}else r.append(xe(`M25.7,9.3l-7-7A.9078.9078,0,0,0,18,2H8A2.0059,2.0059,0,0,0,6,4V28a2.0059,2.0059,0,0,0,2,2H24a2.0059,2.0059,0,0,0,2-2V10A.9078.9078,0,0,0,25.7,9.3ZM18,4.4,23.6,10H18ZM24,28H8V4h8v6a2.0059,2.0059,0,0,0,2,2h6Z`,y));let a=document.createElement(`span`);a.className=p;let o=document.createElement(`span`);o.dataset.uiFileUploadItemName=``,o.className=m,o.textContent=e.name;let s=document.createElement(`span`);s.dataset.uiFileUploadItemMeta=``,s.className=h,s.textContent=[e.size,e.type].filter(Boolean).join(` · `),a.append(o,s);let c=document.createElement(`button`);c.type=`button`,c.dataset.uiFileUploadRemove=``,c.dataset.fileId=e.id,c.className=g,c.disabled=j.hasTag(`uploading`),c.setAttribute(`aria-label`,`Remove ${e.name}`),c.append(Se(_)),t.append(r,a,c),n.append(t)})},O=(e=m(),t=p())=>{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`,c=s();ee({input:c,state:{disabled:t.disabled,required:t.required,invalid:t.invalid}}),t.transport===`native`&&t.name?c.name=t.name:c.removeAttribute(`name`),c.multiple=t.multiple,t.accept?c.setAttribute(`accept`,t.accept):c.removeAttribute(`accept`),t.capture?c.setAttribute(`capture`,t.capture):c.removeAttribute(`capture`),a&&!t.disabled?(c.setAttribute(`aria-disabled`,`true`),c.tabIndex=-1):t.disabled||(c.removeAttribute(`aria-disabled`),c.removeAttribute(`tabindex`)),c.form&&(c.form.enctype=`multipart/form-data`),C({el:o(),state:t,value:`true`}),l({el:o(),attr:`data-empty`,present:!i,value:`true`}),l({el:o(),attr:`data-has-files`,present:i,value:`true`}),l({el:o(),attr:`data-multiple`,present:t.multiple,value:`true`}),l({el:o(),attr:`data-max-items-reached`,present:e.selection.limitReached,value:`true`}),l({el:o(),attr:`data-has-existing-file`,present:r,value:`true`}),o().dataset.transport=t.transport,o().dataset.transferState=e.transfer.status;let u=d();u&&(C({el:u,state:{disabled:a,invalid:t.invalid},value:`true`}),l({el:u,attr:`data-multiple`,present:t.multiple,value:`true`}),l({el:u,attr:`data-has-files`,present:i,value:`true`}),l({el:u,attr:`data-max-items-reached`,present:e.selection.limitReached,value:`true`})),D(e,t)},k=e=>({selection:{records:[],limitReached:!1,rejectedCount:0,limitRejectedCount:0,source:`clear`},existing:E(),transfer:{status:e.transport===`native`?`native`:`idle`,error:``}}),A=e=>{let t=e.context.selection.records.flatMap(({id:e})=>i.get(e)??[]);return be(s(),t)?(O(e.context,e.props),!0):(s().value=``,j.send(`FILES_RESET`),!1)},j=_({schema:ne,hooks:re,createMachine:({props:e})=>he({props:e,context:k(e),effects:{commitSelection:e=>{A(e)&&(e.context.selection.limitRejectedCount>0&&c({el:o(),name:`ui:file-upload-limit`,detail:{rejectedCount:e.context.selection.limitRejectedCount}}),e.context.selection.source!==`picker`&&S(),c({el:o(),name:`ui:file-upload-change`,detail:{files:e.context.selection.records,source:e.context.selection.source}}))},reconcileSelection:e=>{A(e)},resetSelection:e=>{s().value=``,O(e.context,e.props)},syncProps:e=>{O(e.context,e.props),j.send({type:`RECONCILE`,records:e.context.selection.records,source:`props`})},syncDragging:e=>{let t=e.snapshot.tags.includes(`dragging`);l({el:o(),attr:`data-dragging`,present:t,value:`true`});let n=d();n&&l({el:n,attr:`data-dragging`,present:t,value:`true`})},clearExisting:e=>{let t=new Set(e.context.existing),n=[...o().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])});O(e.context,e.props),c({el:o(),name:`ui:file-upload-change`,detail:{files:e.context.selection.records,source:e.context.selection.source,removedExistingIds:n}})},commitExistingReplacement:e=>{let t=[...o().querySelectorAll(`[data-ui-file-upload-item][data-existing-file]:not([hidden])`)].flatMap(e=>e.dataset.fileId??[]);O(e.context,e.props),t.length!==0&&c({el:o(),name:`ui:file-upload-change`,detail:{files:e.context.selection.records,source:e.context.selection.source,removedExistingIds:t}})},syncTransfer:e=>O(e.context,e.props),emitComplete:e=>c({el:o(),name:`ui:file-upload-complete`,detail:{files:e.context.selection.records}}),emitError:e=>c({el:o(),name:`ui:file-upload-error`,detail:{files:e.context.selection.records,error:e.context.transfer.error}}),emitCancel:e=>c({el:o(),name:`ui:file-upload-cancel`,detail:{files:e.context.selection.records}})}})}),P={...j,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(){t=y(this),e=this.$el,j.connect(this.$el,this.snapshot);let r=s();u({target:r,event:`input`,handler:e=>{p().transport===`direct`&&e.stopPropagation()},cleanup:t}),u({target:r,event:`change`,handler:e=>{if(p().transport===`direct`&&e.stopPropagation(),n){n=!1;return}T(g(_e(r.files)),`picker`)},cleanup:t}),u({target:o(),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(),j.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(),P.remove(r.dataset.fileId))},cleanup:t}),u({target:o(),event:`trellis:file-upload-clear-existing`,handler:()=>{j.send(`CLEAR_EXISTING`)},cleanup:t});let i=d();i&&(t.add(M({element:i,canDrop:({source:e})=>!p().disabled&&!j.hasTag(`uploading`)&&w({source:e}),getDropEffect:()=>`copy`,onDragEnter:()=>j.send(`DRAG_ENTER`),onDragLeave:()=>j.send(`DRAG_LEAVE`),onDrop:({source:e})=>{j.send(`DROP`),w({source:e})&&T(g(te({source:e})),`drop`,p().multiple)}})),t.add(N({canMonitor:({source:e})=>w({source:e}),onDrop:()=>j.send(`DRAG_LEAVE`)}))),O(),j.send({type:`RECONCILE`,records:[],source:`props`})},destroy(){a.forEach(e=>URL.revokeObjectURL(e)),a.clear(),i.clear(),j.disconnect(),e=null},browse(){!p().disabled&&!j.hasTag(`uploading`)&&s().click()},remove(e){if(p().disabled||j.hasTag(`uploading`)||!i.has(e))return;let t=m().selection.records.filter(t=>t.id!==e);T(t,`remove`)},retry(){j.send(`RETRY_UPLOAD`)},cancel(){j.send(`CANCEL_UPLOAD`)},file(e){return i.get(e)??null},preview(e){return x(e)}};return P},Ce=v(`UiFileUpload`,Q),$=new WeakSet,we=e=>{$.has(e)||($.add(e),Ce(e))};export{Q as n,we as t};
|
|
2
|
-
//# sourceMappingURL=entry.generated-DDJEGHq-.js.map
|