@vielzeug/refine 1.1.1
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 +89 -0
- package/dist/_dev.cjs +2 -0
- package/dist/_dev.cjs.map +1 -0
- package/dist/_dev.d.ts +2 -0
- package/dist/_dev.d.ts.map +1 -0
- package/dist/_dev.js +9 -0
- package/dist/_dev.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/accordion-item.cjs +26 -0
- package/dist/accordion-item.cjs.map +1 -0
- package/dist/accordion-item.js +124 -0
- package/dist/accordion-item.js.map +1 -0
- package/dist/accordion.cjs +2 -0
- package/dist/accordion.cjs.map +1 -0
- package/dist/accordion.js +47 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert.cjs +36 -0
- package/dist/alert.cjs.map +1 -0
- package/dist/alert.js +93 -0
- package/dist/alert.js.map +1 -0
- package/dist/async.cjs +55 -0
- package/dist/async.cjs.map +1 -0
- package/dist/async.js +99 -0
- package/dist/async.js.map +1 -0
- package/dist/avatar.cjs +18 -0
- package/dist/avatar.cjs.map +1 -0
- package/dist/avatar.js +108 -0
- package/dist/avatar.js.map +1 -0
- package/dist/badge.cjs +7 -0
- package/dist/badge.cjs.map +1 -0
- package/dist/badge.js +65 -0
- package/dist/badge.js.map +1 -0
- package/dist/box.cjs +2 -0
- package/dist/box.cjs.map +1 -0
- package/dist/box.js +31 -0
- package/dist/box.js.map +1 -0
- package/dist/breadcrumb.cjs +21 -0
- package/dist/breadcrumb.cjs.map +1 -0
- package/dist/breadcrumb.js +57 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/button-group.cjs +6 -0
- package/dist/button-group.cjs.map +1 -0
- package/dist/button-group.js +33 -0
- package/dist/button-group.js.map +1 -0
- package/dist/button.cjs +18 -0
- package/dist/button.cjs.map +1 -0
- package/dist/button.js +124 -0
- package/dist/button.js.map +1 -0
- package/dist/calendar.cjs +126 -0
- package/dist/calendar.cjs.map +1 -0
- package/dist/calendar.js +300 -0
- package/dist/calendar.js.map +1 -0
- package/dist/card.cjs +23 -0
- package/dist/card.cjs.map +1 -0
- package/dist/card.js +87 -0
- package/dist/card.js.map +1 -0
- package/dist/carousel.cjs +61 -0
- package/dist/carousel.cjs.map +1 -0
- package/dist/carousel.js +280 -0
- package/dist/carousel.js.map +1 -0
- package/dist/checkbox-group.cjs +18 -0
- package/dist/checkbox-group.cjs.map +1 -0
- package/dist/checkbox-group.js +118 -0
- package/dist/checkbox-group.js.map +1 -0
- package/dist/checkbox.cjs +11 -0
- package/dist/checkbox.cjs.map +1 -0
- package/dist/checkbox.js +88 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chip.cjs +42 -0
- package/dist/chip.cjs.map +1 -0
- package/dist/chip.js +133 -0
- package/dist/chip.js.map +1 -0
- package/dist/code-window.cjs +19 -0
- package/dist/code-window.cjs.map +1 -0
- package/dist/code-window.js +41 -0
- package/dist/code-window.js.map +1 -0
- package/dist/combobox.cjs +103 -0
- package/dist/combobox.cjs.map +1 -0
- package/dist/combobox.js +444 -0
- package/dist/combobox.js.map +1 -0
- package/dist/content/avatar/avatar-group.css?inline.cjs +2 -0
- package/dist/content/avatar/avatar-group.css?inline.cjs.map +1 -0
- package/dist/content/avatar/avatar-group.css?inline.js +6 -0
- package/dist/content/avatar/avatar-group.css?inline.js.map +1 -0
- package/dist/content/avatar/avatar.css?inline.cjs +2 -0
- package/dist/content/avatar/avatar.css?inline.cjs.map +1 -0
- package/dist/content/avatar/avatar.css?inline.js +6 -0
- package/dist/content/avatar/avatar.css?inline.js.map +1 -0
- package/dist/content/avatar/avatar.d.ts +88 -0
- package/dist/content/avatar/avatar.d.ts.map +1 -0
- package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs +2 -0
- package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs.map +1 -0
- package/dist/content/breadcrumb/breadcrumb-item.css?inline.js +6 -0
- package/dist/content/breadcrumb/breadcrumb-item.css?inline.js.map +1 -0
- package/dist/content/breadcrumb/breadcrumb.css?inline.cjs +2 -0
- package/dist/content/breadcrumb/breadcrumb.css?inline.cjs.map +1 -0
- package/dist/content/breadcrumb/breadcrumb.css?inline.js +6 -0
- package/dist/content/breadcrumb/breadcrumb.css?inline.js.map +1 -0
- package/dist/content/breadcrumb/breadcrumb.d.ts +57 -0
- package/dist/content/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/dist/content/card/card.css?inline.cjs +2 -0
- package/dist/content/card/card.css?inline.cjs.map +1 -0
- package/dist/content/card/card.css?inline.js +6 -0
- package/dist/content/card/card.css?inline.js.map +1 -0
- package/dist/content/card/card.d.ts +74 -0
- package/dist/content/card/card.d.ts.map +1 -0
- package/dist/content/carousel/carousel-slide.cjs +2 -0
- package/dist/content/carousel/carousel-slide.cjs.map +1 -0
- package/dist/content/carousel/carousel-slide.css?inline.cjs +2 -0
- package/dist/content/carousel/carousel-slide.css?inline.cjs.map +1 -0
- package/dist/content/carousel/carousel-slide.css?inline.js +6 -0
- package/dist/content/carousel/carousel-slide.css?inline.js.map +1 -0
- package/dist/content/carousel/carousel-slide.d.ts +2 -0
- package/dist/content/carousel/carousel-slide.d.ts.map +1 -0
- package/dist/content/carousel/carousel-slide.js +18 -0
- package/dist/content/carousel/carousel-slide.js.map +1 -0
- package/dist/content/carousel/carousel.css?inline.cjs +2 -0
- package/dist/content/carousel/carousel.css?inline.cjs.map +1 -0
- package/dist/content/carousel/carousel.css?inline.js +6 -0
- package/dist/content/carousel/carousel.css?inline.js.map +1 -0
- package/dist/content/carousel/carousel.d.ts +110 -0
- package/dist/content/carousel/carousel.d.ts.map +1 -0
- package/dist/content/carousel/index.d.ts +3 -0
- package/dist/content/carousel/index.d.ts.map +1 -0
- package/dist/content/code-window/code-window.css?inline.cjs +2 -0
- package/dist/content/code-window/code-window.css?inline.cjs.map +1 -0
- package/dist/content/code-window/code-window.css?inline.js +6 -0
- package/dist/content/code-window/code-window.css?inline.js.map +1 -0
- package/dist/content/code-window/code-window.d.ts +61 -0
- package/dist/content/code-window/code-window.d.ts.map +1 -0
- package/dist/content/copy-command/copy-command.css?inline.cjs +2 -0
- package/dist/content/copy-command/copy-command.css?inline.cjs.map +1 -0
- package/dist/content/copy-command/copy-command.css?inline.js +6 -0
- package/dist/content/copy-command/copy-command.css?inline.js.map +1 -0
- package/dist/content/copy-command/copy-command.d.ts +66 -0
- package/dist/content/copy-command/copy-command.d.ts.map +1 -0
- package/dist/content/icon/icon.css?inline.cjs +2 -0
- package/dist/content/icon/icon.css?inline.cjs.map +1 -0
- package/dist/content/icon/icon.css?inline.js +6 -0
- package/dist/content/icon/icon.css?inline.js.map +1 -0
- package/dist/content/icon/icon.d.ts +45 -0
- package/dist/content/icon/icon.d.ts.map +1 -0
- package/dist/content/index.d.ts +23 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/pagination/pagination.css?inline.cjs +2 -0
- package/dist/content/pagination/pagination.css?inline.cjs.map +1 -0
- package/dist/content/pagination/pagination.css?inline.js +6 -0
- package/dist/content/pagination/pagination.css?inline.js.map +1 -0
- package/dist/content/pagination/pagination.d.ts +61 -0
- package/dist/content/pagination/pagination.d.ts.map +1 -0
- package/dist/content/separator/separator.css?inline.cjs +2 -0
- package/dist/content/separator/separator.css?inline.cjs.map +1 -0
- package/dist/content/separator/separator.css?inline.js +6 -0
- package/dist/content/separator/separator.css?inline.js.map +1 -0
- package/dist/content/separator/separator.d.ts +38 -0
- package/dist/content/separator/separator.d.ts.map +1 -0
- package/dist/content/table/table.css?inline.cjs +2 -0
- package/dist/content/table/table.css?inline.cjs.map +1 -0
- package/dist/content/table/table.css?inline.js +6 -0
- package/dist/content/table/table.css?inline.js.map +1 -0
- package/dist/content/table/table.d.ts +76 -0
- package/dist/content/table/table.d.ts.map +1 -0
- package/dist/content/text/text.css?inline.cjs +2 -0
- package/dist/content/text/text.css?inline.cjs.map +1 -0
- package/dist/content/text/text.css?inline.js +6 -0
- package/dist/content/text/text.css?inline.js.map +1 -0
- package/dist/content/text/text.d.ts +55 -0
- package/dist/content/text/text.d.ts.map +1 -0
- package/dist/copy-command.cjs +17 -0
- package/dist/copy-command.cjs.map +1 -0
- package/dist/copy-command.js +55 -0
- package/dist/copy-command.js.map +1 -0
- package/dist/custom-elements.json +12641 -0
- package/dist/datagrid.cjs +435 -0
- package/dist/datagrid.cjs.map +1 -0
- package/dist/datagrid.js +764 -0
- package/dist/datagrid.js.map +1 -0
- package/dist/date-picker.cjs +133 -0
- package/dist/date-picker.cjs.map +1 -0
- package/dist/date-picker.js +315 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/dialog.cjs +28 -0
- package/dist/dialog.cjs.map +1 -0
- package/dist/dialog.js +88 -0
- package/dist/dialog.js.map +1 -0
- package/dist/disclosure/accordion/accordion.css?inline.cjs +2 -0
- package/dist/disclosure/accordion/accordion.css?inline.cjs.map +1 -0
- package/dist/disclosure/accordion/accordion.css?inline.js +6 -0
- package/dist/disclosure/accordion/accordion.css?inline.js.map +1 -0
- package/dist/disclosure/accordion/accordion.d.ts +62 -0
- package/dist/disclosure/accordion/accordion.d.ts.map +1 -0
- package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs +2 -0
- package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs.map +1 -0
- package/dist/disclosure/accordion-item/accordion-item.css?inline.js +6 -0
- package/dist/disclosure/accordion-item/accordion-item.css?inline.js.map +1 -0
- package/dist/disclosure/accordion-item/accordion-item.d.ts +70 -0
- package/dist/disclosure/accordion-item/accordion-item.d.ts.map +1 -0
- package/dist/disclosure/index.d.ts +11 -0
- package/dist/disclosure/index.d.ts.map +1 -0
- package/dist/disclosure/tab-item/tab-item.css?inline.cjs +2 -0
- package/dist/disclosure/tab-item/tab-item.css?inline.cjs.map +1 -0
- package/dist/disclosure/tab-item/tab-item.css?inline.js +6 -0
- package/dist/disclosure/tab-item/tab-item.css?inline.js.map +1 -0
- package/dist/disclosure/tab-item/tab-item.d.ts +49 -0
- package/dist/disclosure/tab-item/tab-item.d.ts.map +1 -0
- package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs +2 -0
- package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs.map +1 -0
- package/dist/disclosure/tab-panel/tab-panel.css?inline.js +6 -0
- package/dist/disclosure/tab-panel/tab-panel.css?inline.js.map +1 -0
- package/dist/disclosure/tab-panel/tab-panel.d.ts +33 -0
- package/dist/disclosure/tab-panel/tab-panel.d.ts.map +1 -0
- package/dist/disclosure/tabs/tabs.css?inline.cjs +2 -0
- package/dist/disclosure/tabs/tabs.css?inline.cjs.map +1 -0
- package/dist/disclosure/tabs/tabs.css?inline.js +6 -0
- package/dist/disclosure/tabs/tabs.css?inline.js.map +1 -0
- package/dist/disclosure/tabs/tabs.d.ts +75 -0
- package/dist/disclosure/tabs/tabs.d.ts.map +1 -0
- package/dist/drawer.cjs +32 -0
- package/dist/drawer.cjs.map +1 -0
- package/dist/drawer.js +199 -0
- package/dist/drawer.js.map +1 -0
- package/dist/errors.cjs +2 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/feedback/alert/alert.css?inline.cjs +2 -0
- package/dist/feedback/alert/alert.css?inline.cjs.map +1 -0
- package/dist/feedback/alert/alert.css?inline.js +6 -0
- package/dist/feedback/alert/alert.css?inline.js.map +1 -0
- package/dist/feedback/alert/alert.d.ts +74 -0
- package/dist/feedback/alert/alert.d.ts.map +1 -0
- package/dist/feedback/async/async.css?inline.cjs +2 -0
- package/dist/feedback/async/async.css?inline.cjs.map +1 -0
- package/dist/feedback/async/async.css?inline.js +6 -0
- package/dist/feedback/async/async.css?inline.js.map +1 -0
- package/dist/feedback/async/async.d.ts +54 -0
- package/dist/feedback/async/async.d.ts.map +1 -0
- package/dist/feedback/badge/badge.css?inline.cjs +2 -0
- package/dist/feedback/badge/badge.css?inline.cjs.map +1 -0
- package/dist/feedback/badge/badge.css?inline.js +6 -0
- package/dist/feedback/badge/badge.css?inline.js.map +1 -0
- package/dist/feedback/badge/badge.d.ts +69 -0
- package/dist/feedback/badge/badge.d.ts.map +1 -0
- package/dist/feedback/chip/chip.css?inline.cjs +2 -0
- package/dist/feedback/chip/chip.css?inline.cjs.map +1 -0
- package/dist/feedback/chip/chip.css?inline.js +6 -0
- package/dist/feedback/chip/chip.css?inline.js.map +1 -0
- package/dist/feedback/chip/chip.d.ts +136 -0
- package/dist/feedback/chip/chip.d.ts.map +1 -0
- package/dist/feedback/index.d.ts +17 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/password-strength/password-strength.css?inline.cjs +2 -0
- package/dist/feedback/password-strength/password-strength.css?inline.cjs.map +1 -0
- package/dist/feedback/password-strength/password-strength.css?inline.js +6 -0
- package/dist/feedback/password-strength/password-strength.css?inline.js.map +1 -0
- package/dist/feedback/password-strength/password-strength.d.ts +66 -0
- package/dist/feedback/password-strength/password-strength.d.ts.map +1 -0
- package/dist/feedback/progress/progress.css?inline.cjs +2 -0
- package/dist/feedback/progress/progress.css?inline.cjs.map +1 -0
- package/dist/feedback/progress/progress.css?inline.js +6 -0
- package/dist/feedback/progress/progress.css?inline.js.map +1 -0
- package/dist/feedback/progress/progress.d.ts +68 -0
- package/dist/feedback/progress/progress.d.ts.map +1 -0
- package/dist/feedback/skeleton/skeleton.css?inline.cjs +2 -0
- package/dist/feedback/skeleton/skeleton.css?inline.cjs.map +1 -0
- package/dist/feedback/skeleton/skeleton.css?inline.js +6 -0
- package/dist/feedback/skeleton/skeleton.css?inline.js.map +1 -0
- package/dist/feedback/skeleton/skeleton.d.ts +63 -0
- package/dist/feedback/skeleton/skeleton.d.ts.map +1 -0
- package/dist/feedback/toast/index.d.ts +2 -0
- package/dist/feedback/toast/index.d.ts.map +1 -0
- package/dist/feedback/toast/toast.css?inline.cjs +2 -0
- package/dist/feedback/toast/toast.css?inline.cjs.map +1 -0
- package/dist/feedback/toast/toast.css?inline.js +6 -0
- package/dist/feedback/toast/toast.css?inline.js.map +1 -0
- package/dist/feedback/toast/toast.d.ts +127 -0
- package/dist/feedback/toast/toast.d.ts.map +1 -0
- package/dist/file-input.cjs +70 -0
- package/dist/file-input.cjs.map +1 -0
- package/dist/file-input.js +209 -0
- package/dist/file-input.js.map +1 -0
- package/dist/form.cjs +11 -0
- package/dist/form.cjs.map +1 -0
- package/dist/form.js +56 -0
- package/dist/form.js.map +1 -0
- package/dist/grid-item.cjs +2 -0
- package/dist/grid-item.cjs.map +1 -0
- package/dist/grid-item.js +35 -0
- package/dist/grid-item.js.map +1 -0
- package/dist/grid.cjs +2 -0
- package/dist/grid.cjs.map +1 -0
- package/dist/grid.js +90 -0
- package/dist/grid.js.map +1 -0
- package/dist/headless/_internal.d.ts +17 -0
- package/dist/headless/_internal.d.ts.map +1 -0
- package/dist/headless/announcer.cjs +2 -0
- package/dist/headless/announcer.cjs.map +1 -0
- package/dist/headless/announcer.d.ts +25 -0
- package/dist/headless/announcer.d.ts.map +1 -0
- package/dist/headless/announcer.js +24 -0
- package/dist/headless/announcer.js.map +1 -0
- package/dist/headless/checkable.cjs +2 -0
- package/dist/headless/checkable.cjs.map +1 -0
- package/dist/headless/checkable.d.ts +42 -0
- package/dist/headless/checkable.d.ts.map +1 -0
- package/dist/headless/checkable.js +36 -0
- package/dist/headless/checkable.js.map +1 -0
- package/dist/headless/choice-field.cjs +2 -0
- package/dist/headless/choice-field.cjs.map +1 -0
- package/dist/headless/choice-field.d.ts +36 -0
- package/dist/headless/choice-field.d.ts.map +1 -0
- package/dist/headless/choice-field.js +42 -0
- package/dist/headless/choice-field.js.map +1 -0
- package/dist/headless/datagrid.cjs +2 -0
- package/dist/headless/datagrid.cjs.map +1 -0
- package/dist/headless/datagrid.d.ts +158 -0
- package/dist/headless/datagrid.d.ts.map +1 -0
- package/dist/headless/datagrid.js +55 -0
- package/dist/headless/datagrid.js.map +1 -0
- package/dist/headless/date-picker.cjs +2 -0
- package/dist/headless/date-picker.cjs.map +1 -0
- package/dist/headless/date-picker.d.ts +114 -0
- package/dist/headless/date-picker.d.ts.map +1 -0
- package/dist/headless/date-picker.js +184 -0
- package/dist/headless/date-picker.js.map +1 -0
- package/dist/headless/dialog-focus.cjs +2 -0
- package/dist/headless/dialog-focus.cjs.map +1 -0
- package/dist/headless/dialog-focus.d.ts +40 -0
- package/dist/headless/dialog-focus.d.ts.map +1 -0
- package/dist/headless/dialog-focus.js +22 -0
- package/dist/headless/dialog-focus.js.map +1 -0
- package/dist/headless/direction.cjs +2 -0
- package/dist/headless/direction.cjs.map +1 -0
- package/dist/headless/direction.d.ts +11 -0
- package/dist/headless/direction.d.ts.map +1 -0
- package/dist/headless/direction.js +14 -0
- package/dist/headless/direction.js.map +1 -0
- package/dist/headless/field-base.cjs +2 -0
- package/dist/headless/field-base.cjs.map +1 -0
- package/dist/headless/field-base.d.ts +148 -0
- package/dist/headless/field-base.d.ts.map +1 -0
- package/dist/headless/field-base.js +46 -0
- package/dist/headless/field-base.js.map +1 -0
- package/dist/headless/focus-trap.cjs +2 -0
- package/dist/headless/focus-trap.cjs.map +1 -0
- package/dist/headless/focus-trap.d.ts +45 -0
- package/dist/headless/focus-trap.d.ts.map +1 -0
- package/dist/headless/focus-trap.js +51 -0
- package/dist/headless/focus-trap.js.map +1 -0
- package/dist/headless/focus.cjs +2 -0
- package/dist/headless/focus.cjs.map +1 -0
- package/dist/headless/focus.d.ts +34 -0
- package/dist/headless/focus.d.ts.map +1 -0
- package/dist/headless/focus.js +34 -0
- package/dist/headless/focus.js.map +1 -0
- package/dist/headless/index.d.ts +28 -0
- package/dist/headless/index.d.ts.map +1 -0
- package/dist/headless/keyboard.cjs +2 -0
- package/dist/headless/keyboard.cjs.map +1 -0
- package/dist/headless/keyboard.d.ts +52 -0
- package/dist/headless/keyboard.d.ts.map +1 -0
- package/dist/headless/keyboard.js +29 -0
- package/dist/headless/keyboard.js.map +1 -0
- package/dist/headless/light-dom.cjs +2 -0
- package/dist/headless/light-dom.cjs.map +1 -0
- package/dist/headless/light-dom.d.ts +12 -0
- package/dist/headless/light-dom.d.ts.map +1 -0
- package/dist/headless/light-dom.js +6 -0
- package/dist/headless/light-dom.js.map +1 -0
- package/dist/headless/nav.cjs +2 -0
- package/dist/headless/nav.cjs.map +1 -0
- package/dist/headless/nav.d.ts +66 -0
- package/dist/headless/nav.d.ts.map +1 -0
- package/dist/headless/nav.js +115 -0
- package/dist/headless/nav.js.map +1 -0
- package/dist/headless/numbers.cjs +2 -0
- package/dist/headless/numbers.cjs.map +1 -0
- package/dist/headless/numbers.d.ts +14 -0
- package/dist/headless/numbers.d.ts.map +1 -0
- package/dist/headless/numbers.js +9 -0
- package/dist/headless/numbers.js.map +1 -0
- package/dist/headless/option-list.cjs +2 -0
- package/dist/headless/option-list.cjs.map +1 -0
- package/dist/headless/option-list.d.ts +107 -0
- package/dist/headless/option-list.d.ts.map +1 -0
- package/dist/headless/option-list.js +66 -0
- package/dist/headless/option-list.js.map +1 -0
- package/dist/headless/ore.cjs +2 -0
- package/dist/headless/ore.cjs.map +1 -0
- package/dist/headless/ore.d.ts +20 -0
- package/dist/headless/ore.d.ts.map +1 -0
- package/dist/headless/ore.js +9 -0
- package/dist/headless/ore.js.map +1 -0
- package/dist/headless/overlay.cjs +2 -0
- package/dist/headless/overlay.cjs.map +1 -0
- package/dist/headless/overlay.d.ts +62 -0
- package/dist/headless/overlay.d.ts.map +1 -0
- package/dist/headless/overlay.js +29 -0
- package/dist/headless/overlay.js.map +1 -0
- package/dist/headless/paginated-list.cjs +2 -0
- package/dist/headless/paginated-list.cjs.map +1 -0
- package/dist/headless/paginated-list.d.ts +42 -0
- package/dist/headless/paginated-list.d.ts.map +1 -0
- package/dist/headless/paginated-list.js +34 -0
- package/dist/headless/paginated-list.js.map +1 -0
- package/dist/headless/parse.cjs +2 -0
- package/dist/headless/parse.cjs.map +1 -0
- package/dist/headless/parse.d.ts +15 -0
- package/dist/headless/parse.d.ts.map +1 -0
- package/dist/headless/parse.js +9 -0
- package/dist/headless/parse.js.map +1 -0
- package/dist/headless/positioner.cjs +2 -0
- package/dist/headless/positioner.cjs.map +1 -0
- package/dist/headless/positioner.d.ts +40 -0
- package/dist/headless/positioner.d.ts.map +1 -0
- package/dist/headless/positioner.js +38 -0
- package/dist/headless/positioner.js.map +1 -0
- package/dist/headless/selection-control.cjs +2 -0
- package/dist/headless/selection-control.cjs.map +1 -0
- package/dist/headless/selection-control.d.ts +30 -0
- package/dist/headless/selection-control.d.ts.map +1 -0
- package/dist/headless/selection-control.js +44 -0
- package/dist/headless/selection-control.js.map +1 -0
- package/dist/headless/signals.cjs +2 -0
- package/dist/headless/signals.cjs.map +1 -0
- package/dist/headless/signals.d.ts +20 -0
- package/dist/headless/signals.d.ts.map +1 -0
- package/dist/headless/signals.js +12 -0
- package/dist/headless/signals.js.map +1 -0
- package/dist/headless/slider.cjs +2 -0
- package/dist/headless/slider.cjs.map +1 -0
- package/dist/headless/slider.d.ts +28 -0
- package/dist/headless/slider.d.ts.map +1 -0
- package/dist/headless/slider.js +40 -0
- package/dist/headless/slider.js.map +1 -0
- package/dist/headless/sort-control.cjs +2 -0
- package/dist/headless/sort-control.cjs.map +1 -0
- package/dist/headless/sort-control.d.ts +22 -0
- package/dist/headless/sort-control.d.ts.map +1 -0
- package/dist/headless/sort-control.js +36 -0
- package/dist/headless/sort-control.js.map +1 -0
- package/dist/headless/spinner.cjs +2 -0
- package/dist/headless/spinner.cjs.map +1 -0
- package/dist/headless/spinner.d.ts +19 -0
- package/dist/headless/spinner.d.ts.map +1 -0
- package/dist/headless/spinner.js +52 -0
- package/dist/headless/spinner.js.map +1 -0
- package/dist/headless/swipe.cjs +2 -0
- package/dist/headless/swipe.cjs.map +1 -0
- package/dist/headless/swipe.d.ts +38 -0
- package/dist/headless/swipe.d.ts.map +1 -0
- package/dist/headless/swipe.js +58 -0
- package/dist/headless/swipe.js.map +1 -0
- package/dist/headless/text-field.cjs +2 -0
- package/dist/headless/text-field.cjs.map +1 -0
- package/dist/headless/text-field.d.ts +45 -0
- package/dist/headless/text-field.d.ts.map +1 -0
- package/dist/headless/text-field.js +41 -0
- package/dist/headless/text-field.js.map +1 -0
- package/dist/headless/typeahead.cjs +2 -0
- package/dist/headless/typeahead.cjs.map +1 -0
- package/dist/headless/typeahead.d.ts +53 -0
- package/dist/headless/typeahead.d.ts.map +1 -0
- package/dist/headless/typeahead.js +23 -0
- package/dist/headless/typeahead.js.map +1 -0
- package/dist/headless.cjs +1 -0
- package/dist/headless.js +26 -0
- package/dist/icon.cjs +2 -0
- package/dist/icon.cjs.map +1 -0
- package/dist/icon.js +87 -0
- package/dist/icon.js.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/input.cjs +67 -0
- package/dist/input.cjs.map +1 -0
- package/dist/input.js +184 -0
- package/dist/input.js.map +1 -0
- package/dist/inputs/button/button.css?inline.cjs +2 -0
- package/dist/inputs/button/button.css?inline.cjs.map +1 -0
- package/dist/inputs/button/button.css?inline.js +6 -0
- package/dist/inputs/button/button.css?inline.js.map +1 -0
- package/dist/inputs/button/button.d.ts +85 -0
- package/dist/inputs/button/button.d.ts.map +1 -0
- package/dist/inputs/button-group/button-group.css?inline.cjs +2 -0
- package/dist/inputs/button-group/button-group.css?inline.cjs.map +1 -0
- package/dist/inputs/button-group/button-group.css?inline.js +6 -0
- package/dist/inputs/button-group/button-group.css?inline.js.map +1 -0
- package/dist/inputs/button-group/button-group.d.ts +64 -0
- package/dist/inputs/button-group/button-group.d.ts.map +1 -0
- package/dist/inputs/calendar/calendar.css?inline.cjs +2 -0
- package/dist/inputs/calendar/calendar.css?inline.cjs.map +1 -0
- package/dist/inputs/calendar/calendar.css?inline.js +6 -0
- package/dist/inputs/calendar/calendar.css?inline.js.map +1 -0
- package/dist/inputs/calendar/calendar.d.ts +134 -0
- package/dist/inputs/calendar/calendar.d.ts.map +1 -0
- package/dist/inputs/checkbox/checkbox.css?inline.cjs +2 -0
- package/dist/inputs/checkbox/checkbox.css?inline.cjs.map +1 -0
- package/dist/inputs/checkbox/checkbox.css?inline.js +6 -0
- package/dist/inputs/checkbox/checkbox.css?inline.js.map +1 -0
- package/dist/inputs/checkbox/checkbox.d.ts +60 -0
- package/dist/inputs/checkbox/checkbox.d.ts.map +1 -0
- package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs +2 -0
- package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs.map +1 -0
- package/dist/inputs/checkbox-group/checkbox-group.css?inline.js +6 -0
- package/dist/inputs/checkbox-group/checkbox-group.css?inline.js.map +1 -0
- package/dist/inputs/checkbox-group/checkbox-group.d.ts +75 -0
- package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -0
- package/dist/inputs/combobox/combobox-options.cjs +2 -0
- package/dist/inputs/combobox/combobox-options.cjs.map +1 -0
- package/dist/inputs/combobox/combobox-options.d.ts +6 -0
- package/dist/inputs/combobox/combobox-options.d.ts.map +1 -0
- package/dist/inputs/combobox/combobox-options.js +26 -0
- package/dist/inputs/combobox/combobox-options.js.map +1 -0
- package/dist/inputs/combobox/combobox.css?inline.cjs +2 -0
- package/dist/inputs/combobox/combobox.css?inline.cjs.map +1 -0
- package/dist/inputs/combobox/combobox.css?inline.js +6 -0
- package/dist/inputs/combobox/combobox.css?inline.js.map +1 -0
- package/dist/inputs/combobox/combobox.d.ts +45 -0
- package/dist/inputs/combobox/combobox.d.ts.map +1 -0
- package/dist/inputs/combobox/combobox.types.d.ts +45 -0
- package/dist/inputs/combobox/combobox.types.d.ts.map +1 -0
- package/dist/inputs/datagrid/datagrid-column.cjs +2 -0
- package/dist/inputs/datagrid/datagrid-column.cjs.map +1 -0
- package/dist/inputs/datagrid/datagrid-column.d.ts +7 -0
- package/dist/inputs/datagrid/datagrid-column.d.ts.map +1 -0
- package/dist/inputs/datagrid/datagrid-column.js +31 -0
- package/dist/inputs/datagrid/datagrid-column.js.map +1 -0
- package/dist/inputs/datagrid/datagrid-controls.cjs +2 -0
- package/dist/inputs/datagrid/datagrid-controls.cjs.map +1 -0
- package/dist/inputs/datagrid/datagrid-controls.d.ts +98 -0
- package/dist/inputs/datagrid/datagrid-controls.d.ts.map +1 -0
- package/dist/inputs/datagrid/datagrid-controls.js +147 -0
- package/dist/inputs/datagrid/datagrid-controls.js.map +1 -0
- package/dist/inputs/datagrid/datagrid-nav.cjs +2 -0
- package/dist/inputs/datagrid/datagrid-nav.cjs.map +1 -0
- package/dist/inputs/datagrid/datagrid-nav.d.ts +33 -0
- package/dist/inputs/datagrid/datagrid-nav.d.ts.map +1 -0
- package/dist/inputs/datagrid/datagrid-nav.js +51 -0
- package/dist/inputs/datagrid/datagrid-nav.js.map +1 -0
- package/dist/inputs/datagrid/datagrid.css?inline.cjs +2 -0
- package/dist/inputs/datagrid/datagrid.css?inline.cjs.map +1 -0
- package/dist/inputs/datagrid/datagrid.css?inline.js +6 -0
- package/dist/inputs/datagrid/datagrid.css?inline.js.map +1 -0
- package/dist/inputs/datagrid/datagrid.d.ts +302 -0
- package/dist/inputs/datagrid/datagrid.d.ts.map +1 -0
- package/dist/inputs/date-picker/date-picker.css?inline.cjs +2 -0
- package/dist/inputs/date-picker/date-picker.css?inline.cjs.map +1 -0
- package/dist/inputs/date-picker/date-picker.css?inline.js +6 -0
- package/dist/inputs/date-picker/date-picker.css?inline.js.map +1 -0
- package/dist/inputs/date-picker/date-picker.d.ts +112 -0
- package/dist/inputs/date-picker/date-picker.d.ts.map +1 -0
- package/dist/inputs/file-input/file-input.css?inline.cjs +2 -0
- package/dist/inputs/file-input/file-input.css?inline.cjs.map +1 -0
- package/dist/inputs/file-input/file-input.css?inline.js +6 -0
- package/dist/inputs/file-input/file-input.css?inline.js.map +1 -0
- package/dist/inputs/file-input/file-input.d.ts +90 -0
- package/dist/inputs/file-input/file-input.d.ts.map +1 -0
- package/dist/inputs/form/form.css?inline.cjs +2 -0
- package/dist/inputs/form/form.css?inline.cjs.map +1 -0
- package/dist/inputs/form/form.css?inline.js +6 -0
- package/dist/inputs/form/form.css?inline.js.map +1 -0
- package/dist/inputs/form/form.d.ts +59 -0
- package/dist/inputs/form/form.d.ts.map +1 -0
- package/dist/inputs/index.d.ts +47 -0
- package/dist/inputs/index.d.ts.map +1 -0
- package/dist/inputs/input/input.css?inline.cjs +2 -0
- package/dist/inputs/input/input.css?inline.cjs.map +1 -0
- package/dist/inputs/input/input.css?inline.js +6 -0
- package/dist/inputs/input/input.css?inline.js.map +1 -0
- package/dist/inputs/input/input.d.ts +96 -0
- package/dist/inputs/input/input.d.ts.map +1 -0
- package/dist/inputs/number-input/number-input.css?inline.cjs +2 -0
- package/dist/inputs/number-input/number-input.css?inline.cjs.map +1 -0
- package/dist/inputs/number-input/number-input.css?inline.js +6 -0
- package/dist/inputs/number-input/number-input.css?inline.js.map +1 -0
- package/dist/inputs/number-input/number-input.d.ts +102 -0
- package/dist/inputs/number-input/number-input.d.ts.map +1 -0
- package/dist/inputs/otp-input/otp-input.css?inline.cjs +2 -0
- package/dist/inputs/otp-input/otp-input.css?inline.cjs.map +1 -0
- package/dist/inputs/otp-input/otp-input.css?inline.js +6 -0
- package/dist/inputs/otp-input/otp-input.css?inline.js.map +1 -0
- package/dist/inputs/otp-input/otp-input.d.ts +82 -0
- package/dist/inputs/otp-input/otp-input.d.ts.map +1 -0
- package/dist/inputs/radio/radio.css?inline.cjs +2 -0
- package/dist/inputs/radio/radio.css?inline.cjs.map +1 -0
- package/dist/inputs/radio/radio.css?inline.js +6 -0
- package/dist/inputs/radio/radio.css?inline.js.map +1 -0
- package/dist/inputs/radio/radio.d.ts +56 -0
- package/dist/inputs/radio/radio.d.ts.map +1 -0
- package/dist/inputs/radio-group/radio-group.css?inline.cjs +2 -0
- package/dist/inputs/radio-group/radio-group.css?inline.cjs.map +1 -0
- package/dist/inputs/radio-group/radio-group.css?inline.js +6 -0
- package/dist/inputs/radio-group/radio-group.css?inline.js.map +1 -0
- package/dist/inputs/radio-group/radio-group.d.ts +74 -0
- package/dist/inputs/radio-group/radio-group.d.ts.map +1 -0
- package/dist/inputs/rating/rating.css?inline.cjs +2 -0
- package/dist/inputs/rating/rating.css?inline.cjs.map +1 -0
- package/dist/inputs/rating/rating.css?inline.js +6 -0
- package/dist/inputs/rating/rating.css?inline.js.map +1 -0
- package/dist/inputs/rating/rating.d.ts +68 -0
- package/dist/inputs/rating/rating.d.ts.map +1 -0
- package/dist/inputs/select/select.css?inline.cjs +2 -0
- package/dist/inputs/select/select.css?inline.cjs.map +1 -0
- package/dist/inputs/select/select.css?inline.js +6 -0
- package/dist/inputs/select/select.css?inline.js.map +1 -0
- package/dist/inputs/select/select.d.ts +89 -0
- package/dist/inputs/select/select.d.ts.map +1 -0
- package/dist/inputs/shared/field-binding.cjs +2 -0
- package/dist/inputs/shared/field-binding.cjs.map +1 -0
- package/dist/inputs/shared/field-binding.d.ts +31 -0
- package/dist/inputs/shared/field-binding.d.ts.map +1 -0
- package/dist/inputs/shared/field-binding.js +31 -0
- package/dist/inputs/shared/field-binding.js.map +1 -0
- package/dist/inputs/shared/form-context.cjs +2 -0
- package/dist/inputs/shared/form-context.cjs.map +1 -0
- package/dist/inputs/shared/form-context.d.ts +49 -0
- package/dist/inputs/shared/form-context.d.ts.map +1 -0
- package/dist/inputs/shared/form-context.js +15 -0
- package/dist/inputs/shared/form-context.js.map +1 -0
- package/dist/inputs/shared/index.d.ts +5 -0
- package/dist/inputs/shared/index.d.ts.map +1 -0
- package/dist/inputs/shared/templates.cjs +11 -0
- package/dist/inputs/shared/templates.cjs.map +1 -0
- package/dist/inputs/shared/templates.d.ts +13 -0
- package/dist/inputs/shared/templates.d.ts.map +1 -0
- package/dist/inputs/shared/templates.js +18 -0
- package/dist/inputs/shared/templates.js.map +1 -0
- package/dist/inputs/shared/use-form-action.cjs +2 -0
- package/dist/inputs/shared/use-form-action.cjs.map +1 -0
- package/dist/inputs/shared/use-form-action.d.ts +17 -0
- package/dist/inputs/shared/use-form-action.d.ts.map +1 -0
- package/dist/inputs/shared/use-form-action.js +19 -0
- package/dist/inputs/shared/use-form-action.js.map +1 -0
- package/dist/inputs/slider/slider.css?inline.cjs +2 -0
- package/dist/inputs/slider/slider.css?inline.cjs.map +1 -0
- package/dist/inputs/slider/slider.css?inline.js +6 -0
- package/dist/inputs/slider/slider.css?inline.js.map +1 -0
- package/dist/inputs/slider/slider.d.ts +95 -0
- package/dist/inputs/slider/slider.d.ts.map +1 -0
- package/dist/inputs/switch/switch.css?inline.cjs +2 -0
- package/dist/inputs/switch/switch.css?inline.cjs.map +1 -0
- package/dist/inputs/switch/switch.css?inline.js +6 -0
- package/dist/inputs/switch/switch.css?inline.js.map +1 -0
- package/dist/inputs/switch/switch.d.ts +56 -0
- package/dist/inputs/switch/switch.d.ts.map +1 -0
- package/dist/inputs/textarea/textarea.css?inline.cjs +2 -0
- package/dist/inputs/textarea/textarea.css?inline.cjs.map +1 -0
- package/dist/inputs/textarea/textarea.css?inline.js +6 -0
- package/dist/inputs/textarea/textarea.css?inline.js.map +1 -0
- package/dist/inputs/textarea/textarea.d.ts +91 -0
- package/dist/inputs/textarea/textarea.d.ts.map +1 -0
- package/dist/inputs/time-picker/time-picker.css?inline.cjs +2 -0
- package/dist/inputs/time-picker/time-picker.css?inline.cjs.map +1 -0
- package/dist/inputs/time-picker/time-picker.css?inline.js +6 -0
- package/dist/inputs/time-picker/time-picker.css?inline.js.map +1 -0
- package/dist/inputs/time-picker/time-picker.d.ts +103 -0
- package/dist/inputs/time-picker/time-picker.d.ts.map +1 -0
- package/dist/layout/box/box.css?inline.cjs +2 -0
- package/dist/layout/box/box.css?inline.cjs.map +1 -0
- package/dist/layout/box/box.css?inline.js +6 -0
- package/dist/layout/box/box.css?inline.js.map +1 -0
- package/dist/layout/box/box.d.ts +52 -0
- package/dist/layout/box/box.d.ts.map +1 -0
- package/dist/layout/grid/grid.css?inline.cjs +2 -0
- package/dist/layout/grid/grid.css?inline.cjs.map +1 -0
- package/dist/layout/grid/grid.css?inline.js +6 -0
- package/dist/layout/grid/grid.css?inline.js.map +1 -0
- package/dist/layout/grid/grid.d.ts +105 -0
- package/dist/layout/grid/grid.d.ts.map +1 -0
- package/dist/layout/grid-item/grid-item.css?inline.cjs +2 -0
- package/dist/layout/grid-item/grid-item.css?inline.cjs.map +1 -0
- package/dist/layout/grid-item/grid-item.css?inline.js +6 -0
- package/dist/layout/grid-item/grid-item.css?inline.js.map +1 -0
- package/dist/layout/grid-item/grid-item.d.ts +54 -0
- package/dist/layout/grid-item/grid-item.d.ts.map +1 -0
- package/dist/layout/index.d.ts +11 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/navbar/navbar.css?inline.cjs +2 -0
- package/dist/layout/navbar/navbar.css?inline.cjs.map +1 -0
- package/dist/layout/navbar/navbar.css?inline.js +6 -0
- package/dist/layout/navbar/navbar.css?inline.js.map +1 -0
- package/dist/layout/navbar/navbar.d.ts +153 -0
- package/dist/layout/navbar/navbar.d.ts.map +1 -0
- package/dist/layout/sidebar/sidebar-group.css?inline.cjs +2 -0
- package/dist/layout/sidebar/sidebar-group.css?inline.cjs.map +1 -0
- package/dist/layout/sidebar/sidebar-group.css?inline.js +6 -0
- package/dist/layout/sidebar/sidebar-group.css?inline.js.map +1 -0
- package/dist/layout/sidebar/sidebar-item.css?inline.cjs +2 -0
- package/dist/layout/sidebar/sidebar-item.css?inline.cjs.map +1 -0
- package/dist/layout/sidebar/sidebar-item.css?inline.js +6 -0
- package/dist/layout/sidebar/sidebar-item.css?inline.js.map +1 -0
- package/dist/layout/sidebar/sidebar.css?inline.cjs +2 -0
- package/dist/layout/sidebar/sidebar.css?inline.cjs.map +1 -0
- package/dist/layout/sidebar/sidebar.css?inline.js +6 -0
- package/dist/layout/sidebar/sidebar.css?inline.js.map +1 -0
- package/dist/layout/sidebar/sidebar.d.ts +226 -0
- package/dist/layout/sidebar/sidebar.d.ts.map +1 -0
- package/dist/menu.cjs +30 -0
- package/dist/menu.cjs.map +1 -0
- package/dist/menu.js +197 -0
- package/dist/menu.js.map +1 -0
- package/dist/navbar.cjs +68 -0
- package/dist/navbar.cjs.map +1 -0
- package/dist/navbar.js +283 -0
- package/dist/navbar.js.map +1 -0
- package/dist/number-input.cjs +40 -0
- package/dist/number-input.cjs.map +1 -0
- package/dist/number-input.js +141 -0
- package/dist/number-input.js.map +1 -0
- package/dist/ore/dist/_dev.cjs +2 -0
- package/dist/ore/dist/_dev.cjs.map +1 -0
- package/dist/ore/dist/_dev.js +12 -0
- package/dist/ore/dist/_dev.js.map +1 -0
- package/dist/ore/dist/aria.cjs +2 -0
- package/dist/ore/dist/aria.cjs.map +1 -0
- package/dist/ore/dist/aria.js +37 -0
- package/dist/ore/dist/aria.js.map +1 -0
- package/dist/ore/dist/base-element.cjs +2 -0
- package/dist/ore/dist/base-element.cjs.map +1 -0
- package/dist/ore/dist/base-element.js +146 -0
- package/dist/ore/dist/base-element.js.map +1 -0
- package/dist/ore/dist/context-bag.cjs +2 -0
- package/dist/ore/dist/context-bag.cjs.map +1 -0
- package/dist/ore/dist/context-bag.js +28 -0
- package/dist/ore/dist/context-bag.js.map +1 -0
- package/dist/ore/dist/context.cjs +2 -0
- package/dist/ore/dist/context.cjs.map +1 -0
- package/dist/ore/dist/context.js +38 -0
- package/dist/ore/dist/context.js.map +1 -0
- package/dist/ore/dist/define.cjs +2 -0
- package/dist/ore/dist/define.cjs.map +1 -0
- package/dist/ore/dist/define.js +27 -0
- package/dist/ore/dist/define.js.map +1 -0
- package/dist/ore/dist/directives/classMap.cjs +1 -0
- package/dist/ore/dist/directives/classMap.js +1 -0
- package/dist/ore/dist/directives/each.cjs +1 -0
- package/dist/ore/dist/directives/each.js +5 -0
- package/dist/ore/dist/directives/live.cjs +2 -0
- package/dist/ore/dist/directives/live.cjs.map +1 -0
- package/dist/ore/dist/directives/live.js +6 -0
- package/dist/ore/dist/directives/live.js.map +1 -0
- package/dist/ore/dist/directives/model.cjs +1 -0
- package/dist/ore/dist/directives/model.js +3 -0
- package/dist/ore/dist/directives/raw.cjs +2 -0
- package/dist/ore/dist/directives/raw.cjs.map +1 -0
- package/dist/ore/dist/directives/raw.js +35 -0
- package/dist/ore/dist/directives/raw.js.map +1 -0
- package/dist/ore/dist/directives/styleMap.cjs +2 -0
- package/dist/ore/dist/directives/styleMap.cjs.map +1 -0
- package/dist/ore/dist/directives/styleMap.js +20 -0
- package/dist/ore/dist/directives/styleMap.js.map +1 -0
- package/dist/ore/dist/directives/when.cjs +2 -0
- package/dist/ore/dist/directives/when.cjs.map +1 -0
- package/dist/ore/dist/directives/when.js +33 -0
- package/dist/ore/dist/directives/when.js.map +1 -0
- package/dist/ore/dist/directives.cjs +1 -0
- package/dist/ore/dist/directives.js +8 -0
- package/dist/ore/dist/errors.cjs +3 -0
- package/dist/ore/dist/errors.cjs.map +1 -0
- package/dist/ore/dist/errors.js +41 -0
- package/dist/ore/dist/errors.js.map +1 -0
- package/dist/ore/dist/host-bind.cjs +2 -0
- package/dist/ore/dist/host-bind.cjs.map +1 -0
- package/dist/ore/dist/host-bind.js +60 -0
- package/dist/ore/dist/host-bind.js.map +1 -0
- package/dist/ore/dist/observers/intersection-observe.cjs +2 -0
- package/dist/ore/dist/observers/intersection-observe.cjs.map +1 -0
- package/dist/ore/dist/observers/intersection-observe.js +12 -0
- package/dist/ore/dist/observers/intersection-observe.js.map +1 -0
- package/dist/ore/dist/observers/media-observe.cjs +1 -0
- package/dist/ore/dist/observers/media-observe.js +1 -0
- package/dist/ore/dist/observers/mutation-observe.cjs +1 -0
- package/dist/ore/dist/observers/mutation-observe.js +1 -0
- package/dist/ore/dist/observers/resize-observe.cjs +2 -0
- package/dist/ore/dist/observers/resize-observe.cjs.map +1 -0
- package/dist/ore/dist/observers/resize-observe.js +20 -0
- package/dist/ore/dist/observers/resize-observe.js.map +1 -0
- package/dist/ore/dist/observers.cjs +1 -0
- package/dist/ore/dist/observers.js +5 -0
- package/dist/ore/dist/props.cjs +2 -0
- package/dist/ore/dist/props.cjs.map +1 -0
- package/dist/ore/dist/props.js +54 -0
- package/dist/ore/dist/props.js.map +1 -0
- package/dist/ore/dist/runtime.cjs +2 -0
- package/dist/ore/dist/runtime.cjs.map +1 -0
- package/dist/ore/dist/runtime.js +33 -0
- package/dist/ore/dist/runtime.js.map +1 -0
- package/dist/ore/dist/slots.cjs +2 -0
- package/dist/ore/dist/slots.cjs.map +1 -0
- package/dist/ore/dist/slots.js +61 -0
- package/dist/ore/dist/slots.js.map +1 -0
- package/dist/ore/dist/testing/flush.cjs +2 -0
- package/dist/ore/dist/testing/flush.cjs.map +1 -0
- package/dist/ore/dist/testing/flush.js +11 -0
- package/dist/ore/dist/testing/flush.js.map +1 -0
- package/dist/ore/dist/testing/mount.cjs +2 -0
- package/dist/ore/dist/testing/mount.cjs.map +1 -0
- package/dist/ore/dist/testing/mount.js +94 -0
- package/dist/ore/dist/testing/mount.js.map +1 -0
- package/dist/ore/dist/testing/query.cjs +2 -0
- package/dist/ore/dist/testing/query.cjs.map +1 -0
- package/dist/ore/dist/testing/query.js +12 -0
- package/dist/ore/dist/testing/query.js.map +1 -0
- package/dist/ore/dist/testing/render-hook.cjs +1 -0
- package/dist/ore/dist/testing/render-hook.js +4 -0
- package/dist/ore/dist/testing/testing.cjs +1 -0
- package/dist/ore/dist/testing/testing.js +4 -0
- package/dist/ore/dist/testing/wait.cjs +1 -0
- package/dist/ore/dist/testing/wait.js +1 -0
- package/dist/ore/dist/testing.cjs +1 -0
- package/dist/ore/dist/testing.js +6 -0
- package/dist/ore/dist/types/bindings.cjs +2 -0
- package/dist/ore/dist/types/bindings.cjs.map +1 -0
- package/dist/ore/dist/types/bindings.js +15 -0
- package/dist/ore/dist/types/bindings.js.map +1 -0
- package/dist/ore/dist/types.cjs +2 -0
- package/dist/ore/dist/types.cjs.map +1 -0
- package/dist/ore/dist/types.js +15 -0
- package/dist/ore/dist/types.js.map +1 -0
- package/dist/ore/dist/utils/aria.cjs +2 -0
- package/dist/ore/dist/utils/aria.cjs.map +1 -0
- package/dist/ore/dist/utils/aria.js +6 -0
- package/dist/ore/dist/utils/aria.js.map +1 -0
- package/dist/ore/dist/utils/css.cjs +2 -0
- package/dist/ore/dist/utils/css.cjs.map +1 -0
- package/dist/ore/dist/utils/css.js +18 -0
- package/dist/ore/dist/utils/css.js.map +1 -0
- package/dist/ore/dist/utils/dom.cjs +2 -0
- package/dist/ore/dist/utils/dom.cjs.map +1 -0
- package/dist/ore/dist/utils/dom.js +47 -0
- package/dist/ore/dist/utils/dom.js.map +1 -0
- package/dist/ore/dist/utils/emit.cjs +2 -0
- package/dist/ore/dist/utils/emit.cjs.map +1 -0
- package/dist/ore/dist/utils/emit.js +16 -0
- package/dist/ore/dist/utils/emit.js.map +1 -0
- package/dist/ore/dist/utils/id.cjs +2 -0
- package/dist/ore/dist/utils/id.cjs.map +1 -0
- package/dist/ore/dist/utils/id.js +4 -0
- package/dist/ore/dist/utils/id.js.map +1 -0
- package/dist/otp-input.cjs +21 -0
- package/dist/otp-input.cjs.map +1 -0
- package/dist/otp-input.js +145 -0
- package/dist/otp-input.js.map +1 -0
- package/dist/overlay/dialog/dialog.css?inline.cjs +2 -0
- package/dist/overlay/dialog/dialog.css?inline.cjs.map +1 -0
- package/dist/overlay/dialog/dialog.css?inline.js +6 -0
- package/dist/overlay/dialog/dialog.css?inline.js.map +1 -0
- package/dist/overlay/dialog/dialog.d.ts +108 -0
- package/dist/overlay/dialog/dialog.d.ts.map +1 -0
- package/dist/overlay/drawer/drawer.css?inline.cjs +2 -0
- package/dist/overlay/drawer/drawer.css?inline.cjs.map +1 -0
- package/dist/overlay/drawer/drawer.css?inline.js +6 -0
- package/dist/overlay/drawer/drawer.css?inline.js.map +1 -0
- package/dist/overlay/drawer/drawer.d.ts +111 -0
- package/dist/overlay/drawer/drawer.d.ts.map +1 -0
- package/dist/overlay/index.d.ts +11 -0
- package/dist/overlay/index.d.ts.map +1 -0
- package/dist/overlay/menu/menu-item.css?inline.cjs +2 -0
- package/dist/overlay/menu/menu-item.css?inline.cjs.map +1 -0
- package/dist/overlay/menu/menu-item.css?inline.js +6 -0
- package/dist/overlay/menu/menu-item.css?inline.js.map +1 -0
- package/dist/overlay/menu/menu-separator.css?inline.cjs +2 -0
- package/dist/overlay/menu/menu-separator.css?inline.cjs.map +1 -0
- package/dist/overlay/menu/menu-separator.css?inline.js +6 -0
- package/dist/overlay/menu/menu-separator.css?inline.js.map +1 -0
- package/dist/overlay/menu/menu.css?inline.cjs +2 -0
- package/dist/overlay/menu/menu.css?inline.cjs.map +1 -0
- package/dist/overlay/menu/menu.css?inline.js +6 -0
- package/dist/overlay/menu/menu.css?inline.js.map +1 -0
- package/dist/overlay/menu/menu.d.ts +110 -0
- package/dist/overlay/menu/menu.d.ts.map +1 -0
- package/dist/overlay/popover/popover.css?inline.cjs +2 -0
- package/dist/overlay/popover/popover.css?inline.cjs.map +1 -0
- package/dist/overlay/popover/popover.css?inline.js +6 -0
- package/dist/overlay/popover/popover.css?inline.js.map +1 -0
- package/dist/overlay/popover/popover.d.ts +56 -0
- package/dist/overlay/popover/popover.d.ts.map +1 -0
- package/dist/overlay/shared/await-exit.cjs +2 -0
- package/dist/overlay/shared/await-exit.cjs.map +1 -0
- package/dist/overlay/shared/await-exit.d.ts +14 -0
- package/dist/overlay/shared/await-exit.d.ts.map +1 -0
- package/dist/overlay/shared/await-exit.js +18 -0
- package/dist/overlay/shared/await-exit.js.map +1 -0
- package/dist/overlay/shared/background-lock.cjs +2 -0
- package/dist/overlay/shared/background-lock.cjs.map +1 -0
- package/dist/overlay/shared/background-lock.d.ts +22 -0
- package/dist/overlay/shared/background-lock.d.ts.map +1 -0
- package/dist/overlay/shared/background-lock.js +25 -0
- package/dist/overlay/shared/background-lock.js.map +1 -0
- package/dist/overlay/shared/use-dialog.cjs +2 -0
- package/dist/overlay/shared/use-dialog.cjs.map +1 -0
- package/dist/overlay/shared/use-dialog.d.ts +76 -0
- package/dist/overlay/shared/use-dialog.d.ts.map +1 -0
- package/dist/overlay/shared/use-dialog.js +92 -0
- package/dist/overlay/shared/use-dialog.js.map +1 -0
- package/dist/overlay/shared/use-floating-trigger.cjs +2 -0
- package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -0
- package/dist/overlay/shared/use-floating-trigger.d.ts +67 -0
- package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -0
- package/dist/overlay/shared/use-floating-trigger.js +128 -0
- package/dist/overlay/shared/use-floating-trigger.js.map +1 -0
- package/dist/overlay/tooltip/tooltip.css?inline.cjs +2 -0
- package/dist/overlay/tooltip/tooltip.css?inline.cjs.map +1 -0
- package/dist/overlay/tooltip/tooltip.css?inline.js +6 -0
- package/dist/overlay/tooltip/tooltip.css?inline.js.map +1 -0
- package/dist/overlay/tooltip/tooltip.d.ts +72 -0
- package/dist/overlay/tooltip/tooltip.d.ts.map +1 -0
- package/dist/pagination.cjs +63 -0
- package/dist/pagination.cjs.map +1 -0
- package/dist/pagination.js +113 -0
- package/dist/pagination.js.map +1 -0
- package/dist/password-strength.cjs +19 -0
- package/dist/password-strength.cjs.map +1 -0
- package/dist/password-strength.js +69 -0
- package/dist/password-strength.js.map +1 -0
- package/dist/popover.cjs +16 -0
- package/dist/popover.cjs.map +1 -0
- package/dist/popover.js +81 -0
- package/dist/popover.js.map +1 -0
- package/dist/progress.cjs +46 -0
- package/dist/progress.cjs.map +1 -0
- package/dist/progress.js +96 -0
- package/dist/progress.js.map +1 -0
- package/dist/radio-group.cjs +25 -0
- package/dist/radio-group.cjs.map +1 -0
- package/dist/radio-group.js +145 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/radio.cjs +10 -0
- package/dist/radio.cjs.map +1 -0
- package/dist/radio.js +146 -0
- package/dist/radio.js.map +1 -0
- package/dist/rating.cjs +28 -0
- package/dist/rating.cjs.map +1 -0
- package/dist/rating.js +123 -0
- package/dist/rating.js.map +1 -0
- package/dist/refine.cjs +2705 -0
- package/dist/refine.cjs.map +1 -0
- package/dist/refine.iife.js +2705 -0
- package/dist/refine.iife.js.map +1 -0
- package/dist/refine.js +2705 -0
- package/dist/refine.js.map +1 -0
- package/dist/select.cjs +79 -0
- package/dist/select.cjs.map +1 -0
- package/dist/select.js +289 -0
- package/dist/select.js.map +1 -0
- package/dist/separator.cjs +27 -0
- package/dist/separator.cjs.map +1 -0
- package/dist/separator.js +47 -0
- package/dist/separator.js.map +1 -0
- package/dist/shared/index.d.ts +14 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/prop-bundles.cjs +2 -0
- package/dist/shared/prop-bundles.cjs.map +1 -0
- package/dist/shared/prop-bundles.d.ts +45 -0
- package/dist/shared/prop-bundles.d.ts.map +1 -0
- package/dist/shared/prop-bundles.js +13 -0
- package/dist/shared/prop-bundles.js.map +1 -0
- package/dist/shared/size-presets.cjs +2 -0
- package/dist/shared/size-presets.cjs.map +1 -0
- package/dist/shared/size-presets.d.ts +101 -0
- package/dist/shared/size-presets.d.ts.map +1 -0
- package/dist/shared/size-presets.js +96 -0
- package/dist/shared/size-presets.js.map +1 -0
- package/dist/shared/types.d.ts +76 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/sidebar.cjs +123 -0
- package/dist/sidebar.cjs.map +1 -0
- package/dist/sidebar.js +344 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/skeleton.cjs +10 -0
- package/dist/skeleton.cjs.map +1 -0
- package/dist/skeleton.js +59 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/slider.cjs +27 -0
- package/dist/slider.cjs.map +1 -0
- package/dist/slider.js +219 -0
- package/dist/slider.js.map +1 -0
- package/dist/styles/animation.css +94 -0
- package/dist/styles/index.cjs +2 -0
- package/dist/styles/index.cjs.map +1 -0
- package/dist/styles/index.d.ts +41 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/index.js +24 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/styles/layer.css +19 -0
- package/dist/styles/mixins/accessibility.css.cjs +51 -0
- package/dist/styles/mixins/accessibility.css.cjs.map +1 -0
- package/dist/styles/mixins/accessibility.css.d.ts +80 -0
- package/dist/styles/mixins/accessibility.css.d.ts.map +1 -0
- package/dist/styles/mixins/accessibility.css.js +56 -0
- package/dist/styles/mixins/accessibility.css.js.map +1 -0
- package/dist/styles/mixins/animation.css.cjs +133 -0
- package/dist/styles/mixins/animation.css.cjs.map +1 -0
- package/dist/styles/mixins/animation.css.d.ts +43 -0
- package/dist/styles/mixins/animation.css.d.ts.map +1 -0
- package/dist/styles/mixins/animation.css.js +166 -0
- package/dist/styles/mixins/animation.css.js.map +1 -0
- package/dist/styles/mixins/shape.css.cjs +66 -0
- package/dist/styles/mixins/shape.css.cjs.map +1 -0
- package/dist/styles/mixins/shape.css.d.ts +96 -0
- package/dist/styles/mixins/shape.css.d.ts.map +1 -0
- package/dist/styles/mixins/shape.css.js +98 -0
- package/dist/styles/mixins/shape.css.js.map +1 -0
- package/dist/styles/mixins/states.css.cjs +37 -0
- package/dist/styles/mixins/states.css.cjs.map +1 -0
- package/dist/styles/mixins/states.css.d.ts +27 -0
- package/dist/styles/mixins/states.css.d.ts.map +1 -0
- package/dist/styles/mixins/states.css.js +44 -0
- package/dist/styles/mixins/states.css.js.map +1 -0
- package/dist/styles/mixins/table-base.css.cjs +94 -0
- package/dist/styles/mixins/table-base.css.cjs.map +1 -0
- package/dist/styles/mixins/table-base.css.d.ts +24 -0
- package/dist/styles/mixins/table-base.css.d.ts.map +1 -0
- package/dist/styles/mixins/table-base.css.js +99 -0
- package/dist/styles/mixins/table-base.css.js.map +1 -0
- package/dist/styles/mixins/theme.css.cjs +80 -0
- package/dist/styles/mixins/theme.css.cjs.map +1 -0
- package/dist/styles/mixins/theme.css.d.ts +77 -0
- package/dist/styles/mixins/theme.css.d.ts.map +1 -0
- package/dist/styles/mixins/theme.css.js +98 -0
- package/dist/styles/mixins/theme.css.js.map +1 -0
- package/dist/styles/mixins/variants.css.cjs +55 -0
- package/dist/styles/mixins/variants.css.cjs.map +1 -0
- package/dist/styles/mixins/variants.css.d.ts +22 -0
- package/dist/styles/mixins/variants.css.d.ts.map +1 -0
- package/dist/styles/mixins/variants.css.js +60 -0
- package/dist/styles/mixins/variants.css.js.map +1 -0
- package/dist/styles/preflight.css +239 -0
- package/dist/styles/styles.css +5 -0
- package/dist/styles/theme.css +553 -0
- package/dist/switch.cjs +10 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.js +79 -0
- package/dist/switch.js.map +1 -0
- package/dist/tab-item.cjs +17 -0
- package/dist/tab-item.cjs.map +1 -0
- package/dist/tab-item.js +62 -0
- package/dist/tab-item.js.map +1 -0
- package/dist/tab-panel.cjs +14 -0
- package/dist/tab-panel.cjs.map +1 -0
- package/dist/tab-panel.js +61 -0
- package/dist/tab-panel.js.map +1 -0
- package/dist/table.cjs +2 -0
- package/dist/table.cjs.map +1 -0
- package/dist/table.js +101 -0
- package/dist/table.js.map +1 -0
- package/dist/tabs.cjs +17 -0
- package/dist/tabs.cjs.map +1 -0
- package/dist/tabs.js +126 -0
- package/dist/tabs.js.map +1 -0
- package/dist/testing/index.d.ts +233 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing.cjs +2 -0
- package/dist/testing.cjs.map +1 -0
- package/dist/testing.js +44 -0
- package/dist/testing.js.map +1 -0
- package/dist/text.cjs +2 -0
- package/dist/text.cjs.map +1 -0
- package/dist/text.js +34 -0
- package/dist/text.js.map +1 -0
- package/dist/textarea.cjs +33 -0
- package/dist/textarea.cjs.map +1 -0
- package/dist/textarea.js +137 -0
- package/dist/textarea.js.map +1 -0
- package/dist/time-picker.cjs +98 -0
- package/dist/time-picker.cjs.map +1 -0
- package/dist/time-picker.js +261 -0
- package/dist/time-picker.js.map +1 -0
- package/dist/toast.cjs +69 -0
- package/dist/toast.cjs.map +1 -0
- package/dist/toast.js +316 -0
- package/dist/toast.js.map +1 -0
- package/dist/tooltip.cjs +15 -0
- package/dist/tooltip.cjs.map +1 -0
- package/dist/tooltip.js +121 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/css.cjs +2 -0
- package/dist/utils/css.cjs.map +1 -0
- package/dist/utils/css.d.ts +10 -0
- package/dist/utils/css.d.ts.map +1 -0
- package/dist/utils/css.js +10 -0
- package/dist/utils/css.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/link.cjs +2 -0
- package/dist/utils/link.cjs.map +1 -0
- package/dist/utils/link.d.ts +44 -0
- package/dist/utils/link.d.ts.map +1 -0
- package/dist/utils/link.js +19 -0
- package/dist/utils/link.js.map +1 -0
- package/package.json +464 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"option-list.js","names":[],"sources":["../../src/headless/option-list.ts"],"sourcesContent":["import { computed, type Readable, signal } from '@vielzeug/ripple';\n\nimport { RefineConfigError } from '../errors';\nimport { createListControl, type ListKeyAction, type ListNavigationAction } from './nav';\nimport { createOverlayControl, type DialogCloseReason, type OverlayOpenReason } from './overlay';\nimport { createDropdownPositioner, type DropdownPositionerOptions } from './positioner';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type BaseOptionItem = object;\n\n/** Placement-only options for the dropdown positioner (getFloating/getReference are injected from the option-list). */\nexport type PlacementOptions = Omit<DropdownPositionerOptions, 'getFloating' | 'getReference'>;\n\nexport type OptionListOptions<T extends BaseOptionItem> = {\n /** Returns the element used as the outside-click boundary. */\n getBoundary: () => HTMLElement | null;\n /**\n * Returns the currently focused option element for scroll-into-view.\n * When omitted, `scrollFocusedIntoView()` is a no-op.\n */\n getFocusedOptionElement?: () => HTMLElement | null;\n /**\n * Returns a plain-text label for the item at `index`.\n * When provided, the list control supports typeahead.\n */\n getItemLabel?: (item: T, index: number) => string;\n /** Returns the current list items. */\n getItems: () => T[];\n /**\n * Derives a stable `id` for the option at `index`.\n * When provided, `aria-activedescendant` is reactively set on the trigger element\n * to reflect the currently focused option (WAI-ARIA listbox / combobox pattern).\n */\n getOptionId?: (index: number) => string;\n /** Returns the floating panel element. */\n getPanel: () => HTMLElement | null;\n /** Returns the reference (trigger anchor) element for positioning. */\n getReference: () => HTMLElement | null;\n /** Returns the trigger element. Focus is restored here on close. */\n getTrigger?: () => HTMLElement | null;\n /** Returns `true` when all interactions should be suppressed (e.g. the host is disabled). */\n isDisabled?: () => boolean;\n isItemDisabled?: (item: T, index: number) => boolean;\n /** Override default keyboard bindings for navigation actions. */\n keys?: Partial<Record<ListNavigationAction, string[]>>;\n /** Whether list navigation wraps around at the first/last item. Default: `true`. */\n loop?: boolean;\n /** Called when the list closes. */\n onClose?: (reason: DialogCloseReason) => void;\n /**\n * Called when keyboard navigation lands on an item.\n * `event` is the originating `KeyboardEvent`, or `undefined` for programmatic navigation.\n */\n onNavigate?: (action: ListKeyAction, index: number, event?: KeyboardEvent) => void;\n /** Called when the list opens. */\n onOpen?: (reason: OverlayOpenReason) => void;\n /**\n * Restricts keyboard navigation direction for the option list.\n * Defaults to `'vertical'` when omitted (up/down arrow keys).\n */\n orientation?: 'both' | 'horizontal' | 'vertical';\n /** Placement and sizing options for the floating dropdown. */\n positioning?: PlacementOptions;\n /** Whether focus is restored to the trigger on close. Default: inferred from `restoreFocus`. */\n restoreFocus?: boolean | (() => boolean);\n /** `AbortSignal` from the component lifecycle. Disposes subscriptions and removes event listeners on abort. */\n signal: AbortSignal;\n};\n\nexport type OptionListHandle<T extends BaseOptionItem> = {\n /** Reactive `aria-activedescendant` value. `null` when no option is focused or the list is closed. */\n readonly ariaActiveDescendant: Readable<string | null>;\n /** Reactive `aria-expanded` value as string (`'true'` / `'false'`). */\n readonly ariaExpanded: Readable<string>;\n close(reason?: DialogCloseReason): void;\n /**\n * Focused item index (read-only). Write via `set(index)` to update through\n * the list control — this ensures scroll-into-view and disabled-item checks.\n */\n readonly focusedIndex: Readable<number>;\n getActiveItem(): T | undefined;\n handleKeydown(event: KeyboardEvent): boolean;\n /** Open state (read-only). Mutate via `open()`, `close()`, or `toggle()`. */\n readonly isOpen: Readable<boolean>;\n /**\n * Programmatically navigate to a named position. Always fires `onNavigate`\n * (scroll-into-view, aria-activedescendant update).\n * Returns the resolved index, or `-1` if no enabled item was found.\n */\n navigate(action: ListNavigationAction): number;\n open(reason?: OverlayOpenReason): void;\n scrollFocusedIntoView(): void;\n /**\n * Set focus to the item at `index`. Returns the resolved index.\n * Pass a negative index to clear focus (same as `reset()`).\n */\n set(index: number): number;\n /**\n * Toggles open state.\n * - Opens with `openReason` (default `'click'`).\n * - Closes with `closeReason` (default `'trigger'`).\n */\n toggle(openReason?: OverlayOpenReason, closeReason?: DialogCloseReason): void;\n /** Imperatively re-run dropdown positioning (e.g. after filter changes list height). */\n updatePosition(): void;\n};\n\n// ── Factory ───────────────────────────────────────────────────────────────────\n\n/**\n * Shared headless primitive for dropdown option lists (select, combobox, menu).\n *\n * Owns `isOpen`, `focusedIndex`, the dropdown positioner, list navigation, and\n * overlay wiring. Composes overlay.ts + nav.ts into a single complete API.\n */\nexport const createOptionList = <T extends BaseOptionItem>(options: OptionListOptions<T>): OptionListHandle<T> => {\n if (typeof options.getBoundary !== 'function') {\n throw new RefineConfigError('createOptionList: getBoundary is required');\n }\n\n if (typeof options.getPanel !== 'function') {\n throw new RefineConfigError('createOptionList: getPanel is required');\n }\n\n if (typeof options.getReference !== 'function') {\n throw new RefineConfigError('createOptionList: getReference is required');\n }\n\n const isOpen = signal(false);\n\n const ariaExpanded = computed(() => String(isOpen.value));\n\n const positioner = createDropdownPositioner({\n ...options.positioning,\n getFloating: options.getPanel,\n getReference: options.getReference,\n });\n\n const scrollFocusedIntoView = (): void => {\n options.getFocusedOptionElement?.()?.scrollIntoView({ block: 'nearest' });\n };\n\n const list = createListControl<T>({\n disabled: computed(() => !isOpen.value),\n getItemLabel: options.getItemLabel,\n getItems: options.getItems,\n isItemDisabled: options.isItemDisabled,\n keys: options.keys,\n loop: options.loop ?? true,\n onNavigate: (action, index, event) => {\n scrollFocusedIntoView();\n\n if (index >= 0) options.onNavigate?.(action, index, event);\n },\n orientation: options.orientation,\n signal: options.signal,\n });\n\n const ariaActiveDescendant = computed<string | null>(() => {\n const idx = list.focusedIndex.value;\n\n return options.getOptionId && isOpen.value && idx >= 0 ? options.getOptionId(idx) : null;\n });\n\n const overlay = createOverlayControl({\n getBoundary: options.getBoundary,\n getPanel: options.getPanel,\n getTrigger: options.getTrigger,\n isDisabled: options.isDisabled,\n isOpen: () => isOpen.value,\n onClose: options.onClose,\n onOpen: options.onOpen,\n positioner,\n restoreFocus: options.restoreFocus,\n setOpen: (next) => {\n isOpen.value = next;\n\n if (!next) list.reset();\n },\n signal: options.signal,\n });\n\n // Built-in Escape key handling: prevents each consumer from duplicating the\n // close-on-escape pattern. Fires only when the list is open; returns `true`\n // so callers know the event was handled and can stop further processing.\n const handleKeydown = (event: KeyboardEvent): boolean => {\n if (!isOpen.value) return false;\n\n if (event.key === 'Escape') {\n event.preventDefault();\n overlay.close('escape');\n\n return true;\n }\n\n return list.handleKeydown(event);\n };\n\n return {\n ariaActiveDescendant,\n ariaExpanded,\n close: (reason) => overlay.close(reason),\n focusedIndex: list.focusedIndex,\n getActiveItem: list.getActiveItem,\n handleKeydown,\n isOpen,\n navigate: list.navigate,\n open: (reason) => overlay.open(reason),\n scrollFocusedIntoView,\n set: list.set,\n toggle: (openReason, closeReason) => overlay.toggle(openReason, closeReason),\n updatePosition: positioner.update,\n };\n};\n"],"mappings":";;;;;;AAoHA,IAAa,KAA8C,MAAuD;CAChH,IAAI,OAAO,EAAQ,eAAgB,YACjC,MAAM,IAAI,EAAkB,2CAA2C;CAGzE,IAAI,OAAO,EAAQ,YAAa,YAC9B,MAAM,IAAI,EAAkB,wCAAwC;CAGtE,IAAI,OAAO,EAAQ,gBAAiB,YAClC,MAAM,IAAI,EAAkB,4CAA4C;CAG1E,IAAM,IAAS,EAAO,EAAK,GAErB,IAAe,QAAe,OAAO,EAAO,KAAK,CAAC,GAElD,IAAa,EAAyB;EAC1C,GAAG,EAAQ;EACX,aAAa,EAAQ;EACrB,cAAc,EAAQ;CACxB,CAAC,GAEK,UAAoC;EACxC,EAAQ,0BAA0B,CAAC,EAAE,eAAe,EAAE,OAAO,UAAU,CAAC;CAC1E,GAEM,IAAO,EAAqB;EAChC,UAAU,QAAe,CAAC,EAAO,KAAK;EACtC,cAAc,EAAQ;EACtB,UAAU,EAAQ;EAClB,gBAAgB,EAAQ;EACxB,MAAM,EAAQ;EACd,MAAM,EAAQ,QAAQ;EACtB,aAAa,GAAQ,GAAO,MAAU;GAGpC,AAFA,EAAsB,GAElB,KAAS,KAAG,EAAQ,aAAa,GAAQ,GAAO,CAAK;EAC3D;EACA,aAAa,EAAQ;EACrB,QAAQ,EAAQ;CAClB,CAAC,GAEK,IAAuB,QAA8B;EACzD,IAAM,IAAM,EAAK,aAAa;EAE9B,OAAO,EAAQ,eAAe,EAAO,SAAS,KAAO,IAAI,EAAQ,YAAY,CAAG,IAAI;CACtF,CAAC,GAEK,IAAU,EAAqB;EACnC,aAAa,EAAQ;EACrB,UAAU,EAAQ;EAClB,YAAY,EAAQ;EACpB,YAAY,EAAQ;EACpB,cAAc,EAAO;EACrB,SAAS,EAAQ;EACjB,QAAQ,EAAQ;EAChB;EACA,cAAc,EAAQ;EACtB,UAAU,MAAS;GAGjB,AAFA,EAAO,QAAQ,GAEV,KAAM,EAAK,MAAM;EACxB;EACA,QAAQ,EAAQ;CAClB,CAAC;CAkBD,OAAO;EACL;EACA;EACA,QAAQ,MAAW,EAAQ,MAAM,CAAM;EACvC,cAAc,EAAK;EACnB,eAAe,EAAK;EACpB,gBAnBqB,MAChB,EAAO,QAER,EAAM,QAAQ,YAChB,EAAM,eAAe,GACrB,EAAQ,MAAM,QAAQ,GAEf,MAGF,EAAK,cAAc,CAAK,IATL;EAmB1B;EACA,UAAU,EAAK;EACf,OAAO,MAAW,EAAQ,KAAK,CAAM;EACrC;EACA,KAAK,EAAK;EACV,SAAS,GAAY,MAAgB,EAAQ,OAAO,GAAY,CAAW;EAC3E,gBAAgB,EAAW;CAC7B;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ore.cjs","names":[],"sources":["../../src/headless/ore.ts"],"sourcesContent":["// ── Ore adapter ─────────────────────────────────────────────────────────────\n// Utilities that bridge Ore's component lifecycle with the headless\n// primitives' `AbortSignal`-based lifecycle contract.\n\n/**\n * Creates an `AbortSignal` tied to the component's Ore lifecycle.\n *\n * Call once at the top of a `setup()` function and pass the resulting signal\n * as the required `signal` option to any stateful headless primitive\n * (`createTextField`, `createCheckable`, `createOptionList`, etc.).\n *\n * When Ore disconnects the component, `onCleanup` fires, aborting the\n * signal and triggering cleanup in every primitive that received it.\n *\n * @example\n * ```ts\n * setup(props, { el }) {\n * const signal = lifecycleSignal(onCleanup);\n * const tf = createTextField({ ..., signal });\n * }\n * ```\n */\nexport const lifecycleSignal = (onCleanup: (fn: () => void) => void): AbortSignal => {\n const controller = new AbortController();\n\n onCleanup(() => controller.abort());\n\n return controller.signal;\n};\n"],"mappings":"AAsBA,IAAa,EAAmB,GAAqD,CACnF,IAAM,EAAa,IAAI,gBAIvB,OAFA,MAAgB,EAAW,MAAM,CAAC,EAE3B,EAAW,MACpB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates an `AbortSignal` tied to the component's Ore lifecycle.
|
|
3
|
+
*
|
|
4
|
+
* Call once at the top of a `setup()` function and pass the resulting signal
|
|
5
|
+
* as the required `signal` option to any stateful headless primitive
|
|
6
|
+
* (`createTextField`, `createCheckable`, `createOptionList`, etc.).
|
|
7
|
+
*
|
|
8
|
+
* When Ore disconnects the component, `onCleanup` fires, aborting the
|
|
9
|
+
* signal and triggering cleanup in every primitive that received it.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* setup(props, { el }) {
|
|
14
|
+
* const signal = lifecycleSignal(onCleanup);
|
|
15
|
+
* const tf = createTextField({ ..., signal });
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare const lifecycleSignal: (onCleanup: (fn: () => void) => void) => AbortSignal;
|
|
20
|
+
//# sourceMappingURL=ore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ore.d.ts","sourceRoot":"","sources":["../../src/headless/ore.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,KAAG,WAMrE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ore.js","names":[],"sources":["../../src/headless/ore.ts"],"sourcesContent":["// ── Ore adapter ─────────────────────────────────────────────────────────────\n// Utilities that bridge Ore's component lifecycle with the headless\n// primitives' `AbortSignal`-based lifecycle contract.\n\n/**\n * Creates an `AbortSignal` tied to the component's Ore lifecycle.\n *\n * Call once at the top of a `setup()` function and pass the resulting signal\n * as the required `signal` option to any stateful headless primitive\n * (`createTextField`, `createCheckable`, `createOptionList`, etc.).\n *\n * When Ore disconnects the component, `onCleanup` fires, aborting the\n * signal and triggering cleanup in every primitive that received it.\n *\n * @example\n * ```ts\n * setup(props, { el }) {\n * const signal = lifecycleSignal(onCleanup);\n * const tf = createTextField({ ..., signal });\n * }\n * ```\n */\nexport const lifecycleSignal = (onCleanup: (fn: () => void) => void): AbortSignal => {\n const controller = new AbortController();\n\n onCleanup(() => controller.abort());\n\n return controller.signal;\n};\n"],"mappings":";AAsBA,IAAa,KAAmB,MAAqD;CACnF,IAAM,IAAa,IAAI,gBAAgB;CAIvC,OAFA,QAAgB,EAAW,MAAM,CAAC,GAE3B,EAAW;AACpB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=e=>{let t=null,n=()=>typeof e.restoreFocus==`function`?e.restoreFocus():e.restoreFocus??!0,r=t=>{if(!e.isOpen())return;let n=t.composedPath?.()??[],r=e.getBoundary(),i=e.getPanel?.()??null,a=n[0]??t.target,s=a instanceof Node?a:null,c=n.some(e=>e===r||e===i),l=s?(r?.contains(s)??!1)||(i?.contains(s)??!1):!1;!c&&!l&&o(`outsideClick`)},i=e=>{e?document.addEventListener(`pointerdown`,r,{capture:!0}):document.removeEventListener(`pointerdown`,r,{capture:!0})},a=(n=`programmatic`)=>{e.isDisabled?.()||e.isOpen()||(e.setOpen(!0,n),i(!0),e.positioner&&(e.positioner.update(),t=e.positioner.startAutoUpdate?.()??null),e.onOpen?.(n))},o=(r=`programmatic`,a,o=!1)=>{e.isOpen()&&(e.setOpen(!1,r),i(!1),t&&=(t(),null),(a??n())&&e.getTrigger?.()?.focus(),o||e.onClose?.(r))},s=(t=`click`,n=`trigger`)=>{e.isOpen()?o(n):a(t)},c=()=>{e.isOpen()&&o(`programmatic`,!1,!0),i(!1),t&&=(t(),null)};return e.signal.addEventListener(`abort`,c,{once:!0}),{close:o,dispose:c,open:a,[Symbol.dispose]:c,toggle:s}};exports.createOverlayControl=e;
|
|
2
|
+
//# sourceMappingURL=overlay.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.cjs","names":[],"sources":["../../src/headless/overlay.ts"],"sourcesContent":["import type { OverlayPositioner } from './positioner';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\n/**\n * Why an overlay was opened.\n * - `'click'` — user clicked the trigger element\n * - `'focus'` — focus entered the trigger (tooltip, popover)\n * - `'hover'` — pointer entered the trigger (tooltip)\n * - `'keyboard'` — keyboard shortcut or Enter/Space on a trigger\n * - `'programmatic'` — opened via the JS API without a user gesture\n * - `'trigger'` — opened via the Invoker Commands API (`command=\"show-modal\"`)\n */\nexport type OverlayOpenReason = 'click' | 'focus' | 'hover' | 'keyboard' | 'programmatic' | 'trigger';\n\n/** Close reasons valid for modal dialogs (includes 'swipe' for drawer). */\nexport type DialogCloseReason = 'escape' | 'outsideClick' | 'programmatic' | 'swipe' | 'trigger';\n/** Close reasons valid for dropdown overlays (no swipe). */\nexport type DropdownCloseReason = Exclude<DialogCloseReason, 'swipe'>;\n\n/** Detail shape for overlay open events emitted by components. */\nexport type OverlayOpenDetail = { reason: OverlayOpenReason };\n/** Detail shape for overlay close events emitted by components. */\nexport type OverlayCloseDetail = { reason: DialogCloseReason };\n\nexport type { OverlayPositioner };\n\nexport type OverlayControlOptions = {\n getBoundary: () => HTMLElement | null;\n getPanel?: () => HTMLElement | null;\n getTrigger?: () => HTMLElement | null;\n isDisabled?: () => boolean;\n isOpen: () => boolean;\n onClose?: (reason: DialogCloseReason) => void;\n onOpen?: (reason: OverlayOpenReason) => void;\n positioner?: OverlayPositioner;\n restoreFocus?: boolean | (() => boolean);\n setOpen: (next: boolean, reason: OverlayOpenReason | DialogCloseReason) => void;\n /** `AbortSignal` from the component lifecycle. `dispose()` is called automatically on abort. */\n signal: AbortSignal;\n};\n\nexport type OverlayControl = {\n [Symbol.dispose](): void;\n /**\n * Closes the overlay.\n * @param reason — why it's closing (default `'programmatic'`)\n * @param restoreFocus — override per-call focus restoration (default: uses `restoreFocus` option)\n */\n close(reason?: DialogCloseReason, restoreFocus?: boolean): void;\n /** Tears down the overlay: closes silently and removes all event listeners. */\n dispose(): void;\n /**\n * Opens the overlay.\n * @param reason — why it's opening (default `'programmatic'`)\n */\n open(reason?: OverlayOpenReason): void;\n /**\n * Toggles open state.\n * - Opens with `openReason` (default `'click'`).\n * - Closes with `closeReason` (default `'trigger'`).\n */\n toggle(openReason?: OverlayOpenReason, closeReason?: DialogCloseReason): void;\n};\n\n// ── Factory ───────────────────────────────────────────────────────────────────\nexport const createOverlayControl = (options: OverlayControlOptions): OverlayControl => {\n let positionerCleanup: (() => void) | null = null;\n\n const shouldRestoreFocus = (): boolean => {\n if (typeof options.restoreFocus === 'function') return options.restoreFocus();\n\n return options.restoreFocus ?? true;\n };\n\n // Per-instance outside-pointer listener registered directly on document.\n // Uses 'pointerdown' instead of 'click' so that tapping empty/non-interactive\n // areas on iOS Safari (which does not synthesize 'click' for those targets)\n // still dismisses the overlay.\n // No shared multiplexer needed — max ~3 overlays can be open concurrently.\n const clickListener = (event: Event): void => {\n if (!options.isOpen()) return;\n\n const path = (event as Event & { composedPath?: () => EventTarget[] }).composedPath?.() ?? [];\n const boundary = options.getBoundary();\n const panel = options.getPanel?.() ?? null;\n const target = (path[0] ?? event.target) as EventTarget | null;\n const nodeTarget = target instanceof Node ? target : null;\n const insideByPath = path.some((entry) => entry === boundary || entry === panel);\n const insideByContainment = nodeTarget\n ? (boundary?.contains(nodeTarget) ?? false) || (panel?.contains(nodeTarget) ?? false)\n : false;\n\n if (!insideByPath && !insideByContainment) close('outsideClick');\n };\n\n const registerClickListener = (active: boolean): void => {\n if (active) {\n document.addEventListener('pointerdown', clickListener, { capture: true });\n } else {\n document.removeEventListener('pointerdown', clickListener, { capture: true });\n }\n };\n\n const open = (reason: OverlayOpenReason = 'programmatic'): void => {\n if (options.isDisabled?.() || options.isOpen()) return;\n\n options.setOpen(true, reason);\n registerClickListener(true);\n\n if (options.positioner) {\n options.positioner.update();\n positionerCleanup = options.positioner.startAutoUpdate?.() ?? null;\n }\n\n options.onOpen?.(reason);\n };\n\n const close = (reason: DialogCloseReason = 'programmatic', restoreFocus?: boolean, silent = false): void => {\n if (!options.isOpen()) return;\n\n options.setOpen(false, reason);\n registerClickListener(false);\n\n if (positionerCleanup) {\n positionerCleanup();\n positionerCleanup = null;\n }\n\n const restore = restoreFocus ?? shouldRestoreFocus();\n\n if (restore) options.getTrigger?.()?.focus();\n\n if (!silent) options.onClose?.(reason);\n };\n\n const toggle = (openReason: OverlayOpenReason = 'click', closeReason: DialogCloseReason = 'trigger'): void => {\n if (options.isOpen()) {\n close(closeReason);\n } else {\n open(openReason);\n }\n };\n\n const dispose = (): void => {\n // Close silently — teardown should not fire onClose callbacks.\n if (options.isOpen()) close('programmatic', false, true);\n\n registerClickListener(false);\n\n if (positionerCleanup) {\n positionerCleanup();\n positionerCleanup = null;\n }\n };\n\n options.signal.addEventListener('abort', dispose, { once: true });\n\n return { close, dispose, open, [Symbol.dispose]: dispose, toggle };\n};\n"],"mappings":"AAkEA,IAAa,EAAwB,GAAmD,CACtF,IAAI,EAAyC,KAEvC,MACA,OAAO,EAAQ,cAAiB,WAAmB,EAAQ,aAAa,EAErE,EAAQ,cAAgB,GAQ3B,EAAiB,GAAuB,CAC5C,GAAI,CAAC,EAAQ,OAAO,EAAG,OAEvB,IAAM,EAAQ,EAAyD,eAAe,GAAK,CAAC,EACtF,EAAW,EAAQ,YAAY,EAC/B,EAAQ,EAAQ,WAAW,GAAK,KAChC,EAAU,EAAK,IAAM,EAAM,OAC3B,EAAa,aAAkB,KAAO,EAAS,KAC/C,EAAe,EAAK,KAAM,GAAU,IAAU,GAAY,IAAU,CAAK,EACzE,EAAsB,GACvB,GAAU,SAAS,CAAU,GAAK,MAAW,GAAO,SAAS,CAAU,GAAK,IAC7E,GAEA,CAAC,GAAgB,CAAC,GAAqB,EAAM,cAAc,CACjE,EAEM,EAAyB,GAA0B,CACnD,EACF,SAAS,iBAAiB,cAAe,EAAe,CAAE,QAAS,EAAK,CAAC,EAEzE,SAAS,oBAAoB,cAAe,EAAe,CAAE,QAAS,EAAK,CAAC,CAEhF,EAEM,GAAQ,EAA4B,iBAAyB,CAC7D,EAAQ,aAAa,GAAK,EAAQ,OAAO,IAE7C,EAAQ,QAAQ,GAAM,CAAM,EAC5B,EAAsB,EAAI,EAEtB,EAAQ,aACV,EAAQ,WAAW,OAAO,EAC1B,EAAoB,EAAQ,WAAW,kBAAkB,GAAK,MAGhE,EAAQ,SAAS,CAAM,EACzB,EAEM,GAAS,EAA4B,eAAgB,EAAwB,EAAS,KAAgB,CACrG,EAAQ,OAAO,IAEpB,EAAQ,QAAQ,GAAO,CAAM,EAC7B,EAAsB,EAAK,EAE3B,AAEE,KADA,EAAkB,EACE,OAGN,GAAgB,EAAmB,IAEtC,EAAQ,aAAa,CAAC,EAAE,MAAM,EAEtC,GAAQ,EAAQ,UAAU,CAAM,EACvC,EAEM,GAAU,EAAgC,QAAS,EAAiC,YAAoB,CACxG,EAAQ,OAAO,EACjB,EAAM,CAAW,EAEjB,EAAK,CAAU,CAEnB,EAEM,MAAsB,CAEtB,EAAQ,OAAO,GAAG,EAAM,eAAgB,GAAO,EAAI,EAEvD,EAAsB,EAAK,EAE3B,AAEE,KADA,EAAkB,EACE,KAExB,EAIA,OAFA,EAAQ,OAAO,iBAAiB,QAAS,EAAS,CAAE,KAAM,EAAK,CAAC,EAEzD,CAAE,QAAO,UAAS,QAAO,OAAO,SAAU,EAAS,QAAO,CACnE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { OverlayPositioner } from './positioner';
|
|
2
|
+
/**
|
|
3
|
+
* Why an overlay was opened.
|
|
4
|
+
* - `'click'` — user clicked the trigger element
|
|
5
|
+
* - `'focus'` — focus entered the trigger (tooltip, popover)
|
|
6
|
+
* - `'hover'` — pointer entered the trigger (tooltip)
|
|
7
|
+
* - `'keyboard'` — keyboard shortcut or Enter/Space on a trigger
|
|
8
|
+
* - `'programmatic'` — opened via the JS API without a user gesture
|
|
9
|
+
* - `'trigger'` — opened via the Invoker Commands API (`command="show-modal"`)
|
|
10
|
+
*/
|
|
11
|
+
export type OverlayOpenReason = 'click' | 'focus' | 'hover' | 'keyboard' | 'programmatic' | 'trigger';
|
|
12
|
+
/** Close reasons valid for modal dialogs (includes 'swipe' for drawer). */
|
|
13
|
+
export type DialogCloseReason = 'escape' | 'outsideClick' | 'programmatic' | 'swipe' | 'trigger';
|
|
14
|
+
/** Close reasons valid for dropdown overlays (no swipe). */
|
|
15
|
+
export type DropdownCloseReason = Exclude<DialogCloseReason, 'swipe'>;
|
|
16
|
+
/** Detail shape for overlay open events emitted by components. */
|
|
17
|
+
export type OverlayOpenDetail = {
|
|
18
|
+
reason: OverlayOpenReason;
|
|
19
|
+
};
|
|
20
|
+
/** Detail shape for overlay close events emitted by components. */
|
|
21
|
+
export type OverlayCloseDetail = {
|
|
22
|
+
reason: DialogCloseReason;
|
|
23
|
+
};
|
|
24
|
+
export type { OverlayPositioner };
|
|
25
|
+
export type OverlayControlOptions = {
|
|
26
|
+
getBoundary: () => HTMLElement | null;
|
|
27
|
+
getPanel?: () => HTMLElement | null;
|
|
28
|
+
getTrigger?: () => HTMLElement | null;
|
|
29
|
+
isDisabled?: () => boolean;
|
|
30
|
+
isOpen: () => boolean;
|
|
31
|
+
onClose?: (reason: DialogCloseReason) => void;
|
|
32
|
+
onOpen?: (reason: OverlayOpenReason) => void;
|
|
33
|
+
positioner?: OverlayPositioner;
|
|
34
|
+
restoreFocus?: boolean | (() => boolean);
|
|
35
|
+
setOpen: (next: boolean, reason: OverlayOpenReason | DialogCloseReason) => void;
|
|
36
|
+
/** `AbortSignal` from the component lifecycle. `dispose()` is called automatically on abort. */
|
|
37
|
+
signal: AbortSignal;
|
|
38
|
+
};
|
|
39
|
+
export type OverlayControl = {
|
|
40
|
+
[Symbol.dispose](): void;
|
|
41
|
+
/**
|
|
42
|
+
* Closes the overlay.
|
|
43
|
+
* @param reason — why it's closing (default `'programmatic'`)
|
|
44
|
+
* @param restoreFocus — override per-call focus restoration (default: uses `restoreFocus` option)
|
|
45
|
+
*/
|
|
46
|
+
close(reason?: DialogCloseReason, restoreFocus?: boolean): void;
|
|
47
|
+
/** Tears down the overlay: closes silently and removes all event listeners. */
|
|
48
|
+
dispose(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Opens the overlay.
|
|
51
|
+
* @param reason — why it's opening (default `'programmatic'`)
|
|
52
|
+
*/
|
|
53
|
+
open(reason?: OverlayOpenReason): void;
|
|
54
|
+
/**
|
|
55
|
+
* Toggles open state.
|
|
56
|
+
* - Opens with `openReason` (default `'click'`).
|
|
57
|
+
* - Closes with `closeReason` (default `'trigger'`).
|
|
58
|
+
*/
|
|
59
|
+
toggle(openReason?: OverlayOpenReason, closeReason?: DialogCloseReason): void;
|
|
60
|
+
};
|
|
61
|
+
export declare const createOverlayControl: (options: OverlayControlOptions) => OverlayControl;
|
|
62
|
+
//# sourceMappingURL=overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/headless/overlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAItD;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;AAEtG,2EAA2E;AAC3E,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,cAAc,GAAG,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AACjG,4DAA4D;AAC5D,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AAEtE,kEAAkE;AAClE,MAAM,MAAM,iBAAiB,GAAG;IAAE,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAC9D,mEAAmE;AACnE,MAAM,MAAM,kBAAkB,GAAG;IAAE,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAE/D,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACzC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,KAAK,IAAI,CAAC;IAChF,gGAAgG;IAChG,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACzB;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAChE,+EAA+E;IAC/E,OAAO,IAAI,IAAI,CAAC;IAChB;;;OAGG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAC/E,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAAI,SAAS,qBAAqB,KAAG,cA6FrE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/headless/overlay.ts
|
|
2
|
+
var e = (e) => {
|
|
3
|
+
let t = null, n = () => typeof e.restoreFocus == "function" ? e.restoreFocus() : e.restoreFocus ?? !0, r = (t) => {
|
|
4
|
+
if (!e.isOpen()) return;
|
|
5
|
+
let n = t.composedPath?.() ?? [], r = e.getBoundary(), i = e.getPanel?.() ?? null, a = n[0] ?? t.target, s = a instanceof Node ? a : null, c = n.some((e) => e === r || e === i), l = s ? (r?.contains(s) ?? !1) || (i?.contains(s) ?? !1) : !1;
|
|
6
|
+
!c && !l && o("outsideClick");
|
|
7
|
+
}, i = (e) => {
|
|
8
|
+
e ? document.addEventListener("pointerdown", r, { capture: !0 }) : document.removeEventListener("pointerdown", r, { capture: !0 });
|
|
9
|
+
}, a = (n = "programmatic") => {
|
|
10
|
+
e.isDisabled?.() || e.isOpen() || (e.setOpen(!0, n), i(!0), e.positioner && (e.positioner.update(), t = e.positioner.startAutoUpdate?.() ?? null), e.onOpen?.(n));
|
|
11
|
+
}, o = (r = "programmatic", a, o = !1) => {
|
|
12
|
+
e.isOpen() && (e.setOpen(!1, r), i(!1), t &&= (t(), null), (a ?? n()) && e.getTrigger?.()?.focus(), o || e.onClose?.(r));
|
|
13
|
+
}, s = (t = "click", n = "trigger") => {
|
|
14
|
+
e.isOpen() ? o(n) : a(t);
|
|
15
|
+
}, c = () => {
|
|
16
|
+
e.isOpen() && o("programmatic", !1, !0), i(!1), t &&= (t(), null);
|
|
17
|
+
};
|
|
18
|
+
return e.signal.addEventListener("abort", c, { once: !0 }), {
|
|
19
|
+
close: o,
|
|
20
|
+
dispose: c,
|
|
21
|
+
open: a,
|
|
22
|
+
[Symbol.dispose]: c,
|
|
23
|
+
toggle: s
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
//#endregion
|
|
27
|
+
export { e as createOverlayControl };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.js","names":[],"sources":["../../src/headless/overlay.ts"],"sourcesContent":["import type { OverlayPositioner } from './positioner';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\n/**\n * Why an overlay was opened.\n * - `'click'` — user clicked the trigger element\n * - `'focus'` — focus entered the trigger (tooltip, popover)\n * - `'hover'` — pointer entered the trigger (tooltip)\n * - `'keyboard'` — keyboard shortcut or Enter/Space on a trigger\n * - `'programmatic'` — opened via the JS API without a user gesture\n * - `'trigger'` — opened via the Invoker Commands API (`command=\"show-modal\"`)\n */\nexport type OverlayOpenReason = 'click' | 'focus' | 'hover' | 'keyboard' | 'programmatic' | 'trigger';\n\n/** Close reasons valid for modal dialogs (includes 'swipe' for drawer). */\nexport type DialogCloseReason = 'escape' | 'outsideClick' | 'programmatic' | 'swipe' | 'trigger';\n/** Close reasons valid for dropdown overlays (no swipe). */\nexport type DropdownCloseReason = Exclude<DialogCloseReason, 'swipe'>;\n\n/** Detail shape for overlay open events emitted by components. */\nexport type OverlayOpenDetail = { reason: OverlayOpenReason };\n/** Detail shape for overlay close events emitted by components. */\nexport type OverlayCloseDetail = { reason: DialogCloseReason };\n\nexport type { OverlayPositioner };\n\nexport type OverlayControlOptions = {\n getBoundary: () => HTMLElement | null;\n getPanel?: () => HTMLElement | null;\n getTrigger?: () => HTMLElement | null;\n isDisabled?: () => boolean;\n isOpen: () => boolean;\n onClose?: (reason: DialogCloseReason) => void;\n onOpen?: (reason: OverlayOpenReason) => void;\n positioner?: OverlayPositioner;\n restoreFocus?: boolean | (() => boolean);\n setOpen: (next: boolean, reason: OverlayOpenReason | DialogCloseReason) => void;\n /** `AbortSignal` from the component lifecycle. `dispose()` is called automatically on abort. */\n signal: AbortSignal;\n};\n\nexport type OverlayControl = {\n [Symbol.dispose](): void;\n /**\n * Closes the overlay.\n * @param reason — why it's closing (default `'programmatic'`)\n * @param restoreFocus — override per-call focus restoration (default: uses `restoreFocus` option)\n */\n close(reason?: DialogCloseReason, restoreFocus?: boolean): void;\n /** Tears down the overlay: closes silently and removes all event listeners. */\n dispose(): void;\n /**\n * Opens the overlay.\n * @param reason — why it's opening (default `'programmatic'`)\n */\n open(reason?: OverlayOpenReason): void;\n /**\n * Toggles open state.\n * - Opens with `openReason` (default `'click'`).\n * - Closes with `closeReason` (default `'trigger'`).\n */\n toggle(openReason?: OverlayOpenReason, closeReason?: DialogCloseReason): void;\n};\n\n// ── Factory ───────────────────────────────────────────────────────────────────\nexport const createOverlayControl = (options: OverlayControlOptions): OverlayControl => {\n let positionerCleanup: (() => void) | null = null;\n\n const shouldRestoreFocus = (): boolean => {\n if (typeof options.restoreFocus === 'function') return options.restoreFocus();\n\n return options.restoreFocus ?? true;\n };\n\n // Per-instance outside-pointer listener registered directly on document.\n // Uses 'pointerdown' instead of 'click' so that tapping empty/non-interactive\n // areas on iOS Safari (which does not synthesize 'click' for those targets)\n // still dismisses the overlay.\n // No shared multiplexer needed — max ~3 overlays can be open concurrently.\n const clickListener = (event: Event): void => {\n if (!options.isOpen()) return;\n\n const path = (event as Event & { composedPath?: () => EventTarget[] }).composedPath?.() ?? [];\n const boundary = options.getBoundary();\n const panel = options.getPanel?.() ?? null;\n const target = (path[0] ?? event.target) as EventTarget | null;\n const nodeTarget = target instanceof Node ? target : null;\n const insideByPath = path.some((entry) => entry === boundary || entry === panel);\n const insideByContainment = nodeTarget\n ? (boundary?.contains(nodeTarget) ?? false) || (panel?.contains(nodeTarget) ?? false)\n : false;\n\n if (!insideByPath && !insideByContainment) close('outsideClick');\n };\n\n const registerClickListener = (active: boolean): void => {\n if (active) {\n document.addEventListener('pointerdown', clickListener, { capture: true });\n } else {\n document.removeEventListener('pointerdown', clickListener, { capture: true });\n }\n };\n\n const open = (reason: OverlayOpenReason = 'programmatic'): void => {\n if (options.isDisabled?.() || options.isOpen()) return;\n\n options.setOpen(true, reason);\n registerClickListener(true);\n\n if (options.positioner) {\n options.positioner.update();\n positionerCleanup = options.positioner.startAutoUpdate?.() ?? null;\n }\n\n options.onOpen?.(reason);\n };\n\n const close = (reason: DialogCloseReason = 'programmatic', restoreFocus?: boolean, silent = false): void => {\n if (!options.isOpen()) return;\n\n options.setOpen(false, reason);\n registerClickListener(false);\n\n if (positionerCleanup) {\n positionerCleanup();\n positionerCleanup = null;\n }\n\n const restore = restoreFocus ?? shouldRestoreFocus();\n\n if (restore) options.getTrigger?.()?.focus();\n\n if (!silent) options.onClose?.(reason);\n };\n\n const toggle = (openReason: OverlayOpenReason = 'click', closeReason: DialogCloseReason = 'trigger'): void => {\n if (options.isOpen()) {\n close(closeReason);\n } else {\n open(openReason);\n }\n };\n\n const dispose = (): void => {\n // Close silently — teardown should not fire onClose callbacks.\n if (options.isOpen()) close('programmatic', false, true);\n\n registerClickListener(false);\n\n if (positionerCleanup) {\n positionerCleanup();\n positionerCleanup = null;\n }\n };\n\n options.signal.addEventListener('abort', dispose, { once: true });\n\n return { close, dispose, open, [Symbol.dispose]: dispose, toggle };\n};\n"],"mappings":";AAkEA,IAAa,KAAwB,MAAmD;CACtF,IAAI,IAAyC,MAEvC,UACA,OAAO,EAAQ,gBAAiB,aAAmB,EAAQ,aAAa,IAErE,EAAQ,gBAAgB,IAQ3B,KAAiB,MAAuB;EAC5C,IAAI,CAAC,EAAQ,OAAO,GAAG;EAEvB,IAAM,IAAQ,EAAyD,eAAe,KAAK,CAAC,GACtF,IAAW,EAAQ,YAAY,GAC/B,IAAQ,EAAQ,WAAW,KAAK,MAChC,IAAU,EAAK,MAAM,EAAM,QAC3B,IAAa,aAAkB,OAAO,IAAS,MAC/C,IAAe,EAAK,MAAM,MAAU,MAAU,KAAY,MAAU,CAAK,GACzE,IAAsB,KACvB,GAAU,SAAS,CAAU,KAAK,QAAW,GAAO,SAAS,CAAU,KAAK,MAC7E;EAEJ,AAAI,CAAC,KAAgB,CAAC,KAAqB,EAAM,cAAc;CACjE,GAEM,KAAyB,MAA0B;EACvD,AAAI,IACF,SAAS,iBAAiB,eAAe,GAAe,EAAE,SAAS,GAAK,CAAC,IAEzE,SAAS,oBAAoB,eAAe,GAAe,EAAE,SAAS,GAAK,CAAC;CAEhF,GAEM,KAAQ,IAA4B,mBAAyB;EAC7D,EAAQ,aAAa,KAAK,EAAQ,OAAO,MAE7C,EAAQ,QAAQ,IAAM,CAAM,GAC5B,EAAsB,EAAI,GAEtB,EAAQ,eACV,EAAQ,WAAW,OAAO,GAC1B,IAAoB,EAAQ,WAAW,kBAAkB,KAAK,OAGhE,EAAQ,SAAS,CAAM;CACzB,GAEM,KAAS,IAA4B,gBAAgB,GAAwB,IAAS,OAAgB;EACrG,EAAQ,OAAO,MAEpB,EAAQ,QAAQ,IAAO,CAAM,GAC7B,EAAsB,EAAK,GAE3B,AAEE,OADA,EAAkB,GACE,QAGN,KAAgB,EAAmB,MAEtC,EAAQ,aAAa,CAAC,EAAE,MAAM,GAEtC,KAAQ,EAAQ,UAAU,CAAM;CACvC,GAEM,KAAU,IAAgC,SAAS,IAAiC,cAAoB;EAC5G,AAAI,EAAQ,OAAO,IACjB,EAAM,CAAW,IAEjB,EAAK,CAAU;CAEnB,GAEM,UAAsB;EAM1B,AAJI,EAAQ,OAAO,KAAG,EAAM,gBAAgB,IAAO,EAAI,GAEvD,EAAsB,EAAK,GAE3B,AAEE,OADA,EAAkB,GACE;CAExB;CAIA,OAFA,EAAQ,OAAO,iBAAiB,SAAS,GAAS,EAAE,MAAM,GAAK,CAAC,GAEzD;EAAE;EAAO;EAAS;GAAO,OAAO,UAAU;EAAS;CAAO;AACnE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require("@vielzeug/ripple");var t=t=>{let n=(0,e.signal)(0),r=()=>{let e=t.pageSize;return e===void 0?10:typeof e==`number`?e:e.value??10},i=(0,e.computed)(()=>Math.ceil(t.getItems().length/r())),a=(0,e.computed)(()=>i.value===0?-1:Math.min(n.value,i.value-1)),o=(0,e.computed)(()=>{let e=a.value,n=r(),i=e*n;return t.getItems().slice(i,i+n)});return{goTo:e=>{Number.isFinite(e)&&(n.value=Math.max(0,e))},hasNext:(0,e.computed)(()=>i.value>0&&a.value<i.value-1),hasPrev:(0,e.computed)(()=>a.value>0),next:()=>{i.value>0&&a.value<i.value-1&&(n.value=a.value+1)},pageCount:i,pageIndex:a,pageItems:o,prev:()=>{a.value>0&&(n.value=a.value-1)},reset:()=>{n.value=0}}};exports.createPaginatedList=t;
|
|
2
|
+
//# sourceMappingURL=paginated-list.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginated-list.cjs","names":[],"sources":["../../src/headless/paginated-list.ts"],"sourcesContent":["import { computed, type Readable, signal } from '@vielzeug/ripple';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type PaginatedListOptions<T> = {\n /** All items to paginate. Can be a reactive signal accessor. */\n getItems: () => T[];\n /** Number of items per page. Defaults to 10. */\n pageSize?: Readable<number> | number;\n};\n\nexport type PaginatedListHandle<T> = {\n /** Navigate to an absolute page index (clamped). */\n goTo(index: number): void;\n /** Whether there is a next page. */\n readonly hasNext: Readable<boolean>;\n /** Whether there is a previous page. */\n readonly hasPrev: Readable<boolean>;\n\n /** Navigate to the next page. No-op on last page. */\n next(): void;\n /** Total number of pages. */\n readonly pageCount: Readable<number>;\n /** Current 0-based page index. */\n readonly pageIndex: Readable<number>;\n /** Items visible on the current page. */\n readonly pageItems: Readable<T[]>;\n /** Navigate to the previous page. No-op on first page. */\n prev(): void;\n /** Reset to the first page. */\n reset(): void;\n};\n\n// ── Implementation ────────────────────────────────────────────────────────────\n\n/**\n * Reactive pagination state for a list of items.\n *\n * Decoupled from option rendering so it can be used with any sorted/filtered\n * item array (e.g., the `filteredOptions` signal in combobox).\n *\n * @example\n * ```ts\n * const paged = createPaginatedList({ getItems: () => allOptions.value, pageSize: 20 });\n * // render paged.pageItems.value\n * // navigation: paged.next(), paged.prev(), paged.goTo(0)\n * ```\n */\nexport const createPaginatedList = <T>(options: PaginatedListOptions<T>): PaginatedListHandle<T> => {\n const pageIndex = signal(0);\n const resolvedPageSize = (): number => {\n const ps = options.pageSize;\n\n if (ps === undefined) return 10;\n\n return typeof ps === 'number' ? ps : (ps.value ?? 10);\n };\n\n const pageCount = computed(() => Math.ceil(options.getItems().length / resolvedPageSize()));\n\n // Clamp page index when total page count shrinks (e.g. after filter change).\n // When pageCount is 0 (empty list), safePage returns -1 to signal no valid page.\n const safePage = computed(() => (pageCount.value === 0 ? -1 : Math.min(pageIndex.value, pageCount.value - 1)));\n\n const pageItems = computed(() => {\n const pg = safePage.value;\n const size = resolvedPageSize();\n const start = pg * size;\n\n return options.getItems().slice(start, start + size);\n });\n\n const goTo = (index: number): void => {\n // Lower-bound guard only — safePage handles the upper-bound clamp reactively\n // so that any subsequent pageCount reduction is also handled automatically.\n // Guard against NaN/Infinity (e.g. parseInt() failures) which Math.max propagates silently.\n if (!Number.isFinite(index)) return;\n\n pageIndex.value = Math.max(0, index);\n };\n\n const next = (): void => {\n if (pageCount.value > 0 && safePage.value < pageCount.value - 1) pageIndex.value = safePage.value + 1;\n };\n\n const prev = (): void => {\n if (safePage.value > 0) pageIndex.value = safePage.value - 1;\n };\n\n const reset = (): void => {\n pageIndex.value = 0;\n };\n\n const hasNext = computed(() => pageCount.value > 0 && safePage.value < pageCount.value - 1);\n const hasPrev = computed(() => safePage.value > 0);\n\n return {\n goTo,\n hasNext,\n hasPrev,\n next,\n pageCount,\n pageIndex: safePage,\n pageItems,\n prev,\n reset,\n };\n};\n"],"mappings":"kCAgDA,IAAa,EAA0B,GAA6D,CAClG,IAAM,GAAA,EAAA,EAAA,OAAA,CAAmB,CAAC,EACpB,MAAiC,CACrC,IAAM,EAAK,EAAQ,SAInB,OAFI,IAAO,IAAA,GAAkB,GAEtB,OAAO,GAAO,SAAW,EAAM,EAAG,OAAS,EACpD,EAEM,GAAA,EAAA,EAAA,SAAA,KAA2B,KAAK,KAAK,EAAQ,SAAS,CAAC,CAAC,OAAS,EAAiB,CAAC,CAAC,EAIpF,GAAA,EAAA,EAAA,SAAA,KAA2B,EAAU,QAAU,EAAI,GAAK,KAAK,IAAI,EAAU,MAAO,EAAU,MAAQ,CAAC,CAAE,EAEvG,GAAA,EAAA,EAAA,SAAA,KAA2B,CAC/B,IAAM,EAAK,EAAS,MACd,EAAO,EAAiB,EACxB,EAAQ,EAAK,EAEnB,OAAO,EAAQ,SAAS,CAAC,CAAC,MAAM,EAAO,EAAQ,CAAI,CACrD,CAAC,EA0BD,MAAO,CACL,KAzBY,GAAwB,CAI/B,OAAO,SAAS,CAAK,IAE1B,EAAU,MAAQ,KAAK,IAAI,EAAG,CAAK,EACrC,EAmBE,SAAA,EAAA,EAAA,SAAA,KAL6B,EAAU,MAAQ,GAAK,EAAS,MAAQ,EAAU,MAAQ,CAKvF,EACA,SAAA,EAAA,EAAA,SAAA,KAL6B,EAAS,MAAQ,CAK9C,EACA,SAnBuB,CACnB,EAAU,MAAQ,GAAK,EAAS,MAAQ,EAAU,MAAQ,IAAG,EAAU,MAAQ,EAAS,MAAQ,EACtG,EAkBE,YACA,UAAW,EACX,YACA,SAnBuB,CACnB,EAAS,MAAQ,IAAG,EAAU,MAAQ,EAAS,MAAQ,EAC7D,EAkBE,UAhBwB,CACxB,EAAU,MAAQ,CACpB,CAeA,CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type Readable } from '@vielzeug/ripple';
|
|
2
|
+
export type PaginatedListOptions<T> = {
|
|
3
|
+
/** All items to paginate. Can be a reactive signal accessor. */
|
|
4
|
+
getItems: () => T[];
|
|
5
|
+
/** Number of items per page. Defaults to 10. */
|
|
6
|
+
pageSize?: Readable<number> | number;
|
|
7
|
+
};
|
|
8
|
+
export type PaginatedListHandle<T> = {
|
|
9
|
+
/** Navigate to an absolute page index (clamped). */
|
|
10
|
+
goTo(index: number): void;
|
|
11
|
+
/** Whether there is a next page. */
|
|
12
|
+
readonly hasNext: Readable<boolean>;
|
|
13
|
+
/** Whether there is a previous page. */
|
|
14
|
+
readonly hasPrev: Readable<boolean>;
|
|
15
|
+
/** Navigate to the next page. No-op on last page. */
|
|
16
|
+
next(): void;
|
|
17
|
+
/** Total number of pages. */
|
|
18
|
+
readonly pageCount: Readable<number>;
|
|
19
|
+
/** Current 0-based page index. */
|
|
20
|
+
readonly pageIndex: Readable<number>;
|
|
21
|
+
/** Items visible on the current page. */
|
|
22
|
+
readonly pageItems: Readable<T[]>;
|
|
23
|
+
/** Navigate to the previous page. No-op on first page. */
|
|
24
|
+
prev(): void;
|
|
25
|
+
/** Reset to the first page. */
|
|
26
|
+
reset(): void;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Reactive pagination state for a list of items.
|
|
30
|
+
*
|
|
31
|
+
* Decoupled from option rendering so it can be used with any sorted/filtered
|
|
32
|
+
* item array (e.g., the `filteredOptions` signal in combobox).
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const paged = createPaginatedList({ getItems: () => allOptions.value, pageSize: 20 });
|
|
37
|
+
* // render paged.pageItems.value
|
|
38
|
+
* // navigation: paged.next(), paged.prev(), paged.goTo(0)
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare const createPaginatedList: <T>(options: PaginatedListOptions<T>) => PaginatedListHandle<T>;
|
|
42
|
+
//# sourceMappingURL=paginated-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginated-list.d.ts","sourceRoot":"","sources":["../../src/headless/paginated-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AAInE,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI;IACpC,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,oDAAoD;IACpD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,wCAAwC;IACxC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEpC,qDAAqD;IACrD,IAAI,IAAI,IAAI,CAAC;IACb,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,kCAAkC;IAClC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC,0DAA0D;IAC1D,IAAI,IAAI,IAAI,CAAC;IACb,+BAA+B;IAC/B,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAIF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,SAAS,oBAAoB,CAAC,CAAC,CAAC,KAAG,mBAAmB,CAAC,CAAC,CA2D9F,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { computed as e, signal as t } from "@vielzeug/ripple";
|
|
2
|
+
//#region src/headless/paginated-list.ts
|
|
3
|
+
var n = (n) => {
|
|
4
|
+
let r = t(0), i = () => {
|
|
5
|
+
let e = n.pageSize;
|
|
6
|
+
return e === void 0 ? 10 : typeof e == "number" ? e : e.value ?? 10;
|
|
7
|
+
}, a = e(() => Math.ceil(n.getItems().length / i())), o = e(() => a.value === 0 ? -1 : Math.min(r.value, a.value - 1)), s = e(() => {
|
|
8
|
+
let e = o.value, t = i(), r = e * t;
|
|
9
|
+
return n.getItems().slice(r, r + t);
|
|
10
|
+
});
|
|
11
|
+
return {
|
|
12
|
+
goTo: (e) => {
|
|
13
|
+
Number.isFinite(e) && (r.value = Math.max(0, e));
|
|
14
|
+
},
|
|
15
|
+
hasNext: e(() => a.value > 0 && o.value < a.value - 1),
|
|
16
|
+
hasPrev: e(() => o.value > 0),
|
|
17
|
+
next: () => {
|
|
18
|
+
a.value > 0 && o.value < a.value - 1 && (r.value = o.value + 1);
|
|
19
|
+
},
|
|
20
|
+
pageCount: a,
|
|
21
|
+
pageIndex: o,
|
|
22
|
+
pageItems: s,
|
|
23
|
+
prev: () => {
|
|
24
|
+
o.value > 0 && (r.value = o.value - 1);
|
|
25
|
+
},
|
|
26
|
+
reset: () => {
|
|
27
|
+
r.value = 0;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
export { n as createPaginatedList };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=paginated-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginated-list.js","names":[],"sources":["../../src/headless/paginated-list.ts"],"sourcesContent":["import { computed, type Readable, signal } from '@vielzeug/ripple';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type PaginatedListOptions<T> = {\n /** All items to paginate. Can be a reactive signal accessor. */\n getItems: () => T[];\n /** Number of items per page. Defaults to 10. */\n pageSize?: Readable<number> | number;\n};\n\nexport type PaginatedListHandle<T> = {\n /** Navigate to an absolute page index (clamped). */\n goTo(index: number): void;\n /** Whether there is a next page. */\n readonly hasNext: Readable<boolean>;\n /** Whether there is a previous page. */\n readonly hasPrev: Readable<boolean>;\n\n /** Navigate to the next page. No-op on last page. */\n next(): void;\n /** Total number of pages. */\n readonly pageCount: Readable<number>;\n /** Current 0-based page index. */\n readonly pageIndex: Readable<number>;\n /** Items visible on the current page. */\n readonly pageItems: Readable<T[]>;\n /** Navigate to the previous page. No-op on first page. */\n prev(): void;\n /** Reset to the first page. */\n reset(): void;\n};\n\n// ── Implementation ────────────────────────────────────────────────────────────\n\n/**\n * Reactive pagination state for a list of items.\n *\n * Decoupled from option rendering so it can be used with any sorted/filtered\n * item array (e.g., the `filteredOptions` signal in combobox).\n *\n * @example\n * ```ts\n * const paged = createPaginatedList({ getItems: () => allOptions.value, pageSize: 20 });\n * // render paged.pageItems.value\n * // navigation: paged.next(), paged.prev(), paged.goTo(0)\n * ```\n */\nexport const createPaginatedList = <T>(options: PaginatedListOptions<T>): PaginatedListHandle<T> => {\n const pageIndex = signal(0);\n const resolvedPageSize = (): number => {\n const ps = options.pageSize;\n\n if (ps === undefined) return 10;\n\n return typeof ps === 'number' ? ps : (ps.value ?? 10);\n };\n\n const pageCount = computed(() => Math.ceil(options.getItems().length / resolvedPageSize()));\n\n // Clamp page index when total page count shrinks (e.g. after filter change).\n // When pageCount is 0 (empty list), safePage returns -1 to signal no valid page.\n const safePage = computed(() => (pageCount.value === 0 ? -1 : Math.min(pageIndex.value, pageCount.value - 1)));\n\n const pageItems = computed(() => {\n const pg = safePage.value;\n const size = resolvedPageSize();\n const start = pg * size;\n\n return options.getItems().slice(start, start + size);\n });\n\n const goTo = (index: number): void => {\n // Lower-bound guard only — safePage handles the upper-bound clamp reactively\n // so that any subsequent pageCount reduction is also handled automatically.\n // Guard against NaN/Infinity (e.g. parseInt() failures) which Math.max propagates silently.\n if (!Number.isFinite(index)) return;\n\n pageIndex.value = Math.max(0, index);\n };\n\n const next = (): void => {\n if (pageCount.value > 0 && safePage.value < pageCount.value - 1) pageIndex.value = safePage.value + 1;\n };\n\n const prev = (): void => {\n if (safePage.value > 0) pageIndex.value = safePage.value - 1;\n };\n\n const reset = (): void => {\n pageIndex.value = 0;\n };\n\n const hasNext = computed(() => pageCount.value > 0 && safePage.value < pageCount.value - 1);\n const hasPrev = computed(() => safePage.value > 0);\n\n return {\n goTo,\n hasNext,\n hasPrev,\n next,\n pageCount,\n pageIndex: safePage,\n pageItems,\n prev,\n reset,\n };\n};\n"],"mappings":";;AAgDA,IAAa,KAA0B,MAA6D;CAClG,IAAM,IAAY,EAAO,CAAC,GACpB,UAAiC;EACrC,IAAM,IAAK,EAAQ;EAInB,OAFI,MAAO,KAAA,IAAkB,KAEtB,OAAO,KAAO,WAAW,IAAM,EAAG,SAAS;CACpD,GAEM,IAAY,QAAe,KAAK,KAAK,EAAQ,SAAS,CAAC,CAAC,SAAS,EAAiB,CAAC,CAAC,GAIpF,IAAW,QAAgB,EAAU,UAAU,IAAI,KAAK,KAAK,IAAI,EAAU,OAAO,EAAU,QAAQ,CAAC,CAAE,GAEvG,IAAY,QAAe;EAC/B,IAAM,IAAK,EAAS,OACd,IAAO,EAAiB,GACxB,IAAQ,IAAK;EAEnB,OAAO,EAAQ,SAAS,CAAC,CAAC,MAAM,GAAO,IAAQ,CAAI;CACrD,CAAC;CA0BD,OAAO;EACL,OAzBY,MAAwB;GAI/B,OAAO,SAAS,CAAK,MAE1B,EAAU,QAAQ,KAAK,IAAI,GAAG,CAAK;EACrC;EAmBE,SALc,QAAe,EAAU,QAAQ,KAAK,EAAS,QAAQ,EAAU,QAAQ,CAKvF;EACA,SALc,QAAe,EAAS,QAAQ,CAK9C;EACA,YAnBuB;GACvB,AAAI,EAAU,QAAQ,KAAK,EAAS,QAAQ,EAAU,QAAQ,MAAG,EAAU,QAAQ,EAAS,QAAQ;EACtG;EAkBE;EACA,WAAW;EACX;EACA,YAnBuB;GACvB,AAAI,EAAS,QAAQ,MAAG,EAAU,QAAQ,EAAS,QAAQ;EAC7D;EAkBE,aAhBwB;GACxB,EAAU,QAAQ;EACpB;CAeA;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.cjs","names":[],"sources":["../../src/headless/parse.ts"],"sourcesContent":["// ── Trigger string parser ─────────────────────────────────────────────────────\n\n/**\n * Parses a comma-separated trigger string into a typed array, filtering against\n * a valid set and falling back to `defaults` when the input is empty or invalid.\n *\n * Used by tooltip and popover to normalise their `trigger` prop values.\n *\n * @example\n * ```ts\n * const VALID = new Set(['click', 'hover', 'focus'] as const);\n * parseStringTriggers('hover,focus', VALID, ['click']); // → ['hover', 'focus']\n * parseStringTriggers('', VALID, ['click']); // → ['click']\n * ```\n */\nexport const parseStringTriggers = <T extends string>(\n value: string | null | undefined,\n valid: ReadonlySet<T>,\n defaults: T[],\n): T[] => {\n const parsed = String(value ?? '')\n .split(',')\n .map((t) => t.trim())\n .filter((t): t is T => valid.has(t as T));\n\n return parsed.length > 0 ? parsed : [...defaults];\n};\n"],"mappings":"AAeA,IAAa,GACX,EACA,EACA,IACQ,CACR,IAAM,EAAS,OAAO,GAAS,EAAE,CAAC,CAC/B,MAAM,GAAG,CAAC,CACV,IAAK,GAAM,EAAE,KAAK,CAAC,CAAC,CACpB,OAAQ,GAAc,EAAM,IAAI,CAAM,CAAC,EAE1C,OAAO,EAAO,OAAS,EAAI,EAAS,CAAC,GAAG,CAAQ,CAClD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses a comma-separated trigger string into a typed array, filtering against
|
|
3
|
+
* a valid set and falling back to `defaults` when the input is empty or invalid.
|
|
4
|
+
*
|
|
5
|
+
* Used by tooltip and popover to normalise their `trigger` prop values.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const VALID = new Set(['click', 'hover', 'focus'] as const);
|
|
10
|
+
* parseStringTriggers('hover,focus', VALID, ['click']); // → ['hover', 'focus']
|
|
11
|
+
* parseStringTriggers('', VALID, ['click']); // → ['click']
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare const parseStringTriggers: <T extends string>(value: string | null | undefined, valid: ReadonlySet<T>, defaults: T[]) => T[];
|
|
15
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/headless/parse.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,EAClD,OAAO,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,OAAO,WAAW,CAAC,CAAC,CAAC,EACrB,UAAU,CAAC,EAAE,KACZ,CAAC,EAOH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/headless/parse.ts
|
|
2
|
+
var e = (e, t, n) => {
|
|
3
|
+
let r = String(e ?? "").split(",").map((e) => e.trim()).filter((e) => t.has(e));
|
|
4
|
+
return r.length > 0 ? r : [...n];
|
|
5
|
+
};
|
|
6
|
+
//#endregion
|
|
7
|
+
export { e as parseStringTriggers };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","names":[],"sources":["../../src/headless/parse.ts"],"sourcesContent":["// ── Trigger string parser ─────────────────────────────────────────────────────\n\n/**\n * Parses a comma-separated trigger string into a typed array, filtering against\n * a valid set and falling back to `defaults` when the input is empty or invalid.\n *\n * Used by tooltip and popover to normalise their `trigger` prop values.\n *\n * @example\n * ```ts\n * const VALID = new Set(['click', 'hover', 'focus'] as const);\n * parseStringTriggers('hover,focus', VALID, ['click']); // → ['hover', 'focus']\n * parseStringTriggers('', VALID, ['click']); // → ['click']\n * ```\n */\nexport const parseStringTriggers = <T extends string>(\n value: string | null | undefined,\n valid: ReadonlySet<T>,\n defaults: T[],\n): T[] => {\n const parsed = String(value ?? '')\n .split(',')\n .map((t) => t.trim())\n .filter((t): t is T => valid.has(t as T));\n\n return parsed.length > 0 ? parsed : [...defaults];\n};\n"],"mappings":";AAeA,IAAa,KACX,GACA,GACA,MACQ;CACR,IAAM,IAAS,OAAO,KAAS,EAAE,CAAC,CAC/B,MAAM,GAAG,CAAC,CACV,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,CACpB,QAAQ,MAAc,EAAM,IAAI,CAAM,CAAC;CAE1C,OAAO,EAAO,SAAS,IAAI,IAAS,CAAC,GAAG,CAAQ;AAClD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./direction.cjs");let t=require("@vielzeug/orbit");var n=e=>e.endsWith(`-start`)?e.replace(`-start`,`-end`):e.endsWith(`-end`)?e.replace(`-end`,`-start`):e;function r({getDir:r,getFloating:i,getPlacement:a,getReference:o,matchWidth:s=!0,offsetPx:c=0,padding:l=6}){function u(){let t=a?.()??`bottom-start`;return(r?.()??e.elementDirection(o()))===`rtl`?n(t):t}function d(){let e=o(),n=i();if(!e||!n)return;let r=u(),a=(0,t.computePosition)(e,n,{middleware:[...c?[(0,t.offset)(c)]:[],(0,t.flip)({padding:l}),(0,t.shift)({padding:l}),...s?[(0,t.size)({padding:l})]:[]],placement:r});n.style.left=`${a.x}px`,n.style.top=`${a.y}px`,s&&(n.style.width=`${e.getBoundingClientRect().width}px`)}function f(){let e=o(),n=i();return!e||!n?()=>{}:(0,t.autoUpdate)(e,n,d)}return{floating:i,reference:o,startAutoUpdate:f,update:d}}exports.createDropdownPositioner=r;
|
|
2
|
+
//# sourceMappingURL=positioner.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"positioner.cjs","names":[],"sources":["../../src/headless/positioner.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, type Placement, shift, size } from '@vielzeug/orbit';\n\nimport { elementDirection } from './direction';\n\n// ── Overlay positioner contract ──────────────────────────────────────────────\n\nexport type OverlayPositioner = {\n floating: () => HTMLElement | null;\n reference: () => HTMLElement | null;\n /** Start continuous position auto-updates. Returns a stop function. */\n startAutoUpdate?: () => () => void;\n update: () => void;\n};\n\n// ── Dropdown positioner ───────────────────────────────────────────────────────\n\nexport type DropdownPositionerOptions = {\n /**\n * Returns the text direction used for placement mirroring. Defaults to the resolved\n * direction of the reference element (nearest `dir=\"ltr\"|\"rtl\"` ancestor, falling back to\n * computed style) — most callers never need to pass this explicitly.\n */\n getDir?: () => 'ltr' | 'rtl';\n /** Getter for the floating (dropdown panel) element. */\n getFloating: () => HTMLElement | null;\n /** Getter for the current placement. Defaults to 'bottom-start' (RTL-aware: flips to 'bottom-end'). */\n getPlacement?: () => Placement;\n /** Getter for the reference (trigger) element. */\n getReference: () => HTMLElement | null;\n /** Whether to match the floating element width to the reference. Default: true */\n matchWidth?: boolean;\n /** Additional offset in pixels between reference and floating element. Default: 0 */\n offsetPx?: number;\n /** Padding (px) used by flip, shift, and size middleware. Default: 6 */\n padding?: number;\n};\n\n/** Mirrors a start/end placement for RTL layouts. */\nconst rtlPlacement = (p: Placement): Placement => {\n if (p.endsWith('-start')) return p.replace('-start', '-end') as Placement;\n\n if (p.endsWith('-end')) return p.replace('-end', '-start') as Placement;\n\n return p;\n};\n\n/**\n * Creates an Orbit-powered positioner for dropdown overlays (select, combobox, menu).\n *\n * Uses flip + shift + optional width-matching middleware. Supports continuous\n * auto-update for repositioning on scroll or resize.\n *\n * RTL-aware: start/end placements are automatically mirrored so dropdowns open on the\n * correct side, based on `getDir` (or the reference element's resolved direction when\n * `getDir` is omitted).\n */\nexport function createDropdownPositioner({\n getDir,\n getFloating,\n getPlacement,\n getReference,\n matchWidth = true,\n offsetPx = 0,\n padding = 6,\n}: DropdownPositionerOptions): OverlayPositioner {\n function resolvedPlacement(): Placement {\n const base = getPlacement?.() ?? 'bottom-start';\n const dir = getDir?.() ?? elementDirection(getReference());\n\n return dir === 'rtl' ? rtlPlacement(base) : base;\n }\n\n function updatePosition(): void {\n const ref = getReference();\n const floating = getFloating();\n\n if (!ref || !floating) return;\n\n const placement = resolvedPlacement();\n\n const result = computePosition(ref, floating, {\n middleware: [\n ...(offsetPx ? [offset(offsetPx)] : []),\n flip({ padding }),\n shift({ padding }),\n ...(matchWidth ? [size({ padding })] : []),\n ],\n placement,\n });\n\n floating.style.left = `${result.x}px`;\n floating.style.top = `${result.y}px`;\n\n if (matchWidth) {\n floating.style.width = `${ref.getBoundingClientRect().width}px`;\n }\n }\n\n function startAutoUpdate(): () => void {\n const ref = getReference();\n const floating = getFloating();\n\n if (!ref || !floating) return () => {};\n\n return autoUpdate(ref, floating, updatePosition);\n }\n\n return { floating: getFloating, reference: getReference, startAutoUpdate, update: updatePosition };\n}\n"],"mappings":"oEAsCA,IAAM,EAAgB,GAChB,EAAE,SAAS,QAAQ,EAAU,EAAE,QAAQ,SAAU,MAAM,EAEvD,EAAE,SAAS,MAAM,EAAU,EAAE,QAAQ,OAAQ,QAAQ,EAElD,EAaT,SAAgB,EAAyB,CACvC,SACA,cACA,eACA,eACA,aAAa,GACb,WAAW,EACX,UAAU,GACqC,CAC/C,SAAS,GAA+B,CACtC,IAAM,EAAO,IAAe,GAAK,eAGjC,OAFY,IAAS,GAAK,EAAA,iBAAiB,EAAa,CAAC,KAE1C,MAAQ,EAAa,CAAI,EAAI,CAC9C,CAEA,SAAS,GAAuB,CAC9B,IAAM,EAAM,EAAa,EACnB,EAAW,EAAY,EAE7B,GAAI,CAAC,GAAO,CAAC,EAAU,OAEvB,IAAM,EAAY,EAAkB,EAE9B,GAAA,EAAA,EAAA,gBAAA,CAAyB,EAAK,EAAU,CAC5C,WAAY,CACV,GAAI,EAAW,EAAA,EAAA,EAAA,OAAA,CAAQ,CAAQ,CAAC,EAAI,CAAC,aAChC,CAAE,SAAQ,CAAC,cACV,CAAE,SAAQ,CAAC,EACjB,GAAI,EAAa,EAAA,EAAA,EAAA,KAAA,CAAM,CAAE,SAAQ,CAAC,CAAC,EAAI,CAAC,CAC1C,EACA,WACF,CAAC,EAED,EAAS,MAAM,KAAO,GAAG,EAAO,EAAE,IAClC,EAAS,MAAM,IAAM,GAAG,EAAO,EAAE,IAE7B,IACF,EAAS,MAAM,MAAQ,GAAG,EAAI,sBAAsB,CAAC,CAAC,MAAM,IAEhE,CAEA,SAAS,GAA8B,CACrC,IAAM,EAAM,EAAa,EACnB,EAAW,EAAY,EAI7B,MAFI,CAAC,GAAO,CAAC,MAAuB,CAAC,GAErC,EAAA,EAAA,WAAA,CAAkB,EAAK,EAAU,CAAc,CACjD,CAEA,MAAO,CAAE,SAAU,EAAa,UAAW,EAAc,kBAAiB,OAAQ,CAAe,CACnG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type Placement } from '@vielzeug/orbit';
|
|
2
|
+
export type OverlayPositioner = {
|
|
3
|
+
floating: () => HTMLElement | null;
|
|
4
|
+
reference: () => HTMLElement | null;
|
|
5
|
+
/** Start continuous position auto-updates. Returns a stop function. */
|
|
6
|
+
startAutoUpdate?: () => () => void;
|
|
7
|
+
update: () => void;
|
|
8
|
+
};
|
|
9
|
+
export type DropdownPositionerOptions = {
|
|
10
|
+
/**
|
|
11
|
+
* Returns the text direction used for placement mirroring. Defaults to the resolved
|
|
12
|
+
* direction of the reference element (nearest `dir="ltr"|"rtl"` ancestor, falling back to
|
|
13
|
+
* computed style) — most callers never need to pass this explicitly.
|
|
14
|
+
*/
|
|
15
|
+
getDir?: () => 'ltr' | 'rtl';
|
|
16
|
+
/** Getter for the floating (dropdown panel) element. */
|
|
17
|
+
getFloating: () => HTMLElement | null;
|
|
18
|
+
/** Getter for the current placement. Defaults to 'bottom-start' (RTL-aware: flips to 'bottom-end'). */
|
|
19
|
+
getPlacement?: () => Placement;
|
|
20
|
+
/** Getter for the reference (trigger) element. */
|
|
21
|
+
getReference: () => HTMLElement | null;
|
|
22
|
+
/** Whether to match the floating element width to the reference. Default: true */
|
|
23
|
+
matchWidth?: boolean;
|
|
24
|
+
/** Additional offset in pixels between reference and floating element. Default: 0 */
|
|
25
|
+
offsetPx?: number;
|
|
26
|
+
/** Padding (px) used by flip, shift, and size middleware. Default: 6 */
|
|
27
|
+
padding?: number;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Creates an Orbit-powered positioner for dropdown overlays (select, combobox, menu).
|
|
31
|
+
*
|
|
32
|
+
* Uses flip + shift + optional width-matching middleware. Supports continuous
|
|
33
|
+
* auto-update for repositioning on scroll or resize.
|
|
34
|
+
*
|
|
35
|
+
* RTL-aware: start/end placements are automatically mirrored so dropdowns open on the
|
|
36
|
+
* correct side, based on `getDir` (or the reference element's resolved direction when
|
|
37
|
+
* `getDir` is omitted).
|
|
38
|
+
*/
|
|
39
|
+
export declare function createDropdownPositioner({ getDir, getFloating, getPlacement, getReference, matchWidth, offsetPx, padding, }: DropdownPositionerOptions): OverlayPositioner;
|
|
40
|
+
//# sourceMappingURL=positioner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"positioner.d.ts","sourceRoot":"","sources":["../../src/headless/positioner.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,SAAS,EAAe,MAAM,iBAAiB,CAAC;AAMzG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACpC,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,MAAM,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAIF,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,KAAK,GAAG,KAAK,CAAC;IAC7B,wDAAwD;IACxD,WAAW,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACtC,uGAAuG;IACvG,YAAY,CAAC,EAAE,MAAM,SAAS,CAAC;IAC/B,kDAAkD;IAClD,YAAY,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACvC,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAWF;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,MAAM,EACN,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAiB,EACjB,QAAY,EACZ,OAAW,GACZ,EAAE,yBAAyB,GAAG,iBAAiB,CA4C/C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { elementDirection as e } from "./direction.js";
|
|
2
|
+
import { autoUpdate as t, computePosition as n, flip as r, offset as i, shift as a, size as o } from "@vielzeug/orbit";
|
|
3
|
+
//#region src/headless/positioner.ts
|
|
4
|
+
var s = (e) => e.endsWith("-start") ? e.replace("-start", "-end") : e.endsWith("-end") ? e.replace("-end", "-start") : e;
|
|
5
|
+
function c({ getDir: c, getFloating: l, getPlacement: u, getReference: d, matchWidth: f = !0, offsetPx: p = 0, padding: m = 6 }) {
|
|
6
|
+
function h() {
|
|
7
|
+
let t = u?.() ?? "bottom-start";
|
|
8
|
+
return (c?.() ?? e(d())) === "rtl" ? s(t) : t;
|
|
9
|
+
}
|
|
10
|
+
function g() {
|
|
11
|
+
let e = d(), t = l();
|
|
12
|
+
if (!e || !t) return;
|
|
13
|
+
let s = h(), c = n(e, t, {
|
|
14
|
+
middleware: [
|
|
15
|
+
...p ? [i(p)] : [],
|
|
16
|
+
r({ padding: m }),
|
|
17
|
+
a({ padding: m }),
|
|
18
|
+
...f ? [o({ padding: m })] : []
|
|
19
|
+
],
|
|
20
|
+
placement: s
|
|
21
|
+
});
|
|
22
|
+
t.style.left = `${c.x}px`, t.style.top = `${c.y}px`, f && (t.style.width = `${e.getBoundingClientRect().width}px`);
|
|
23
|
+
}
|
|
24
|
+
function _() {
|
|
25
|
+
let e = d(), n = l();
|
|
26
|
+
return !e || !n ? () => {} : t(e, n, g);
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
floating: l,
|
|
30
|
+
reference: d,
|
|
31
|
+
startAutoUpdate: _,
|
|
32
|
+
update: g
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { c as createDropdownPositioner };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=positioner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"positioner.js","names":[],"sources":["../../src/headless/positioner.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, type Placement, shift, size } from '@vielzeug/orbit';\n\nimport { elementDirection } from './direction';\n\n// ── Overlay positioner contract ──────────────────────────────────────────────\n\nexport type OverlayPositioner = {\n floating: () => HTMLElement | null;\n reference: () => HTMLElement | null;\n /** Start continuous position auto-updates. Returns a stop function. */\n startAutoUpdate?: () => () => void;\n update: () => void;\n};\n\n// ── Dropdown positioner ───────────────────────────────────────────────────────\n\nexport type DropdownPositionerOptions = {\n /**\n * Returns the text direction used for placement mirroring. Defaults to the resolved\n * direction of the reference element (nearest `dir=\"ltr\"|\"rtl\"` ancestor, falling back to\n * computed style) — most callers never need to pass this explicitly.\n */\n getDir?: () => 'ltr' | 'rtl';\n /** Getter for the floating (dropdown panel) element. */\n getFloating: () => HTMLElement | null;\n /** Getter for the current placement. Defaults to 'bottom-start' (RTL-aware: flips to 'bottom-end'). */\n getPlacement?: () => Placement;\n /** Getter for the reference (trigger) element. */\n getReference: () => HTMLElement | null;\n /** Whether to match the floating element width to the reference. Default: true */\n matchWidth?: boolean;\n /** Additional offset in pixels between reference and floating element. Default: 0 */\n offsetPx?: number;\n /** Padding (px) used by flip, shift, and size middleware. Default: 6 */\n padding?: number;\n};\n\n/** Mirrors a start/end placement for RTL layouts. */\nconst rtlPlacement = (p: Placement): Placement => {\n if (p.endsWith('-start')) return p.replace('-start', '-end') as Placement;\n\n if (p.endsWith('-end')) return p.replace('-end', '-start') as Placement;\n\n return p;\n};\n\n/**\n * Creates an Orbit-powered positioner for dropdown overlays (select, combobox, menu).\n *\n * Uses flip + shift + optional width-matching middleware. Supports continuous\n * auto-update for repositioning on scroll or resize.\n *\n * RTL-aware: start/end placements are automatically mirrored so dropdowns open on the\n * correct side, based on `getDir` (or the reference element's resolved direction when\n * `getDir` is omitted).\n */\nexport function createDropdownPositioner({\n getDir,\n getFloating,\n getPlacement,\n getReference,\n matchWidth = true,\n offsetPx = 0,\n padding = 6,\n}: DropdownPositionerOptions): OverlayPositioner {\n function resolvedPlacement(): Placement {\n const base = getPlacement?.() ?? 'bottom-start';\n const dir = getDir?.() ?? elementDirection(getReference());\n\n return dir === 'rtl' ? rtlPlacement(base) : base;\n }\n\n function updatePosition(): void {\n const ref = getReference();\n const floating = getFloating();\n\n if (!ref || !floating) return;\n\n const placement = resolvedPlacement();\n\n const result = computePosition(ref, floating, {\n middleware: [\n ...(offsetPx ? [offset(offsetPx)] : []),\n flip({ padding }),\n shift({ padding }),\n ...(matchWidth ? [size({ padding })] : []),\n ],\n placement,\n });\n\n floating.style.left = `${result.x}px`;\n floating.style.top = `${result.y}px`;\n\n if (matchWidth) {\n floating.style.width = `${ref.getBoundingClientRect().width}px`;\n }\n }\n\n function startAutoUpdate(): () => void {\n const ref = getReference();\n const floating = getFloating();\n\n if (!ref || !floating) return () => {};\n\n return autoUpdate(ref, floating, updatePosition);\n }\n\n return { floating: getFloating, reference: getReference, startAutoUpdate, update: updatePosition };\n}\n"],"mappings":";;;AAsCA,IAAM,KAAgB,MAChB,EAAE,SAAS,QAAQ,IAAU,EAAE,QAAQ,UAAU,MAAM,IAEvD,EAAE,SAAS,MAAM,IAAU,EAAE,QAAQ,QAAQ,QAAQ,IAElD;AAaT,SAAgB,EAAyB,EACvC,WACA,gBACA,iBACA,iBACA,gBAAa,IACb,cAAW,GACX,aAAU,KACqC;CAC/C,SAAS,IAA+B;EACtC,IAAM,IAAO,IAAe,KAAK;EAGjC,QAFY,IAAS,KAAK,EAAiB,EAAa,CAAC,OAE1C,QAAQ,EAAa,CAAI,IAAI;CAC9C;CAEA,SAAS,IAAuB;EAC9B,IAAM,IAAM,EAAa,GACnB,IAAW,EAAY;EAE7B,IAAI,CAAC,KAAO,CAAC,GAAU;EAEvB,IAAM,IAAY,EAAkB,GAE9B,IAAS,EAAgB,GAAK,GAAU;GAC5C,YAAY;IACV,GAAI,IAAW,CAAC,EAAO,CAAQ,CAAC,IAAI,CAAC;IACrC,EAAK,EAAE,WAAQ,CAAC;IAChB,EAAM,EAAE,WAAQ,CAAC;IACjB,GAAI,IAAa,CAAC,EAAK,EAAE,WAAQ,CAAC,CAAC,IAAI,CAAC;GAC1C;GACA;EACF,CAAC;EAKD,AAHA,EAAS,MAAM,OAAO,GAAG,EAAO,EAAE,KAClC,EAAS,MAAM,MAAM,GAAG,EAAO,EAAE,KAE7B,MACF,EAAS,MAAM,QAAQ,GAAG,EAAI,sBAAsB,CAAC,CAAC,MAAM;CAEhE;CAEA,SAAS,IAA8B;EACrC,IAAM,IAAM,EAAa,GACnB,IAAW,EAAY;EAI7B,OAFI,CAAC,KAAO,CAAC,UAAuB,CAAC,IAE9B,EAAW,GAAK,GAAU,CAAc;CACjD;CAEA,OAAO;EAAE,UAAU;EAAa,WAAW;EAAc;EAAiB,QAAQ;CAAe;AACnG"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require("@vielzeug/ripple");var t=t=>{let n=(0,e.signal)(new Set),r=e=>n.value.has(e),i=()=>{let e=t.pageItems();return e.length?e.every(e=>n.value.has(t.getRowKey(e))):!1},a=e=>{n.value=e,t.onSelectionChange?.(e)};return{clearSelection:()=>{a(new Set)},isAllSelected:i,isSelected:r,selectAll:()=>{if(t.selectionMode()!==`multi`)return;let e=t.pageItems();if(i()){let r=new Set(n.value);for(let n of e)r.delete(t.getRowKey(n));a(r)}else{let r=new Set(n.value);for(let n of e)r.add(t.getRowKey(n));a(r)}},selectedKeys:(0,e.computed)(()=>new Set(n.value)),setSelection:e=>{a(new Set(e))},toggleRow:e=>{let r=t.selectionMode();if(r===`none`)return;let i=new Set(n.value);i.has(e)?i.delete(e):(r===`single`&&i.clear(),i.add(e)),a(i)}}};exports.createSelectionControl=t;
|
|
2
|
+
//# sourceMappingURL=selection-control.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-control.cjs","names":[],"sources":["../../src/headless/selection-control.ts"],"sourcesContent":["import { computed, type Readable, signal } from '@vielzeug/ripple';\n\nimport type { SelectionMode } from './datagrid';\n\n// ── Selection control ─────────────────────────────────────────────────────────\n\nexport type SelectionControlOptions<T> = {\n /** Returns a unique string key for each row item. */\n getRowKey: (item: T) => string;\n /** Called when selection changes. Receives the full set of selected keys. */\n onSelectionChange?: (keys: Set<string>) => void;\n /** Returns the current page items reactively. */\n pageItems: () => T[];\n /** Returns the current selection mode reactively. */\n selectionMode: () => SelectionMode;\n};\n\nexport type SelectionControl = {\n /** Deselect all rows. */\n clearSelection(): void;\n /** Whether all current-page rows are selected. */\n isAllSelected(): boolean;\n /** Whether a given row key is selected. */\n isSelected(key: string): boolean;\n /** Select (or deselect if already all selected) all rows on the current page. */\n selectAll(): void;\n /** Current selected row keys. Reactive signal. Returns a snapshot copy. */\n readonly selectedKeys: Readable<ReadonlySet<string>>;\n /** Set the selection to an explicit set of keys. */\n setSelection(keys: Set<string>): void;\n /** Toggle selection for a single row. */\n toggleRow(key: string): void;\n};\n\nexport const createSelectionControl = <T>(options: SelectionControlOptions<T>): SelectionControl => {\n const _selectedKeys = signal<Set<string>>(new Set());\n\n const isSelected = (key: string): boolean => _selectedKeys.value.has(key);\n\n const isAllSelected = (): boolean => {\n const page = options.pageItems();\n\n if (!page.length) return false;\n\n return page.every((item) => _selectedKeys.value.has(options.getRowKey(item)));\n };\n\n const _commitSelection = (next: Set<string>): void => {\n _selectedKeys.value = next;\n options.onSelectionChange?.(next);\n };\n\n const toggleRow = (key: string): void => {\n const mode = options.selectionMode();\n\n if (mode === 'none') return;\n\n const next = new Set(_selectedKeys.value);\n\n if (next.has(key)) {\n next.delete(key);\n } else if (mode === 'single') {\n next.clear();\n next.add(key);\n } else {\n next.add(key);\n }\n\n _commitSelection(next);\n };\n\n const selectAll = (): void => {\n if (options.selectionMode() !== 'multi') return;\n\n const page = options.pageItems();\n\n if (isAllSelected()) {\n const next = new Set(_selectedKeys.value);\n\n for (const item of page) next.delete(options.getRowKey(item));\n\n _commitSelection(next);\n } else {\n const next = new Set(_selectedKeys.value);\n\n for (const item of page) next.add(options.getRowKey(item));\n\n _commitSelection(next);\n }\n };\n\n const clearSelection = (): void => {\n _commitSelection(new Set());\n };\n\n const setSelection = (keys: Set<string>): void => {\n _commitSelection(new Set(keys));\n };\n\n return {\n clearSelection,\n isAllSelected,\n isSelected,\n selectAll,\n selectedKeys: computed(() => new Set(_selectedKeys.value)),\n setSelection,\n toggleRow,\n };\n};\n"],"mappings":"kCAkCA,IAAa,EAA6B,GAA0D,CAClG,IAAM,GAAA,EAAA,EAAA,OAAA,CAAoC,IAAI,GAAK,EAE7C,EAAc,GAAyB,EAAc,MAAM,IAAI,CAAG,EAElE,MAA+B,CACnC,IAAM,EAAO,EAAQ,UAAU,EAI/B,OAFK,EAAK,OAEH,EAAK,MAAO,GAAS,EAAc,MAAM,IAAI,EAAQ,UAAU,CAAI,CAAC,CAAC,EAFnD,EAG3B,EAEM,EAAoB,GAA4B,CACpD,EAAc,MAAQ,EACtB,EAAQ,oBAAoB,CAAI,CAClC,EAiDA,MAAO,CACL,mBATiC,CACjC,EAAiB,IAAI,GAAK,CAC5B,EAQE,gBACA,aACA,cAhC4B,CAC5B,GAAI,EAAQ,cAAc,IAAM,QAAS,OAEzC,IAAM,EAAO,EAAQ,UAAU,EAE/B,GAAI,EAAc,EAAG,CACnB,IAAM,EAAO,IAAI,IAAI,EAAc,KAAK,EAExC,IAAK,IAAM,KAAQ,EAAM,EAAK,OAAO,EAAQ,UAAU,CAAI,CAAC,EAE5D,EAAiB,CAAI,CACvB,KAAO,CACL,IAAM,EAAO,IAAI,IAAI,EAAc,KAAK,EAExC,IAAK,IAAM,KAAQ,EAAM,EAAK,IAAI,EAAQ,UAAU,CAAI,CAAC,EAEzD,EAAiB,CAAI,CACvB,CACF,EAeE,cAAA,EAAA,EAAA,SAAA,KAA6B,IAAI,IAAI,EAAc,KAAK,CAAC,EACzD,aAVoB,GAA4B,CAChD,EAAiB,IAAI,IAAI,CAAI,CAAC,CAChC,EASE,UAtDiB,GAAsB,CACvC,IAAM,EAAO,EAAQ,cAAc,EAEnC,GAAI,IAAS,OAAQ,OAErB,IAAM,EAAO,IAAI,IAAI,EAAc,KAAK,EAEpC,EAAK,IAAI,CAAG,EACd,EAAK,OAAO,CAAG,GACN,IAAS,UAClB,EAAK,MAAM,EAGX,EAAK,IAAI,CAAG,GAGd,EAAiB,CAAI,CACvB,CAsCA,CACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Readable } from '@vielzeug/ripple';
|
|
2
|
+
import type { SelectionMode } from './datagrid';
|
|
3
|
+
export type SelectionControlOptions<T> = {
|
|
4
|
+
/** Returns a unique string key for each row item. */
|
|
5
|
+
getRowKey: (item: T) => string;
|
|
6
|
+
/** Called when selection changes. Receives the full set of selected keys. */
|
|
7
|
+
onSelectionChange?: (keys: Set<string>) => void;
|
|
8
|
+
/** Returns the current page items reactively. */
|
|
9
|
+
pageItems: () => T[];
|
|
10
|
+
/** Returns the current selection mode reactively. */
|
|
11
|
+
selectionMode: () => SelectionMode;
|
|
12
|
+
};
|
|
13
|
+
export type SelectionControl = {
|
|
14
|
+
/** Deselect all rows. */
|
|
15
|
+
clearSelection(): void;
|
|
16
|
+
/** Whether all current-page rows are selected. */
|
|
17
|
+
isAllSelected(): boolean;
|
|
18
|
+
/** Whether a given row key is selected. */
|
|
19
|
+
isSelected(key: string): boolean;
|
|
20
|
+
/** Select (or deselect if already all selected) all rows on the current page. */
|
|
21
|
+
selectAll(): void;
|
|
22
|
+
/** Current selected row keys. Reactive signal. Returns a snapshot copy. */
|
|
23
|
+
readonly selectedKeys: Readable<ReadonlySet<string>>;
|
|
24
|
+
/** Set the selection to an explicit set of keys. */
|
|
25
|
+
setSelection(keys: Set<string>): void;
|
|
26
|
+
/** Toggle selection for a single row. */
|
|
27
|
+
toggleRow(key: string): void;
|
|
28
|
+
};
|
|
29
|
+
export declare const createSelectionControl: <T>(options: SelectionControlOptions<T>) => SelectionControl;
|
|
30
|
+
//# sourceMappingURL=selection-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-control.d.ts","sourceRoot":"","sources":["../../src/headless/selection-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI;IACvC,qDAAqD;IACrD,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAChD,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;IACrB,qDAAqD;IACrD,aAAa,EAAE,MAAM,aAAa,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,yBAAyB;IACzB,cAAc,IAAI,IAAI,CAAC;IACvB,kDAAkD;IAClD,aAAa,IAAI,OAAO,CAAC;IACzB,2CAA2C;IAC3C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,iFAAiF;IACjF,SAAS,IAAI,IAAI,CAAC;IAClB,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,oDAAoD;IACpD,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,yCAAyC;IACzC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,CAAC,EAAE,SAAS,uBAAuB,CAAC,CAAC,CAAC,KAAG,gBA0E/E,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { computed as e, signal as t } from "@vielzeug/ripple";
|
|
2
|
+
//#region src/headless/selection-control.ts
|
|
3
|
+
var n = (n) => {
|
|
4
|
+
let r = t(/* @__PURE__ */ new Set()), i = (e) => r.value.has(e), a = () => {
|
|
5
|
+
let e = n.pageItems();
|
|
6
|
+
return e.length ? e.every((e) => r.value.has(n.getRowKey(e))) : !1;
|
|
7
|
+
}, o = (e) => {
|
|
8
|
+
r.value = e, n.onSelectionChange?.(e);
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
clearSelection: () => {
|
|
12
|
+
o(/* @__PURE__ */ new Set());
|
|
13
|
+
},
|
|
14
|
+
isAllSelected: a,
|
|
15
|
+
isSelected: i,
|
|
16
|
+
selectAll: () => {
|
|
17
|
+
if (n.selectionMode() !== "multi") return;
|
|
18
|
+
let e = n.pageItems();
|
|
19
|
+
if (a()) {
|
|
20
|
+
let t = new Set(r.value);
|
|
21
|
+
for (let r of e) t.delete(n.getRowKey(r));
|
|
22
|
+
o(t);
|
|
23
|
+
} else {
|
|
24
|
+
let t = new Set(r.value);
|
|
25
|
+
for (let r of e) t.add(n.getRowKey(r));
|
|
26
|
+
o(t);
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
selectedKeys: e(() => new Set(r.value)),
|
|
30
|
+
setSelection: (e) => {
|
|
31
|
+
o(new Set(e));
|
|
32
|
+
},
|
|
33
|
+
toggleRow: (e) => {
|
|
34
|
+
let t = n.selectionMode();
|
|
35
|
+
if (t === "none") return;
|
|
36
|
+
let i = new Set(r.value);
|
|
37
|
+
i.has(e) ? i.delete(e) : (t === "single" && i.clear(), i.add(e)), o(i);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
//#endregion
|
|
42
|
+
export { n as createSelectionControl };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=selection-control.js.map
|