@vielzeug/refine 1.8.0 → 2.0.0
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 +5 -12
- package/dist/_dev.cjs +1 -1
- package/dist/_dev.cjs.map +1 -1
- package/dist/_dev.js +2 -5
- package/dist/_dev.js.map +1 -1
- package/dist/_virtual/_rolldown/runtime.cjs +1 -1
- package/dist/accordion-item.cjs +26 -24
- package/dist/accordion-item.cjs.map +1 -1
- package/dist/accordion-item.js +53 -51
- package/dist/accordion-item.js.map +1 -1
- package/dist/accordion.cjs +3 -1
- package/dist/accordion.cjs.map +1 -1
- package/dist/accordion.js +5 -3
- package/dist/accordion.js.map +1 -1
- package/dist/alert.cjs +1 -1
- package/dist/alert.cjs.map +1 -1
- package/dist/alert.js +1 -1
- package/dist/alert.js.map +1 -1
- package/dist/async.cjs +4 -2
- package/dist/async.cjs.map +1 -1
- package/dist/async.js +4 -2
- package/dist/async.js.map +1 -1
- package/dist/avatar-group.cjs +7 -0
- package/dist/avatar-group.cjs.map +1 -0
- package/dist/avatar-group.js +34 -0
- package/dist/avatar-group.js.map +1 -0
- package/dist/avatar.cjs +21 -16
- package/dist/avatar.cjs.map +1 -1
- package/dist/avatar.js +38 -54
- package/dist/avatar.js.map +1 -1
- package/dist/badge.cjs +4 -2
- package/dist/badge.cjs.map +1 -1
- package/dist/badge.js +6 -4
- package/dist/badge.js.map +1 -1
- package/dist/box.cjs +3 -1
- package/dist/box.cjs.map +1 -1
- package/dist/box.js +24 -18
- package/dist/box.js.map +1 -1
- package/dist/breadcrumb.cjs +4 -4
- package/dist/breadcrumb.cjs.map +1 -1
- package/dist/breadcrumb.js +4 -4
- package/dist/breadcrumb.js.map +1 -1
- package/dist/button-group.cjs +3 -3
- package/dist/button-group.cjs.map +1 -1
- package/dist/button-group.js +18 -16
- package/dist/button-group.js.map +1 -1
- package/dist/button.cjs +16 -12
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +31 -28
- package/dist/button.js.map +1 -1
- package/dist/calendar.cjs +94 -69
- package/dist/calendar.cjs.map +1 -1
- package/dist/calendar.js +131 -98
- package/dist/calendar.js.map +1 -1
- package/dist/card.cjs +7 -7
- package/dist/card.cjs.map +1 -1
- package/dist/card.js +53 -49
- package/dist/card.js.map +1 -1
- package/dist/carousel.cjs +65 -57
- package/dist/carousel.cjs.map +1 -1
- package/dist/carousel.js +157 -201
- package/dist/carousel.js.map +1 -1
- package/dist/chat-message.cjs +21 -19
- package/dist/chat-message.cjs.map +1 -1
- package/dist/chat-message.js +18 -15
- package/dist/chat-message.js.map +1 -1
- package/dist/checkbox-group.cjs +12 -10
- package/dist/checkbox-group.cjs.map +1 -1
- package/dist/checkbox-group.js +75 -76
- package/dist/checkbox-group.js.map +1 -1
- package/dist/checkbox.cjs +4 -4
- package/dist/checkbox.cjs.map +1 -1
- package/dist/checkbox.js +55 -55
- package/dist/checkbox.js.map +1 -1
- package/dist/chip.cjs +22 -20
- package/dist/chip.cjs.map +1 -1
- package/dist/chip.js +15 -12
- package/dist/chip.js.map +1 -1
- package/dist/code-window.cjs +8 -2
- package/dist/code-window.cjs.map +1 -1
- package/dist/code-window.js +8 -2
- package/dist/code-window.js.map +1 -1
- package/dist/combobox.cjs +63 -58
- package/dist/combobox.cjs.map +1 -1
- package/dist/combobox.js +199 -197
- package/dist/combobox.js.map +1 -1
- package/dist/command-palette.cjs +49 -29
- package/dist/command-palette.cjs.map +1 -1
- package/dist/command-palette.js +150 -118
- package/dist/command-palette.js.map +1 -1
- package/dist/content/avatar/avatar-group.d.ts +33 -0
- package/dist/content/avatar/avatar-group.d.ts.map +1 -0
- package/dist/content/avatar/avatar.d.ts +0 -32
- package/dist/content/avatar/avatar.d.ts.map +1 -1
- package/dist/content/card/card.css.cjs +1 -1
- package/dist/content/card/card.css.cjs.map +1 -1
- package/dist/content/card/card.css.js +1 -1
- package/dist/content/card/card.css.js.map +1 -1
- package/dist/content/card/card.d.ts.map +1 -1
- package/dist/content/carousel/carousel-slide.cjs +3 -1
- package/dist/content/carousel/carousel-slide.cjs.map +1 -1
- package/dist/content/carousel/carousel-slide.css.cjs +1 -1
- package/dist/content/carousel/carousel-slide.css.cjs.map +1 -1
- package/dist/content/carousel/carousel-slide.css.js +1 -1
- package/dist/content/carousel/carousel-slide.css.js.map +1 -1
- package/dist/content/carousel/carousel-slide.js +3 -1
- package/dist/content/carousel/carousel-slide.js.map +1 -1
- package/dist/content/carousel/carousel.css.cjs +1 -1
- package/dist/content/carousel/carousel.css.cjs.map +1 -1
- package/dist/content/carousel/carousel.css.js +1 -1
- package/dist/content/carousel/carousel.css.js.map +1 -1
- package/dist/content/carousel/carousel.d.ts +5 -19
- package/dist/content/carousel/carousel.d.ts.map +1 -1
- package/dist/content/chat-message/chat-message.d.ts.map +1 -1
- package/dist/content/index.d.ts +10 -2
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/list/_list-item-reveal.cjs +1 -1
- package/dist/content/list/_list-item-reveal.cjs.map +1 -1
- package/dist/content/list/_list-item-reveal.d.ts +2 -2
- package/dist/content/list/_list-item-reveal.d.ts.map +1 -1
- package/dist/content/list/_list-item-reveal.js +2 -2
- package/dist/content/list/_list-item-reveal.js.map +1 -1
- package/dist/content/list/list.d.ts.map +1 -1
- package/dist/content/marquee/index.d.ts +2 -0
- package/dist/content/marquee/index.d.ts.map +1 -0
- package/dist/content/marquee/marquee.css.cjs +2 -0
- package/dist/content/marquee/marquee.css.cjs.map +1 -0
- package/dist/content/marquee/marquee.css.js +6 -0
- package/dist/content/marquee/marquee.css.js.map +1 -0
- package/dist/content/marquee/marquee.d.ts +44 -0
- package/dist/content/marquee/marquee.d.ts.map +1 -0
- package/dist/content/stepper/_is-step-navigable.cjs +2 -0
- package/dist/content/stepper/_is-step-navigable.cjs.map +1 -0
- package/dist/content/stepper/_is-step-navigable.d.ts +14 -0
- package/dist/content/stepper/_is-step-navigable.d.ts.map +1 -0
- package/dist/content/stepper/_is-step-navigable.js +8 -0
- package/dist/content/stepper/_is-step-navigable.js.map +1 -0
- package/dist/content/stepper/step.css.cjs +2 -0
- package/dist/content/stepper/step.css.cjs.map +1 -0
- package/dist/content/stepper/step.css.js +6 -0
- package/dist/content/stepper/step.css.js.map +1 -0
- package/dist/content/stepper/step.d.ts +63 -0
- package/dist/content/stepper/step.d.ts.map +1 -0
- package/dist/content/stepper/stepper.css.cjs +2 -0
- package/dist/content/stepper/stepper.css.cjs.map +1 -0
- package/dist/content/stepper/stepper.css.js +6 -0
- package/dist/content/stepper/stepper.css.js.map +1 -0
- package/dist/content/stepper/stepper.d.ts +88 -0
- package/dist/content/stepper/stepper.d.ts.map +1 -0
- package/dist/copy-command.cjs +9 -3
- package/dist/copy-command.cjs.map +1 -1
- package/dist/copy-command.js +9 -3
- package/dist/copy-command.js.map +1 -1
- package/dist/{headless → core}/_internal.d.ts +3 -5
- package/dist/core/_internal.d.ts.map +1 -0
- package/dist/core/announcer.cjs.map +1 -0
- package/dist/core/announcer.d.ts.map +1 -0
- package/dist/{headless → core}/announcer.js +1 -1
- package/dist/core/announcer.js.map +1 -0
- package/dist/core/aria-reflection.cjs.map +1 -0
- package/dist/core/aria-reflection.d.ts.map +1 -0
- package/dist/{headless → core}/aria-reflection.js +1 -1
- package/dist/core/aria-reflection.js.map +1 -0
- package/dist/core/auto-resize.cjs.map +1 -0
- package/dist/core/auto-resize.d.ts.map +1 -0
- package/dist/{headless → core}/auto-resize.js +1 -1
- package/dist/core/auto-resize.js.map +1 -0
- package/dist/core/checkable.cjs.map +1 -0
- package/dist/core/checkable.d.ts.map +1 -0
- package/dist/{headless → core}/checkable.js +1 -1
- package/dist/core/checkable.js.map +1 -0
- package/dist/core/choice-field.cjs +2 -0
- package/dist/core/choice-field.cjs.map +1 -0
- package/dist/core/choice-field.d.ts.map +1 -0
- package/dist/{headless → core}/choice-field.js +3 -2
- package/dist/core/choice-field.js.map +1 -0
- package/dist/core/composer.cjs.map +1 -0
- package/dist/core/composer.d.ts.map +1 -0
- package/dist/{headless → core}/composer.js +1 -1
- package/dist/core/composer.js.map +1 -0
- package/dist/{headless → core}/date-picker.cjs +1 -1
- package/dist/core/date-picker.cjs.map +1 -0
- package/dist/core/date-picker.d.ts.map +1 -0
- package/dist/{headless → core}/date-picker.js +3 -3
- package/dist/core/date-picker.js.map +1 -0
- package/dist/core/direction.cjs.map +1 -0
- package/dist/core/direction.d.ts.map +1 -0
- package/dist/{headless → core}/direction.js +1 -1
- package/dist/core/direction.js.map +1 -0
- package/dist/core/field-base.cjs +2 -0
- package/dist/core/field-base.cjs.map +1 -0
- package/dist/{headless → core}/field-base.d.ts +3 -3
- package/dist/core/field-base.d.ts.map +1 -0
- package/dist/core/field-base.js +66 -0
- package/dist/core/field-base.js.map +1 -0
- package/dist/core/focus.cjs.map +1 -0
- package/dist/core/focus.d.ts.map +1 -0
- package/dist/{headless → core}/focus.js +1 -1
- package/dist/core/focus.js.map +1 -0
- package/dist/{headless → core}/index.d.ts +7 -6
- package/dist/core/index.d.ts.map +1 -0
- package/dist/{headless → core}/keyboard.cjs +1 -1
- package/dist/core/keyboard.cjs.map +1 -0
- package/dist/core/keyboard.d.ts.map +1 -0
- package/dist/{headless → core}/keyboard.js +2 -2
- package/dist/core/keyboard.js.map +1 -0
- package/dist/core/light-dom.cjs.map +1 -0
- package/dist/core/light-dom.d.ts.map +1 -0
- package/dist/{headless → core}/light-dom.js +1 -1
- package/dist/core/light-dom.js.map +1 -0
- package/dist/core/nav.cjs.map +1 -0
- package/dist/core/nav.d.ts.map +1 -0
- package/dist/{headless → core}/nav.js +1 -1
- package/dist/core/nav.js.map +1 -0
- package/dist/core/numbers.cjs.map +1 -0
- package/dist/core/numbers.d.ts.map +1 -0
- package/dist/{headless → core}/numbers.js +1 -1
- package/dist/core/numbers.js.map +1 -0
- package/dist/core/option-list.cjs +2 -0
- package/dist/core/option-list.cjs.map +1 -0
- package/dist/core/option-list.d.ts +49 -0
- package/dist/core/option-list.d.ts.map +1 -0
- package/dist/core/option-list.js +65 -0
- package/dist/core/option-list.js.map +1 -0
- package/dist/core/ore.cjs.map +1 -0
- package/dist/{headless → core}/ore.d.ts +2 -2
- package/dist/core/ore.d.ts.map +1 -0
- package/dist/{headless → core}/ore.js +1 -1
- package/dist/core/ore.js.map +1 -0
- package/dist/core/overlay.cjs +2 -0
- package/dist/core/overlay.cjs.map +1 -0
- package/dist/core/overlay.d.ts +41 -0
- package/dist/core/overlay.d.ts.map +1 -0
- package/dist/core/overlay.js +17 -0
- package/dist/core/overlay.js.map +1 -0
- package/dist/core/paginated-list.d.ts.map +1 -0
- package/dist/core/parse.cjs.map +1 -0
- package/dist/core/parse.d.ts.map +1 -0
- package/dist/{headless → core}/parse.js +1 -1
- package/dist/core/parse.js.map +1 -0
- package/dist/core/positioner.cjs +2 -0
- package/dist/core/positioner.cjs.map +1 -0
- package/dist/core/positioner.d.ts.map +1 -0
- package/dist/{headless → core}/positioner.js +7 -7
- package/dist/core/positioner.js.map +1 -0
- package/dist/core/ref-callback.cjs +2 -0
- package/dist/core/ref-callback.cjs.map +1 -0
- package/dist/core/ref-callback.d.ts.map +1 -0
- package/dist/{headless → core}/ref-callback.js +2 -2
- package/dist/core/ref-callback.js.map +1 -0
- package/dist/core/signals.cjs +2 -0
- package/dist/core/signals.cjs.map +1 -0
- package/dist/core/signals.d.ts.map +1 -0
- package/dist/{headless → core}/signals.js +3 -2
- package/dist/core/signals.js.map +1 -0
- package/dist/core/slider.cjs +2 -0
- package/dist/core/slider.cjs.map +1 -0
- package/dist/core/slider.d.ts.map +1 -0
- package/dist/{headless → core}/slider.js +3 -3
- package/dist/{headless/slider.cjs.map → core/slider.js.map} +1 -1
- package/dist/core/spinner.cjs +2 -0
- package/dist/core/spinner.cjs.map +1 -0
- package/dist/core/spinner.d.ts.map +1 -0
- package/dist/{headless → core}/spinner.js +3 -3
- package/dist/{headless/spinner.cjs.map → core/spinner.js.map} +1 -1
- package/dist/core/swipe.cjs.map +1 -0
- package/dist/core/swipe.d.ts.map +1 -0
- package/dist/{headless → core}/swipe.js +1 -1
- package/dist/core/swipe.js.map +1 -0
- package/dist/core/text-field.cjs.map +1 -0
- package/dist/core/text-field.d.ts.map +1 -0
- package/dist/{headless → core}/text-field.js +1 -1
- package/dist/core/text-field.js.map +1 -0
- package/dist/core/typeahead.cjs.map +1 -0
- package/dist/core/typeahead.d.ts.map +1 -0
- package/dist/{headless → core}/typeahead.js +1 -1
- package/dist/core/typeahead.js.map +1 -0
- package/dist/custom-elements.json +5079 -4595
- package/dist/datagrid.cjs +320 -271
- package/dist/datagrid.cjs.map +1 -1
- package/dist/datagrid.js +483 -429
- package/dist/datagrid.js.map +1 -1
- package/dist/date-picker.cjs +77 -62
- package/dist/date-picker.cjs.map +1 -1
- package/dist/date-picker.js +169 -146
- package/dist/date-picker.js.map +1 -1
- package/dist/dialog.cjs +3 -3
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.js +18 -7
- package/dist/dialog.js.map +1 -1
- package/dist/disclosure/tabs/tabs.d.ts.map +1 -1
- package/dist/drawer.cjs +5 -5
- package/dist/drawer.cjs.map +1 -1
- package/dist/drawer.js +52 -47
- package/dist/drawer.js.map +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/feedback/chip/chip.d.ts.map +1 -1
- package/dist/feedback/skeleton/skeleton.d.ts.map +1 -1
- package/dist/feedback/toast/index.d.ts +1 -1
- package/dist/feedback/toast/index.d.ts.map +1 -1
- package/dist/feedback/toast/toast.d.ts +16 -68
- package/dist/feedback/toast/toast.d.ts.map +1 -1
- package/dist/feedback/typing-indicator/typing-indicator.d.ts +1 -1
- package/dist/file-input.cjs +111 -78
- package/dist/file-input.cjs.map +1 -1
- package/dist/file-input.js +220 -183
- package/dist/file-input.js.map +1 -1
- package/dist/grid-item.cjs +3 -1
- package/dist/grid-item.cjs.map +1 -1
- package/dist/grid-item.js +3 -1
- package/dist/grid-item.js.map +1 -1
- package/dist/grid.cjs +3 -1
- package/dist/grid.cjs.map +1 -1
- package/dist/grid.js +6 -5
- package/dist/grid.js.map +1 -1
- package/dist/icon.cjs +5 -1
- package/dist/icon.cjs.map +1 -1
- package/dist/icon.js +50 -46
- package/dist/icon.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +7 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -67
- package/dist/input.cjs +44 -40
- package/dist/input.cjs.map +1 -1
- package/dist/input.js +132 -130
- package/dist/input.js.map +1 -1
- package/dist/inputs/button-group/button-group.css.cjs +1 -1
- package/dist/inputs/button-group/button-group.css.cjs.map +1 -1
- package/dist/inputs/button-group/button-group.css.js +1 -1
- package/dist/inputs/button-group/button-group.css.js.map +1 -1
- package/dist/inputs/button-group/button-group.d.ts +6 -3
- package/dist/inputs/button-group/button-group.d.ts.map +1 -1
- package/dist/inputs/checkbox/checkbox.d.ts +6 -5
- package/dist/inputs/checkbox/checkbox.d.ts.map +1 -1
- package/dist/inputs/checkbox-group/checkbox-group.d.ts +1 -1
- package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -1
- package/dist/inputs/combobox/combobox.d.ts +4 -2
- package/dist/inputs/combobox/combobox.d.ts.map +1 -1
- package/dist/inputs/combobox/combobox.types.d.ts +5 -7
- package/dist/inputs/combobox/combobox.types.d.ts.map +1 -1
- package/dist/inputs/datagrid/datagrid-column.cjs +1 -1
- package/dist/inputs/datagrid/datagrid-column.cjs.map +1 -1
- package/dist/inputs/datagrid/datagrid-column.d.ts +1 -1
- package/dist/inputs/datagrid/datagrid-column.d.ts.map +1 -1
- package/dist/inputs/datagrid/datagrid-column.js +5 -5
- package/dist/inputs/datagrid/datagrid-column.js.map +1 -1
- package/dist/inputs/datagrid/datagrid-model.cjs +2 -0
- package/dist/inputs/datagrid/datagrid-model.cjs.map +1 -0
- package/dist/inputs/datagrid/datagrid-model.d.ts +101 -0
- package/dist/inputs/datagrid/datagrid-model.d.ts.map +1 -0
- package/dist/inputs/datagrid/datagrid-model.js +202 -0
- package/dist/inputs/datagrid/datagrid-model.js.map +1 -0
- package/dist/inputs/datagrid/datagrid-nav.cjs.map +1 -1
- package/dist/inputs/datagrid/datagrid.d.ts +44 -45
- package/dist/inputs/datagrid/datagrid.d.ts.map +1 -1
- package/dist/inputs/date-picker/date-picker.d.ts +4 -4
- package/dist/inputs/date-picker/date-picker.d.ts.map +1 -1
- package/dist/inputs/file-input/file-input-upload.cjs +1 -1
- package/dist/inputs/file-input/file-input-upload.cjs.map +1 -1
- package/dist/inputs/file-input/file-input-upload.d.ts.map +1 -1
- package/dist/inputs/file-input/file-input-upload.js +6 -3
- package/dist/inputs/file-input/file-input-upload.js.map +1 -1
- package/dist/inputs/file-input/file-input.d.ts.map +1 -1
- package/dist/inputs/index.d.ts +0 -4
- package/dist/inputs/index.d.ts.map +1 -1
- package/dist/inputs/input/input.d.ts +4 -10
- package/dist/inputs/input/input.d.ts.map +1 -1
- package/dist/inputs/message-composer/message-composer.d.ts +6 -10
- package/dist/inputs/message-composer/message-composer.d.ts.map +1 -1
- package/dist/inputs/number-input/number-input.d.ts +4 -10
- package/dist/inputs/number-input/number-input.d.ts.map +1 -1
- package/dist/inputs/otp-input/otp-input.d.ts +4 -6
- package/dist/inputs/otp-input/otp-input.d.ts.map +1 -1
- package/dist/inputs/radio/radio.d.ts +4 -3
- package/dist/inputs/radio/radio.d.ts.map +1 -1
- package/dist/inputs/radio-group/radio-group.d.ts +1 -1
- package/dist/inputs/radio-group/radio-group.d.ts.map +1 -1
- package/dist/inputs/rating/rating.d.ts +4 -5
- package/dist/inputs/rating/rating.d.ts.map +1 -1
- package/dist/inputs/select/select.d.ts +7 -9
- package/dist/inputs/select/select.d.ts.map +1 -1
- package/dist/inputs/shared/field-binding.cjs.map +1 -1
- package/dist/inputs/shared/field-binding.d.ts +1 -1
- package/dist/inputs/shared/field-binding.js.map +1 -1
- package/dist/inputs/shared/index.d.ts +0 -1
- package/dist/inputs/shared/index.d.ts.map +1 -1
- package/dist/inputs/shared/native-field-event.cjs +2 -0
- package/dist/inputs/shared/native-field-event.cjs.map +1 -0
- package/dist/inputs/shared/native-field-event.d.ts +6 -0
- package/dist/inputs/shared/native-field-event.d.ts.map +1 -0
- package/dist/inputs/shared/native-field-event.js +29 -0
- package/dist/inputs/shared/native-field-event.js.map +1 -0
- package/dist/inputs/shared/templates.cjs +18 -12
- package/dist/inputs/shared/templates.cjs.map +1 -1
- package/dist/inputs/shared/templates.d.ts +1 -1
- package/dist/inputs/shared/templates.d.ts.map +1 -1
- package/dist/inputs/shared/templates.js +19 -13
- package/dist/inputs/shared/templates.js.map +1 -1
- package/dist/inputs/slider/slider.css.cjs +1 -1
- package/dist/inputs/slider/slider.css.cjs.map +1 -1
- package/dist/inputs/slider/slider.css.js +1 -1
- package/dist/inputs/slider/slider.css.js.map +1 -1
- package/dist/inputs/slider/slider.d.ts +7 -10
- package/dist/inputs/slider/slider.d.ts.map +1 -1
- package/dist/inputs/switch/switch.d.ts +4 -3
- package/dist/inputs/switch/switch.d.ts.map +1 -1
- package/dist/inputs/textarea/textarea.d.ts +4 -10
- package/dist/inputs/textarea/textarea.d.ts.map +1 -1
- package/dist/inputs/time-picker/time-picker.d.ts +4 -4
- package/dist/inputs/time-picker/time-picker.d.ts.map +1 -1
- package/dist/layout/box/box.d.ts.map +1 -1
- package/dist/layout/navbar/navbar.css.cjs +1 -1
- package/dist/layout/navbar/navbar.css.cjs.map +1 -1
- package/dist/layout/navbar/navbar.css.js +1 -1
- package/dist/layout/navbar/navbar.css.js.map +1 -1
- package/dist/layout/navbar/navbar.d.ts +10 -0
- package/dist/layout/navbar/navbar.d.ts.map +1 -1
- package/dist/layout/sidebar/sidebar-item.css.cjs +1 -1
- package/dist/layout/sidebar/sidebar-item.css.cjs.map +1 -1
- package/dist/layout/sidebar/sidebar-item.css.js +1 -1
- package/dist/layout/sidebar/sidebar-item.css.js.map +1 -1
- package/dist/layout/sidebar/sidebar.css.cjs +1 -1
- package/dist/layout/sidebar/sidebar.css.cjs.map +1 -1
- package/dist/layout/sidebar/sidebar.css.js +1 -1
- package/dist/layout/sidebar/sidebar.css.js.map +1 -1
- package/dist/layout/sidebar/sidebar.d.ts.map +1 -1
- package/dist/list-item.cjs +2 -2
- package/dist/list-item.cjs.map +1 -1
- package/dist/list-item.js +4 -4
- package/dist/list-item.js.map +1 -1
- package/dist/list.cjs +3 -1
- package/dist/list.cjs.map +1 -1
- package/dist/list.js +28 -25
- package/dist/list.js.map +1 -1
- package/dist/marquee.cjs +32 -0
- package/dist/marquee.cjs.map +1 -0
- package/dist/marquee.js +93 -0
- package/dist/marquee.js.map +1 -0
- package/dist/menu.cjs +7 -7
- package/dist/menu.cjs.map +1 -1
- package/dist/menu.js +135 -103
- package/dist/menu.js.map +1 -1
- package/dist/message-composer.cjs +33 -31
- package/dist/message-composer.cjs.map +1 -1
- package/dist/message-composer.js +123 -123
- package/dist/message-composer.js.map +1 -1
- package/dist/navbar.cjs +17 -15
- package/dist/navbar.cjs.map +1 -1
- package/dist/navbar.js +108 -89
- package/dist/navbar.js.map +1 -1
- package/dist/number-input.cjs +19 -19
- package/dist/number-input.cjs.map +1 -1
- package/dist/number-input.js +94 -97
- package/dist/number-input.js.map +1 -1
- package/dist/otp-input.cjs +15 -13
- package/dist/otp-input.cjs.map +1 -1
- package/dist/otp-input.js +83 -82
- package/dist/otp-input.js.map +1 -1
- package/dist/overlay/command-palette/command-palette.d.ts +2 -2
- package/dist/overlay/command-palette/command-palette.d.ts.map +1 -1
- package/dist/overlay/command-palette/command-palette.types.d.ts +4 -5
- package/dist/overlay/command-palette/command-palette.types.d.ts.map +1 -1
- package/dist/overlay/dialog/dialog.d.ts +7 -6
- package/dist/overlay/dialog/dialog.d.ts.map +1 -1
- package/dist/overlay/drawer/drawer.d.ts +7 -10
- package/dist/overlay/drawer/drawer.d.ts.map +1 -1
- package/dist/overlay/index.d.ts +1 -1
- package/dist/overlay/index.d.ts.map +1 -1
- package/dist/overlay/menu/menu.d.ts +9 -7
- package/dist/overlay/menu/menu.d.ts.map +1 -1
- package/dist/overlay/popover/popover.d.ts +6 -11
- package/dist/overlay/popover/popover.d.ts.map +1 -1
- package/dist/overlay/shared/await-exit.cjs +1 -1
- package/dist/overlay/shared/await-exit.cjs.map +1 -1
- package/dist/overlay/shared/await-exit.js +1 -1
- package/dist/overlay/shared/await-exit.js.map +1 -1
- package/dist/overlay/shared/use-dialog.cjs +1 -1
- package/dist/overlay/shared/use-dialog.cjs.map +1 -1
- package/dist/overlay/shared/use-dialog.d.ts +13 -3
- package/dist/overlay/shared/use-dialog.d.ts.map +1 -1
- package/dist/overlay/shared/use-dialog.js +80 -72
- package/dist/overlay/shared/use-dialog.js.map +1 -1
- package/dist/overlay/shared/use-floating-trigger.cjs +1 -1
- package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -1
- package/dist/overlay/shared/use-floating-trigger.d.ts +3 -1
- package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -1
- package/dist/overlay/shared/use-floating-trigger.js +64 -70
- package/dist/overlay/shared/use-floating-trigger.js.map +1 -1
- package/dist/overlay/tooltip/tooltip.d.ts +9 -0
- package/dist/overlay/tooltip/tooltip.d.ts.map +1 -1
- package/dist/pagination.cjs +69 -55
- package/dist/pagination.cjs.map +1 -1
- package/dist/pagination.js +70 -56
- package/dist/pagination.js.map +1 -1
- package/dist/password-strength.cjs +6 -4
- package/dist/password-strength.cjs.map +1 -1
- package/dist/password-strength.js +6 -4
- package/dist/password-strength.js.map +1 -1
- package/dist/popover.cjs +4 -4
- package/dist/popover.cjs.map +1 -1
- package/dist/popover.js +28 -17
- package/dist/popover.js.map +1 -1
- package/dist/progress.cjs +25 -17
- package/dist/progress.cjs.map +1 -1
- package/dist/progress.js +26 -18
- package/dist/progress.js.map +1 -1
- package/dist/radio-group.cjs +14 -12
- package/dist/radio-group.cjs.map +1 -1
- package/dist/radio-group.js +88 -89
- package/dist/radio-group.js.map +1 -1
- package/dist/radio.cjs +4 -4
- package/dist/radio.cjs.map +1 -1
- package/dist/radio.js +90 -90
- package/dist/radio.js.map +1 -1
- package/dist/rating.cjs +18 -16
- package/dist/rating.cjs.map +1 -1
- package/dist/rating.js +69 -69
- package/dist/rating.js.map +1 -1
- package/dist/refine.cjs +1669 -1324
- package/dist/refine.cjs.map +1 -1
- package/dist/refine.iife.js +1656 -1311
- package/dist/refine.iife.js.map +1 -1
- package/dist/refine.js +1759 -1414
- package/dist/refine.js.map +1 -1
- package/dist/register.d.ts +21 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/select.cjs +59 -51
- package/dist/select.cjs.map +1 -1
- package/dist/select.js +189 -182
- package/dist/select.js.map +1 -1
- package/dist/separator.cjs +9 -9
- package/dist/separator.cjs.map +1 -1
- package/dist/separator.js +9 -9
- package/dist/separator.js.map +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/prop-bundles.cjs +1 -1
- package/dist/shared/prop-bundles.cjs.map +1 -1
- package/dist/shared/prop-bundles.js +4 -2
- package/dist/shared/prop-bundles.js.map +1 -1
- package/dist/shared/size-presets.cjs +1 -1
- package/dist/shared/size-presets.cjs.map +1 -1
- package/dist/shared/size-presets.d.ts +3 -0
- package/dist/shared/size-presets.d.ts.map +1 -1
- package/dist/shared/size-presets.js +4 -1
- package/dist/shared/size-presets.js.map +1 -1
- package/dist/sidebar.cjs +8 -8
- package/dist/sidebar.cjs.map +1 -1
- package/dist/sidebar.js +25 -25
- package/dist/sidebar.js.map +1 -1
- package/dist/skeleton.cjs +4 -6
- package/dist/skeleton.cjs.map +1 -1
- package/dist/skeleton.js +21 -22
- package/dist/skeleton.js.map +1 -1
- package/dist/slider.cjs +14 -14
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +160 -168
- package/dist/slider.js.map +1 -1
- package/dist/step.cjs +47 -0
- package/dist/step.cjs.map +1 -0
- package/dist/step.js +127 -0
- package/dist/step.js.map +1 -0
- package/dist/stepper.cjs +8 -0
- package/dist/stepper.cjs.map +1 -0
- package/dist/stepper.js +101 -0
- package/dist/stepper.js.map +1 -0
- package/dist/styles/index.d.ts +0 -28
- package/dist/styles/index.d.ts.map +1 -1
- package/dist/styles/mixins/shape.css.cjs +2 -2
- package/dist/styles/mixins/shape.css.cjs.map +1 -1
- package/dist/styles/mixins/shape.css.js +6 -6
- package/dist/styles/mixins/shape.css.js.map +1 -1
- package/dist/styles/tokens.css +4 -0
- package/dist/switch.cjs +4 -4
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +44 -44
- package/dist/switch.js.map +1 -1
- package/dist/tab-item.cjs +3 -3
- package/dist/tab-item.cjs.map +1 -1
- package/dist/tab-item.js +24 -24
- package/dist/tab-item.js.map +1 -1
- package/dist/tab-panel.cjs +7 -5
- package/dist/tab-panel.cjs.map +1 -1
- package/dist/tab-panel.js +14 -12
- package/dist/tab-panel.js.map +1 -1
- package/dist/table.cjs +3 -1
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +3 -1
- package/dist/table.js.map +1 -1
- package/dist/tabs.cjs +6 -6
- package/dist/tabs.cjs.map +1 -1
- package/dist/tabs.js +30 -29
- package/dist/tabs.js.map +1 -1
- package/dist/text.cjs +3 -1
- package/dist/text.cjs.map +1 -1
- package/dist/text.js +3 -1
- package/dist/text.js.map +1 -1
- package/dist/textarea.cjs +22 -22
- package/dist/textarea.cjs.map +1 -1
- package/dist/textarea.js +110 -112
- package/dist/textarea.js.map +1 -1
- package/dist/time-picker.cjs +69 -61
- package/dist/time-picker.cjs.map +1 -1
- package/dist/time-picker.js +146 -132
- package/dist/time-picker.js.map +1 -1
- package/dist/toast.cjs +22 -22
- package/dist/toast.cjs.map +1 -1
- package/dist/toast.js +280 -173
- package/dist/toast.js.map +1 -1
- package/dist/tooltip.cjs +5 -5
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.js +61 -51
- package/dist/tooltip.js.map +1 -1
- package/dist/typing-indicator.cjs +1 -1
- package/dist/typing-indicator.cjs.map +1 -1
- package/dist/typing-indicator.js +5 -5
- package/dist/typing-indicator.js.map +1 -1
- package/dist/utils/link.cjs.map +1 -1
- package/dist/utils/link.d.ts +2 -2
- package/package.json +35 -117
- package/dist/form.cjs +0 -11
- package/dist/form.cjs.map +0 -1
- package/dist/form.js +0 -59
- package/dist/form.js.map +0 -1
- package/dist/headless/_internal.d.ts.map +0 -1
- package/dist/headless/announcer.cjs.map +0 -1
- package/dist/headless/announcer.d.ts.map +0 -1
- package/dist/headless/announcer.js.map +0 -1
- package/dist/headless/aria-reflection.cjs.map +0 -1
- package/dist/headless/aria-reflection.d.ts.map +0 -1
- package/dist/headless/aria-reflection.js.map +0 -1
- package/dist/headless/auto-resize.cjs.map +0 -1
- package/dist/headless/auto-resize.d.ts.map +0 -1
- package/dist/headless/auto-resize.js.map +0 -1
- package/dist/headless/checkable.cjs.map +0 -1
- package/dist/headless/checkable.d.ts.map +0 -1
- package/dist/headless/checkable.js.map +0 -1
- package/dist/headless/choice-field.cjs +0 -2
- package/dist/headless/choice-field.cjs.map +0 -1
- package/dist/headless/choice-field.d.ts.map +0 -1
- package/dist/headless/choice-field.js.map +0 -1
- package/dist/headless/composer.cjs.map +0 -1
- package/dist/headless/composer.d.ts.map +0 -1
- package/dist/headless/composer.js.map +0 -1
- package/dist/headless/datagrid.cjs +0 -2
- package/dist/headless/datagrid.cjs.map +0 -1
- package/dist/headless/datagrid.d.ts +0 -158
- package/dist/headless/datagrid.d.ts.map +0 -1
- package/dist/headless/datagrid.js +0 -55
- package/dist/headless/datagrid.js.map +0 -1
- package/dist/headless/date-picker.cjs.map +0 -1
- package/dist/headless/date-picker.d.ts.map +0 -1
- package/dist/headless/date-picker.js.map +0 -1
- package/dist/headless/direction.cjs.map +0 -1
- package/dist/headless/direction.d.ts.map +0 -1
- package/dist/headless/direction.js.map +0 -1
- package/dist/headless/field-base.cjs +0 -2
- package/dist/headless/field-base.cjs.map +0 -1
- package/dist/headless/field-base.d.ts.map +0 -1
- package/dist/headless/field-base.js +0 -72
- package/dist/headless/field-base.js.map +0 -1
- package/dist/headless/focus.cjs.map +0 -1
- package/dist/headless/focus.d.ts.map +0 -1
- package/dist/headless/focus.js.map +0 -1
- package/dist/headless/index.d.ts.map +0 -1
- package/dist/headless/keyboard.cjs.map +0 -1
- package/dist/headless/keyboard.d.ts.map +0 -1
- package/dist/headless/keyboard.js.map +0 -1
- package/dist/headless/light-dom.cjs.map +0 -1
- package/dist/headless/light-dom.d.ts.map +0 -1
- package/dist/headless/light-dom.js.map +0 -1
- package/dist/headless/nav.cjs.map +0 -1
- package/dist/headless/nav.d.ts.map +0 -1
- package/dist/headless/nav.js.map +0 -1
- package/dist/headless/numbers.cjs.map +0 -1
- package/dist/headless/numbers.d.ts.map +0 -1
- package/dist/headless/numbers.js.map +0 -1
- package/dist/headless/option-list.cjs +0 -2
- package/dist/headless/option-list.cjs.map +0 -1
- package/dist/headless/option-list.d.ts +0 -107
- package/dist/headless/option-list.d.ts.map +0 -1
- package/dist/headless/option-list.js +0 -66
- package/dist/headless/option-list.js.map +0 -1
- package/dist/headless/ore.cjs.map +0 -1
- package/dist/headless/ore.d.ts.map +0 -1
- package/dist/headless/ore.js.map +0 -1
- package/dist/headless/overlay.cjs +0 -2
- package/dist/headless/overlay.cjs.map +0 -1
- package/dist/headless/overlay.d.ts +0 -64
- package/dist/headless/overlay.d.ts.map +0 -1
- package/dist/headless/overlay.js +0 -32
- package/dist/headless/overlay.js.map +0 -1
- package/dist/headless/paginated-list.cjs +0 -2
- package/dist/headless/paginated-list.cjs.map +0 -1
- package/dist/headless/paginated-list.d.ts.map +0 -1
- package/dist/headless/paginated-list.js +0 -34
- package/dist/headless/paginated-list.js.map +0 -1
- package/dist/headless/parse.cjs.map +0 -1
- package/dist/headless/parse.d.ts.map +0 -1
- package/dist/headless/parse.js.map +0 -1
- package/dist/headless/positioner.cjs +0 -2
- package/dist/headless/positioner.cjs.map +0 -1
- package/dist/headless/positioner.d.ts.map +0 -1
- package/dist/headless/positioner.js.map +0 -1
- package/dist/headless/ref-callback.cjs +0 -2
- package/dist/headless/ref-callback.cjs.map +0 -1
- package/dist/headless/ref-callback.d.ts.map +0 -1
- package/dist/headless/ref-callback.js.map +0 -1
- package/dist/headless/selection-control.cjs +0 -2
- package/dist/headless/selection-control.cjs.map +0 -1
- package/dist/headless/selection-control.d.ts +0 -30
- package/dist/headless/selection-control.d.ts.map +0 -1
- package/dist/headless/selection-control.js +0 -44
- package/dist/headless/selection-control.js.map +0 -1
- package/dist/headless/signals.cjs +0 -2
- package/dist/headless/signals.cjs.map +0 -1
- package/dist/headless/signals.d.ts.map +0 -1
- package/dist/headless/signals.js.map +0 -1
- package/dist/headless/slider.cjs +0 -2
- package/dist/headless/slider.d.ts.map +0 -1
- package/dist/headless/slider.js.map +0 -1
- package/dist/headless/sort-control.cjs +0 -2
- package/dist/headless/sort-control.cjs.map +0 -1
- package/dist/headless/sort-control.d.ts +0 -22
- package/dist/headless/sort-control.d.ts.map +0 -1
- package/dist/headless/sort-control.js +0 -36
- package/dist/headless/sort-control.js.map +0 -1
- package/dist/headless/spinner.cjs +0 -2
- package/dist/headless/spinner.d.ts.map +0 -1
- package/dist/headless/spinner.js.map +0 -1
- package/dist/headless/swipe.cjs.map +0 -1
- package/dist/headless/swipe.d.ts.map +0 -1
- package/dist/headless/swipe.js.map +0 -1
- package/dist/headless/text-field.cjs.map +0 -1
- package/dist/headless/text-field.d.ts.map +0 -1
- package/dist/headless/text-field.js.map +0 -1
- package/dist/headless/typeahead.cjs.map +0 -1
- package/dist/headless/typeahead.d.ts.map +0 -1
- package/dist/headless/typeahead.js.map +0 -1
- package/dist/headless.cjs +0 -1
- package/dist/headless.js +0 -30
- package/dist/inputs/datagrid/datagrid-controls.cjs +0 -2
- package/dist/inputs/datagrid/datagrid-controls.cjs.map +0 -1
- package/dist/inputs/datagrid/datagrid-controls.d.ts +0 -98
- package/dist/inputs/datagrid/datagrid-controls.d.ts.map +0 -1
- package/dist/inputs/datagrid/datagrid-controls.js +0 -147
- package/dist/inputs/datagrid/datagrid-controls.js.map +0 -1
- package/dist/inputs/form/form.css.cjs +0 -2
- package/dist/inputs/form/form.css.cjs.map +0 -1
- package/dist/inputs/form/form.css.js +0 -6
- package/dist/inputs/form/form.css.js.map +0 -1
- package/dist/inputs/form/form.d.ts +0 -59
- package/dist/inputs/form/form.d.ts.map +0 -1
- package/dist/inputs/shared/form-context.cjs +0 -2
- package/dist/inputs/shared/form-context.cjs.map +0 -1
- package/dist/inputs/shared/form-context.d.ts +0 -55
- package/dist/inputs/shared/form-context.d.ts.map +0 -1
- package/dist/inputs/shared/form-context.js +0 -15
- package/dist/inputs/shared/form-context.js.map +0 -1
- package/dist/styles/index.cjs +0 -2
- package/dist/styles/index.cjs.map +0 -1
- package/dist/styles/index.js +0 -25
- package/dist/styles/index.js.map +0 -1
- package/dist/styles/styles.css +0 -5
- package/dist/testing/index.d.ts +0 -188
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing.cjs +0 -2
- package/dist/testing.cjs.map +0 -1
- package/dist/testing.js +0 -26
- package/dist/testing.js.map +0 -1
- /package/dist/{headless → core}/announcer.cjs +0 -0
- /package/dist/{headless → core}/announcer.d.ts +0 -0
- /package/dist/{headless → core}/aria-reflection.cjs +0 -0
- /package/dist/{headless → core}/aria-reflection.d.ts +0 -0
- /package/dist/{headless → core}/auto-resize.cjs +0 -0
- /package/dist/{headless → core}/auto-resize.d.ts +0 -0
- /package/dist/{headless → core}/checkable.cjs +0 -0
- /package/dist/{headless → core}/checkable.d.ts +0 -0
- /package/dist/{headless → core}/choice-field.d.ts +0 -0
- /package/dist/{headless → core}/composer.cjs +0 -0
- /package/dist/{headless → core}/composer.d.ts +0 -0
- /package/dist/{headless → core}/date-picker.d.ts +0 -0
- /package/dist/{headless → core}/direction.cjs +0 -0
- /package/dist/{headless → core}/direction.d.ts +0 -0
- /package/dist/{headless → core}/focus.cjs +0 -0
- /package/dist/{headless → core}/focus.d.ts +0 -0
- /package/dist/{headless → core}/keyboard.d.ts +0 -0
- /package/dist/{headless → core}/light-dom.cjs +0 -0
- /package/dist/{headless → core}/light-dom.d.ts +0 -0
- /package/dist/{headless → core}/nav.cjs +0 -0
- /package/dist/{headless → core}/nav.d.ts +0 -0
- /package/dist/{headless → core}/numbers.cjs +0 -0
- /package/dist/{headless → core}/numbers.d.ts +0 -0
- /package/dist/{headless → core}/ore.cjs +0 -0
- /package/dist/{headless → core}/paginated-list.d.ts +0 -0
- /package/dist/{headless → core}/parse.cjs +0 -0
- /package/dist/{headless → core}/parse.d.ts +0 -0
- /package/dist/{headless → core}/positioner.d.ts +0 -0
- /package/dist/{headless → core}/ref-callback.d.ts +0 -0
- /package/dist/{headless → core}/signals.d.ts +0 -0
- /package/dist/{headless → core}/slider.d.ts +0 -0
- /package/dist/{headless → core}/spinner.d.ts +0 -0
- /package/dist/{headless → core}/swipe.cjs +0 -0
- /package/dist/{headless → core}/swipe.d.ts +0 -0
- /package/dist/{headless → core}/text-field.cjs +0 -0
- /package/dist/{headless → core}/text-field.d.ts +0 -0
- /package/dist/{headless → core}/typeahead.cjs +0 -0
- /package/dist/{headless → core}/typeahead.d.ts +0 -0
|
@@ -11,10 +11,12 @@ export type { OreComboboxEvents, OreComboboxProps } from './combobox.types';
|
|
|
11
11
|
* @attr {boolean} creatable - Allow users to create custom options from search query
|
|
12
12
|
* @attr {boolean} no-filter - Disable client-side filtering (useful for server-side search)
|
|
13
13
|
* @attr {string} placeholder - Placeholder text
|
|
14
|
-
* @attr {boolean} required - Require a non-blank selection for
|
|
14
|
+
* @attr {boolean} required - Require a non-blank selection for native form validation
|
|
15
15
|
* @attr {boolean} success - Show an inline success check icon (suppressed while `error` is set)
|
|
16
16
|
*
|
|
17
|
-
* @fires
|
|
17
|
+
* @fires input - Emitted when the selection changes.
|
|
18
|
+
* @fires change - Emitted when the selection changes.
|
|
19
|
+
* @fires open-change - Emitted when the dropdown state changes. detail: { open, reason }
|
|
18
20
|
* @fires {CustomEvent} search - Emitted when user types. detail: { query: string }
|
|
19
21
|
*
|
|
20
22
|
* @slot - Slotted combobox options and option groups
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/inputs/combobox/combobox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/inputs/combobox/combobox.ts"],"names":[],"mappings":"AAkBA,OAAO,0BAA0B,CAAC;AAClC,OAAO,gBAAgB,CAAC;AAGxB,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,YAAY,EAAG,cAAuB,CAAC"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { OverlayOpenChangeDetail } from '../../core';
|
|
2
2
|
import type { SelectableFieldProps } from '../../shared';
|
|
3
3
|
import type { VisualVariant } from '../../types';
|
|
4
4
|
export type OreComboboxEvents = {
|
|
5
|
-
change:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
};
|
|
9
|
-
open: OverlayOpenDetail;
|
|
5
|
+
change: Event;
|
|
6
|
+
input: Event;
|
|
7
|
+
'open-change': OverlayOpenChangeDetail;
|
|
10
8
|
search: {
|
|
11
9
|
query: string;
|
|
12
10
|
};
|
|
@@ -34,7 +32,7 @@ export type OreComboboxProps = Omit<SelectableFieldProps<Exclude<VisualVariant,
|
|
|
34
32
|
multiple?: boolean;
|
|
35
33
|
'no-filter'?: boolean;
|
|
36
34
|
options?: ComboboxOptionInput[];
|
|
37
|
-
/** Require a non-blank selection for
|
|
35
|
+
/** Require a non-blank selection for native form validation */
|
|
38
36
|
required?: boolean;
|
|
39
37
|
value?: string | string[];
|
|
40
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.types.d.ts","sourceRoot":"","sources":["../../../src/inputs/combobox/combobox.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"combobox.types.d.ts","sourceRoot":"","sources":["../../../src/inputs/combobox/combobox.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,KAAK,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,uBAAuB,CAAC;IACvC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,oBAAoB,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAC9D,iBAAiB,GAAG,OAAO,CAC5B,GAAG;IACF,yFAAyF;IACzF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACxC,yCAAyC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
require("../../_dev.cjs"),customElements.get(`ore-column`)||customElements.define(`ore-column`,class extends HTMLElement{connectedCallback(){this.getAttribute(`key`),this.getAttribute(`label`)}});var e=`ore-column`,t=[`key`,`label`,`sortable`,`resizable`,`align`,`width`,`header-label`];function n(e){return Array.from(e.querySelectorAll(`:scope > ore-column`)).map(e=>({align:e.getAttribute(`align`)??void 0,headerLabel:e.getAttribute(`header-label`)??void 0,key:e.getAttribute(`key`)??``,label:e.getAttribute(`label`)??``,resizable:e.hasAttribute(`resizable`),sortable:e.hasAttribute(`sortable`),width:e.getAttribute(`width`)??void 0}))}exports.COLUMN_OBSERVED_ATTRS=t,exports.COLUMN_TAG=e,exports.parseColumnChildren=n;
|
|
2
2
|
//# sourceMappingURL=datagrid-column.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagrid-column.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"sourcesContent":["import type { DataGridColumn } from '
|
|
1
|
+
{"version":3,"file":"datagrid-column.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"sourcesContent":["import type { DataGridColumn } from './datagrid-model';\n\nimport { warn } from '../../_dev';\n\n// ── Declarative ore-column element ────────────────────────────────────────────\n\n/**\n * Declarative column definition for `<ore-datagrid>`.\n * Use as a child element instead of setting the `columns` prop imperatively.\n *\n * @element ore-column\n *\n * @attr {string} key - Row property key (required)\n * @attr {string} label - Header display label (required)\n * @attr {boolean} sortable - Makes the column sortable\n * @attr {boolean} resizable - Adds a drag handle to resize the column\n * @attr {string} align - Text alignment: 'left' | 'center' | 'right'\n * @attr {string} width - CSS column width (e.g. '12rem')\n * @attr {string} header-label - Accessible label override for the column header\n *\n * @example\n * ```html\n * <ore-datagrid>\n * <ore-column key=\"name\" label=\"Name\" sortable></ore-column>\n * <ore-column key=\"email\" label=\"Email\" width=\"20rem\"></ore-column>\n * </ore-datagrid>\n * ```\n */\nif (!customElements.get('ore-column'))\n customElements.define(\n 'ore-column',\n class extends HTMLElement {\n connectedCallback(): void {\n if (!this.getAttribute('key')) {\n warn('ore-column: missing required `key` attribute');\n }\n\n if (!this.getAttribute('label')) {\n warn('ore-column: missing required `label` attribute');\n }\n }\n },\n );\n\nexport const COLUMN_TAG = 'ore-column' as const;\n\n/** Attributes observed by the column MutationObserver in ore-datagrid. */\nexport const COLUMN_OBSERVED_ATTRS = [\n 'key',\n 'label',\n 'sortable',\n 'resizable',\n 'align',\n 'width',\n 'header-label',\n] as const;\n\n/** Parse all `<ore-column>` direct children of `host` into DataGridColumn descriptors. */\nexport function parseColumnChildren(host: HTMLElement): DataGridColumn[] {\n return Array.from(host.querySelectorAll(':scope > ore-column')).map((el) => ({\n align: (el.getAttribute('align') as 'left' | 'center' | 'right' | null) ?? undefined,\n headerLabel: el.getAttribute('header-label') ?? undefined,\n key: el.getAttribute('key') ?? '',\n label: el.getAttribute('label') ?? '',\n resizable: el.hasAttribute('resizable'),\n sortable: el.hasAttribute('sortable'),\n width: el.getAttribute('width') ?? undefined,\n }));\n}\n"],"mappings":"0BA4BK,eAAe,IAAI,YAAY,GAClC,eAAe,OACb,aACA,cAAc,WAAY,CACxB,mBAA0B,CACnB,KAAK,aAAa,KAAK,EAIvB,KAAK,aAAa,OAAO,CAGhC,CACF,CACF,EAEF,IAAa,EAAa,aAGb,EAAwB,CACnC,MACA,QACA,WACA,YACA,QACA,QACA,cACF,EAGA,SAAgB,EAAoB,EAAqC,CACvE,OAAO,MAAM,KAAK,EAAK,iBAAiB,qBAAqB,CAAC,CAAC,CAAC,IAAK,IAAQ,CAC3E,MAAQ,EAAG,aAAa,OAAO,GAA4C,IAAA,GAC3E,YAAa,EAAG,aAAa,cAAc,GAAK,IAAA,GAChD,IAAK,EAAG,aAAa,KAAK,GAAK,GAC/B,MAAO,EAAG,aAAa,OAAO,GAAK,GACnC,UAAW,EAAG,aAAa,WAAW,EACtC,SAAU,EAAG,aAAa,UAAU,EACpC,MAAO,EAAG,aAAa,OAAO,GAAK,IAAA,EACrC,EAAE,CACJ"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DataGridColumn } from '
|
|
1
|
+
import type { DataGridColumn } from './datagrid-model';
|
|
2
2
|
export declare const COLUMN_TAG: "ore-column";
|
|
3
3
|
/** Attributes observed by the column MutationObserver in ore-datagrid. */
|
|
4
4
|
export declare const COLUMN_OBSERVED_ATTRS: readonly ["key", "label", "sortable", "resizable", "align", "width", "header-label"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagrid-column.d.ts","sourceRoot":"","sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"datagrid-column.d.ts","sourceRoot":"","sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA4CvD,eAAO,MAAM,UAAU,EAAG,YAAqB,CAAC;AAEhD,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,sFAQxB,CAAC;AAEX,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,cAAc,EAAE,CAUvE"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "../../_dev.js";
|
|
2
2
|
//#region src/inputs/datagrid/datagrid-column.ts
|
|
3
3
|
customElements.get("ore-column") || customElements.define("ore-column", class extends HTMLElement {
|
|
4
4
|
connectedCallback() {
|
|
5
|
-
this.getAttribute("key")
|
|
5
|
+
this.getAttribute("key"), this.getAttribute("label");
|
|
6
6
|
}
|
|
7
7
|
});
|
|
8
|
-
var
|
|
8
|
+
var e = "ore-column", t = [
|
|
9
9
|
"key",
|
|
10
10
|
"label",
|
|
11
11
|
"sortable",
|
|
@@ -14,7 +14,7 @@ var t = "ore-column", n = [
|
|
|
14
14
|
"width",
|
|
15
15
|
"header-label"
|
|
16
16
|
];
|
|
17
|
-
function
|
|
17
|
+
function n(e) {
|
|
18
18
|
return Array.from(e.querySelectorAll(":scope > ore-column")).map((e) => ({
|
|
19
19
|
align: e.getAttribute("align") ?? void 0,
|
|
20
20
|
headerLabel: e.getAttribute("header-label") ?? void 0,
|
|
@@ -26,6 +26,6 @@ function r(e) {
|
|
|
26
26
|
}));
|
|
27
27
|
}
|
|
28
28
|
//#endregion
|
|
29
|
-
export {
|
|
29
|
+
export { t as COLUMN_OBSERVED_ATTRS, e as COLUMN_TAG, n as parseColumnChildren };
|
|
30
30
|
|
|
31
31
|
//# sourceMappingURL=datagrid-column.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagrid-column.js","names":[],"sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"sourcesContent":["import type { DataGridColumn } from '
|
|
1
|
+
{"version":3,"file":"datagrid-column.js","names":[],"sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"sourcesContent":["import type { DataGridColumn } from './datagrid-model';\n\nimport { warn } from '../../_dev';\n\n// ── Declarative ore-column element ────────────────────────────────────────────\n\n/**\n * Declarative column definition for `<ore-datagrid>`.\n * Use as a child element instead of setting the `columns` prop imperatively.\n *\n * @element ore-column\n *\n * @attr {string} key - Row property key (required)\n * @attr {string} label - Header display label (required)\n * @attr {boolean} sortable - Makes the column sortable\n * @attr {boolean} resizable - Adds a drag handle to resize the column\n * @attr {string} align - Text alignment: 'left' | 'center' | 'right'\n * @attr {string} width - CSS column width (e.g. '12rem')\n * @attr {string} header-label - Accessible label override for the column header\n *\n * @example\n * ```html\n * <ore-datagrid>\n * <ore-column key=\"name\" label=\"Name\" sortable></ore-column>\n * <ore-column key=\"email\" label=\"Email\" width=\"20rem\"></ore-column>\n * </ore-datagrid>\n * ```\n */\nif (!customElements.get('ore-column'))\n customElements.define(\n 'ore-column',\n class extends HTMLElement {\n connectedCallback(): void {\n if (!this.getAttribute('key')) {\n warn('ore-column: missing required `key` attribute');\n }\n\n if (!this.getAttribute('label')) {\n warn('ore-column: missing required `label` attribute');\n }\n }\n },\n );\n\nexport const COLUMN_TAG = 'ore-column' as const;\n\n/** Attributes observed by the column MutationObserver in ore-datagrid. */\nexport const COLUMN_OBSERVED_ATTRS = [\n 'key',\n 'label',\n 'sortable',\n 'resizable',\n 'align',\n 'width',\n 'header-label',\n] as const;\n\n/** Parse all `<ore-column>` direct children of `host` into DataGridColumn descriptors. */\nexport function parseColumnChildren(host: HTMLElement): DataGridColumn[] {\n return Array.from(host.querySelectorAll(':scope > ore-column')).map((el) => ({\n align: (el.getAttribute('align') as 'left' | 'center' | 'right' | null) ?? undefined,\n headerLabel: el.getAttribute('header-label') ?? undefined,\n key: el.getAttribute('key') ?? '',\n label: el.getAttribute('label') ?? '',\n resizable: el.hasAttribute('resizable'),\n sortable: el.hasAttribute('sortable'),\n width: el.getAttribute('width') ?? undefined,\n }));\n}\n"],"mappings":";;AA4BK,eAAe,IAAI,YAAY,KAClC,eAAe,OACb,cACA,cAAc,YAAY;CACxB,oBAA0B;EAKxB,AAJK,KAAK,aAAa,KAAK,GAIvB,KAAK,aAAa,OAAO;CAGhC;AACF,CACF;AAEF,IAAa,IAAa,cAGb,IAAwB;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,SAAgB,EAAoB,GAAqC;CACvE,OAAO,MAAM,KAAK,EAAK,iBAAiB,qBAAqB,CAAC,CAAC,CAAC,KAAK,OAAQ;EAC3E,OAAQ,EAAG,aAAa,OAAO,KAA4C,KAAA;EAC3E,aAAa,EAAG,aAAa,cAAc,KAAK,KAAA;EAChD,KAAK,EAAG,aAAa,KAAK,KAAK;EAC/B,OAAO,EAAG,aAAa,OAAO,KAAK;EACnC,WAAW,EAAG,aAAa,WAAW;EACtC,UAAU,EAAG,aAAa,UAAU;EACpC,OAAO,EAAG,aAAa,OAAO,KAAK,KAAA;CACrC,EAAE;AACJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require("@vielzeug/ripple"),t=require("@vielzeug/ripple/watch");var n=[{label:`Contains`,value:`contains`},{label:`Equals`,value:`equals`},{label:`Greater than`,value:`gt`},{label:`Less than`,value:`lt`}],r=r=>{let i=(0,e.signal)(``),a=(0,e.signal)(!1),o=(0,e.signal)(new Set),s=(0,e.signal)(new Set),c=(0,e.signal)(new Map),l=(0,e.signal)(``),u=(0,e.signal)(`none`),d=(0,e.signal)(new Set),f=(0,e.signal)(0),p=(0,e.computed)(()=>new Set(r.columns.value.map(e=>e.key))),m=(0,e.computed)(()=>r.columns.value.filter(e=>!o.value.has(e.key))),h=(0,e.computed)(()=>{let e=new Set((r.filterOptions.value??[]).map(e=>e.key)),t=[...s.value].filter(t=>!e.has(t));if(!t.length)return new Map;let n=new Map;for(let e of t){let t=new Set,i=[];for(let n of r.items.value){let r=n[e],a=r==null?``:String(r);t.has(a)||(t.add(a),i.push({label:a||`(empty)`,value:a}))}n.set(e,i)}return n}),g=(0,e.computed)(()=>{let e=r.filterOptions.value??[],t=new Set(e.map(e=>e.key)),i=[...s.value].filter(e=>!t.has(e)).map(e=>({key:e,label:r.columns.value.find(t=>t.key===e)?.label??e,operators:n,options:h.value.get(e)??[]}));return[...e.map(e=>({...e,operators:e.operators??n})),...i]}),_=(0,e.computed)(()=>{let e=r.items.value;if(!r.clientSide.value)return e;let t=i.value.trim().toLowerCase();return t?e.filter(e=>Object.values(e).some(e=>e!=null&&String(e).toLowerCase().includes(t))):e}),v=(0,e.computed)(()=>{let e=_.value;return!r.clientSide.value||!c.value.size?e:e.filter(e=>{for(let[t,n]of c.value){if(!n.values.size||!p.value.has(t))continue;let r=e[t],i=r==null?``:String(r);if(n.operator===`equals`&&!n.values.has(i)||n.operator===`contains`&&![...n.values].some(e=>i.toLowerCase().includes(e.toLowerCase())))return!1;if(n.operator===`gt`||n.operator===`lt`){let e=parseFloat(i),t=[...n.values].map(parseFloat).filter(e=>!Number.isNaN(e));if(!t.length)continue;if(n.operator===`gt`&&!t.some(t=>e>t)||n.operator===`lt`&&!t.some(t=>e<t))return!1}}return!0})}),y=(0,e.computed)(()=>({direction:u.value,key:l.value})),b=(0,e.computed)(()=>{let e=v.value;if(!r.clientSide.value||r.sortMode.value===`server`)return e;let{direction:t,key:n}=y.value;if(!n||t===`none`)return e;let i=r.columns.value.find(e=>e.key===n);return e.slice().sort((e,r)=>{let a=i?.sortValue?i.sortValue(e):e[n],o=i?.sortValue?i.sortValue(r):r[n],s=typeof a==`number`&&typeof o==`number`?a-o:String(a??``).localeCompare(String(o??``));return t===`asc`?s:-s})}),x=(0,e.computed)(()=>b.value.length),S=(0,e.computed)(()=>{let e=r.pageSize.value;return Math.ceil(x.value/(e<=0?2**53-1:e))}),C=(0,e.computed)(()=>S.value?Math.min(f.value,S.value-1):-1),w=(0,e.computed)(()=>{let e=r.pageSize.value;if(e<=0)return b.value;let t=C.value*e;return b.value.slice(t,t+e)}),T=(0,e.computed)(()=>S.value>0&&C.value<S.value-1),E=(0,e.computed)(()=>C.value>0),D=(0,e.computed)(()=>r.items.value.filter(e=>d.value.has(r.getRowKey(e))));(0,t.watch)(p,e=>{let t=new Set([...s.value].filter(t=>e.has(t))),n=new Map([...c.value].filter(([t])=>e.has(t)));t.size!==s.value.size&&(s.value=t),n.size!==c.value.size&&(c.value=n)},{immediate:!1}),(0,t.watch)(b,()=>{f.value=0});let O=e=>{d.value=e,r.onSelectionChange?.(e)},k=(e,t)=>{let n=new Map(c.value);t.length?n.set(e,{operator:n.get(e)?.operator??`contains`,values:new Set(t)}):n.delete(e),c.value=n},A=(e,t)=>{let n=c.value.get(e);n&&(c.value=new Map(c.value).set(e,{...n,operator:t}))},j=(e,t)=>{l.value=t===`none`?``:e,u.value=t,f.value=0,r.onSortChange?.(y.value)};return{activateFilterKey:e=>{s.value.has(e)||(s.value=new Set([...s.value,e]))},clearAllFilters:()=>{s.value=new Set,c.value=new Map},clearSelection:()=>O(new Set),currentPageItems:w,filterDefs:g,filteredRows:v,filterValues:c,goToPage:e=>{Number.isFinite(e)&&(f.value=Math.max(0,e))},hasNextPage:T,hasPrevPage:E,hiddenColumns:o,isAllSelected:()=>{let e=w.value;return e.length>0&&e.every(e=>d.value.has(r.getRowKey(e)))},nextPage:()=>{T.value&&(f.value=C.value+1)},pageCount:S,pageIndex:C,prevPage:()=>{E.value&&(f.value=C.value-1)},removeFilter:e=>{let t=new Set(s.value);t.delete(e),s.value=t;let n=new Map(c.value);n.delete(e),c.value=n},resetFilters:()=>{s.value=new Set,c.value=new Map},resetSearch:()=>{i.value=``,a.value=!1},searchActive:a,searchQuery:i,selectAll:()=>{if(r.selectionMode.value!==`multi`)return;let e=new Set(d.value);if(w.value.every(t=>e.has(r.getRowKey(t))))for(let t of w.value)e.delete(r.getRowKey(t));else for(let t of w.value)e.add(r.getRowKey(t));O(e)},selectedKeys:(0,e.computed)(()=>new Set(d.value)),selectedRows:D,setActiveFilterKeys:e=>{let t=new Set(e);s.value=t,c.value=new Map([...c.value].filter(([e])=>t.has(e)))},setFilter:k,setFilterOperator:A,setSearchQuery:e=>{i.value=e},setSelection:e=>O(new Set(e)),sortBy:e=>{let t=l.value===e?u.value===`asc`?`desc`:u.value===`desc`?`none`:`asc`:`asc`;j(t===`none`?``:e,t)},sortState:y,sortTo:j,toggleColumnVisibility:e=>{let t=new Set(o.value);t.has(e)?t.delete(e):t.add(e),o.value=t},toggleRow:e=>{if(r.selectionMode.value===`none`)return;let t=new Set(d.value);t.has(e)?t.delete(e):(r.selectionMode.value===`single`&&t.clear(),t.add(e)),O(t)},toggleSearch:()=>{a.value&&(i.value=``),a.value=!a.value},totalItems:x,visibleColumns:m}};exports.createDataGridModel=r;
|
|
2
|
+
//# sourceMappingURL=datagrid-model.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datagrid-model.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"sourcesContent":["import { computed, signal, type Readable } from '@vielzeug/ripple';\nimport { watch } from '@vielzeug/ripple/watch';\n\nexport type SortDirection = 'asc' | 'desc' | 'none';\n\nexport type SortState = {\n direction: SortDirection;\n key: string;\n};\n\nexport type DataGridColumn<T = Record<string, unknown>> = {\n align?: 'left' | 'center' | 'right';\n cell?: (item: T) => string;\n headerLabel?: string;\n key: string;\n label: string;\n renderExpanded?: (item: T) => string;\n resizable?: boolean;\n sortable?: boolean;\n sortValue?: (item: T) => number | string;\n width?: string;\n};\n\nexport type SelectionMode = 'multi' | 'none' | 'single';\n\nexport type FilterOption = {\n key: string;\n label: string;\n operators?: { label: string; value: string }[];\n options: { label?: string; value: string }[];\n};\n\nexport type FilterOperator = 'contains' | 'equals' | 'gt' | 'lt';\n\nexport type FilterRule = {\n operator: FilterOperator;\n values: Set<string>;\n};\n\nexport type DataGridView = {\n id: string;\n label: string;\n};\n\nexport type DataGridModelOptions<T = Record<string, unknown>> = {\n clientSide: Readable<boolean>;\n columns: Readable<DataGridColumn<T>[]>;\n filterOptions: Readable<FilterOption[] | undefined>;\n getRowKey: (item: T) => string;\n items: Readable<T[]>;\n onSelectionChange?: (keys: Set<string>) => void;\n onSortChange?: (sort: SortState) => void;\n pageSize: Readable<number>;\n selectionMode: Readable<SelectionMode>;\n sortMode: Readable<'client' | 'server'>;\n};\n\nexport type DataGridModel<T = Record<string, unknown>> = {\n activateFilterKey(key: string): void;\n clearAllFilters(): void;\n clearSelection(): void;\n readonly currentPageItems: Readable<T[]>;\n readonly filterDefs: Readable<FilterOption[]>;\n readonly filteredRows: Readable<T[]>;\n readonly filterValues: Readable<Map<string, FilterRule>>;\n goToPage(index: number): void;\n readonly hasNextPage: Readable<boolean>;\n readonly hasPrevPage: Readable<boolean>;\n readonly hiddenColumns: Readable<Set<string>>;\n isAllSelected(): boolean;\n nextPage(): void;\n readonly pageCount: Readable<number>;\n readonly pageIndex: Readable<number>;\n prevPage(): void;\n removeFilter(key: string): void;\n resetFilters(): void;\n resetSearch(): void;\n readonly searchActive: Readable<boolean>;\n readonly searchQuery: Readable<string>;\n selectAll(): void;\n readonly selectedKeys: Readable<ReadonlySet<string>>;\n readonly selectedRows: Readable<T[]>;\n setActiveFilterKeys(keys: string[]): void;\n setFilter(key: string, values: string[]): void;\n setFilterOperator(key: string, operator: FilterOperator): void;\n setSearchQuery(query: string): void;\n setSelection(keys: Set<string>): void;\n sortBy(key: string): void;\n readonly sortState: Readable<SortState>;\n sortTo(key: string, direction: SortDirection): void;\n toggleColumnVisibility(key: string): void;\n toggleRow(key: string): void;\n toggleSearch(): void;\n readonly totalItems: Readable<number>;\n readonly visibleColumns: Readable<DataGridColumn<T>[]>;\n};\n\nconst DEFAULT_OPERATORS: { label: string; value: FilterOperator }[] = [\n { label: 'Contains', value: 'contains' },\n { label: 'Equals', value: 'equals' },\n { label: 'Greater than', value: 'gt' },\n { label: 'Less than', value: 'lt' },\n];\n\n/**\n * Feature-owned state and transform pipeline for `ore-datagrid`.\n *\n * Rows flow through query, filters, sorting, and pagination in order. Selection\n * and column visibility share the same model so every interactive grid concern\n * has one reactive owner. Source-backed grids retain their server-owned rows by\n * setting `clientSide` to false.\n */\nexport const createDataGridModel = <T extends Record<string, unknown>>(\n options: DataGridModelOptions<T>,\n): DataGridModel<T> => {\n const searchQuery = signal('');\n const searchActive = signal(false);\n const hiddenColumns = signal(new Set<string>());\n const activeFilterKeys = signal(new Set<string>());\n const filterValues = signal(new Map<string, FilterRule>());\n const sortKey = signal('');\n const sortDirection = signal<SortDirection>('none');\n const selectedKeys = signal(new Set<string>());\n const pageIndex = signal(0);\n\n const columnKeys = computed(() => new Set(options.columns.value.map((column) => column.key)));\n const visibleColumns = computed(() => options.columns.value.filter((column) => !hiddenColumns.value.has(column.key)));\n\n const colOptions = computed(() => {\n const externalKeys = new Set((options.filterOptions.value ?? []).map((filter) => filter.key));\n const activeKeys = [...activeFilterKeys.value].filter((key) => !externalKeys.has(key));\n\n if (!activeKeys.length) return new Map<string, { label: string; value: string }[]>();\n\n const derived = new Map<string, { label: string; value: string }[]>();\n\n for (const key of activeKeys) {\n const seen = new Set<string>();\n const values: { label: string; value: string }[] = [];\n\n for (const row of options.items.value) {\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (!seen.has(stringValue)) {\n seen.add(stringValue);\n values.push({ label: stringValue || '(empty)', value: stringValue });\n }\n }\n\n derived.set(key, values);\n }\n\n return derived;\n });\n\n const filterDefs = computed<FilterOption[]>(() => {\n const provided = options.filterOptions.value ?? [];\n const providedKeys = new Set(provided.map((filter) => filter.key));\n const derived = [...activeFilterKeys.value]\n .filter((key) => !providedKeys.has(key))\n .map((key) => {\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return {\n key,\n label: column?.label ?? key,\n operators: DEFAULT_OPERATORS,\n options: colOptions.value.get(key) ?? [],\n };\n });\n\n return [...provided.map((filter) => ({ ...filter, operators: filter.operators ?? DEFAULT_OPERATORS })), ...derived];\n });\n\n const searchedRows = computed(() => {\n const rows = options.items.value;\n\n if (!options.clientSide.value) return rows;\n\n const query = searchQuery.value.trim().toLowerCase();\n\n if (!query) return rows;\n\n return rows.filter((row) =>\n Object.values(row).some((value) => value != null && String(value).toLowerCase().includes(query)),\n );\n });\n\n const filteredRows = computed(() => {\n const rows = searchedRows.value;\n\n if (!options.clientSide.value || !filterValues.value.size) return rows;\n\n return rows.filter((row) => {\n for (const [key, rule] of filterValues.value) {\n if (!rule.values.size || !columnKeys.value.has(key)) continue;\n\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (rule.operator === 'equals' && !rule.values.has(stringValue)) return false;\n\n if (\n rule.operator === 'contains' &&\n ![...rule.values].some((target) => stringValue.toLowerCase().includes(target.toLowerCase()))\n ) {\n return false;\n }\n\n if (rule.operator === 'gt' || rule.operator === 'lt') {\n const numericValue = parseFloat(stringValue);\n const targets = [...rule.values].map(parseFloat).filter((target) => !Number.isNaN(target));\n\n if (!targets.length) continue;\n\n if (rule.operator === 'gt' && !targets.some((target) => numericValue > target)) return false;\n\n if (rule.operator === 'lt' && !targets.some((target) => numericValue < target)) return false;\n }\n }\n\n return true;\n });\n });\n\n const sortState = computed<SortState>(() => ({ direction: sortDirection.value, key: sortKey.value }));\n const sortedRows = computed(() => {\n const rows = filteredRows.value;\n\n if (!options.clientSide.value || options.sortMode.value === 'server') return rows;\n\n const { direction, key } = sortState.value;\n\n if (!key || direction === 'none') return rows;\n\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return rows.slice().sort((a, b) => {\n const aValue = column?.sortValue ? column.sortValue(a) : (a[key] as number | string);\n const bValue = column?.sortValue ? column.sortValue(b) : (b[key] as number | string);\n const comparison =\n typeof aValue === 'number' && typeof bValue === 'number'\n ? aValue - bValue\n : String(aValue ?? '').localeCompare(String(bValue ?? ''));\n\n return direction === 'asc' ? comparison : -comparison;\n });\n });\n\n const totalItems = computed(() => sortedRows.value.length);\n const pageCount = computed(() => {\n const size = options.pageSize.value;\n\n return Math.ceil(totalItems.value / (size <= 0 ? Number.MAX_SAFE_INTEGER : size));\n });\n const safePageIndex = computed(() => (pageCount.value ? Math.min(pageIndex.value, pageCount.value - 1) : -1));\n const currentPageItems = computed(() => {\n const size = options.pageSize.value;\n\n if (size <= 0) return sortedRows.value;\n\n const start = safePageIndex.value * size;\n\n return sortedRows.value.slice(start, start + size);\n });\n const hasNextPage = computed(() => pageCount.value > 0 && safePageIndex.value < pageCount.value - 1);\n const hasPrevPage = computed(() => safePageIndex.value > 0);\n const selectedRows = computed(() =>\n options.items.value.filter((item) => selectedKeys.value.has(options.getRowKey(item))),\n );\n\n watch(\n columnKeys,\n (keys) => {\n const nextActiveKeys = new Set([...activeFilterKeys.value].filter((key) => keys.has(key)));\n const nextValues = new Map([...filterValues.value].filter(([key]) => keys.has(key)));\n\n if (nextActiveKeys.size !== activeFilterKeys.value.size) activeFilterKeys.value = nextActiveKeys;\n\n if (nextValues.size !== filterValues.value.size) filterValues.value = nextValues;\n },\n { immediate: false },\n );\n\n watch(sortedRows, () => {\n pageIndex.value = 0;\n });\n\n const commitSelection = (next: Set<string>): void => {\n selectedKeys.value = next;\n options.onSelectionChange?.(next);\n };\n\n const setFilter = (key: string, values: string[]): void => {\n const next = new Map(filterValues.value);\n\n if (values.length) {\n next.set(key, { operator: next.get(key)?.operator ?? 'contains', values: new Set(values) });\n } else {\n next.delete(key);\n }\n\n filterValues.value = next;\n };\n\n const setFilterOperator = (key: string, operator: FilterOperator): void => {\n const rule = filterValues.value.get(key);\n\n if (rule) filterValues.value = new Map(filterValues.value).set(key, { ...rule, operator });\n };\n\n const sortTo = (key: string, direction: SortDirection): void => {\n sortKey.value = direction === 'none' ? '' : key;\n sortDirection.value = direction;\n pageIndex.value = 0;\n options.onSortChange?.(sortState.value);\n };\n\n return {\n activateFilterKey: (key) => {\n if (!activeFilterKeys.value.has(key)) activeFilterKeys.value = new Set([...activeFilterKeys.value, key]);\n },\n clearAllFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n clearSelection: () => commitSelection(new Set()),\n currentPageItems,\n filterDefs,\n filteredRows,\n filterValues,\n goToPage: (index) => {\n if (Number.isFinite(index)) pageIndex.value = Math.max(0, index);\n },\n hasNextPage,\n hasPrevPage,\n hiddenColumns,\n isAllSelected: () => {\n const page = currentPageItems.value;\n\n return page.length > 0 && page.every((item) => selectedKeys.value.has(options.getRowKey(item)));\n },\n nextPage: () => {\n if (hasNextPage.value) pageIndex.value = safePageIndex.value + 1;\n },\n pageCount,\n pageIndex: safePageIndex,\n prevPage: () => {\n if (hasPrevPage.value) pageIndex.value = safePageIndex.value - 1;\n },\n removeFilter: (key) => {\n const nextActiveKeys = new Set(activeFilterKeys.value);\n\n nextActiveKeys.delete(key);\n activeFilterKeys.value = nextActiveKeys;\n\n const nextValues = new Map(filterValues.value);\n\n nextValues.delete(key);\n filterValues.value = nextValues;\n },\n resetFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n resetSearch: () => {\n searchQuery.value = '';\n searchActive.value = false;\n },\n searchActive,\n searchQuery,\n selectAll: () => {\n if (options.selectionMode.value !== 'multi') return;\n\n const next = new Set(selectedKeys.value);\n\n if (currentPageItems.value.every((item) => next.has(options.getRowKey(item)))) {\n for (const item of currentPageItems.value) next.delete(options.getRowKey(item));\n } else {\n for (const item of currentPageItems.value) next.add(options.getRowKey(item));\n }\n\n commitSelection(next);\n },\n selectedKeys: computed(() => new Set(selectedKeys.value)),\n selectedRows,\n setActiveFilterKeys: (keys) => {\n const nextActiveKeys = new Set(keys);\n\n activeFilterKeys.value = nextActiveKeys;\n filterValues.value = new Map([...filterValues.value].filter(([key]) => nextActiveKeys.has(key)));\n },\n setFilter,\n setFilterOperator,\n setSearchQuery: (query) => {\n searchQuery.value = query;\n },\n setSelection: (keys) => commitSelection(new Set(keys)),\n sortBy: (key) => {\n const nextDirection =\n sortKey.value !== key\n ? 'asc'\n : sortDirection.value === 'asc'\n ? 'desc'\n : sortDirection.value === 'desc'\n ? 'none'\n : 'asc';\n\n sortTo(nextDirection === 'none' ? '' : key, nextDirection);\n },\n sortState,\n sortTo,\n toggleColumnVisibility: (key) => {\n const next = new Set(hiddenColumns.value);\n\n if (next.has(key)) next.delete(key);\n else next.add(key);\n\n hiddenColumns.value = next;\n },\n toggleRow: (key) => {\n if (options.selectionMode.value === 'none') return;\n\n const next = new Set(selectedKeys.value);\n\n if (next.has(key)) next.delete(key);\n else {\n if (options.selectionMode.value === 'single') next.clear();\n\n next.add(key);\n }\n\n commitSelection(next);\n },\n toggleSearch: () => {\n if (searchActive.value) searchQuery.value = '';\n\n searchActive.value = !searchActive.value;\n },\n totalItems,\n visibleColumns,\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { type Readable } from '@vielzeug/ripple';
|
|
2
|
+
export type SortDirection = 'asc' | 'desc' | 'none';
|
|
3
|
+
export type SortState = {
|
|
4
|
+
direction: SortDirection;
|
|
5
|
+
key: string;
|
|
6
|
+
};
|
|
7
|
+
export type DataGridColumn<T = Record<string, unknown>> = {
|
|
8
|
+
align?: 'left' | 'center' | 'right';
|
|
9
|
+
cell?: (item: T) => string;
|
|
10
|
+
headerLabel?: string;
|
|
11
|
+
key: string;
|
|
12
|
+
label: string;
|
|
13
|
+
renderExpanded?: (item: T) => string;
|
|
14
|
+
resizable?: boolean;
|
|
15
|
+
sortable?: boolean;
|
|
16
|
+
sortValue?: (item: T) => number | string;
|
|
17
|
+
width?: string;
|
|
18
|
+
};
|
|
19
|
+
export type SelectionMode = 'multi' | 'none' | 'single';
|
|
20
|
+
export type FilterOption = {
|
|
21
|
+
key: string;
|
|
22
|
+
label: string;
|
|
23
|
+
operators?: {
|
|
24
|
+
label: string;
|
|
25
|
+
value: string;
|
|
26
|
+
}[];
|
|
27
|
+
options: {
|
|
28
|
+
label?: string;
|
|
29
|
+
value: string;
|
|
30
|
+
}[];
|
|
31
|
+
};
|
|
32
|
+
export type FilterOperator = 'contains' | 'equals' | 'gt' | 'lt';
|
|
33
|
+
export type FilterRule = {
|
|
34
|
+
operator: FilterOperator;
|
|
35
|
+
values: Set<string>;
|
|
36
|
+
};
|
|
37
|
+
export type DataGridView = {
|
|
38
|
+
id: string;
|
|
39
|
+
label: string;
|
|
40
|
+
};
|
|
41
|
+
export type DataGridModelOptions<T = Record<string, unknown>> = {
|
|
42
|
+
clientSide: Readable<boolean>;
|
|
43
|
+
columns: Readable<DataGridColumn<T>[]>;
|
|
44
|
+
filterOptions: Readable<FilterOption[] | undefined>;
|
|
45
|
+
getRowKey: (item: T) => string;
|
|
46
|
+
items: Readable<T[]>;
|
|
47
|
+
onSelectionChange?: (keys: Set<string>) => void;
|
|
48
|
+
onSortChange?: (sort: SortState) => void;
|
|
49
|
+
pageSize: Readable<number>;
|
|
50
|
+
selectionMode: Readable<SelectionMode>;
|
|
51
|
+
sortMode: Readable<'client' | 'server'>;
|
|
52
|
+
};
|
|
53
|
+
export type DataGridModel<T = Record<string, unknown>> = {
|
|
54
|
+
activateFilterKey(key: string): void;
|
|
55
|
+
clearAllFilters(): void;
|
|
56
|
+
clearSelection(): void;
|
|
57
|
+
readonly currentPageItems: Readable<T[]>;
|
|
58
|
+
readonly filterDefs: Readable<FilterOption[]>;
|
|
59
|
+
readonly filteredRows: Readable<T[]>;
|
|
60
|
+
readonly filterValues: Readable<Map<string, FilterRule>>;
|
|
61
|
+
goToPage(index: number): void;
|
|
62
|
+
readonly hasNextPage: Readable<boolean>;
|
|
63
|
+
readonly hasPrevPage: Readable<boolean>;
|
|
64
|
+
readonly hiddenColumns: Readable<Set<string>>;
|
|
65
|
+
isAllSelected(): boolean;
|
|
66
|
+
nextPage(): void;
|
|
67
|
+
readonly pageCount: Readable<number>;
|
|
68
|
+
readonly pageIndex: Readable<number>;
|
|
69
|
+
prevPage(): void;
|
|
70
|
+
removeFilter(key: string): void;
|
|
71
|
+
resetFilters(): void;
|
|
72
|
+
resetSearch(): void;
|
|
73
|
+
readonly searchActive: Readable<boolean>;
|
|
74
|
+
readonly searchQuery: Readable<string>;
|
|
75
|
+
selectAll(): void;
|
|
76
|
+
readonly selectedKeys: Readable<ReadonlySet<string>>;
|
|
77
|
+
readonly selectedRows: Readable<T[]>;
|
|
78
|
+
setActiveFilterKeys(keys: string[]): void;
|
|
79
|
+
setFilter(key: string, values: string[]): void;
|
|
80
|
+
setFilterOperator(key: string, operator: FilterOperator): void;
|
|
81
|
+
setSearchQuery(query: string): void;
|
|
82
|
+
setSelection(keys: Set<string>): void;
|
|
83
|
+
sortBy(key: string): void;
|
|
84
|
+
readonly sortState: Readable<SortState>;
|
|
85
|
+
sortTo(key: string, direction: SortDirection): void;
|
|
86
|
+
toggleColumnVisibility(key: string): void;
|
|
87
|
+
toggleRow(key: string): void;
|
|
88
|
+
toggleSearch(): void;
|
|
89
|
+
readonly totalItems: Readable<number>;
|
|
90
|
+
readonly visibleColumns: Readable<DataGridColumn<T>[]>;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Feature-owned state and transform pipeline for `ore-datagrid`.
|
|
94
|
+
*
|
|
95
|
+
* Rows flow through query, filters, sorting, and pagination in order. Selection
|
|
96
|
+
* and column visibility share the same model so every interactive grid concern
|
|
97
|
+
* has one reactive owner. Source-backed grids retain their server-owned rows by
|
|
98
|
+
* setting `clientSide` to false.
|
|
99
|
+
*/
|
|
100
|
+
export declare const createDataGridModel: <T extends Record<string, unknown>>(options: DataGridModelOptions<T>) => DataGridModel<T>;
|
|
101
|
+
//# sourceMappingURL=datagrid-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datagrid-model.d.ts","sourceRoot":"","sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { computed as e, signal as t } from "@vielzeug/ripple";
|
|
2
|
+
import { watch as n } from "@vielzeug/ripple/watch";
|
|
3
|
+
//#region src/inputs/datagrid/datagrid-model.ts
|
|
4
|
+
var r = [
|
|
5
|
+
{
|
|
6
|
+
label: "Contains",
|
|
7
|
+
value: "contains"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
label: "Equals",
|
|
11
|
+
value: "equals"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
label: "Greater than",
|
|
15
|
+
value: "gt"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
label: "Less than",
|
|
19
|
+
value: "lt"
|
|
20
|
+
}
|
|
21
|
+
], i = (i) => {
|
|
22
|
+
let a = t(""), o = t(!1), s = t(/* @__PURE__ */ new Set()), c = t(/* @__PURE__ */ new Set()), l = t(/* @__PURE__ */ new Map()), u = t(""), d = t("none"), f = t(/* @__PURE__ */ new Set()), p = t(0), m = e(() => new Set(i.columns.value.map((e) => e.key))), h = e(() => i.columns.value.filter((e) => !s.value.has(e.key))), g = e(() => {
|
|
23
|
+
let e = new Set((i.filterOptions.value ?? []).map((e) => e.key)), t = [...c.value].filter((t) => !e.has(t));
|
|
24
|
+
if (!t.length) return /* @__PURE__ */ new Map();
|
|
25
|
+
let n = /* @__PURE__ */ new Map();
|
|
26
|
+
for (let e of t) {
|
|
27
|
+
let t = /* @__PURE__ */ new Set(), r = [];
|
|
28
|
+
for (let n of i.items.value) {
|
|
29
|
+
let i = n[e], a = i == null ? "" : String(i);
|
|
30
|
+
t.has(a) || (t.add(a), r.push({
|
|
31
|
+
label: a || "(empty)",
|
|
32
|
+
value: a
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
n.set(e, r);
|
|
36
|
+
}
|
|
37
|
+
return n;
|
|
38
|
+
}), _ = e(() => {
|
|
39
|
+
let e = i.filterOptions.value ?? [], t = new Set(e.map((e) => e.key)), n = [...c.value].filter((e) => !t.has(e)).map((e) => ({
|
|
40
|
+
key: e,
|
|
41
|
+
label: i.columns.value.find((t) => t.key === e)?.label ?? e,
|
|
42
|
+
operators: r,
|
|
43
|
+
options: g.value.get(e) ?? []
|
|
44
|
+
}));
|
|
45
|
+
return [...e.map((e) => ({
|
|
46
|
+
...e,
|
|
47
|
+
operators: e.operators ?? r
|
|
48
|
+
})), ...n];
|
|
49
|
+
}), v = e(() => {
|
|
50
|
+
let e = i.items.value;
|
|
51
|
+
if (!i.clientSide.value) return e;
|
|
52
|
+
let t = a.value.trim().toLowerCase();
|
|
53
|
+
return t ? e.filter((e) => Object.values(e).some((e) => e != null && String(e).toLowerCase().includes(t))) : e;
|
|
54
|
+
}), y = e(() => {
|
|
55
|
+
let e = v.value;
|
|
56
|
+
return !i.clientSide.value || !l.value.size ? e : e.filter((e) => {
|
|
57
|
+
for (let [t, n] of l.value) {
|
|
58
|
+
if (!n.values.size || !m.value.has(t)) continue;
|
|
59
|
+
let r = e[t], i = r == null ? "" : String(r);
|
|
60
|
+
if (n.operator === "equals" && !n.values.has(i) || n.operator === "contains" && ![...n.values].some((e) => i.toLowerCase().includes(e.toLowerCase()))) return !1;
|
|
61
|
+
if (n.operator === "gt" || n.operator === "lt") {
|
|
62
|
+
let e = parseFloat(i), t = [...n.values].map(parseFloat).filter((e) => !Number.isNaN(e));
|
|
63
|
+
if (!t.length) continue;
|
|
64
|
+
if (n.operator === "gt" && !t.some((t) => e > t) || n.operator === "lt" && !t.some((t) => e < t)) return !1;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return !0;
|
|
68
|
+
});
|
|
69
|
+
}), b = e(() => ({
|
|
70
|
+
direction: d.value,
|
|
71
|
+
key: u.value
|
|
72
|
+
})), x = e(() => {
|
|
73
|
+
let e = y.value;
|
|
74
|
+
if (!i.clientSide.value || i.sortMode.value === "server") return e;
|
|
75
|
+
let { direction: t, key: n } = b.value;
|
|
76
|
+
if (!n || t === "none") return e;
|
|
77
|
+
let r = i.columns.value.find((e) => e.key === n);
|
|
78
|
+
return e.slice().sort((e, i) => {
|
|
79
|
+
let a = r?.sortValue ? r.sortValue(e) : e[n], o = r?.sortValue ? r.sortValue(i) : i[n], s = typeof a == "number" && typeof o == "number" ? a - o : String(a ?? "").localeCompare(String(o ?? ""));
|
|
80
|
+
return t === "asc" ? s : -s;
|
|
81
|
+
});
|
|
82
|
+
}), S = e(() => x.value.length), C = e(() => {
|
|
83
|
+
let e = i.pageSize.value;
|
|
84
|
+
return Math.ceil(S.value / (e <= 0 ? 2 ** 53 - 1 : e));
|
|
85
|
+
}), w = e(() => C.value ? Math.min(p.value, C.value - 1) : -1), T = e(() => {
|
|
86
|
+
let e = i.pageSize.value;
|
|
87
|
+
if (e <= 0) return x.value;
|
|
88
|
+
let t = w.value * e;
|
|
89
|
+
return x.value.slice(t, t + e);
|
|
90
|
+
}), E = e(() => C.value > 0 && w.value < C.value - 1), D = e(() => w.value > 0), O = e(() => i.items.value.filter((e) => f.value.has(i.getRowKey(e))));
|
|
91
|
+
n(m, (e) => {
|
|
92
|
+
let t = new Set([...c.value].filter((t) => e.has(t))), n = new Map([...l.value].filter(([t]) => e.has(t)));
|
|
93
|
+
t.size !== c.value.size && (c.value = t), n.size !== l.value.size && (l.value = n);
|
|
94
|
+
}, { immediate: !1 }), n(x, () => {
|
|
95
|
+
p.value = 0;
|
|
96
|
+
});
|
|
97
|
+
let k = (e) => {
|
|
98
|
+
f.value = e, i.onSelectionChange?.(e);
|
|
99
|
+
}, A = (e, t) => {
|
|
100
|
+
let n = new Map(l.value);
|
|
101
|
+
t.length ? n.set(e, {
|
|
102
|
+
operator: n.get(e)?.operator ?? "contains",
|
|
103
|
+
values: new Set(t)
|
|
104
|
+
}) : n.delete(e), l.value = n;
|
|
105
|
+
}, j = (e, t) => {
|
|
106
|
+
let n = l.value.get(e);
|
|
107
|
+
n && (l.value = new Map(l.value).set(e, {
|
|
108
|
+
...n,
|
|
109
|
+
operator: t
|
|
110
|
+
}));
|
|
111
|
+
}, M = (e, t) => {
|
|
112
|
+
u.value = t === "none" ? "" : e, d.value = t, p.value = 0, i.onSortChange?.(b.value);
|
|
113
|
+
};
|
|
114
|
+
return {
|
|
115
|
+
activateFilterKey: (e) => {
|
|
116
|
+
c.value.has(e) || (c.value = /* @__PURE__ */ new Set([...c.value, e]));
|
|
117
|
+
},
|
|
118
|
+
clearAllFilters: () => {
|
|
119
|
+
c.value = /* @__PURE__ */ new Set(), l.value = /* @__PURE__ */ new Map();
|
|
120
|
+
},
|
|
121
|
+
clearSelection: () => k(/* @__PURE__ */ new Set()),
|
|
122
|
+
currentPageItems: T,
|
|
123
|
+
filterDefs: _,
|
|
124
|
+
filteredRows: y,
|
|
125
|
+
filterValues: l,
|
|
126
|
+
goToPage: (e) => {
|
|
127
|
+
Number.isFinite(e) && (p.value = Math.max(0, e));
|
|
128
|
+
},
|
|
129
|
+
hasNextPage: E,
|
|
130
|
+
hasPrevPage: D,
|
|
131
|
+
hiddenColumns: s,
|
|
132
|
+
isAllSelected: () => {
|
|
133
|
+
let e = T.value;
|
|
134
|
+
return e.length > 0 && e.every((e) => f.value.has(i.getRowKey(e)));
|
|
135
|
+
},
|
|
136
|
+
nextPage: () => {
|
|
137
|
+
E.value && (p.value = w.value + 1);
|
|
138
|
+
},
|
|
139
|
+
pageCount: C,
|
|
140
|
+
pageIndex: w,
|
|
141
|
+
prevPage: () => {
|
|
142
|
+
D.value && (p.value = w.value - 1);
|
|
143
|
+
},
|
|
144
|
+
removeFilter: (e) => {
|
|
145
|
+
let t = new Set(c.value);
|
|
146
|
+
t.delete(e), c.value = t;
|
|
147
|
+
let n = new Map(l.value);
|
|
148
|
+
n.delete(e), l.value = n;
|
|
149
|
+
},
|
|
150
|
+
resetFilters: () => {
|
|
151
|
+
c.value = /* @__PURE__ */ new Set(), l.value = /* @__PURE__ */ new Map();
|
|
152
|
+
},
|
|
153
|
+
resetSearch: () => {
|
|
154
|
+
a.value = "", o.value = !1;
|
|
155
|
+
},
|
|
156
|
+
searchActive: o,
|
|
157
|
+
searchQuery: a,
|
|
158
|
+
selectAll: () => {
|
|
159
|
+
if (i.selectionMode.value !== "multi") return;
|
|
160
|
+
let e = new Set(f.value);
|
|
161
|
+
if (T.value.every((t) => e.has(i.getRowKey(t)))) for (let t of T.value) e.delete(i.getRowKey(t));
|
|
162
|
+
else for (let t of T.value) e.add(i.getRowKey(t));
|
|
163
|
+
k(e);
|
|
164
|
+
},
|
|
165
|
+
selectedKeys: e(() => new Set(f.value)),
|
|
166
|
+
selectedRows: O,
|
|
167
|
+
setActiveFilterKeys: (e) => {
|
|
168
|
+
let t = new Set(e);
|
|
169
|
+
c.value = t, l.value = new Map([...l.value].filter(([e]) => t.has(e)));
|
|
170
|
+
},
|
|
171
|
+
setFilter: A,
|
|
172
|
+
setFilterOperator: j,
|
|
173
|
+
setSearchQuery: (e) => {
|
|
174
|
+
a.value = e;
|
|
175
|
+
},
|
|
176
|
+
setSelection: (e) => k(new Set(e)),
|
|
177
|
+
sortBy: (e) => {
|
|
178
|
+
let t = u.value === e ? d.value === "asc" ? "desc" : d.value === "desc" ? "none" : "asc" : "asc";
|
|
179
|
+
M(t === "none" ? "" : e, t);
|
|
180
|
+
},
|
|
181
|
+
sortState: b,
|
|
182
|
+
sortTo: M,
|
|
183
|
+
toggleColumnVisibility: (e) => {
|
|
184
|
+
let t = new Set(s.value);
|
|
185
|
+
t.has(e) ? t.delete(e) : t.add(e), s.value = t;
|
|
186
|
+
},
|
|
187
|
+
toggleRow: (e) => {
|
|
188
|
+
if (i.selectionMode.value === "none") return;
|
|
189
|
+
let t = new Set(f.value);
|
|
190
|
+
t.has(e) ? t.delete(e) : (i.selectionMode.value === "single" && t.clear(), t.add(e)), k(t);
|
|
191
|
+
},
|
|
192
|
+
toggleSearch: () => {
|
|
193
|
+
o.value && (a.value = ""), o.value = !o.value;
|
|
194
|
+
},
|
|
195
|
+
totalItems: S,
|
|
196
|
+
visibleColumns: h
|
|
197
|
+
};
|
|
198
|
+
};
|
|
199
|
+
//#endregion
|
|
200
|
+
export { i as createDataGridModel };
|
|
201
|
+
|
|
202
|
+
//# sourceMappingURL=datagrid-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datagrid-model.js","names":[],"sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"sourcesContent":["import { computed, signal, type Readable } from '@vielzeug/ripple';\nimport { watch } from '@vielzeug/ripple/watch';\n\nexport type SortDirection = 'asc' | 'desc' | 'none';\n\nexport type SortState = {\n direction: SortDirection;\n key: string;\n};\n\nexport type DataGridColumn<T = Record<string, unknown>> = {\n align?: 'left' | 'center' | 'right';\n cell?: (item: T) => string;\n headerLabel?: string;\n key: string;\n label: string;\n renderExpanded?: (item: T) => string;\n resizable?: boolean;\n sortable?: boolean;\n sortValue?: (item: T) => number | string;\n width?: string;\n};\n\nexport type SelectionMode = 'multi' | 'none' | 'single';\n\nexport type FilterOption = {\n key: string;\n label: string;\n operators?: { label: string; value: string }[];\n options: { label?: string; value: string }[];\n};\n\nexport type FilterOperator = 'contains' | 'equals' | 'gt' | 'lt';\n\nexport type FilterRule = {\n operator: FilterOperator;\n values: Set<string>;\n};\n\nexport type DataGridView = {\n id: string;\n label: string;\n};\n\nexport type DataGridModelOptions<T = Record<string, unknown>> = {\n clientSide: Readable<boolean>;\n columns: Readable<DataGridColumn<T>[]>;\n filterOptions: Readable<FilterOption[] | undefined>;\n getRowKey: (item: T) => string;\n items: Readable<T[]>;\n onSelectionChange?: (keys: Set<string>) => void;\n onSortChange?: (sort: SortState) => void;\n pageSize: Readable<number>;\n selectionMode: Readable<SelectionMode>;\n sortMode: Readable<'client' | 'server'>;\n};\n\nexport type DataGridModel<T = Record<string, unknown>> = {\n activateFilterKey(key: string): void;\n clearAllFilters(): void;\n clearSelection(): void;\n readonly currentPageItems: Readable<T[]>;\n readonly filterDefs: Readable<FilterOption[]>;\n readonly filteredRows: Readable<T[]>;\n readonly filterValues: Readable<Map<string, FilterRule>>;\n goToPage(index: number): void;\n readonly hasNextPage: Readable<boolean>;\n readonly hasPrevPage: Readable<boolean>;\n readonly hiddenColumns: Readable<Set<string>>;\n isAllSelected(): boolean;\n nextPage(): void;\n readonly pageCount: Readable<number>;\n readonly pageIndex: Readable<number>;\n prevPage(): void;\n removeFilter(key: string): void;\n resetFilters(): void;\n resetSearch(): void;\n readonly searchActive: Readable<boolean>;\n readonly searchQuery: Readable<string>;\n selectAll(): void;\n readonly selectedKeys: Readable<ReadonlySet<string>>;\n readonly selectedRows: Readable<T[]>;\n setActiveFilterKeys(keys: string[]): void;\n setFilter(key: string, values: string[]): void;\n setFilterOperator(key: string, operator: FilterOperator): void;\n setSearchQuery(query: string): void;\n setSelection(keys: Set<string>): void;\n sortBy(key: string): void;\n readonly sortState: Readable<SortState>;\n sortTo(key: string, direction: SortDirection): void;\n toggleColumnVisibility(key: string): void;\n toggleRow(key: string): void;\n toggleSearch(): void;\n readonly totalItems: Readable<number>;\n readonly visibleColumns: Readable<DataGridColumn<T>[]>;\n};\n\nconst DEFAULT_OPERATORS: { label: string; value: FilterOperator }[] = [\n { label: 'Contains', value: 'contains' },\n { label: 'Equals', value: 'equals' },\n { label: 'Greater than', value: 'gt' },\n { label: 'Less than', value: 'lt' },\n];\n\n/**\n * Feature-owned state and transform pipeline for `ore-datagrid`.\n *\n * Rows flow through query, filters, sorting, and pagination in order. Selection\n * and column visibility share the same model so every interactive grid concern\n * has one reactive owner. Source-backed grids retain their server-owned rows by\n * setting `clientSide` to false.\n */\nexport const createDataGridModel = <T extends Record<string, unknown>>(\n options: DataGridModelOptions<T>,\n): DataGridModel<T> => {\n const searchQuery = signal('');\n const searchActive = signal(false);\n const hiddenColumns = signal(new Set<string>());\n const activeFilterKeys = signal(new Set<string>());\n const filterValues = signal(new Map<string, FilterRule>());\n const sortKey = signal('');\n const sortDirection = signal<SortDirection>('none');\n const selectedKeys = signal(new Set<string>());\n const pageIndex = signal(0);\n\n const columnKeys = computed(() => new Set(options.columns.value.map((column) => column.key)));\n const visibleColumns = computed(() => options.columns.value.filter((column) => !hiddenColumns.value.has(column.key)));\n\n const colOptions = computed(() => {\n const externalKeys = new Set((options.filterOptions.value ?? []).map((filter) => filter.key));\n const activeKeys = [...activeFilterKeys.value].filter((key) => !externalKeys.has(key));\n\n if (!activeKeys.length) return new Map<string, { label: string; value: string }[]>();\n\n const derived = new Map<string, { label: string; value: string }[]>();\n\n for (const key of activeKeys) {\n const seen = new Set<string>();\n const values: { label: string; value: string }[] = [];\n\n for (const row of options.items.value) {\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (!seen.has(stringValue)) {\n seen.add(stringValue);\n values.push({ label: stringValue || '(empty)', value: stringValue });\n }\n }\n\n derived.set(key, values);\n }\n\n return derived;\n });\n\n const filterDefs = computed<FilterOption[]>(() => {\n const provided = options.filterOptions.value ?? [];\n const providedKeys = new Set(provided.map((filter) => filter.key));\n const derived = [...activeFilterKeys.value]\n .filter((key) => !providedKeys.has(key))\n .map((key) => {\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return {\n key,\n label: column?.label ?? key,\n operators: DEFAULT_OPERATORS,\n options: colOptions.value.get(key) ?? [],\n };\n });\n\n return [...provided.map((filter) => ({ ...filter, operators: filter.operators ?? DEFAULT_OPERATORS })), ...derived];\n });\n\n const searchedRows = computed(() => {\n const rows = options.items.value;\n\n if (!options.clientSide.value) return rows;\n\n const query = searchQuery.value.trim().toLowerCase();\n\n if (!query) return rows;\n\n return rows.filter((row) =>\n Object.values(row).some((value) => value != null && String(value).toLowerCase().includes(query)),\n );\n });\n\n const filteredRows = computed(() => {\n const rows = searchedRows.value;\n\n if (!options.clientSide.value || !filterValues.value.size) return rows;\n\n return rows.filter((row) => {\n for (const [key, rule] of filterValues.value) {\n if (!rule.values.size || !columnKeys.value.has(key)) continue;\n\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (rule.operator === 'equals' && !rule.values.has(stringValue)) return false;\n\n if (\n rule.operator === 'contains' &&\n ![...rule.values].some((target) => stringValue.toLowerCase().includes(target.toLowerCase()))\n ) {\n return false;\n }\n\n if (rule.operator === 'gt' || rule.operator === 'lt') {\n const numericValue = parseFloat(stringValue);\n const targets = [...rule.values].map(parseFloat).filter((target) => !Number.isNaN(target));\n\n if (!targets.length) continue;\n\n if (rule.operator === 'gt' && !targets.some((target) => numericValue > target)) return false;\n\n if (rule.operator === 'lt' && !targets.some((target) => numericValue < target)) return false;\n }\n }\n\n return true;\n });\n });\n\n const sortState = computed<SortState>(() => ({ direction: sortDirection.value, key: sortKey.value }));\n const sortedRows = computed(() => {\n const rows = filteredRows.value;\n\n if (!options.clientSide.value || options.sortMode.value === 'server') return rows;\n\n const { direction, key } = sortState.value;\n\n if (!key || direction === 'none') return rows;\n\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return rows.slice().sort((a, b) => {\n const aValue = column?.sortValue ? column.sortValue(a) : (a[key] as number | string);\n const bValue = column?.sortValue ? column.sortValue(b) : (b[key] as number | string);\n const comparison =\n typeof aValue === 'number' && typeof bValue === 'number'\n ? aValue - bValue\n : String(aValue ?? '').localeCompare(String(bValue ?? ''));\n\n return direction === 'asc' ? comparison : -comparison;\n });\n });\n\n const totalItems = computed(() => sortedRows.value.length);\n const pageCount = computed(() => {\n const size = options.pageSize.value;\n\n return Math.ceil(totalItems.value / (size <= 0 ? Number.MAX_SAFE_INTEGER : size));\n });\n const safePageIndex = computed(() => (pageCount.value ? Math.min(pageIndex.value, pageCount.value - 1) : -1));\n const currentPageItems = computed(() => {\n const size = options.pageSize.value;\n\n if (size <= 0) return sortedRows.value;\n\n const start = safePageIndex.value * size;\n\n return sortedRows.value.slice(start, start + size);\n });\n const hasNextPage = computed(() => pageCount.value > 0 && safePageIndex.value < pageCount.value - 1);\n const hasPrevPage = computed(() => safePageIndex.value > 0);\n const selectedRows = computed(() =>\n options.items.value.filter((item) => selectedKeys.value.has(options.getRowKey(item))),\n );\n\n watch(\n columnKeys,\n (keys) => {\n const nextActiveKeys = new Set([...activeFilterKeys.value].filter((key) => keys.has(key)));\n const nextValues = new Map([...filterValues.value].filter(([key]) => keys.has(key)));\n\n if (nextActiveKeys.size !== activeFilterKeys.value.size) activeFilterKeys.value = nextActiveKeys;\n\n if (nextValues.size !== filterValues.value.size) filterValues.value = nextValues;\n },\n { immediate: false },\n );\n\n watch(sortedRows, () => {\n pageIndex.value = 0;\n });\n\n const commitSelection = (next: Set<string>): void => {\n selectedKeys.value = next;\n options.onSelectionChange?.(next);\n };\n\n const setFilter = (key: string, values: string[]): void => {\n const next = new Map(filterValues.value);\n\n if (values.length) {\n next.set(key, { operator: next.get(key)?.operator ?? 'contains', values: new Set(values) });\n } else {\n next.delete(key);\n }\n\n filterValues.value = next;\n };\n\n const setFilterOperator = (key: string, operator: FilterOperator): void => {\n const rule = filterValues.value.get(key);\n\n if (rule) filterValues.value = new Map(filterValues.value).set(key, { ...rule, operator });\n };\n\n const sortTo = (key: string, direction: SortDirection): void => {\n sortKey.value = direction === 'none' ? '' : key;\n sortDirection.value = direction;\n pageIndex.value = 0;\n options.onSortChange?.(sortState.value);\n };\n\n return {\n activateFilterKey: (key) => {\n if (!activeFilterKeys.value.has(key)) activeFilterKeys.value = new Set([...activeFilterKeys.value, key]);\n },\n clearAllFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n clearSelection: () => commitSelection(new Set()),\n currentPageItems,\n filterDefs,\n filteredRows,\n filterValues,\n goToPage: (index) => {\n if (Number.isFinite(index)) pageIndex.value = Math.max(0, index);\n },\n hasNextPage,\n hasPrevPage,\n hiddenColumns,\n isAllSelected: () => {\n const page = currentPageItems.value;\n\n return page.length > 0 && page.every((item) => selectedKeys.value.has(options.getRowKey(item)));\n },\n nextPage: () => {\n if (hasNextPage.value) pageIndex.value = safePageIndex.value + 1;\n },\n pageCount,\n pageIndex: safePageIndex,\n prevPage: () => {\n if (hasPrevPage.value) pageIndex.value = safePageIndex.value - 1;\n },\n removeFilter: (key) => {\n const nextActiveKeys = new Set(activeFilterKeys.value);\n\n nextActiveKeys.delete(key);\n activeFilterKeys.value = nextActiveKeys;\n\n const nextValues = new Map(filterValues.value);\n\n nextValues.delete(key);\n filterValues.value = nextValues;\n },\n resetFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n resetSearch: () => {\n searchQuery.value = '';\n searchActive.value = false;\n },\n searchActive,\n searchQuery,\n selectAll: () => {\n if (options.selectionMode.value !== 'multi') return;\n\n const next = new Set(selectedKeys.value);\n\n if (currentPageItems.value.every((item) => next.has(options.getRowKey(item)))) {\n for (const item of currentPageItems.value) next.delete(options.getRowKey(item));\n } else {\n for (const item of currentPageItems.value) next.add(options.getRowKey(item));\n }\n\n commitSelection(next);\n },\n selectedKeys: computed(() => new Set(selectedKeys.value)),\n selectedRows,\n setActiveFilterKeys: (keys) => {\n const nextActiveKeys = new Set(keys);\n\n activeFilterKeys.value = nextActiveKeys;\n filterValues.value = new Map([...filterValues.value].filter(([key]) => nextActiveKeys.has(key)));\n },\n setFilter,\n setFilterOperator,\n setSearchQuery: (query) => {\n searchQuery.value = query;\n },\n setSelection: (keys) => commitSelection(new Set(keys)),\n sortBy: (key) => {\n const nextDirection =\n sortKey.value !== key\n ? 'asc'\n : sortDirection.value === 'asc'\n ? 'desc'\n : sortDirection.value === 'desc'\n ? 'none'\n : 'asc';\n\n sortTo(nextDirection === 'none' ? '' : key, nextDirection);\n },\n sortState,\n sortTo,\n toggleColumnVisibility: (key) => {\n const next = new Set(hiddenColumns.value);\n\n if (next.has(key)) next.delete(key);\n else next.add(key);\n\n hiddenColumns.value = next;\n },\n toggleRow: (key) => {\n if (options.selectionMode.value === 'none') return;\n\n const next = new Set(selectedKeys.value);\n\n if (next.has(key)) next.delete(key);\n else {\n if (options.selectionMode.value === 'single') next.clear();\n\n next.add(key);\n }\n\n commitSelection(next);\n },\n toggleSearch: () => {\n if (searchActive.value) searchQuery.value = '';\n\n searchActive.value = !searchActive.value;\n },\n totalItems,\n visibleColumns,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagrid-nav.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-nav.ts"],"sourcesContent":["import { type Readable, signal } from '@vielzeug/ripple';\n\n// ── Types ──────────────────────────────────────────────────────────────────────\n\n/** Position in the 2D grid model (0-based row/col indices). */\nexport type GridCellPos = { col: number; row: number };\n\n/** Handle returned by createGridNav for programmatic control. */\nexport type GridNavHandle = {\n /** Current active cell position. Reactive signal. */\n readonly activeCell: Readable<GridCellPos>;\n /**\n * Move focus to a specific cell by position.\n * Clamps to valid grid bounds; no-ops for invalid positions.\n */\n focusCell(pos: GridCellPos): void;\n};\n\n// ── Selector ───────────────────────────────────────────────────────────────────\n\nconst CELL_SELECTOR = '.dg-td, .dg-th';\n\n/** Build a 2D array of focusable cells from the shadow root. One sub-array per <tr>. */\nfunction getGrid(shadow: ShadowRoot): HTMLElement[][] {\n return Array.from(shadow.querySelectorAll<HTMLElement>('tr'))\n .map((tr) => Array.from(tr.querySelectorAll<HTMLElement>(CELL_SELECTOR)))\n .filter((row) => row.length > 0);\n}\n\n// ── Factory ────────────────────────────────────────────────────────────────────\n\n/**\n * Keyboard navigation for the ARIA grid pattern (roving tabindex).\n *\n * - Arrow keys move focus between cells.\n * - Home/End move to the first/last cell in the row.\n * - Ctrl+Home/Ctrl+End move to the first/last cell in the grid.\n * - Only the active cell has `tabindex=\"0\"`; all others have `\"-1\"`.\n *\n * @param table - The `.dg-table` element to attach the keydown listener to.\n * @param shadow - The shadow root containing the grid cells.\n * @returns A handle with `focusCell` and a reactive `activeCell` signal, plus a cleanup fn.\n */\nexport function createGridNav(table: HTMLElement, shadow: ShadowRoot): { cleanup: () => void; handle: GridNavHandle } {\n const activeCell = signal<GridCellPos>({ col: 0, row: 0 });\n\n const focusCell = (pos: GridCellPos): void => {\n const grid = getGrid(shadow);\n const rowIdx = Math.max(0, Math.min(pos.row, grid.length - 1));\n const row = grid[rowIdx];\n\n if (!row) return;\n\n const colIdx = Math.max(0, Math.min(pos.col, row.length - 1));\n const target = row[colIdx];\n\n if (!target) return;\n\n for (const r of grid) {\n for (const cell of r) cell.setAttribute('tabindex', '-1');\n }\n\n target.setAttribute('tabindex', '0');\n target.focus();\n activeCell.value = { col: colIdx, row: rowIdx };\n };\n\n const handleArrow = (e: KeyboardEvent): void => {\n const active = shadow.activeElement as HTMLElement | null;\n\n if (!active?.matches(CELL_SELECTOR)) return;\n\n const grid = getGrid(shadow);\n const rowIdx = grid.findIndex((row) => row.includes(active));\n\n if (rowIdx === -1) return;\n\n const colIdx = grid[rowIdx].indexOf(active);\n const lastRow = grid.length - 1;\n const lastCol = grid[rowIdx].length - 1;\n\n let nextRow = rowIdx;\n let nextCol = colIdx;\n\n if (e.key === 'ArrowRight') nextCol = colIdx + 1;\n else if (e.key === 'ArrowLeft') nextCol = colIdx - 1;\n else if (e.key === 'ArrowDown') nextRow = rowIdx + 1;\n else if (e.key === 'ArrowUp') nextRow = rowIdx - 1;\n else if (e.key === 'Home') {\n nextCol = 0;\n\n if (e.ctrlKey) nextRow = 0;\n } else if (e.key === 'End') {\n nextCol = lastCol;\n\n if (e.ctrlKey) nextRow = lastRow;\n } else return;\n\n e.preventDefault();\n focusCell({\n col: Math.max(0, Math.min(nextCol, (grid[Math.max(0, Math.min(nextRow, lastRow))]?.length ?? 1) - 1)),\n row: Math.max(0, Math.min(nextRow, lastRow)),\n });\n };\n\n table.addEventListener('keydown', handleArrow);\n\n return {\n cleanup: () => table.removeEventListener('keydown', handleArrow),\n handle: { activeCell, focusCell },\n };\n}\n"],"mappings":"kCAoBA,IAAM,EAAgB,iBAGtB,SAAS,EAAQ,EAAqC,CACpD,OAAO,MAAM,KAAK,EAAO,iBAA8B,IAAI,CAAC,CAAC,CAC1D,IAAK,GAAO,MAAM,KAAK,EAAG,iBAA8B,CAAa,CAAC,CAAC,CAAC,CACxE,OAAQ,GAAQ,EAAI,OAAS,CAAC,CACnC,CAgBA,SAAgB,EAAc,EAAoB,EAAoE,CACpH,IAAM,GAAA,
|
|
1
|
+
{"version":3,"file":"datagrid-nav.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-nav.ts"],"sourcesContent":["import { type Readable, signal } from '@vielzeug/ripple';\n\n// ── Types ──────────────────────────────────────────────────────────────────────\n\n/** Position in the 2D grid model (0-based row/col indices). */\nexport type GridCellPos = { col: number; row: number };\n\n/** Handle returned by createGridNav for programmatic control. */\nexport type GridNavHandle = {\n /** Current active cell position. Reactive signal. */\n readonly activeCell: Readable<GridCellPos>;\n /**\n * Move focus to a specific cell by position.\n * Clamps to valid grid bounds; no-ops for invalid positions.\n */\n focusCell(pos: GridCellPos): void;\n};\n\n// ── Selector ───────────────────────────────────────────────────────────────────\n\nconst CELL_SELECTOR = '.dg-td, .dg-th';\n\n/** Build a 2D array of focusable cells from the shadow root. One sub-array per <tr>. */\nfunction getGrid(shadow: ShadowRoot): HTMLElement[][] {\n return Array.from(shadow.querySelectorAll<HTMLElement>('tr'))\n .map((tr) => Array.from(tr.querySelectorAll<HTMLElement>(CELL_SELECTOR)))\n .filter((row) => row.length > 0);\n}\n\n// ── Factory ────────────────────────────────────────────────────────────────────\n\n/**\n * Keyboard navigation for the ARIA grid pattern (roving tabindex).\n *\n * - Arrow keys move focus between cells.\n * - Home/End move to the first/last cell in the row.\n * - Ctrl+Home/Ctrl+End move to the first/last cell in the grid.\n * - Only the active cell has `tabindex=\"0\"`; all others have `\"-1\"`.\n *\n * @param table - The `.dg-table` element to attach the keydown listener to.\n * @param shadow - The shadow root containing the grid cells.\n * @returns A handle with `focusCell` and a reactive `activeCell` signal, plus a cleanup fn.\n */\nexport function createGridNav(table: HTMLElement, shadow: ShadowRoot): { cleanup: () => void; handle: GridNavHandle } {\n const activeCell = signal<GridCellPos>({ col: 0, row: 0 });\n\n const focusCell = (pos: GridCellPos): void => {\n const grid = getGrid(shadow);\n const rowIdx = Math.max(0, Math.min(pos.row, grid.length - 1));\n const row = grid[rowIdx];\n\n if (!row) return;\n\n const colIdx = Math.max(0, Math.min(pos.col, row.length - 1));\n const target = row[colIdx];\n\n if (!target) return;\n\n for (const r of grid) {\n for (const cell of r) cell.setAttribute('tabindex', '-1');\n }\n\n target.setAttribute('tabindex', '0');\n target.focus();\n activeCell.value = { col: colIdx, row: rowIdx };\n };\n\n const handleArrow = (e: KeyboardEvent): void => {\n const active = shadow.activeElement as HTMLElement | null;\n\n if (!active?.matches(CELL_SELECTOR)) return;\n\n const grid = getGrid(shadow);\n const rowIdx = grid.findIndex((row) => row.includes(active));\n\n if (rowIdx === -1) return;\n\n const colIdx = grid[rowIdx].indexOf(active);\n const lastRow = grid.length - 1;\n const lastCol = grid[rowIdx].length - 1;\n\n let nextRow = rowIdx;\n let nextCol = colIdx;\n\n if (e.key === 'ArrowRight') nextCol = colIdx + 1;\n else if (e.key === 'ArrowLeft') nextCol = colIdx - 1;\n else if (e.key === 'ArrowDown') nextRow = rowIdx + 1;\n else if (e.key === 'ArrowUp') nextRow = rowIdx - 1;\n else if (e.key === 'Home') {\n nextCol = 0;\n\n if (e.ctrlKey) nextRow = 0;\n } else if (e.key === 'End') {\n nextCol = lastCol;\n\n if (e.ctrlKey) nextRow = lastRow;\n } else return;\n\n e.preventDefault();\n focusCell({\n col: Math.max(0, Math.min(nextCol, (grid[Math.max(0, Math.min(nextRow, lastRow))]?.length ?? 1) - 1)),\n row: Math.max(0, Math.min(nextRow, lastRow)),\n });\n };\n\n table.addEventListener('keydown', handleArrow);\n\n return {\n cleanup: () => table.removeEventListener('keydown', handleArrow),\n handle: { activeCell, focusCell },\n };\n}\n"],"mappings":"kCAoBA,IAAM,EAAgB,iBAGtB,SAAS,EAAQ,EAAqC,CACpD,OAAO,MAAM,KAAK,EAAO,iBAA8B,IAAI,CAAC,CAAC,CAC1D,IAAK,GAAO,MAAM,KAAK,EAAG,iBAA8B,CAAa,CAAC,CAAC,CAAC,CACxE,OAAQ,GAAQ,EAAI,OAAS,CAAC,CACnC,CAgBA,SAAgB,EAAc,EAAoB,EAAoE,CACpH,IAAM,GAAA,EAAa,EAAA,OAAA,CAAoB,CAAE,IAAK,EAAG,IAAK,CAAE,CAAC,EAEnD,EAAa,GAA2B,CAC5C,IAAM,EAAO,EAAQ,CAAM,EACrB,EAAS,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,IAAK,EAAK,OAAS,CAAC,CAAC,EACvD,EAAM,EAAK,GAEjB,GAAI,CAAC,EAAK,OAEV,IAAM,EAAS,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,IAAK,EAAI,OAAS,CAAC,CAAC,EACtD,EAAS,EAAI,GAEd,KAEL,KAAK,IAAM,KAAK,EACd,IAAK,IAAM,KAAQ,EAAG,EAAK,aAAa,WAAY,IAAI,EAG1D,EAAO,aAAa,WAAY,GAAG,EACnC,EAAO,MAAM,EACb,EAAW,MAAQ,CAAE,IAAK,EAAQ,IAAK,CAAO,CALY,CAM5D,EAEM,EAAe,GAA2B,CAC9C,IAAM,EAAS,EAAO,cAEtB,GAAI,CAAC,GAAQ,QAAQ,CAAa,EAAG,OAErC,IAAM,EAAO,EAAQ,CAAM,EACrB,EAAS,EAAK,UAAW,GAAQ,EAAI,SAAS,CAAM,CAAC,EAE3D,GAAI,IAAW,GAAI,OAEnB,IAAM,EAAS,EAAK,EAAO,CAAC,QAAQ,CAAM,EACpC,EAAU,EAAK,OAAS,EACxB,EAAU,EAAK,EAAO,CAAC,OAAS,EAElC,EAAU,EACV,EAAU,EAEd,GAAI,EAAE,MAAQ,aAAc,EAAU,EAAS,OAC1C,GAAI,EAAE,MAAQ,YAAa,EAAU,EAAS,OAC9C,GAAI,EAAE,MAAQ,YAAa,EAAU,EAAS,OAC9C,GAAI,EAAE,MAAQ,UAAW,EAAU,EAAS,OAC5C,GAAI,EAAE,MAAQ,OACjB,EAAU,EAEN,EAAE,UAAS,EAAU,QACpB,GAAI,EAAE,MAAQ,MACnB,EAAU,EAEN,EAAE,UAAS,EAAU,QACpB,OAEP,EAAE,eAAe,EACjB,EAAU,CACR,IAAK,KAAK,IAAI,EAAG,KAAK,IAAI,GAAU,EAAK,KAAK,IAAI,EAAG,KAAK,IAAI,EAAS,CAAO,CAAC,EAAE,EAAE,QAAU,GAAK,CAAC,CAAC,EACpG,IAAK,KAAK,IAAI,EAAG,KAAK,IAAI,EAAS,CAAO,CAAC,CAC7C,CAAC,CACH,EAIA,OAFA,EAAM,iBAAiB,UAAW,CAAW,EAEtC,CACL,YAAe,EAAM,oBAAoB,UAAW,CAAW,EAC/D,OAAQ,CAAE,aAAY,WAAU,CAClC,CACF"}
|