@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
package/dist/step.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { coarsePointerMixin as e } from "./styles/mixins/accessibility.css.js";
|
|
2
|
+
import { colorThemeMixin as t, forcedColorsFocusMixin as n } from "./styles/mixins/theme.css.js";
|
|
3
|
+
import { disablableBundle as r } from "./shared/prop-bundles.js";
|
|
4
|
+
import { isStepNavigable as i } from "./content/stepper/_is-step-navigable.js";
|
|
5
|
+
import a from "./content/stepper/step.css.js";
|
|
6
|
+
import { STEPPER_CTX as o } from "./stepper.js";
|
|
7
|
+
import { bind as s, define as c, getHost as l, html as u, inject as d, prop as f, useSlots as p, watchEffect as m } from "@vielzeug/ore";
|
|
8
|
+
//#region src/content/stepper/step.ts
|
|
9
|
+
var h = "ore-step";
|
|
10
|
+
c(h, {
|
|
11
|
+
props: {
|
|
12
|
+
...r,
|
|
13
|
+
color: f.string(),
|
|
14
|
+
error: f.bool(!1),
|
|
15
|
+
optional: f.bool(!1),
|
|
16
|
+
orientation: f.oneOf(["horizontal", "vertical"], "horizontal"),
|
|
17
|
+
size: f.string(),
|
|
18
|
+
value: f.string("")
|
|
19
|
+
},
|
|
20
|
+
setup(e) {
|
|
21
|
+
let t = l(), n = p(), r = d(o), a = () => r ? r.stepValues.value.indexOf(e.value.value) : -1, c = () => r?.stepValues.value.length ?? 0, f = () => r ? r.stepValues.value.indexOf(r.currentValue.value ?? "") : -1, h = () => {
|
|
22
|
+
let e = a();
|
|
23
|
+
return e >= 0 ? e + 1 : 1;
|
|
24
|
+
}, g = () => c() || 1, _ = () => {
|
|
25
|
+
let e = a(), t = f();
|
|
26
|
+
return e >= 0 && e === t;
|
|
27
|
+
}, v = () => {
|
|
28
|
+
let e = a(), t = f();
|
|
29
|
+
return e >= 0 && t >= 0 && e < t;
|
|
30
|
+
}, y = () => {
|
|
31
|
+
let t = a(), n = f();
|
|
32
|
+
return !!r && i({
|
|
33
|
+
disabled: e.disabled.value === !0,
|
|
34
|
+
index: t,
|
|
35
|
+
linear: r.linear.value,
|
|
36
|
+
stepperClickable: r.clickable.value,
|
|
37
|
+
stepperCurrentIndex: n
|
|
38
|
+
});
|
|
39
|
+
}, b = () => !!e.disabled.value;
|
|
40
|
+
s({ attr: {
|
|
41
|
+
completed: () => v() ? !0 : void 0,
|
|
42
|
+
current: () => _() ? !0 : void 0,
|
|
43
|
+
index: () => {
|
|
44
|
+
let e = a();
|
|
45
|
+
return e >= 0 ? String(e + 1) : void 0;
|
|
46
|
+
},
|
|
47
|
+
navigable: () => y() ? !0 : void 0,
|
|
48
|
+
total: () => r ? String(c()) : void 0
|
|
49
|
+
} }), r && m(() => {
|
|
50
|
+
let e = r.color.value, n = r.size.value, i = r.orientation.value;
|
|
51
|
+
e !== void 0 && t.setAttribute("color", e), n !== void 0 && t.setAttribute("size", n), t.setAttribute("orientation", i);
|
|
52
|
+
});
|
|
53
|
+
let x = () => {
|
|
54
|
+
if (e.error.value) return "error";
|
|
55
|
+
if (v()) return "completed";
|
|
56
|
+
if (_()) return "current step";
|
|
57
|
+
}, S = () => `Step ${h()} of ${g()}`, C = () => {
|
|
58
|
+
let e = x();
|
|
59
|
+
return e ? `${S()}, ${e}` : S();
|
|
60
|
+
}, w = (n) => {
|
|
61
|
+
if (n.stopPropagation(), !y()) {
|
|
62
|
+
n.preventDefault();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
t.dispatchEvent(new CustomEvent("click", {
|
|
66
|
+
bubbles: !0,
|
|
67
|
+
detail: { value: e.value.value }
|
|
68
|
+
}));
|
|
69
|
+
}, T = () => u`
|
|
70
|
+
<span class="indicator" part="indicator" aria-hidden="true">
|
|
71
|
+
<span class="icon-slot" ?hidden="${() => !n.has("icon").value}"><slot name="icon"></slot></span>
|
|
72
|
+
${() => n.has("icon").value ? "" : e.error.value ? u`
|
|
73
|
+
<ore-icon name="x" size="14" stroke-width="3"></ore-icon>
|
|
74
|
+
` : v() ? u`
|
|
75
|
+
<ore-icon name="check" size="14" stroke-width="3"></ore-icon>
|
|
76
|
+
` : u`
|
|
77
|
+
<span class="number">${h}</span>
|
|
78
|
+
`}
|
|
79
|
+
</span>
|
|
80
|
+
`, E = () => u`
|
|
81
|
+
<span class="content" part="content">
|
|
82
|
+
<span class="sr-only">${C}</span>
|
|
83
|
+
<span class="label" part="label">
|
|
84
|
+
<span class="label-text"><slot></slot></span>
|
|
85
|
+
${() => e.optional.value ? u`
|
|
86
|
+
<span class="optional-hint">(optional)</span>
|
|
87
|
+
` : ""}
|
|
88
|
+
</span>
|
|
89
|
+
<span class="description" part="description" ?hidden="${() => !n.has("description").value}">
|
|
90
|
+
<slot name="description"></slot>
|
|
91
|
+
</span>
|
|
92
|
+
</span>
|
|
93
|
+
`;
|
|
94
|
+
return u`
|
|
95
|
+
<li class="step" role="listitem">
|
|
96
|
+
<span class="connector connector-leading" part="connector" aria-hidden="true"></span>
|
|
97
|
+
<span class="connector connector-trailing" part="connector" aria-hidden="true"></span>
|
|
98
|
+
${() => y() ? u`
|
|
99
|
+
<button
|
|
100
|
+
type="button"
|
|
101
|
+
class="control"
|
|
102
|
+
part="control"
|
|
103
|
+
aria-current="${() => _() ? "step" : null}"
|
|
104
|
+
aria-disabled="${b}"
|
|
105
|
+
tabindex="${() => _() ? "0" : "-1"}"
|
|
106
|
+
@click="${w}">
|
|
107
|
+
${T()}${E()}
|
|
108
|
+
</button>
|
|
109
|
+
` : u`
|
|
110
|
+
<div class="control" part="control" aria-current="${() => _() ? "step" : null}">
|
|
111
|
+
${T()}${E()}
|
|
112
|
+
</div>
|
|
113
|
+
`}
|
|
114
|
+
</li>
|
|
115
|
+
`;
|
|
116
|
+
},
|
|
117
|
+
styles: [
|
|
118
|
+
t,
|
|
119
|
+
e,
|
|
120
|
+
n("button.control"),
|
|
121
|
+
a
|
|
122
|
+
]
|
|
123
|
+
});
|
|
124
|
+
//#endregion
|
|
125
|
+
export { h as STEP_TAG };
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=step.js.map
|
package/dist/step.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step.js","names":[],"sources":["../src/content/stepper/step.ts"],"sourcesContent":["import { define, html, inject, prop, bind, getHost, useSlots, watchEffect } from '@vielzeug/ore';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport '../icon/icon';\nimport { disablableBundle } from '../../shared';\nimport { coarsePointerMixin, colorThemeMixin, forcedColorsFocusMixin } from '../../styles';\nimport { isStepNavigable } from './_is-step-navigable';\nimport stepStyles from './step.css?inline';\nimport { STEPPER_CTX } from './stepper';\n\nexport type OreStepProps = {\n /**\n * Theme color. Inherited from the parent `ore-stepper` when nested inside one (overrides\n * this value); only takes effect on its own when `ore-step` is rendered standalone.\n */\n color?: ThemeColor;\n /** Disables this step — it cannot be navigated to and is skipped by keyboard navigation. */\n disabled?: boolean;\n /** Marks this step as failed/invalid. Overrides the completed/current indicator visuals. */\n error?: boolean;\n /**\n * Marks this step as optional. Renders a small \"(optional)\" hint next to the label.\n * Purely presentational — has no effect on navigation.\n */\n optional?: boolean;\n /** Orientation. Inherited from the parent `ore-stepper` when nested inside one. */\n orientation?: 'horizontal' | 'vertical';\n /** Component size. Inherited from the parent `ore-stepper` when nested inside one. */\n size?: ComponentSize;\n /** Unique identifier, matches `ore-stepper`'s `value` attribute. */\n value: string;\n};\n\n/**\n * A single step trigger. Must be placed as a direct child of `ore-stepper`, which provides\n * this step's current/completed/navigable/index/total state via context — those are derived,\n * read-only attributes on this element, not settable props.\n *\n * @element ore-step\n *\n * @attr {string} value - Unique identifier, matches the parent ore-stepper's `value` attribute\n * @attr {boolean} disabled - Prevents navigation to this step\n * @attr {boolean} error - Marks the step as failed/invalid\n * @attr {boolean} optional - Renders an \"(optional)\" hint next to the label\n * @attr {boolean} current - Read-only. Derived from position relative to the parent ore-stepper's `value`.\n * @attr {boolean} completed - Read-only. Derived from position relative to the parent ore-stepper's `value`.\n * @attr {boolean} navigable - Read-only. Derived from the parent ore-stepper's `clickable`/`linear`/`disabled`.\n * @attr {number} index - Read-only. This step's 1-based position among its siblings.\n * @attr {number} total - Read-only. Total sibling step count.\n * @attr {string} color - Inherited from ore-stepper: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - Inherited from ore-stepper: 'sm' | 'md' | 'lg'\n * @attr {string} orientation - Inherited from ore-stepper: 'horizontal' | 'vertical'\n *\n * @slot - Step label\n * @slot description - Optional supporting text shown below the label\n * @slot icon - Custom icon replacing the step number/check/error indicator\n *\n * @part control - Clickable (or static) root element for the step\n * @part indicator - Circular indicator holding the number/icon\n * @part content - Wrapper around the label and description\n * @part label - Step label element\n * @part description - Step description element\n * @part connector - Connector line segments (leading and trailing halves) either side of this step's indicator\n *\n * @example\n * ```html\n * <ore-step value=\"details\">Account details</ore-step>\n * <ore-step value=\"review\" disabled>Review</ore-step>\n * ```\n */\nexport const STEP_TAG = 'ore-step' as const;\ndefine<OreStepProps>(STEP_TAG, {\n props: {\n ...disablableBundle,\n color: prop.string<ThemeColor>(),\n error: prop.bool(false),\n optional: prop.bool(false),\n orientation: prop.oneOf(['horizontal', 'vertical'] as const, 'horizontal'),\n size: prop.string<ComponentSize>(),\n value: prop.string(''),\n },\n setup(props) {\n const el = getHost();\n const slots = useSlots();\n const stepperCtx = inject(STEPPER_CTX);\n\n // ────────────────────────────────────────────────────────────────\n // State derived from the parent ore-stepper's context — see stepper.ts's\n // module doc comment for why this replaced parent-side attribute fan-out.\n // ────────────────────────────────────────────────────────────────\n\n // Plain functions, not `computed()` — every one of these ultimately reads\n // `stepperCtx.stepValues`/`stepperCtx.currentValue`, which are themselves `computed()`s\n // owned by the parent `ore-stepper`. Wrapping a *child* `computed()` around a *parent*\n // `computed()` (a computed-to-computed dependency crossing a `provide()`/`inject()`\n // boundary) is exactly the shape that surfaced two related bugs: a step's `completed`/\n // `current` attributes going permanently stale after a few rapid selections, and — worse —\n // a step's entire clickable/static control silently failing to render at all when its\n // `ore-step` tag upgrades before its siblings exist in the light DOM yet (true whenever\n // `ore-step`/`ore-stepper` are already `customElements.define()`d before this markup is\n // parsed, e.g. every sandboxed live-preview iframe). Reading straight through to the\n // parent's computeds on every call — no intermediate computed layer of our own to go\n // stale — made both disappear. Cheap enough to not need memoizing (a couple of `indexOf`/\n // comparisons over an already-memoized parent computed).\n const stepIndex = (): number => (stepperCtx ? stepperCtx.stepValues.value.indexOf(props.value.value) : -1);\n const totalSteps = (): number => stepperCtx?.stepValues.value.length ?? 0;\n const currentIndex = (): number =>\n stepperCtx ? stepperCtx.stepValues.value.indexOf(stepperCtx.currentValue.value ?? '') : -1;\n // 1-based, always-sane values for on-screen text (the step number badge, the sr-only\n // \"Step X of Y\" label) — falls back to \"1 of 1\" when rendered standalone with no parent\n // `ore-stepper` to derive a real position from. Kept separate from the `index`/`total`\n // *attributes* below, which correctly reflect nothing at all in that same standalone case.\n const displayIndex = (): number => {\n const index = stepIndex();\n\n return index >= 0 ? index + 1 : 1;\n };\n const displayTotal = (): number => totalSteps() || 1;\n\n const isCurrent = (): boolean => {\n const index = stepIndex();\n const current = currentIndex();\n\n return index >= 0 && index === current;\n };\n // Purely positional — intentionally NOT gated on `props.error.value`. This also drives the\n // `completed` *attribute* below, which `step.css` uses to color both connector segments\n // either side of the indicator (`:host([completed]) .connector`); every *consumer* of this\n // (the icon choice, the sr-only state label) already checks `error` first and short-circuits\n // before it matters, so folding `!error` in here too would only end up suppressing\n // `[completed]` on an error step that's before the current one — breaking the connector\n // color chain right at that step instead of just swapping its icon.\n const isCompleted = (): boolean => {\n const index = stepIndex();\n const current = currentIndex();\n\n return index >= 0 && current >= 0 && index < current;\n };\n const isNavigable = (): boolean => {\n const index = stepIndex();\n const current = currentIndex();\n\n return (\n !!stepperCtx &&\n isStepNavigable({\n disabled: props.disabled.value === true,\n index,\n linear: stepperCtx.linear.value,\n stepperClickable: stepperCtx.clickable.value,\n stepperCurrentIndex: current,\n })\n );\n };\n const isDisabled = () => Boolean(props.disabled.value);\n\n // Purely derived, read-only state — no matching `prop.*` declaration, so `bind()` is the\n // sole writer and can safely reflect `undefined` (removes the attribute) when this step\n // isn't nested inside an `ore-stepper` at all.\n bind({\n attr: {\n completed: () => (isCompleted() ? true : undefined),\n current: () => (isCurrent() ? true : undefined),\n index: () => {\n const index = stepIndex();\n\n return index >= 0 ? String(index + 1) : undefined;\n },\n navigable: () => (isNavigable() ? true : undefined),\n total: () => (stepperCtx ? String(totalSteps()) : undefined),\n },\n });\n\n // `color`/`size`/`orientation` double as regular, independently-settable props (for a step\n // rendered standalone) *and* stepper-inherited values — mirrors ore-tab-item's handling of\n // its own `color`/`size`/`variant` inheritance from `ore-tabs`. Only forcibly overwrite the\n // attribute when a parent context actually exists, so the plain prop reflection is left\n // alone otherwise.\n if (stepperCtx) {\n watchEffect(() => {\n const color = stepperCtx.color.value;\n const size = stepperCtx.size.value;\n const orientation = stepperCtx.orientation.value;\n\n if (color !== undefined) el.setAttribute('color', color);\n\n if (size !== undefined) el.setAttribute('size', size);\n\n el.setAttribute('orientation', orientation);\n });\n }\n\n const stateLabel = (): string | undefined => {\n if (props.error.value) return 'error';\n\n if (isCompleted()) return 'completed';\n\n if (isCurrent()) return 'current step';\n\n return undefined;\n };\n\n const positionLabel = () => `Step ${displayIndex()} of ${displayTotal()}`;\n const srLabel = () => {\n const state = stateLabel();\n\n return state ? `${positionLabel()}, ${state}` : positionLabel();\n };\n\n const handleClick = (event: MouseEvent) => {\n event.stopPropagation();\n\n if (!isNavigable()) {\n event.preventDefault();\n\n return;\n }\n\n el.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: { value: props.value.value } }));\n };\n\n const indicatorTemplate = () => html`\n <span class=\"indicator\" part=\"indicator\" aria-hidden=\"true\">\n <span class=\"icon-slot\" ?hidden=\"${() => !slots.has('icon').value}\"><slot name=\"icon\"></slot></span>\n ${() =>\n slots.has('icon').value\n ? ''\n : props.error.value\n ? html`\n <ore-icon name=\"x\" size=\"14\" stroke-width=\"3\"></ore-icon>\n `\n : isCompleted()\n ? html`\n <ore-icon name=\"check\" size=\"14\" stroke-width=\"3\"></ore-icon>\n `\n : html`\n <span class=\"number\">${displayIndex}</span>\n `}\n </span>\n `;\n\n const contentTemplate = () => html`\n <span class=\"content\" part=\"content\">\n <span class=\"sr-only\">${srLabel}</span>\n <span class=\"label\" part=\"label\">\n <span class=\"label-text\"><slot></slot></span>\n ${() =>\n props.optional.value\n ? html`\n <span class=\"optional-hint\">(optional)</span>\n `\n : ''}\n </span>\n <span class=\"description\" part=\"description\" ?hidden=\"${() => !slots.has('description').value}\">\n <slot name=\"description\"></slot>\n </span>\n </span>\n `;\n\n return html`\n <li class=\"step\" role=\"listitem\">\n <span class=\"connector connector-leading\" part=\"connector\" aria-hidden=\"true\"></span>\n <span class=\"connector connector-trailing\" part=\"connector\" aria-hidden=\"true\"></span>\n ${() =>\n isNavigable()\n ? html`\n <button\n type=\"button\"\n class=\"control\"\n part=\"control\"\n aria-current=\"${() => (isCurrent() ? 'step' : null)}\"\n aria-disabled=\"${isDisabled}\"\n tabindex=\"${() => (isCurrent() ? '0' : '-1')}\"\n @click=\"${handleClick}\">\n ${indicatorTemplate()}${contentTemplate()}\n </button>\n `\n : html`\n <div class=\"control\" part=\"control\" aria-current=\"${() => (isCurrent() ? 'step' : null)}\">\n ${indicatorTemplate()}${contentTemplate()}\n </div>\n `}\n </li>\n `;\n },\n styles: [colorThemeMixin, coarsePointerMixin, forcedColorsFocusMixin('button.control'), stepStyles],\n});\n"],"mappings":"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"}
|
package/dist/stepper.cjs
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./core/ore.cjs"),t=require("./core/keyboard.cjs"),n=require("./core/direction.cjs"),r=require("./core/nav.cjs"),i=require("./shared/prop-bundles.cjs"),a=require("./content/stepper/_is-step-navigable.cjs"),o=require("./content/stepper/stepper.css.cjs");let s=require("@vielzeug/ore"),c=require("@vielzeug/ripple"),l=require("@vielzeug/ripple/watch");var u=(0,s.createContext)(`StepperContext`),d=`ore-stepper`;(0,s.define)(d,{props:{...i.themableBundle,...i.sizableBundle,...i.disablableBundle,clickable:s.prop.bool(!1),label:s.prop.string(`Progress`),linear:s.prop.bool(!1),orientation:s.prop.oneOf([`horizontal`,`vertical`],`horizontal`),value:s.prop.string()},setup(i){let o=(0,s.getHost)(),d=(0,s.useEmit)(),f=(0,s.useSlots)(),p=()=>Array.from(o.querySelectorAll(`:scope > ore-step`)),m=e=>{e?.shadowRoot?.querySelector(`button.control`)?.focus()},h=(0,c.signal)(i.value.value);(0,s.bind)({attr:{value:()=>h.value??null}});let g=(e,t=!1)=>{!e||e===h.value||(h.value=e,t&&d(`change`,{value:e}))},_=()=>{let e=p();if(e.length===0)return;let t=h.value;if(t&&e.some(e=>e.getAttribute(`value`)===t))return;let n=e.find(e=>!e.hasAttribute(`disabled`))?.getAttribute(`value`)??void 0;n&&g(n)};(0,l.watch)(i.value,e=>{h.value=e,_()});let v=(0,c.computed)(()=>(f.elements().value,p().map(e=>e.getAttribute(`value`)??``)));(0,s.provide)(u,{clickable:(0,c.computed)(()=>!!i.clickable.value&&!i.disabled.value),color:i.color,currentValue:h,linear:(0,c.computed)(()=>!!i.linear.value),orientation:(0,c.computed)(()=>i.orientation.value??`horizontal`),size:i.size,stepValues:v}),(0,s.onMounted)(()=>_());let y=()=>{let e=p(),t=e.map(e=>e.getAttribute(`value`)??``).indexOf(h.value??``),n=!!i.clickable.value&&!i.disabled.value,r=!!i.linear.value;return e.filter((e,i)=>a.isStepNavigable({disabled:e.hasAttribute(`disabled`),index:i,linear:r,stepperClickable:n,stepperCurrentIndex:t}))},b=r.createListControl({direction:()=>n.elementDirection(o),getItems:y,loop:!1,onNavigate:(e,t)=>{let n=y()[t],r=n?.getAttribute(`value`);r&&g(r,!0),m(n)},orientation:()=>i.orientation.value===`vertical`?`vertical`:`horizontal`,signal:e.lifecycleSignal(s.onCleanup)}),x=e=>{let t=e.composedPath().find(e=>e instanceof HTMLElement&&e.localName===`ore-step`);if(!t||t.closest(`ore-stepper`)!==o||!y().includes(t))return;let n=t.getAttribute(`value`);g(n??void 0,!0),m(t)},S=t.createInteraction({onPress:()=>{let e=y().find(e=>e===document.activeElement||e.shadowRoot?.activeElement===document.activeElement),t=e?.getAttribute(`value`);t&&(g(t,!0),m(e))}});return(0,s.bind)({on:{click:x,keydown:e=>{let t=y();if(t.length===0)return;let n=e.composedPath().find(e=>e instanceof HTMLElement&&e.localName===`ore-step`),r=n?t.indexOf(n):-1;r>=0&&b.set(r),!b.handleKeydown(e)&&S.handleKeydown(e)}}}),s.html`
|
|
2
|
+
<nav part="nav" aria-label="${i.label}">
|
|
3
|
+
<ol class="steps" role="list" part="list">
|
|
4
|
+
<slot></slot>
|
|
5
|
+
</ol>
|
|
6
|
+
</nav>
|
|
7
|
+
`},styles:[o.default]}),exports.STEPPER_CTX=u,exports.STEPPER_TAG=d;
|
|
8
|
+
//# sourceMappingURL=stepper.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.cjs","names":[],"sources":["../src/content/stepper/stepper.ts"],"sourcesContent":["import {\n createContext,\n define,\n html,\n prop,\n bind,\n getHost,\n onCleanup,\n onMounted,\n provide,\n useEmit,\n useSlots,\n} from '@vielzeug/ore';\nimport { computed, signal, type Readable } from '@vielzeug/ripple';\nimport { watch } from '@vielzeug/ripple/watch';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { createInteraction, createListControl, elementDirection, lifecycleSignal } from '../../core';\nimport { disablableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { isStepNavigable } from './_is-step-navigable';\nimport componentStyles from './stepper.css?inline';\n\n// ── Context ─────────────────────────────────────────────────────────────────\n//\n// ore-step derives all of its parent-relative state (current/completed/navigable/\n// index/total/color/size/orientation) from this context instead of ore-stepper\n// pushing 8 attributes onto every child on every change. Matches the\n// provide()/inject() coordination already used by ore-tabs/ore-tab-item,\n// ore-radio-group/ore-radio, and ore-list/ore-list-item — ore-stepper was\n// previously the one outlier doing manual `querySelectorAll` + `setAttribute`\n// fan-out, which meant every reactive change re-walked and re-wrote every step\n// regardless of whether that step's own state actually changed.\n\n/** Context provided by ore-stepper to its ore-step children. */\nexport type StepperContext = {\n clickable: Readable<boolean>;\n color: Readable<ThemeColor | undefined>;\n currentValue: Readable<string | undefined>;\n linear: Readable<boolean>;\n orientation: Readable<'horizontal' | 'vertical'>;\n size: Readable<ComponentSize | undefined>;\n /** Ordered `value`s of every sibling `ore-step`, used to derive index/total/completed. */\n stepValues: Readable<string[]>;\n};\n/** Injection key for the stepper context. */\nexport const STEPPER_CTX = createContext<StepperContext>('StepperContext');\n\nexport type OreStepperEvents = {\n change: { value: string };\n};\n\nexport type OreStepperProps = {\n /** When true, steps are clickable/keyboard-focusable for navigation. Default: display-only progress. */\n clickable?: boolean;\n /** Theme color for the current/completed step indicators */\n color?: ThemeColor;\n /** Disables the whole stepper — no step is navigable regardless of `clickable` */\n disabled?: boolean;\n /** Accessible label for the nav landmark */\n label?: string;\n /**\n * Restricts navigation to completed steps and the current step — steps ahead of the\n * current one cannot be clicked or focused, even when `clickable` is set.\n */\n linear?: boolean;\n /** Layout orientation — 'horizontal' (default, desktop) or 'vertical' (compact/mobile-friendly) */\n orientation?: 'horizontal' | 'vertical';\n /** Component size */\n size?: ComponentSize;\n /** The `value` of the currently active `ore-step` */\n value?: string;\n};\n\n/**\n * Displays progress through a sequence of numbered steps. Manages step selection and provides\n * shared state (current value, clickability, theming) to its `ore-step` children via context.\n * Can be purely informational (progress display) or interactive navigation.\n *\n * @element ore-stepper\n * @element ore-step - Child element for each step (auto-discovered)\n *\n * @attr {string} value - The value of the currently active step\n * @attr {boolean} clickable - Allow clicking/focusing steps to navigate\n * @attr {boolean} linear - Restrict navigation to completed + current steps only\n * @attr {boolean} disabled - Disables the whole stepper\n * @attr {string} orientation - 'horizontal' (default) | 'vertical'\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - Size: 'sm' | 'md' | 'lg'\n * @attr {string} label - Accessible nav landmark label (default: 'Progress')\n *\n * @fires change - Emitted when the active step changes via click/keyboard. detail: { value: string }\n *\n * @slot - `ore-step` elements\n *\n * @cssprop --stepper-connector-color - Color of the connector line between steps\n * @cssprop --stepper-connector-size - Thickness of the connector line\n * @cssprop --stepper-gap - Gap between steps\n *\n * @part nav - Navigation landmark element\n * @part list - Ordered list container holding the slotted steps\n *\n * @example\n * ```html\n * <!-- Display-only progress -->\n * <ore-stepper value=\"shipping\" color=\"primary\">\n * <ore-step value=\"cart\">Cart</ore-step>\n * <ore-step value=\"shipping\">Shipping</ore-step>\n * <ore-step value=\"payment\">Payment</ore-step>\n * </ore-stepper>\n *\n * <!-- Clickable navigation, mobile-friendly vertical layout -->\n * <ore-stepper value=\"shipping\" clickable linear orientation=\"vertical\">\n * <ore-step value=\"cart\">Cart</ore-step>\n * <ore-step value=\"shipping\">Shipping</ore-step>\n * <ore-step value=\"payment\" disabled>Payment</ore-step>\n * </ore-stepper>\n * ```\n */\nexport const STEPPER_TAG = 'ore-stepper' as const;\ndefine<OreStepperProps>(STEPPER_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n clickable: prop.bool(false),\n label: prop.string('Progress'),\n linear: prop.bool(false),\n orientation: prop.oneOf(['horizontal', 'vertical'] as const, 'horizontal'),\n value: prop.string(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreStepperEvents>();\n const slots = useSlots();\n\n const getSteps = (): HTMLElement[] => Array.from(el.querySelectorAll(':scope > ore-step')) as HTMLElement[];\n\n const focusStep = (step: HTMLElement | undefined) => {\n step?.shadowRoot?.querySelector<HTMLElement>('button.control')?.focus();\n };\n\n // ────────────────────────────────────────────────────────────────\n // Selection State — mirrors ore-tabs' `selectedValue` signal + `ensureSelection()` pattern\n // ────────────────────────────────────────────────────────────────\n\n const currentValue = signal<string | undefined>(props.value.value);\n\n bind({ attr: { value: () => currentValue.value ?? null } });\n\n const setSelection = (value: string | undefined, shouldEmit = false) => {\n if (!value || value === currentValue.value) return;\n\n currentValue.value = value;\n\n if (shouldEmit) emit('change', { value });\n };\n\n const ensureSelection = () => {\n const steps = getSteps();\n\n if (steps.length === 0) return;\n\n const current = currentValue.value;\n const hasCurrent = current ? steps.some((s) => s.getAttribute('value') === current) : false;\n\n if (hasCurrent) return;\n\n const firstEnabled = steps.find((s) => !s.hasAttribute('disabled'))?.getAttribute('value') ?? undefined;\n\n if (firstEnabled) setSelection(firstEnabled);\n };\n\n watch(props.value, (value) => {\n currentValue.value = value;\n ensureSelection();\n });\n\n // ────────────────────────────────────────────────────────────────\n // Context provided to ore-step children\n // ────────────────────────────────────────────────────────────────\n\n const stepValues = computed(() => {\n void slots.elements().value;\n\n return getSteps().map((s) => s.getAttribute('value') ?? '');\n });\n\n provide(STEPPER_CTX, {\n clickable: computed(() => Boolean(props.clickable.value) && !props.disabled.value),\n color: props.color,\n currentValue,\n linear: computed(() => Boolean(props.linear.value)),\n orientation: computed(() => props.orientation.value ?? 'horizontal'),\n size: props.size,\n stepValues,\n });\n\n // Deferred to `onMounted()` (mirrors ore-tabs' `ensureSelection()` timing) rather than an\n // immediate `watch(stepValues, ...)` — `getSteps()` walks the *live* light DOM, and while the\n // browser is still parsing this element's `ore-step` children (synchronously upgrading each\n // one as its own tag is reached, which happens whenever `customElements.define()` already\n // ran before this markup was parsed — exactly what a sandboxed live-preview iframe does by\n // design), `stepValues` observes that child list mid-populate. Reading it eagerly here used\n // to call `ensureSelection()` — and therefore write `currentValue` — once per step as each\n // one was discovered, interleaved with that *same* step's own first render effect further\n // down the reactive graph. That reentrant write during a child's not-yet-finished initial\n // render corrupted its rendered output (the step's clickable/static control silently failed\n // to mount at all). Onmounted's callback runs on a microtask, strictly after the whole\n // synchronous parse (and thus every child) has completed, so `getSteps()` sees the final list.\n onMounted(() => ensureSelection());\n\n // ────────────────────────────────────────────────────────────────\n // Keyboard Navigation (roving tabindex over navigable steps)\n // ────────────────────────────────────────────────────────────────\n\n const getNavigableSteps = (): HTMLElement[] => {\n const steps = getSteps();\n const values = steps.map((s) => s.getAttribute('value') ?? '');\n const currentIndex = values.indexOf(currentValue.value ?? '');\n const clickable = Boolean(props.clickable.value) && !props.disabled.value;\n const linear = Boolean(props.linear.value);\n\n return steps.filter((step, index) =>\n isStepNavigable({\n disabled: step.hasAttribute('disabled'),\n index,\n linear,\n stepperClickable: clickable,\n stepperCurrentIndex: currentIndex,\n }),\n );\n };\n\n const listControl = createListControl({\n direction: () => elementDirection(el),\n getItems: getNavigableSteps,\n loop: false,\n onNavigate: (_action, index) => {\n const steps = getNavigableSteps();\n const nextStep = steps[index];\n\n // Select BEFORE focusing: changing `currentValue` re-renders each step's\n // control (the step's navigable/button node-slot depends on the current\n // index), which destroys the previously focused button. Ripple flushes\n // effects synchronously, so by the time focusStep() runs the replacement\n // button exists.\n const value = nextStep?.getAttribute('value');\n\n if (value) setSelection(value, true);\n\n focusStep(nextStep);\n },\n orientation: () => (props.orientation.value === 'vertical' ? 'vertical' : 'horizontal'),\n signal: lifecycleSignal(onCleanup),\n });\n\n const handleStepClick = (e: Event) => {\n const step = e\n .composedPath()\n .find((node): node is HTMLElement => node instanceof HTMLElement && node.localName === 'ore-step');\n\n if (!step || step.closest(STEPPER_TAG) !== el || !getNavigableSteps().includes(step)) return;\n\n const value = step.getAttribute('value');\n\n setSelection(value ?? undefined, true);\n // The click focused the step's old control; the selection re-render replaced\n // it — restore focus onto the new one (see onNavigate's ordering note).\n focusStep(step);\n };\n\n const activateFocusedStep = (): void => {\n const steps = getNavigableSteps();\n const focusedStep = steps.find(\n (step) => step === document.activeElement || step.shadowRoot?.activeElement === document.activeElement,\n );\n const value = focusedStep?.getAttribute('value');\n\n if (value) {\n setSelection(value, true);\n focusStep(focusedStep);\n }\n };\n\n const activationPress = createInteraction({ onPress: activateFocusedStep });\n\n const handleKeydown = (e: KeyboardEvent) => {\n const steps = getNavigableSteps();\n\n if (steps.length === 0) return;\n\n const path = e.composedPath();\n const stepFromEvent = path.find(\n (node): node is HTMLElement => node instanceof HTMLElement && node.localName === 'ore-step',\n );\n const focused = stepFromEvent ? steps.indexOf(stepFromEvent) : -1;\n\n if (focused >= 0) listControl.set(focused);\n\n if (listControl.handleKeydown(e)) return;\n\n activationPress.handleKeydown(e);\n };\n\n bind({\n on: {\n click: handleStepClick,\n keydown: handleKeydown,\n },\n });\n\n return html`\n <nav part=\"nav\" aria-label=\"${props.label}\">\n <ol class=\"steps\" role=\"list\" part=\"list\">\n <slot></slot>\n </ol>\n </nav>\n `;\n },\n styles: [componentStyles],\n});\n"],"mappings":"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"}
|
package/dist/stepper.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { lifecycleSignal as e } from "./core/ore.js";
|
|
2
|
+
import { createInteraction as t } from "./core/keyboard.js";
|
|
3
|
+
import { elementDirection as n } from "./core/direction.js";
|
|
4
|
+
import { createListControl as r } from "./core/nav.js";
|
|
5
|
+
import { disablableBundle as i, sizableBundle as a, themableBundle as o } from "./shared/prop-bundles.js";
|
|
6
|
+
import { isStepNavigable as s } from "./content/stepper/_is-step-navigable.js";
|
|
7
|
+
import c from "./content/stepper/stepper.css.js";
|
|
8
|
+
import { bind as l, createContext as u, define as d, getHost as f, html as p, onCleanup as m, onMounted as h, prop as g, provide as _, useEmit as v, useSlots as y } from "@vielzeug/ore";
|
|
9
|
+
import { computed as b, signal as x } from "@vielzeug/ripple";
|
|
10
|
+
import { watch as S } from "@vielzeug/ripple/watch";
|
|
11
|
+
//#region src/content/stepper/stepper.ts
|
|
12
|
+
var C = u("StepperContext"), w = "ore-stepper";
|
|
13
|
+
d(w, {
|
|
14
|
+
props: {
|
|
15
|
+
...o,
|
|
16
|
+
...a,
|
|
17
|
+
...i,
|
|
18
|
+
clickable: g.bool(!1),
|
|
19
|
+
label: g.string("Progress"),
|
|
20
|
+
linear: g.bool(!1),
|
|
21
|
+
orientation: g.oneOf(["horizontal", "vertical"], "horizontal"),
|
|
22
|
+
value: g.string()
|
|
23
|
+
},
|
|
24
|
+
setup(i) {
|
|
25
|
+
let a = f(), o = v(), c = y(), u = () => Array.from(a.querySelectorAll(":scope > ore-step")), d = (e) => {
|
|
26
|
+
e?.shadowRoot?.querySelector("button.control")?.focus();
|
|
27
|
+
}, g = x(i.value.value);
|
|
28
|
+
l({ attr: { value: () => g.value ?? null } });
|
|
29
|
+
let w = (e, t = !1) => {
|
|
30
|
+
!e || e === g.value || (g.value = e, t && o("change", { value: e }));
|
|
31
|
+
}, T = () => {
|
|
32
|
+
let e = u();
|
|
33
|
+
if (e.length === 0) return;
|
|
34
|
+
let t = g.value;
|
|
35
|
+
if (t && e.some((e) => e.getAttribute("value") === t)) return;
|
|
36
|
+
let n = e.find((e) => !e.hasAttribute("disabled"))?.getAttribute("value") ?? void 0;
|
|
37
|
+
n && w(n);
|
|
38
|
+
};
|
|
39
|
+
S(i.value, (e) => {
|
|
40
|
+
g.value = e, T();
|
|
41
|
+
});
|
|
42
|
+
let E = b(() => (c.elements().value, u().map((e) => e.getAttribute("value") ?? "")));
|
|
43
|
+
_(C, {
|
|
44
|
+
clickable: b(() => !!i.clickable.value && !i.disabled.value),
|
|
45
|
+
color: i.color,
|
|
46
|
+
currentValue: g,
|
|
47
|
+
linear: b(() => !!i.linear.value),
|
|
48
|
+
orientation: b(() => i.orientation.value ?? "horizontal"),
|
|
49
|
+
size: i.size,
|
|
50
|
+
stepValues: E
|
|
51
|
+
}), h(() => T());
|
|
52
|
+
let D = () => {
|
|
53
|
+
let e = u(), t = e.map((e) => e.getAttribute("value") ?? "").indexOf(g.value ?? ""), n = !!i.clickable.value && !i.disabled.value, r = !!i.linear.value;
|
|
54
|
+
return e.filter((e, i) => s({
|
|
55
|
+
disabled: e.hasAttribute("disabled"),
|
|
56
|
+
index: i,
|
|
57
|
+
linear: r,
|
|
58
|
+
stepperClickable: n,
|
|
59
|
+
stepperCurrentIndex: t
|
|
60
|
+
}));
|
|
61
|
+
}, O = r({
|
|
62
|
+
direction: () => n(a),
|
|
63
|
+
getItems: D,
|
|
64
|
+
loop: !1,
|
|
65
|
+
onNavigate: (e, t) => {
|
|
66
|
+
let n = D()[t], r = n?.getAttribute("value");
|
|
67
|
+
r && w(r, !0), d(n);
|
|
68
|
+
},
|
|
69
|
+
orientation: () => i.orientation.value === "vertical" ? "vertical" : "horizontal",
|
|
70
|
+
signal: e(m)
|
|
71
|
+
}), k = (e) => {
|
|
72
|
+
let t = e.composedPath().find((e) => e instanceof HTMLElement && e.localName === "ore-step");
|
|
73
|
+
if (!t || t.closest("ore-stepper") !== a || !D().includes(t)) return;
|
|
74
|
+
let n = t.getAttribute("value");
|
|
75
|
+
w(n ?? void 0, !0), d(t);
|
|
76
|
+
}, A = t({ onPress: () => {
|
|
77
|
+
let e = D().find((e) => e === document.activeElement || e.shadowRoot?.activeElement === document.activeElement), t = e?.getAttribute("value");
|
|
78
|
+
t && (w(t, !0), d(e));
|
|
79
|
+
} });
|
|
80
|
+
return l({ on: {
|
|
81
|
+
click: k,
|
|
82
|
+
keydown: (e) => {
|
|
83
|
+
let t = D();
|
|
84
|
+
if (t.length === 0) return;
|
|
85
|
+
let n = e.composedPath().find((e) => e instanceof HTMLElement && e.localName === "ore-step"), r = n ? t.indexOf(n) : -1;
|
|
86
|
+
r >= 0 && O.set(r), !O.handleKeydown(e) && A.handleKeydown(e);
|
|
87
|
+
}
|
|
88
|
+
} }), p`
|
|
89
|
+
<nav part="nav" aria-label="${i.label}">
|
|
90
|
+
<ol class="steps" role="list" part="list">
|
|
91
|
+
<slot></slot>
|
|
92
|
+
</ol>
|
|
93
|
+
</nav>
|
|
94
|
+
`;
|
|
95
|
+
},
|
|
96
|
+
styles: [c]
|
|
97
|
+
});
|
|
98
|
+
//#endregion
|
|
99
|
+
export { C as STEPPER_CTX, w as STEPPER_TAG };
|
|
100
|
+
|
|
101
|
+
//# sourceMappingURL=stepper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.js","names":[],"sources":["../src/content/stepper/stepper.ts"],"sourcesContent":["import {\n createContext,\n define,\n html,\n prop,\n bind,\n getHost,\n onCleanup,\n onMounted,\n provide,\n useEmit,\n useSlots,\n} from '@vielzeug/ore';\nimport { computed, signal, type Readable } from '@vielzeug/ripple';\nimport { watch } from '@vielzeug/ripple/watch';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { createInteraction, createListControl, elementDirection, lifecycleSignal } from '../../core';\nimport { disablableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { isStepNavigable } from './_is-step-navigable';\nimport componentStyles from './stepper.css?inline';\n\n// ── Context ─────────────────────────────────────────────────────────────────\n//\n// ore-step derives all of its parent-relative state (current/completed/navigable/\n// index/total/color/size/orientation) from this context instead of ore-stepper\n// pushing 8 attributes onto every child on every change. Matches the\n// provide()/inject() coordination already used by ore-tabs/ore-tab-item,\n// ore-radio-group/ore-radio, and ore-list/ore-list-item — ore-stepper was\n// previously the one outlier doing manual `querySelectorAll` + `setAttribute`\n// fan-out, which meant every reactive change re-walked and re-wrote every step\n// regardless of whether that step's own state actually changed.\n\n/** Context provided by ore-stepper to its ore-step children. */\nexport type StepperContext = {\n clickable: Readable<boolean>;\n color: Readable<ThemeColor | undefined>;\n currentValue: Readable<string | undefined>;\n linear: Readable<boolean>;\n orientation: Readable<'horizontal' | 'vertical'>;\n size: Readable<ComponentSize | undefined>;\n /** Ordered `value`s of every sibling `ore-step`, used to derive index/total/completed. */\n stepValues: Readable<string[]>;\n};\n/** Injection key for the stepper context. */\nexport const STEPPER_CTX = createContext<StepperContext>('StepperContext');\n\nexport type OreStepperEvents = {\n change: { value: string };\n};\n\nexport type OreStepperProps = {\n /** When true, steps are clickable/keyboard-focusable for navigation. Default: display-only progress. */\n clickable?: boolean;\n /** Theme color for the current/completed step indicators */\n color?: ThemeColor;\n /** Disables the whole stepper — no step is navigable regardless of `clickable` */\n disabled?: boolean;\n /** Accessible label for the nav landmark */\n label?: string;\n /**\n * Restricts navigation to completed steps and the current step — steps ahead of the\n * current one cannot be clicked or focused, even when `clickable` is set.\n */\n linear?: boolean;\n /** Layout orientation — 'horizontal' (default, desktop) or 'vertical' (compact/mobile-friendly) */\n orientation?: 'horizontal' | 'vertical';\n /** Component size */\n size?: ComponentSize;\n /** The `value` of the currently active `ore-step` */\n value?: string;\n};\n\n/**\n * Displays progress through a sequence of numbered steps. Manages step selection and provides\n * shared state (current value, clickability, theming) to its `ore-step` children via context.\n * Can be purely informational (progress display) or interactive navigation.\n *\n * @element ore-stepper\n * @element ore-step - Child element for each step (auto-discovered)\n *\n * @attr {string} value - The value of the currently active step\n * @attr {boolean} clickable - Allow clicking/focusing steps to navigate\n * @attr {boolean} linear - Restrict navigation to completed + current steps only\n * @attr {boolean} disabled - Disables the whole stepper\n * @attr {string} orientation - 'horizontal' (default) | 'vertical'\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - Size: 'sm' | 'md' | 'lg'\n * @attr {string} label - Accessible nav landmark label (default: 'Progress')\n *\n * @fires change - Emitted when the active step changes via click/keyboard. detail: { value: string }\n *\n * @slot - `ore-step` elements\n *\n * @cssprop --stepper-connector-color - Color of the connector line between steps\n * @cssprop --stepper-connector-size - Thickness of the connector line\n * @cssprop --stepper-gap - Gap between steps\n *\n * @part nav - Navigation landmark element\n * @part list - Ordered list container holding the slotted steps\n *\n * @example\n * ```html\n * <!-- Display-only progress -->\n * <ore-stepper value=\"shipping\" color=\"primary\">\n * <ore-step value=\"cart\">Cart</ore-step>\n * <ore-step value=\"shipping\">Shipping</ore-step>\n * <ore-step value=\"payment\">Payment</ore-step>\n * </ore-stepper>\n *\n * <!-- Clickable navigation, mobile-friendly vertical layout -->\n * <ore-stepper value=\"shipping\" clickable linear orientation=\"vertical\">\n * <ore-step value=\"cart\">Cart</ore-step>\n * <ore-step value=\"shipping\">Shipping</ore-step>\n * <ore-step value=\"payment\" disabled>Payment</ore-step>\n * </ore-stepper>\n * ```\n */\nexport const STEPPER_TAG = 'ore-stepper' as const;\ndefine<OreStepperProps>(STEPPER_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n clickable: prop.bool(false),\n label: prop.string('Progress'),\n linear: prop.bool(false),\n orientation: prop.oneOf(['horizontal', 'vertical'] as const, 'horizontal'),\n value: prop.string(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreStepperEvents>();\n const slots = useSlots();\n\n const getSteps = (): HTMLElement[] => Array.from(el.querySelectorAll(':scope > ore-step')) as HTMLElement[];\n\n const focusStep = (step: HTMLElement | undefined) => {\n step?.shadowRoot?.querySelector<HTMLElement>('button.control')?.focus();\n };\n\n // ────────────────────────────────────────────────────────────────\n // Selection State — mirrors ore-tabs' `selectedValue` signal + `ensureSelection()` pattern\n // ────────────────────────────────────────────────────────────────\n\n const currentValue = signal<string | undefined>(props.value.value);\n\n bind({ attr: { value: () => currentValue.value ?? null } });\n\n const setSelection = (value: string | undefined, shouldEmit = false) => {\n if (!value || value === currentValue.value) return;\n\n currentValue.value = value;\n\n if (shouldEmit) emit('change', { value });\n };\n\n const ensureSelection = () => {\n const steps = getSteps();\n\n if (steps.length === 0) return;\n\n const current = currentValue.value;\n const hasCurrent = current ? steps.some((s) => s.getAttribute('value') === current) : false;\n\n if (hasCurrent) return;\n\n const firstEnabled = steps.find((s) => !s.hasAttribute('disabled'))?.getAttribute('value') ?? undefined;\n\n if (firstEnabled) setSelection(firstEnabled);\n };\n\n watch(props.value, (value) => {\n currentValue.value = value;\n ensureSelection();\n });\n\n // ────────────────────────────────────────────────────────────────\n // Context provided to ore-step children\n // ────────────────────────────────────────────────────────────────\n\n const stepValues = computed(() => {\n void slots.elements().value;\n\n return getSteps().map((s) => s.getAttribute('value') ?? '');\n });\n\n provide(STEPPER_CTX, {\n clickable: computed(() => Boolean(props.clickable.value) && !props.disabled.value),\n color: props.color,\n currentValue,\n linear: computed(() => Boolean(props.linear.value)),\n orientation: computed(() => props.orientation.value ?? 'horizontal'),\n size: props.size,\n stepValues,\n });\n\n // Deferred to `onMounted()` (mirrors ore-tabs' `ensureSelection()` timing) rather than an\n // immediate `watch(stepValues, ...)` — `getSteps()` walks the *live* light DOM, and while the\n // browser is still parsing this element's `ore-step` children (synchronously upgrading each\n // one as its own tag is reached, which happens whenever `customElements.define()` already\n // ran before this markup was parsed — exactly what a sandboxed live-preview iframe does by\n // design), `stepValues` observes that child list mid-populate. Reading it eagerly here used\n // to call `ensureSelection()` — and therefore write `currentValue` — once per step as each\n // one was discovered, interleaved with that *same* step's own first render effect further\n // down the reactive graph. That reentrant write during a child's not-yet-finished initial\n // render corrupted its rendered output (the step's clickable/static control silently failed\n // to mount at all). Onmounted's callback runs on a microtask, strictly after the whole\n // synchronous parse (and thus every child) has completed, so `getSteps()` sees the final list.\n onMounted(() => ensureSelection());\n\n // ────────────────────────────────────────────────────────────────\n // Keyboard Navigation (roving tabindex over navigable steps)\n // ────────────────────────────────────────────────────────────────\n\n const getNavigableSteps = (): HTMLElement[] => {\n const steps = getSteps();\n const values = steps.map((s) => s.getAttribute('value') ?? '');\n const currentIndex = values.indexOf(currentValue.value ?? '');\n const clickable = Boolean(props.clickable.value) && !props.disabled.value;\n const linear = Boolean(props.linear.value);\n\n return steps.filter((step, index) =>\n isStepNavigable({\n disabled: step.hasAttribute('disabled'),\n index,\n linear,\n stepperClickable: clickable,\n stepperCurrentIndex: currentIndex,\n }),\n );\n };\n\n const listControl = createListControl({\n direction: () => elementDirection(el),\n getItems: getNavigableSteps,\n loop: false,\n onNavigate: (_action, index) => {\n const steps = getNavigableSteps();\n const nextStep = steps[index];\n\n // Select BEFORE focusing: changing `currentValue` re-renders each step's\n // control (the step's navigable/button node-slot depends on the current\n // index), which destroys the previously focused button. Ripple flushes\n // effects synchronously, so by the time focusStep() runs the replacement\n // button exists.\n const value = nextStep?.getAttribute('value');\n\n if (value) setSelection(value, true);\n\n focusStep(nextStep);\n },\n orientation: () => (props.orientation.value === 'vertical' ? 'vertical' : 'horizontal'),\n signal: lifecycleSignal(onCleanup),\n });\n\n const handleStepClick = (e: Event) => {\n const step = e\n .composedPath()\n .find((node): node is HTMLElement => node instanceof HTMLElement && node.localName === 'ore-step');\n\n if (!step || step.closest(STEPPER_TAG) !== el || !getNavigableSteps().includes(step)) return;\n\n const value = step.getAttribute('value');\n\n setSelection(value ?? undefined, true);\n // The click focused the step's old control; the selection re-render replaced\n // it — restore focus onto the new one (see onNavigate's ordering note).\n focusStep(step);\n };\n\n const activateFocusedStep = (): void => {\n const steps = getNavigableSteps();\n const focusedStep = steps.find(\n (step) => step === document.activeElement || step.shadowRoot?.activeElement === document.activeElement,\n );\n const value = focusedStep?.getAttribute('value');\n\n if (value) {\n setSelection(value, true);\n focusStep(focusedStep);\n }\n };\n\n const activationPress = createInteraction({ onPress: activateFocusedStep });\n\n const handleKeydown = (e: KeyboardEvent) => {\n const steps = getNavigableSteps();\n\n if (steps.length === 0) return;\n\n const path = e.composedPath();\n const stepFromEvent = path.find(\n (node): node is HTMLElement => node instanceof HTMLElement && node.localName === 'ore-step',\n );\n const focused = stepFromEvent ? steps.indexOf(stepFromEvent) : -1;\n\n if (focused >= 0) listControl.set(focused);\n\n if (listControl.handleKeydown(e)) return;\n\n activationPress.handleKeydown(e);\n };\n\n bind({\n on: {\n click: handleStepClick,\n keydown: handleKeydown,\n },\n });\n\n return html`\n <nav part=\"nav\" aria-label=\"${props.label}\">\n <ol class=\"steps\" role=\"list\" part=\"list\">\n <slot></slot>\n </ol>\n </nav>\n `;\n },\n styles: [componentStyles],\n});\n"],"mappings":"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"}
|
package/dist/styles/index.d.ts
CHANGED
|
@@ -11,32 +11,4 @@ export { colorThemeMixin, elevationMixin, forcedColorsFocusMixin, forcedColorsFo
|
|
|
11
11
|
export { frostVariantMixin } from './mixins/variants.css';
|
|
12
12
|
export { fieldVariantMixin, type FieldVariantMixinOptions } from './mixins/field-variants.css';
|
|
13
13
|
export { tableBaseMixin } from './mixins/table-base.css';
|
|
14
|
-
/**
|
|
15
|
-
* Base mixins for elevated surface components (box, card).
|
|
16
|
-
* Covers theming, elevation shadows, padding, and border radius.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```ts
|
|
20
|
-
* styles: [...surfaceMixins, frostVariantMixin('.box'), componentStyles]
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export declare const surfaceMixins: readonly [import("@vielzeug/ore").CSSResult, import("@vielzeug/ore").CSSResult, import("@vielzeug/ore").CSSResult, import("@vielzeug/ore").CSSResult];
|
|
24
|
-
/**
|
|
25
|
-
* Base mixins shared by every text input component (input, textarea, file-input).
|
|
26
|
-
* Covers theming, coarse-pointer targets, reduced-motion, border radius, and
|
|
27
|
-
* disabled/loading states.
|
|
28
|
-
*
|
|
29
|
-
* **Required additions** (component-specific arguments, so not included here):
|
|
30
|
-
* - `sizeVariantMixin(YOUR_PRESET)` — supply the component's size config.
|
|
31
|
-
* - `forcedColorsFocusMixin(selector)` — **mandatory** for WCAG forced-colors
|
|
32
|
-
* compliance. Pass the CSS selector for the component's focusable inner
|
|
33
|
-
* element (e.g. `'input'`, `'textarea'`, `'.dropzone'`). Omitting this
|
|
34
|
-
* removes the focus ring in Windows High Contrast mode.
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* ```ts
|
|
38
|
-
* styles: [...fieldMixins, sizeVariantMixin(FIELD_SIZE_PRESET), forcedColorsFocusMixin('input'), componentStyles]
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
export declare const fieldMixins: readonly [import("@vielzeug/ore").CSSResult, import("@vielzeug/ore").CSSResult, import("@vielzeug/ore").CSSResult, import("@vielzeug/ore").CSSResult, import("@vielzeug/ore").CSSResult];
|
|
42
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/styles/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/styles/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEvH,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEzF,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAElG,OAAO,EACL,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAE/F,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -49,7 +49,7 @@ let e=require("@vielzeug/ore");var t=e.css`
|
|
|
49
49
|
--_radius: var(--rounded-full);
|
|
50
50
|
}
|
|
51
51
|
`,r={fontSize:`--_font-size`,gap:`--_gap`,height:`--_height`,iconSize:`--_icon-size`,lineHeight:`--_line-height`,padding:`--_padding`,size:`--_size`,thumbSize:`--_thumb-size`,width:`--_width`},i=e=>Object.entries(e).filter(([,e])=>e!==void 0).map(([e,t])=>`${e.startsWith(`--`)?e:r[e]??`--_${e}`}: ${t};`).join(`
|
|
52
|
-
`),a=t=>{let n=i({fontSize:`var(--text-xs)`,gap:`var(--size-1-5)`,size:`var(--size-4)`,...t?.sm}),r=i({fontSize:`var(--text-sm)`,gap:`var(--size-2)`,size:`var(--size-5)`,...t?.md});return e.css`
|
|
52
|
+
`),a=t=>{let n=i({fontSize:`var(--text-xs)`,gap:`var(--size-1-5)`,size:`var(--size-4)`,...t?.sm}),r=i({fontSize:`var(--text-sm)`,gap:`var(--size-2)`,size:`var(--size-5)`,...t?.md}),a=i({fontSize:`var(--text-base)`,gap:`var(--size-2-5)`,size:`var(--size-6)`,...t?.lg});return e.css`
|
|
53
53
|
:host {
|
|
54
54
|
${r}
|
|
55
55
|
}
|
|
@@ -60,7 +60,7 @@ let e=require("@vielzeug/ore");var t=e.css`
|
|
|
60
60
|
${r}
|
|
61
61
|
}
|
|
62
62
|
:host([size='lg']) {
|
|
63
|
-
${
|
|
63
|
+
${a}
|
|
64
64
|
}
|
|
65
65
|
`};exports.paddingMixin=t,exports.roundedVariantMixin=n,exports.sizeVariantMixin=a;
|
|
66
66
|
//# sourceMappingURL=shape.css.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape.css.cjs","names":[],"sources":["../../../src/styles/mixins/shape.css.ts"],"sourcesContent":["import { css } from '@vielzeug/ore';\n\n// ── Padding ───────────────────────────────────────────────────────────────────\n\n/**\n * Padding Variant Mixin\n *\n * Provides padding size variants (none, sm, md, lg, xl) via CSS custom properties.\n * Sets the --_padding variable based on padding attribute.\n *\n * @example\n * ```ts\n * import { paddingMixin } from '../../styles';\n *\n * return {\n * styles: [paddingMixin, componentStyles],\n * template: html`...`\n * };\n * ```\n */\nexport const paddingMixin = css`\n /* ========================================\n Padding Variants\n ======================================== */\n\n :host([padding='none']) {\n --_padding: var(--size-0);\n }\n\n :host([padding='sm']) {\n --_padding: var(--size-3);\n }\n\n :host([padding='md']) {\n --_padding: var(--size-4);\n }\n\n :host([padding='lg']) {\n --_padding: var(--size-6);\n }\n\n :host([padding='xl']) {\n --_padding: var(--size-8);\n }\n`;\n\n// ── Rounded ───────────────────────────────────────────────────────────────────\n\n/**\n * Rounded Variant Mixin\n *\n * Shared border-radius variant styles for components.\n * Maps rounded attribute values to theme border radius tokens.\n *\n * @example\n * ```ts\n * import { roundedVariantMixin } from '../../styles';\n *\n * return {\n * styles: [roundedVariantMixin, componentStyles],\n * template: html`...`\n * };\n * ```\n */\nexport const roundedVariantMixin = css`\n :host([rounded='none']) {\n --_radius: var(--rounded-none);\n }\n :host([rounded='sm']) {\n --_radius: var(--rounded-sm);\n }\n :host([rounded='md']) {\n --_radius: var(--rounded-md);\n }\n :host([rounded='lg']) {\n --_radius: var(--rounded-lg);\n }\n :host([rounded='xl']) {\n --_radius: var(--rounded-xl);\n }\n :host([rounded='2xl']) {\n --_radius: var(--rounded-2xl);\n }\n :host([rounded='3xl']) {\n --_radius: var(--rounded-3xl);\n }\n :host([rounded='full']),\n :host([rounded='']) {\n --_radius: var(--rounded-full);\n }\n`;\n\n// ── Size Variants ─────────────────────────────────────────────────────────────\n\n/**\n * Size Variant Mixin\n *\n * Injects the three standard size tiers (sm / md / lg) as CSS custom property\n * blocks on `:host([size=\"…\"])`. Per-component overrides are supplied as a raw\n * CSS string for each tier and are appended after the shared defaults.\n *\n * All property names use the `--_` internal convention already established by\n * other mixins. The mapping is:\n *\n * | Config key | CSS custom property |\n * |------------- |----------------------|\n * | fontSize | --_font-size |\n * | gap | --_gap |\n * | height | --_height |\n * | iconSize | --_icon-size |\n * | lineHeight | --_line-height |\n * | padding | --_padding |\n * | size | --_size |\n * | thumbSize | --_thumb-size |\n * | width | --_width |\n * | --foo | --foo (pass-through) |\n *\n * @example\n * ```ts\n * styles: [\n * sizeVariantMixin({\n * sm: { height: 'var(--size-8)', padding: 'var(--size-1-5) var(--size-3)' },\n * lg: { height: 'var(--size-12)', padding: 'var(--size-2-5) var(--size-5)' },\n * }),\n * componentStyles,\n * ]\n * ```\n */\nexport type SizeConfig = {\n /** Arbitrary CSS custom properties (must start with --) */\n [key: `--${string}`]: string | undefined;\n /** Font size — maps to --_font-size */\n fontSize?: string;\n /** Gap between elements — maps to --_gap */\n gap?: string;\n /** Element height — maps to --_height */\n height?: string;\n /** Icon size — maps to --_icon-size */\n iconSize?: string;\n /** Line height — maps to --_line-height */\n lineHeight?: string;\n /** Internal padding — maps to --_padding */\n padding?: string;\n /** Element size (width/height) — maps to --_size */\n size?: string;\n /** Thumb size (e.g. toggle/switch thumb) — maps to --_thumb-size */\n thumbSize?: string;\n /** Element width — maps to --_width */\n width?: string;\n};\n\nconst PROP_MAP: Record<string, string> = {\n fontSize: '--_font-size',\n gap: '--_gap',\n height: '--_height',\n iconSize: '--_icon-size',\n lineHeight: '--_line-height',\n padding: '--_padding',\n size: '--_size',\n thumbSize: '--_thumb-size',\n width: '--_width',\n};\n\nconst configToBlock = (config: SizeConfig): string =>\n Object.entries(config)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => `${k.startsWith('--') ? k : (PROP_MAP[k] ?? `--_${k}`)}: ${v};`)\n .join('\\n ');\n\nexport const sizeVariantMixin = (config?: { lg?: SizeConfig; md?: SizeConfig; sm?: SizeConfig }) => {\n const sm = configToBlock({\n fontSize: 'var(--text-xs)',\n gap: 'var(--size-1-5)',\n size: 'var(--size-4)',\n ...config?.sm,\n });\n const md = configToBlock({\n fontSize: 'var(--text-sm)',\n gap: 'var(--size-2)',\n size: 'var(--size-5)',\n ...config?.md,\n });\n const lg = configToBlock({\n fontSize: 'var(--text-base)',\n gap: 'var(--size-2-5)',\n size: 'var(--size-6)',\n ...config?.lg,\n });\n\n return css`\n :host {\n ${md}\n }\n :host([size='sm']) {\n ${sm}\n }\n :host([size='md']) {\n ${md}\n }\n :host([size='lg']) {\n ${lg}\n }\n `;\n};\n"],"mappings":"+BAoBA,IAAa,EAAe,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;EA4ClB,EAAsB,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;EAuFhC,EAAmC,CACvC,SAAU,eACV,IAAK,SACL,OAAQ,YACR,SAAU,eACV,WAAY,iBACZ,QAAS,aACT,KAAM,UACN,UAAW,gBACX,MAAO,UACT,EAEM,EAAiB,GACrB,OAAO,QAAQ,CAAM,CAAC,CACnB,QAAQ,EAAG,KAAO,IAAM,IAAA,EAAS,CAAC,CAClC,KAAK,CAAC,EAAG,KAAO,GAAG,EAAE,WAAW,IAAI,EAAI,EAAK,EAAS,IAAM,MAAM,IAAK,IAAI,EAAE,EAAE,CAAC,CAChF,KAAK;SAAY,EAET,EAAoB,GAAmE,CAClG,IAAM,EAAK,EAAc,CACvB,SAAU,iBACV,IAAK,kBACL,KAAM,gBACN,GAAG,GAAQ,EACb,CAAC,EACK,EAAK,EAAc,CACvB,SAAU,iBACV,IAAK,gBACL,KAAM,gBACN,GAAG,GAAQ,EACb,CAAC,
|
|
1
|
+
{"version":3,"file":"shape.css.cjs","names":[],"sources":["../../../src/styles/mixins/shape.css.ts"],"sourcesContent":["import { css } from '@vielzeug/ore';\n\n// ── Padding ───────────────────────────────────────────────────────────────────\n\n/**\n * Padding Variant Mixin\n *\n * Provides padding size variants (none, sm, md, lg, xl) via CSS custom properties.\n * Sets the --_padding variable based on padding attribute.\n *\n * @example\n * ```ts\n * import { paddingMixin } from '../../styles';\n *\n * return {\n * styles: [paddingMixin, componentStyles],\n * template: html`...`\n * };\n * ```\n */\nexport const paddingMixin = css`\n /* ========================================\n Padding Variants\n ======================================== */\n\n :host([padding='none']) {\n --_padding: var(--size-0);\n }\n\n :host([padding='sm']) {\n --_padding: var(--size-3);\n }\n\n :host([padding='md']) {\n --_padding: var(--size-4);\n }\n\n :host([padding='lg']) {\n --_padding: var(--size-6);\n }\n\n :host([padding='xl']) {\n --_padding: var(--size-8);\n }\n`;\n\n// ── Rounded ───────────────────────────────────────────────────────────────────\n\n/**\n * Rounded Variant Mixin\n *\n * Shared border-radius variant styles for components.\n * Maps rounded attribute values to theme border radius tokens.\n *\n * @example\n * ```ts\n * import { roundedVariantMixin } from '../../styles';\n *\n * return {\n * styles: [roundedVariantMixin, componentStyles],\n * template: html`...`\n * };\n * ```\n */\nexport const roundedVariantMixin = css`\n :host([rounded='none']) {\n --_radius: var(--rounded-none);\n }\n :host([rounded='sm']) {\n --_radius: var(--rounded-sm);\n }\n :host([rounded='md']) {\n --_radius: var(--rounded-md);\n }\n :host([rounded='lg']) {\n --_radius: var(--rounded-lg);\n }\n :host([rounded='xl']) {\n --_radius: var(--rounded-xl);\n }\n :host([rounded='2xl']) {\n --_radius: var(--rounded-2xl);\n }\n :host([rounded='3xl']) {\n --_radius: var(--rounded-3xl);\n }\n :host([rounded='full']),\n :host([rounded='']) {\n --_radius: var(--rounded-full);\n }\n`;\n\n// ── Size Variants ─────────────────────────────────────────────────────────────\n\n/**\n * Size Variant Mixin\n *\n * Injects the three standard size tiers (sm / md / lg) as CSS custom property\n * blocks on `:host([size=\"…\"])`. Per-component overrides are supplied as a raw\n * CSS string for each tier and are appended after the shared defaults.\n *\n * All property names use the `--_` internal convention already established by\n * other mixins. The mapping is:\n *\n * | Config key | CSS custom property |\n * |------------- |----------------------|\n * | fontSize | --_font-size |\n * | gap | --_gap |\n * | height | --_height |\n * | iconSize | --_icon-size |\n * | lineHeight | --_line-height |\n * | padding | --_padding |\n * | size | --_size |\n * | thumbSize | --_thumb-size |\n * | width | --_width |\n * | --foo | --foo (pass-through) |\n *\n * @example\n * ```ts\n * styles: [\n * sizeVariantMixin({\n * sm: { height: 'var(--size-8)', padding: 'var(--size-1-5) var(--size-3)' },\n * lg: { height: 'var(--size-12)', padding: 'var(--size-2-5) var(--size-5)' },\n * }),\n * componentStyles,\n * ]\n * ```\n */\nexport type SizeConfig = {\n /** Arbitrary CSS custom properties (must start with --) */\n [key: `--${string}`]: string | undefined;\n /** Font size — maps to --_font-size */\n fontSize?: string;\n /** Gap between elements — maps to --_gap */\n gap?: string;\n /** Element height — maps to --_height */\n height?: string;\n /** Icon size — maps to --_icon-size */\n iconSize?: string;\n /** Line height — maps to --_line-height */\n lineHeight?: string;\n /** Internal padding — maps to --_padding */\n padding?: string;\n /** Element size (width/height) — maps to --_size */\n size?: string;\n /** Thumb size (e.g. toggle/switch thumb) — maps to --_thumb-size */\n thumbSize?: string;\n /** Element width — maps to --_width */\n width?: string;\n};\n\nconst PROP_MAP: Record<string, string> = {\n fontSize: '--_font-size',\n gap: '--_gap',\n height: '--_height',\n iconSize: '--_icon-size',\n lineHeight: '--_line-height',\n padding: '--_padding',\n size: '--_size',\n thumbSize: '--_thumb-size',\n width: '--_width',\n};\n\nconst configToBlock = (config: SizeConfig): string =>\n Object.entries(config)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => `${k.startsWith('--') ? k : (PROP_MAP[k] ?? `--_${k}`)}: ${v};`)\n .join('\\n ');\n\nexport const sizeVariantMixin = (config?: { lg?: SizeConfig; md?: SizeConfig; sm?: SizeConfig }) => {\n const sm = configToBlock({\n fontSize: 'var(--text-xs)',\n gap: 'var(--size-1-5)',\n size: 'var(--size-4)',\n ...config?.sm,\n });\n const md = configToBlock({\n fontSize: 'var(--text-sm)',\n gap: 'var(--size-2)',\n size: 'var(--size-5)',\n ...config?.md,\n });\n const lg = configToBlock({\n fontSize: 'var(--text-base)',\n gap: 'var(--size-2-5)',\n size: 'var(--size-6)',\n ...config?.lg,\n });\n\n return css`\n :host {\n ${md}\n }\n :host([size='sm']) {\n ${sm}\n }\n :host([size='md']) {\n ${md}\n }\n :host([size='lg']) {\n ${lg}\n }\n `;\n};\n"],"mappings":"+BAoBA,IAAa,EAAe,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;EA4ClB,EAAsB,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;EAuFhC,EAAmC,CACvC,SAAU,eACV,IAAK,SACL,OAAQ,YACR,SAAU,eACV,WAAY,iBACZ,QAAS,aACT,KAAM,UACN,UAAW,gBACX,MAAO,UACT,EAEM,EAAiB,GACrB,OAAO,QAAQ,CAAM,CAAC,CACnB,QAAQ,EAAG,KAAO,IAAM,IAAA,EAAS,CAAC,CAClC,KAAK,CAAC,EAAG,KAAO,GAAG,EAAE,WAAW,IAAI,EAAI,EAAK,EAAS,IAAM,MAAM,IAAK,IAAI,EAAE,EAAE,CAAC,CAChF,KAAK;SAAY,EAET,EAAoB,GAAmE,CAClG,IAAM,EAAK,EAAc,CACvB,SAAU,iBACV,IAAK,kBACL,KAAM,gBACN,GAAG,GAAQ,EACb,CAAC,EACK,EAAK,EAAc,CACvB,SAAU,iBACV,IAAK,gBACL,KAAM,gBACN,GAAG,GAAQ,EACb,CAAC,EACK,EAAK,EAAc,CACvB,SAAU,mBACV,IAAK,kBACL,KAAM,gBACN,GAAG,GAAQ,EACb,CAAC,EAED,MAAO,GAAA,GAAG;;QAEJ,EAAG;;;QAGH,EAAG;;;QAGH,EAAG;;;QAGH,EAAG;;GAGX"}
|
|
@@ -71,6 +71,11 @@ var t = e`
|
|
|
71
71
|
gap: "var(--size-2)",
|
|
72
72
|
size: "var(--size-5)",
|
|
73
73
|
...t?.md
|
|
74
|
+
}), a = i({
|
|
75
|
+
fontSize: "var(--text-base)",
|
|
76
|
+
gap: "var(--size-2-5)",
|
|
77
|
+
size: "var(--size-6)",
|
|
78
|
+
...t?.lg
|
|
74
79
|
});
|
|
75
80
|
return e`
|
|
76
81
|
:host {
|
|
@@ -83,12 +88,7 @@ var t = e`
|
|
|
83
88
|
${r}
|
|
84
89
|
}
|
|
85
90
|
:host([size='lg']) {
|
|
86
|
-
${
|
|
87
|
-
fontSize: "var(--text-base)",
|
|
88
|
-
gap: "var(--size-2-5)",
|
|
89
|
-
size: "var(--size-6)",
|
|
90
|
-
...t?.lg
|
|
91
|
-
})}
|
|
91
|
+
${a}
|
|
92
92
|
}
|
|
93
93
|
`;
|
|
94
94
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape.css.js","names":[],"sources":["../../../src/styles/mixins/shape.css.ts"],"sourcesContent":["import { css } from '@vielzeug/ore';\n\n// ── Padding ───────────────────────────────────────────────────────────────────\n\n/**\n * Padding Variant Mixin\n *\n * Provides padding size variants (none, sm, md, lg, xl) via CSS custom properties.\n * Sets the --_padding variable based on padding attribute.\n *\n * @example\n * ```ts\n * import { paddingMixin } from '../../styles';\n *\n * return {\n * styles: [paddingMixin, componentStyles],\n * template: html`...`\n * };\n * ```\n */\nexport const paddingMixin = css`\n /* ========================================\n Padding Variants\n ======================================== */\n\n :host([padding='none']) {\n --_padding: var(--size-0);\n }\n\n :host([padding='sm']) {\n --_padding: var(--size-3);\n }\n\n :host([padding='md']) {\n --_padding: var(--size-4);\n }\n\n :host([padding='lg']) {\n --_padding: var(--size-6);\n }\n\n :host([padding='xl']) {\n --_padding: var(--size-8);\n }\n`;\n\n// ── Rounded ───────────────────────────────────────────────────────────────────\n\n/**\n * Rounded Variant Mixin\n *\n * Shared border-radius variant styles for components.\n * Maps rounded attribute values to theme border radius tokens.\n *\n * @example\n * ```ts\n * import { roundedVariantMixin } from '../../styles';\n *\n * return {\n * styles: [roundedVariantMixin, componentStyles],\n * template: html`...`\n * };\n * ```\n */\nexport const roundedVariantMixin = css`\n :host([rounded='none']) {\n --_radius: var(--rounded-none);\n }\n :host([rounded='sm']) {\n --_radius: var(--rounded-sm);\n }\n :host([rounded='md']) {\n --_radius: var(--rounded-md);\n }\n :host([rounded='lg']) {\n --_radius: var(--rounded-lg);\n }\n :host([rounded='xl']) {\n --_radius: var(--rounded-xl);\n }\n :host([rounded='2xl']) {\n --_radius: var(--rounded-2xl);\n }\n :host([rounded='3xl']) {\n --_radius: var(--rounded-3xl);\n }\n :host([rounded='full']),\n :host([rounded='']) {\n --_radius: var(--rounded-full);\n }\n`;\n\n// ── Size Variants ─────────────────────────────────────────────────────────────\n\n/**\n * Size Variant Mixin\n *\n * Injects the three standard size tiers (sm / md / lg) as CSS custom property\n * blocks on `:host([size=\"…\"])`. Per-component overrides are supplied as a raw\n * CSS string for each tier and are appended after the shared defaults.\n *\n * All property names use the `--_` internal convention already established by\n * other mixins. The mapping is:\n *\n * | Config key | CSS custom property |\n * |------------- |----------------------|\n * | fontSize | --_font-size |\n * | gap | --_gap |\n * | height | --_height |\n * | iconSize | --_icon-size |\n * | lineHeight | --_line-height |\n * | padding | --_padding |\n * | size | --_size |\n * | thumbSize | --_thumb-size |\n * | width | --_width |\n * | --foo | --foo (pass-through) |\n *\n * @example\n * ```ts\n * styles: [\n * sizeVariantMixin({\n * sm: { height: 'var(--size-8)', padding: 'var(--size-1-5) var(--size-3)' },\n * lg: { height: 'var(--size-12)', padding: 'var(--size-2-5) var(--size-5)' },\n * }),\n * componentStyles,\n * ]\n * ```\n */\nexport type SizeConfig = {\n /** Arbitrary CSS custom properties (must start with --) */\n [key: `--${string}`]: string | undefined;\n /** Font size — maps to --_font-size */\n fontSize?: string;\n /** Gap between elements — maps to --_gap */\n gap?: string;\n /** Element height — maps to --_height */\n height?: string;\n /** Icon size — maps to --_icon-size */\n iconSize?: string;\n /** Line height — maps to --_line-height */\n lineHeight?: string;\n /** Internal padding — maps to --_padding */\n padding?: string;\n /** Element size (width/height) — maps to --_size */\n size?: string;\n /** Thumb size (e.g. toggle/switch thumb) — maps to --_thumb-size */\n thumbSize?: string;\n /** Element width — maps to --_width */\n width?: string;\n};\n\nconst PROP_MAP: Record<string, string> = {\n fontSize: '--_font-size',\n gap: '--_gap',\n height: '--_height',\n iconSize: '--_icon-size',\n lineHeight: '--_line-height',\n padding: '--_padding',\n size: '--_size',\n thumbSize: '--_thumb-size',\n width: '--_width',\n};\n\nconst configToBlock = (config: SizeConfig): string =>\n Object.entries(config)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => `${k.startsWith('--') ? k : (PROP_MAP[k] ?? `--_${k}`)}: ${v};`)\n .join('\\n ');\n\nexport const sizeVariantMixin = (config?: { lg?: SizeConfig; md?: SizeConfig; sm?: SizeConfig }) => {\n const sm = configToBlock({\n fontSize: 'var(--text-xs)',\n gap: 'var(--size-1-5)',\n size: 'var(--size-4)',\n ...config?.sm,\n });\n const md = configToBlock({\n fontSize: 'var(--text-sm)',\n gap: 'var(--size-2)',\n size: 'var(--size-5)',\n ...config?.md,\n });\n const lg = configToBlock({\n fontSize: 'var(--text-base)',\n gap: 'var(--size-2-5)',\n size: 'var(--size-6)',\n ...config?.lg,\n });\n\n return css`\n :host {\n ${md}\n }\n :host([size='sm']) {\n ${sm}\n }\n :host([size='md']) {\n ${md}\n }\n :host([size='lg']) {\n ${lg}\n }\n `;\n};\n"],"mappings":";;AAoBA,IAAa,IAAe,CAAG;;;;;;;;;;;;;;;;;;;;;;;;GA4ClB,IAAsB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;GAuFhC,IAAmC;CACvC,UAAU;CACV,KAAK;CACL,QAAQ;CACR,UAAU;CACV,YAAY;CACZ,SAAS;CACT,MAAM;CACN,WAAW;CACX,OAAO;AACT,GAEM,KAAiB,MACrB,OAAO,QAAQ,CAAM,CAAC,CACnB,QAAQ,GAAG,OAAO,MAAM,KAAA,CAAS,CAAC,CAClC,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,WAAW,IAAI,IAAI,IAAK,EAAS,MAAM,MAAM,IAAK,IAAI,EAAE,EAAE,CAAC,CAChF,KAAK,YAAY,GAET,KAAoB,MAAmE;CAClG,IAAM,IAAK,EAAc;EACvB,UAAU;EACV,KAAK;EACL,MAAM;EACN,GAAG,GAAQ;CACb,CAAC,GACK,IAAK,EAAc;EACvB,UAAU;EACV,KAAK;EACL,MAAM;EACN,GAAG,GAAQ;CACb,CAAC
|
|
1
|
+
{"version":3,"file":"shape.css.js","names":[],"sources":["../../../src/styles/mixins/shape.css.ts"],"sourcesContent":["import { css } from '@vielzeug/ore';\n\n// ── Padding ───────────────────────────────────────────────────────────────────\n\n/**\n * Padding Variant Mixin\n *\n * Provides padding size variants (none, sm, md, lg, xl) via CSS custom properties.\n * Sets the --_padding variable based on padding attribute.\n *\n * @example\n * ```ts\n * import { paddingMixin } from '../../styles';\n *\n * return {\n * styles: [paddingMixin, componentStyles],\n * template: html`...`\n * };\n * ```\n */\nexport const paddingMixin = css`\n /* ========================================\n Padding Variants\n ======================================== */\n\n :host([padding='none']) {\n --_padding: var(--size-0);\n }\n\n :host([padding='sm']) {\n --_padding: var(--size-3);\n }\n\n :host([padding='md']) {\n --_padding: var(--size-4);\n }\n\n :host([padding='lg']) {\n --_padding: var(--size-6);\n }\n\n :host([padding='xl']) {\n --_padding: var(--size-8);\n }\n`;\n\n// ── Rounded ───────────────────────────────────────────────────────────────────\n\n/**\n * Rounded Variant Mixin\n *\n * Shared border-radius variant styles for components.\n * Maps rounded attribute values to theme border radius tokens.\n *\n * @example\n * ```ts\n * import { roundedVariantMixin } from '../../styles';\n *\n * return {\n * styles: [roundedVariantMixin, componentStyles],\n * template: html`...`\n * };\n * ```\n */\nexport const roundedVariantMixin = css`\n :host([rounded='none']) {\n --_radius: var(--rounded-none);\n }\n :host([rounded='sm']) {\n --_radius: var(--rounded-sm);\n }\n :host([rounded='md']) {\n --_radius: var(--rounded-md);\n }\n :host([rounded='lg']) {\n --_radius: var(--rounded-lg);\n }\n :host([rounded='xl']) {\n --_radius: var(--rounded-xl);\n }\n :host([rounded='2xl']) {\n --_radius: var(--rounded-2xl);\n }\n :host([rounded='3xl']) {\n --_radius: var(--rounded-3xl);\n }\n :host([rounded='full']),\n :host([rounded='']) {\n --_radius: var(--rounded-full);\n }\n`;\n\n// ── Size Variants ─────────────────────────────────────────────────────────────\n\n/**\n * Size Variant Mixin\n *\n * Injects the three standard size tiers (sm / md / lg) as CSS custom property\n * blocks on `:host([size=\"…\"])`. Per-component overrides are supplied as a raw\n * CSS string for each tier and are appended after the shared defaults.\n *\n * All property names use the `--_` internal convention already established by\n * other mixins. The mapping is:\n *\n * | Config key | CSS custom property |\n * |------------- |----------------------|\n * | fontSize | --_font-size |\n * | gap | --_gap |\n * | height | --_height |\n * | iconSize | --_icon-size |\n * | lineHeight | --_line-height |\n * | padding | --_padding |\n * | size | --_size |\n * | thumbSize | --_thumb-size |\n * | width | --_width |\n * | --foo | --foo (pass-through) |\n *\n * @example\n * ```ts\n * styles: [\n * sizeVariantMixin({\n * sm: { height: 'var(--size-8)', padding: 'var(--size-1-5) var(--size-3)' },\n * lg: { height: 'var(--size-12)', padding: 'var(--size-2-5) var(--size-5)' },\n * }),\n * componentStyles,\n * ]\n * ```\n */\nexport type SizeConfig = {\n /** Arbitrary CSS custom properties (must start with --) */\n [key: `--${string}`]: string | undefined;\n /** Font size — maps to --_font-size */\n fontSize?: string;\n /** Gap between elements — maps to --_gap */\n gap?: string;\n /** Element height — maps to --_height */\n height?: string;\n /** Icon size — maps to --_icon-size */\n iconSize?: string;\n /** Line height — maps to --_line-height */\n lineHeight?: string;\n /** Internal padding — maps to --_padding */\n padding?: string;\n /** Element size (width/height) — maps to --_size */\n size?: string;\n /** Thumb size (e.g. toggle/switch thumb) — maps to --_thumb-size */\n thumbSize?: string;\n /** Element width — maps to --_width */\n width?: string;\n};\n\nconst PROP_MAP: Record<string, string> = {\n fontSize: '--_font-size',\n gap: '--_gap',\n height: '--_height',\n iconSize: '--_icon-size',\n lineHeight: '--_line-height',\n padding: '--_padding',\n size: '--_size',\n thumbSize: '--_thumb-size',\n width: '--_width',\n};\n\nconst configToBlock = (config: SizeConfig): string =>\n Object.entries(config)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => `${k.startsWith('--') ? k : (PROP_MAP[k] ?? `--_${k}`)}: ${v};`)\n .join('\\n ');\n\nexport const sizeVariantMixin = (config?: { lg?: SizeConfig; md?: SizeConfig; sm?: SizeConfig }) => {\n const sm = configToBlock({\n fontSize: 'var(--text-xs)',\n gap: 'var(--size-1-5)',\n size: 'var(--size-4)',\n ...config?.sm,\n });\n const md = configToBlock({\n fontSize: 'var(--text-sm)',\n gap: 'var(--size-2)',\n size: 'var(--size-5)',\n ...config?.md,\n });\n const lg = configToBlock({\n fontSize: 'var(--text-base)',\n gap: 'var(--size-2-5)',\n size: 'var(--size-6)',\n ...config?.lg,\n });\n\n return css`\n :host {\n ${md}\n }\n :host([size='sm']) {\n ${sm}\n }\n :host([size='md']) {\n ${md}\n }\n :host([size='lg']) {\n ${lg}\n }\n `;\n};\n"],"mappings":";;AAoBA,IAAa,IAAe,CAAG;;;;;;;;;;;;;;;;;;;;;;;;GA4ClB,IAAsB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;GAuFhC,IAAmC;CACvC,UAAU;CACV,KAAK;CACL,QAAQ;CACR,UAAU;CACV,YAAY;CACZ,SAAS;CACT,MAAM;CACN,WAAW;CACX,OAAO;AACT,GAEM,KAAiB,MACrB,OAAO,QAAQ,CAAM,CAAC,CACnB,QAAQ,GAAG,OAAO,MAAM,KAAA,CAAS,CAAC,CAClC,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,WAAW,IAAI,IAAI,IAAK,EAAS,MAAM,MAAM,IAAK,IAAI,EAAE,EAAE,CAAC,CAChF,KAAK,YAAY,GAET,KAAoB,MAAmE;CAClG,IAAM,IAAK,EAAc;EACvB,UAAU;EACV,KAAK;EACL,MAAM;EACN,GAAG,GAAQ;CACb,CAAC,GACK,IAAK,EAAc;EACvB,UAAU;EACV,KAAK;EACL,MAAM;EACN,GAAG,GAAQ;CACb,CAAC,GACK,IAAK,EAAc;EACvB,UAAU;EACV,KAAK;EACL,MAAM;EACN,GAAG,GAAQ;CACb,CAAC;CAED,OAAO,CAAG;;QAEJ,EAAG;;;QAGH,EAAG;;;QAGH,EAAG;;;QAGH,EAAG;;;AAGX"}
|
package/dist/switch.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./core/ore.cjs"),t=require("./core/checkable.cjs"),n=require("./styles/mixins/accessibility.css.cjs"),r=require("./styles/mixins/shape.css.cjs"),i=require("./styles/mixins/states.css.cjs"),a=require("./styles/mixins/theme.css.cjs"),o=require("./shared/prop-bundles.cjs"),s=require("./shared/size-presets.cjs"),c=require("./inputs/shared/field-binding.cjs"),l=require("./inputs/shared/templates.cjs"),u=require("./inputs/shared/native-field-event.cjs"),d=require("./inputs/switch/switch.css.cjs");let f=require("@vielzeug/ore");var p=`ore-switch`;(0,f.define)(p,{formAssociated:!0,props:{...o.themableBundle,...o.sizableBundle,...o.disablableBundle,checked:f.prop.bool(!1),error:f.prop.string(),helper:f.prop.string(),name:f.prop.string(),value:f.prop.string(`on`)},setup(n){let r=(0,f.getHost)(),i=t.createCheckable({checked:n.checked,clearIndeterminateFirst:!1,disabled:n.disabled,error:n.error,helper:n.helper,onToggle:e=>{i.triggerValidation(`change`),u.setFieldChecked(r,e.checked),u.dispatchNativeFieldEvent(r,`input`),u.dispatchNativeFieldEvent(r,`change`)},prefix:`switch`,signal:e.lifecycleSignal(f.onCleanup),value:n.value});i.attachFormField((0,f.useField)({disabled:i.disabled,toFormValue:e=>e,value:i.checkableFormValue}));let{assistiveId:a,checked:o,disabled:s,errorText:d,handleClick:p,handleKeydown:m,helperText:h,labelId:g}=i;return u.defineFieldChecked(r,()=>o.value,e=>{o.value=e}),c.applyCheckableBinding(n.size,{assistiveId:a,checked:o,disabled:s,errorText:d,handleClick:p,handleKeydown:m,helperText:h,labelId:g},`switch`),f.html`
|
|
2
2
|
<div class="switch-wrapper" part="switch">
|
|
3
3
|
<div class="switch-track" part="track">
|
|
4
4
|
<div class="switch-thumb" part="thumb"></div>
|
|
5
5
|
</div>
|
|
6
6
|
</div>
|
|
7
|
-
<span class="label" part="label" id="${
|
|
8
|
-
${
|
|
9
|
-
`},styles:[
|
|
7
|
+
<span class="label" part="label" id="${g}"><slot></slot></span>
|
|
8
|
+
${l.renderHelperRegion(a,d,h)}
|
|
9
|
+
`},styles:[a.colorThemeMixin,a.forcedColorsFormControlMixin,i.disabledStateMixin,n.coarsePointerMixin,r.sizeVariantMixin(s.SWITCH_SIZE_PRESET),d.default]}),exports.SWITCH_TAG=p;
|
|
10
10
|
//# sourceMappingURL=switch.cjs.map
|
package/dist/switch.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.cjs","names":[],"sources":["../src/inputs/switch/switch.ts"],"sourcesContent":["import { define, html,
|
|
1
|
+
{"version":3,"file":"switch.cjs","names":[],"sources":["../src/inputs/switch/switch.ts"],"sourcesContent":["import { define, html, prop, getHost, onCleanup } from '@vielzeug/ore';\nimport { useField } from '@vielzeug/ore';\n\nimport type { CheckableProps, ComponentSize, ThemeColor } from '../../types';\n\nimport { lifecycleSignal, createCheckable } from '../../core';\nimport { disablableBundle, sizableBundle, SWITCH_SIZE_PRESET, themableBundle } from '../../shared';\nimport {\n coarsePointerMixin,\n colorThemeMixin,\n disabledStateMixin,\n forcedColorsFormControlMixin,\n sizeVariantMixin,\n} from '../../styles';\nimport { applyCheckableBinding } from '../shared/field-binding';\nimport { defineFieldChecked, dispatchNativeFieldEvent, setFieldChecked } from '../shared/native-field-event';\nimport { renderHelperRegion } from '../shared/templates';\nimport componentStyles from './switch.css?inline';\n\nexport type OreSwitchEvents = {\n change: Event;\n input: Event;\n};\n\nexport type OreSwitchProps = CheckableProps & {\n /** Theme color */\n color?: ThemeColor;\n /** Disable interaction */\n disabled?: boolean;\n /** Error message (marks field as invalid) */\n error?: string;\n /** Helper text displayed below the switch */\n helper?: string;\n /** Component size */\n size?: ComponentSize;\n};\n\n/**\n * A toggle switch component for binary on/off states.\n *\n * @element ore-switch\n *\n * @attr {boolean} checked - Checked/on state\n * @attr {boolean} disabled - Disable switch interaction\n * @attr {string} value - Field value\n * @attr {string} name - Form field name\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - Switch size: 'sm' | 'md' | 'lg'\n * @attr {string} error - Error message (marks field as invalid)\n * @attr {string} helper - Helper text displayed below the switch\n *\n * @fires input - Emitted when switch is toggled.\n * @fires change - Emitted when switch is toggled.\n *\n * @slot - Switch label text\n *\n * @cssprop --switch-width - Track width\n * @cssprop --switch-height - Track height\n * @cssprop --switch-track-bg - Inactive track background color\n * @cssprop --switch-checked-bg - Active/checked track background color\n * @cssprop --switch-thumb-bg - Thumb background color\n * @cssprop --switch-font-size - Label font size\n * @part switch - The switch wrapper element\n * @part track - The switch track element\n * @part thumb - The switch thumb element\n * @part label - The label element\n * @part helper-text - The helper/error text element\n *\n * @example\n * ```html\n * <ore-switch name=\"notifications\" checked color=\"primary\">Enable notifications</ore-switch>\n * <ore-switch name=\"darkMode\" size=\"sm\">Dark mode</ore-switch>\n * <ore-switch disabled helper=\"Contact admin to change\">Admin only</ore-switch>\n * ```\n */\nexport const SWITCH_TAG = 'ore-switch' as const;\ndefine<OreSwitchProps>(SWITCH_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n checked: prop.bool(false),\n error: prop.string(),\n helper: prop.string(),\n name: prop.string(),\n value: prop.string('on'),\n },\n setup(props) {\n const el = getHost();\n\n const checkable = createCheckable({\n checked: props.checked,\n clearIndeterminateFirst: false,\n disabled: props.disabled,\n error: props.error,\n helper: props.helper,\n onToggle: (payload) => {\n checkable.triggerValidation('change');\n setFieldChecked(el, payload.checked);\n dispatchNativeFieldEvent(el, 'input');\n dispatchNativeFieldEvent(el, 'change');\n },\n prefix: 'switch',\n signal: lifecycleSignal(onCleanup),\n value: props.value,\n });\n\n checkable.attachFormField(\n useField<string | null>({\n disabled: checkable.disabled,\n toFormValue: (v) => v,\n value: checkable.checkableFormValue,\n }),\n );\n\n const { assistiveId, checked, disabled, errorText, handleClick, handleKeydown, helperText, labelId } = checkable;\n\n defineFieldChecked(\n el,\n () => checked.value,\n (value) => {\n checked.value = value;\n },\n );\n\n applyCheckableBinding(\n props.size,\n { assistiveId, checked, disabled, errorText, handleClick, handleKeydown, helperText, labelId },\n 'switch',\n );\n\n return html`\n <div class=\"switch-wrapper\" part=\"switch\">\n <div class=\"switch-track\" part=\"track\">\n <div class=\"switch-thumb\" part=\"thumb\"></div>\n </div>\n </div>\n <span class=\"label\" part=\"label\" id=\"${labelId}\"><slot></slot></span>\n ${renderHelperRegion(assistiveId, errorText, helperText)}\n `;\n },\n styles: [\n colorThemeMixin,\n forcedColorsFormControlMixin,\n disabledStateMixin,\n coarsePointerMixin,\n sizeVariantMixin(SWITCH_SIZE_PRESET),\n componentStyles,\n ],\n});\n"],"mappings":"mmBA2EA,IAAa,EAAa,cAC1B,EAAA,EAAA,OAAA,CAAuB,EAAY,CACjC,eAAgB,GAChB,MAAO,CACL,GAAG,EAAA,eACH,GAAG,EAAA,cACH,GAAG,EAAA,iBACH,QAAS,EAAA,KAAK,KAAK,EAAK,EACxB,MAAO,EAAA,KAAK,OAAO,EACnB,OAAQ,EAAA,KAAK,OAAO,EACpB,KAAM,EAAA,KAAK,OAAO,EAClB,MAAO,EAAA,KAAK,OAAO,IAAI,CACzB,EACA,MAAM,EAAO,CACX,IAAM,GAAA,EAAK,EAAA,QAAA,CAAQ,EAEb,EAAY,EAAA,gBAAgB,CAChC,QAAS,EAAM,QACf,wBAAyB,GACzB,SAAU,EAAM,SAChB,MAAO,EAAM,MACb,OAAQ,EAAM,OACd,SAAW,GAAY,CACrB,EAAU,kBAAkB,QAAQ,EACpC,EAAA,gBAAgB,EAAI,EAAQ,OAAO,EACnC,EAAA,yBAAyB,EAAI,OAAO,EACpC,EAAA,yBAAyB,EAAI,QAAQ,CACvC,EACA,OAAQ,SACR,OAAQ,EAAA,gBAAgB,EAAA,SAAS,EACjC,MAAO,EAAM,KACf,CAAC,EAED,EAAU,iBAAA,EACR,EAAA,SAAA,CAAwB,CACtB,SAAU,EAAU,SACpB,YAAc,GAAM,EACpB,MAAO,EAAU,kBACnB,CAAC,CACH,EAEA,GAAM,CAAE,cAAa,UAAS,WAAU,YAAW,cAAa,gBAAe,aAAY,WAAY,EAgBvG,OAdA,EAAA,mBACE,MACM,EAAQ,MACb,GAAU,CACT,EAAQ,MAAQ,CAClB,CACF,EAEA,EAAA,sBACE,EAAM,KACN,CAAE,cAAa,UAAS,WAAU,YAAW,cAAa,gBAAe,aAAY,SAAQ,EAC7F,QACF,EAEO,EAAA,IAAI;;;;;;6CAM8B,EAAQ;QAC7C,EAAA,mBAAmB,EAAa,EAAW,CAAU,EAAE;KAE7D,EACA,OAAQ,CACN,EAAA,gBACA,EAAA,6BACA,EAAA,mBACA,EAAA,mBACA,EAAA,iBAAiB,EAAA,kBAAkB,EACnC,EAAA,OACF,CACF,CAAC"}
|