@vielzeug/refine 1.8.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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 +6076 -5592
- 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 +235 -121
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marquee.css.cjs","names":[],"sources":["../../../src/content/marquee/marquee.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--color-canvas);\n --_radius: var(--rounded-xl);\n\n position: relative;\n display: block;\n width: 100%;\n min-height: 240px;\n overflow: hidden;\n background: var(--_bg);\n border-radius: var(--_radius);\n }\n\n .track {\n position: absolute;\n inset-block: 0;\n inset-inline-start: 0;\n display: flex;\n flex-direction: row;\n gap: var(--marquee-gap, var(--size-4));\n align-items: stretch;\n width: max-content;\n animation: marquee-scroll var(--_marquee-duration, 20s) linear infinite;\n will-change: transform;\n }\n\n .controls {\n display: flex;\n gap: var(--size-0-5);\n align-items: center;\n pointer-events: none;\n }\n\n :host > .controls {\n position: absolute;\n inset-block-end: var(--size-3);\n inset-inline-end: var(--size-3);\n padding: var(--size-1-5) var(--size-2);\n background: color-mix(in oklch, var(--color-canvas) 55%, transparent);\n border-radius: var(--rounded-full);\n backdrop-filter: blur(6px);\n }\n\n .nav-btn {\n pointer-events: auto;\n }\n\n :host([direction='right']) .track {\n animation-direction: reverse;\n }\n\n :host([pause-on-hover]:hover) .track {\n animation-play-state: paused;\n }\n\n ::slotted(*) {\n position: relative;\n flex: 0 0 auto;\n height: 100%;\n }\n\n ::slotted([data-marquee-clone]) {\n pointer-events: none;\n user-select: none;\n }\n\n @keyframes marquee-scroll {\n from {\n transform: translateX(0);\n }\n\n to {\n transform: translateX(var(--_marquee-translate, -50%));\n }\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .track {\n animation: none;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/content/marquee/marquee.css?inline
|
|
2
|
+
var e = "@layer refine.base{:host{--_bg:var(--color-canvas);--_radius:var(--rounded-xl);background:var(--_bg);border-radius:var(--_radius);width:100%;min-height:240px;display:block;position:relative;overflow:hidden}.track{gap:var(--marquee-gap,var(--size-4));width:max-content;animation:marquee-scroll var(--_marquee-duration,20s) linear infinite;will-change:transform;flex-direction:row;align-items:stretch;display:flex;position:absolute;top:0;bottom:0}.track:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:0}.track:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:0}.controls{gap:var(--size-0-5);pointer-events:none;align-items:center;display:flex}:host>.controls{padding:var(--size-1-5) var(--size-2);background:color-mix(in oklch, var(--color-canvas) 55%, transparent);border-radius:var(--rounded-full);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);bottom:var(--size-3);position:absolute}:host>.controls:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:var(--size-3)}:host>.controls:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:var(--size-3)}.nav-btn{pointer-events:auto}:host([direction=right]) .track{animation-direction:reverse}:host([pause-on-hover]:hover) .track{animation-play-state:paused}::slotted(*){flex:none;height:100%;position:relative}::slotted([data-marquee-clone]){pointer-events:none;-webkit-user-select:none;user-select:none}@keyframes marquee-scroll{0%{transform:translate(0)}to{transform:translateX(var(--_marquee-translate,-50%))}}}@media (prefers-reduced-motion:reduce){.track{animation:none}}";
|
|
3
|
+
//#endregion
|
|
4
|
+
export { e as default };
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=marquee.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marquee.css.js","names":[],"sources":["../../../src/content/marquee/marquee.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_bg: var(--color-canvas);\n --_radius: var(--rounded-xl);\n\n position: relative;\n display: block;\n width: 100%;\n min-height: 240px;\n overflow: hidden;\n background: var(--_bg);\n border-radius: var(--_radius);\n }\n\n .track {\n position: absolute;\n inset-block: 0;\n inset-inline-start: 0;\n display: flex;\n flex-direction: row;\n gap: var(--marquee-gap, var(--size-4));\n align-items: stretch;\n width: max-content;\n animation: marquee-scroll var(--_marquee-duration, 20s) linear infinite;\n will-change: transform;\n }\n\n .controls {\n display: flex;\n gap: var(--size-0-5);\n align-items: center;\n pointer-events: none;\n }\n\n :host > .controls {\n position: absolute;\n inset-block-end: var(--size-3);\n inset-inline-end: var(--size-3);\n padding: var(--size-1-5) var(--size-2);\n background: color-mix(in oklch, var(--color-canvas) 55%, transparent);\n border-radius: var(--rounded-full);\n backdrop-filter: blur(6px);\n }\n\n .nav-btn {\n pointer-events: auto;\n }\n\n :host([direction='right']) .track {\n animation-direction: reverse;\n }\n\n :host([pause-on-hover]:hover) .track {\n animation-play-state: paused;\n }\n\n ::slotted(*) {\n position: relative;\n flex: 0 0 auto;\n height: 100%;\n }\n\n ::slotted([data-marquee-clone]) {\n pointer-events: none;\n user-select: none;\n }\n\n @keyframes marquee-scroll {\n from {\n transform: translateX(0);\n }\n\n to {\n transform: translateX(var(--_marquee-translate, -50%));\n }\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .track {\n animation: none;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ThemeColor } from '../../types';
|
|
2
|
+
import '../icon/icon';
|
|
3
|
+
import '../../inputs/button/button';
|
|
4
|
+
export type MarqueeDirection = 'left' | 'right';
|
|
5
|
+
export type OreMarqueeProps = {
|
|
6
|
+
/** Theme color for the navigation controls. */
|
|
7
|
+
color?: ThemeColor;
|
|
8
|
+
/** Scroll direction. Defaults to `'left'`. */
|
|
9
|
+
direction?: MarqueeDirection;
|
|
10
|
+
/** Duration in seconds for one complete ticker cycle. Defaults to `20`. */
|
|
11
|
+
duration?: number;
|
|
12
|
+
/** Pause the ticker while it is hovered. Defaults to `false`. */
|
|
13
|
+
'pause-on-hover'?: boolean;
|
|
14
|
+
/** Show previous/next navigation controls. Defaults to `true`. */
|
|
15
|
+
'show-controls'?: boolean;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* A CSS-driven, continuously scrolling ticker.
|
|
19
|
+
*
|
|
20
|
+
* Direct child elements are duplicated internally for a seamless loop. Cloned
|
|
21
|
+
* content is inert and hidden from assistive technology, so author interactive
|
|
22
|
+
* content only in the original children.
|
|
23
|
+
*
|
|
24
|
+
* @element ore-marquee
|
|
25
|
+
*
|
|
26
|
+
* @attr {string} color - Theme color for the navigation controls.
|
|
27
|
+
* @attr {number} duration - Duration in seconds for one ticker cycle (default: 20)
|
|
28
|
+
* @attr {string} direction - 'left' (default) | 'right'
|
|
29
|
+
* @attr {boolean} pause-on-hover - Pause while hovered (default: false)
|
|
30
|
+
* @attr {boolean} show-controls - Show previous/next controls (default: true)
|
|
31
|
+
*
|
|
32
|
+
* @cssprop --marquee-gap - Gap between ticker items (default: var(--size-4))
|
|
33
|
+
*
|
|
34
|
+
* @part track - The animated ticker track.
|
|
35
|
+
* @example
|
|
36
|
+
* ```html
|
|
37
|
+
* <ore-marquee duration="24" pause-on-hover>
|
|
38
|
+
* <span>Free shipping</span>
|
|
39
|
+
* <span>New arrivals</span>
|
|
40
|
+
* </ore-marquee>
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare const MARQUEE_TAG: "ore-marquee";
|
|
44
|
+
//# sourceMappingURL=marquee.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marquee.d.ts","sourceRoot":"","sources":["../../../src/content/marquee/marquee.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,cAAc,CAAC;AACtB,OAAO,4BAA4B,CAAC;AAGpC,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG;IAC5B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kEAAkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,WAAW,EAAG,aAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_is-step-navigable.cjs","names":[],"sources":["../../../src/content/stepper/_is-step-navigable.ts"],"sourcesContent":["/**\n * Pure navigability rule shared by `ore-stepper` (building its own roving-tabindex\n * candidate list) and `ore-step` (reflecting its own `navigable` attribute for CSS/\n * testing). Kept in one place instead of duplicated inline so the two derivations\n * can't drift out of sync.\n */\nexport function isStepNavigable(options: {\n disabled: boolean;\n index: number;\n linear: boolean;\n stepperClickable: boolean;\n stepperCurrentIndex: number;\n}): boolean {\n if (!options.stepperClickable || options.disabled) return false;\n\n if (options.linear && options.stepperCurrentIndex >= 0 && options.index > options.stepperCurrentIndex) return false;\n\n return true;\n}\n"],"mappings":"AAMA,SAAgB,EAAgB,EAMpB,CAKV,MAFA,EAFI,CAAC,EAAQ,kBAAoB,EAAQ,UAErC,EAAQ,QAAU,EAAQ,qBAAuB,GAAK,EAAQ,MAAQ,EAAQ,oBAGpF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure navigability rule shared by `ore-stepper` (building its own roving-tabindex
|
|
3
|
+
* candidate list) and `ore-step` (reflecting its own `navigable` attribute for CSS/
|
|
4
|
+
* testing). Kept in one place instead of duplicated inline so the two derivations
|
|
5
|
+
* can't drift out of sync.
|
|
6
|
+
*/
|
|
7
|
+
export declare function isStepNavigable(options: {
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
index: number;
|
|
10
|
+
linear: boolean;
|
|
11
|
+
stepperClickable: boolean;
|
|
12
|
+
stepperCurrentIndex: number;
|
|
13
|
+
}): boolean;
|
|
14
|
+
//# sourceMappingURL=_is-step-navigable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_is-step-navigable.d.ts","sourceRoot":"","sources":["../../../src/content/stepper/_is-step-navigable.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAMV"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/content/stepper/_is-step-navigable.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
return !(!e.stepperClickable || e.disabled || e.linear && e.stepperCurrentIndex >= 0 && e.index > e.stepperCurrentIndex);
|
|
4
|
+
}
|
|
5
|
+
//#endregion
|
|
6
|
+
export { e as isStepNavigable };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=_is-step-navigable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_is-step-navigable.js","names":[],"sources":["../../../src/content/stepper/_is-step-navigable.ts"],"sourcesContent":["/**\n * Pure navigability rule shared by `ore-stepper` (building its own roving-tabindex\n * candidate list) and `ore-step` (reflecting its own `navigable` attribute for CSS/\n * testing). Kept in one place instead of duplicated inline so the two derivations\n * can't drift out of sync.\n */\nexport function isStepNavigable(options: {\n disabled: boolean;\n index: number;\n linear: boolean;\n stepperClickable: boolean;\n stepperCurrentIndex: number;\n}): boolean {\n if (!options.stepperClickable || options.disabled) return false;\n\n if (options.linear && options.stepperCurrentIndex >= 0 && options.index > options.stepperCurrentIndex) return false;\n\n return true;\n}\n"],"mappings":";AAMA,SAAgB,EAAgB,GAMpB;CAKV,OAFA,EAFI,CAAC,EAAQ,oBAAoB,EAAQ,YAErC,EAAQ,UAAU,EAAQ,uBAAuB,KAAK,EAAQ,QAAQ,EAAQ;AAGpF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=`@layer refine.base{:host{--step-indicator-size:var(--size-8);--step-font-size:var(--text-sm);--step-gap:var(--size-2);flex:1;min-width:0;display:flex}.step{box-sizing:border-box;align-items:center;width:100%;list-style:none;display:flex;position:relative}.connector{top:calc(var(--size-1) + var(--step-indicator-size) / 2);width:calc(50% - var(--step-indicator-size) / 2);height:var(--stepper-connector-size,2px);background:var(--stepper-connector-color,var(--color-contrast-200));border-radius:var(--rounded-full);transition:background var(--transition-fast);position:absolute;transform:translateY(-50%)}.connector-leading{left:0}.connector-trailing{right:0}:host(:first-of-type) .connector-leading,:host(:last-of-type) .connector-trailing{display:none}.control{all:unset;box-sizing:border-box;gap:var(--step-gap);width:100%;min-width:0;padding:var(--size-1);cursor:default;border-radius:var(--rounded-lg);flex-direction:column;flex:auto;align-items:center;font-family:inherit;display:flex;position:relative}button.control{min-height:var(--_touch-target,auto);cursor:pointer;transition:background var(--transition-fast)}button.control:focus-visible{outline:var(--border-2) solid var(--_theme-base,var(--color-contrast-500));outline-offset:var(--border-2)}button.control[aria-disabled=true]{cursor:not-allowed;opacity:.5}.indicator{box-sizing:border-box;width:var(--step-indicator-size);height:var(--step-indicator-size);font-size:var(--step-font-size);font-weight:var(--font-semibold);color:var(--color-contrast-500);background:var(--color-contrast-100);border:var(--border-2) solid var(--color-contrast-200);border-radius:var(--rounded-full);transition:background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);flex:none;justify-content:center;align-items:center;display:flex}.icon-slot[hidden]{display:none}.number{line-height:1}.content{text-align:center;flex-direction:column;flex:auto;align-items:center;min-width:0;display:flex}.label{gap:var(--size-1);min-width:0;font-size:var(--step-font-size);font-weight:var(--font-medium);color:var(--color-contrast-700);justify-content:center;align-items:baseline;display:flex}.label-text{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.optional-hint{font-size:var(--text-xs);font-weight:var(--font-normal);color:var(--color-contrast-400);flex:none}.description{font-size:var(--text-xs);color:var(--color-contrast-500)}.description[hidden]{display:none}.sr-only{white-space:nowrap;clip-path:inset(50%);border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}@layer refine.states{:host([current]) .indicator{color:var(--_theme-contrast,var(--color-canvas));background:var(--_theme-base,var(--color-contrast-800));border-color:var(--_theme-base,var(--color-contrast-800))}:host([current]) .label{font-weight:var(--font-semibold);color:var(--color-contrast-900)}:host([completed]) .indicator{color:var(--_theme-contrast,var(--color-canvas));background:var(--_theme-focus,var(--color-contrast-600));border-color:var(--_theme-focus,var(--color-contrast-600))}:host([completed]) .connector,:host([current]) .connector-leading{background:var(--_theme-focus,var(--color-contrast-400))}:host([error]) .indicator{color:var(--color-canvas);background:var(--color-error);border-color:var(--color-error)}:host([error]) .label{color:var(--color-error)}:host([disabled]) .label,:host([disabled]) .description{color:var(--color-contrast-400)}:host([disabled]) .indicator{opacity:.6}}@layer refine.sizes{:host([size=sm]){--step-indicator-size:var(--size-6);--step-font-size:var(--text-xs);--step-gap:var(--size-1-5)}:host(:not([size])),:host([size=md]){--step-indicator-size:var(--size-8);--step-font-size:var(--text-sm);--step-gap:var(--size-2)}:host([size=lg]){--step-indicator-size:var(--size-10);--step-font-size:var(--text-base);--step-gap:var(--size-2-5)}@media (pointer:coarse){:host(:not([size])),:host([size=sm]),:host([size=md]){--step-indicator-size:var(--size-9);--step-font-size:var(--text-sm)}}}@layer refine.orientation{:host([orientation=vertical]){flex:none;width:100%}:host([orientation=vertical]) .step{padding-top:var(--stepper-gap,var(--size-4));align-items:flex-start}:host([orientation=vertical]:first-of-type) .step{padding-top:0}:host([orientation=vertical]) .control{flex-direction:row;align-items:flex-start}:host([orientation=vertical]) .content{text-align:left;align-items:flex-start}:host([orientation=vertical]) .label{justify-content:flex-start}:host([orientation=vertical]) .connector-leading{top:0;left:calc(var(--size-1) + var(--step-indicator-size) / 2);width:var(--stepper-connector-size,2px);height:calc(var(--stepper-gap,var(--size-4)) + var(--size-1));transform:translate(-50%)}:host([orientation=vertical]) .connector-trailing{inset:calc(var(--stepper-gap,var(--size-4)) + var(--size-1) + var(--step-indicator-size)) auto 0 calc(var(--size-1) + var(--step-indicator-size) / 2);width:var(--stepper-connector-size,2px);height:auto;transform:translate(-50%)}:host([orientation=vertical]:first-of-type) .connector-trailing{top:calc(var(--size-1) + var(--step-indicator-size))}}@media (forced-colors:active){.indicator{border:1px solid buttontext}:host([current]) .indicator,:host([completed]) .indicator{border:1px solid highlight}}`;exports.default=e;
|
|
2
|
+
//# sourceMappingURL=step.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step.css.cjs","names":[],"sources":["../../../src/content/stepper/step.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n display: flex;\n flex: 1 1 0%;\n min-width: 0;\n\n --step-indicator-size: var(--size-8);\n --step-font-size: var(--text-sm);\n --step-gap: var(--size-2);\n }\n\n .step {\n position: relative;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n width: 100%;\n list-style: none;\n }\n\n /* Horizontal (default) layout centers the indicator above the label in each equal-width\n column (see `.control`/`.content` below) so the indicator sits at a predictable, constant\n horizontal position — the midpoint of its own step — regardless of label length. The full\n line between two indicators is drawn as *two* halves — this step's own `.connector-leading`\n (its own left edge to its own indicator) and `.connector-trailing` (its own indicator to its\n own right edge) — each confined entirely inside this step's own box. Reaching a single\n connector backward into the previous step's box (an earlier attempt) doesn't work: `ore-step`\n is its own custom element/shadow root, so a later sibling's positioned content always paints\n in front of an earlier sibling's regardless of internal stacking, and `.control`'s own hover\n background only covers its own box — so the part of the line sitting outside it looked like\n a stray line poking out next to the hover highlight instead of being part of it. */\n .connector {\n position: absolute;\n top: calc(var(--size-1) + var(--step-indicator-size) / 2);\n width: calc(50% - var(--step-indicator-size) / 2);\n height: var(--stepper-connector-size, 2px);\n background: var(--stepper-connector-color, var(--color-contrast-200));\n border-radius: var(--rounded-full);\n transform: translateY(-50%);\n transition: background var(--transition-fast);\n }\n\n .connector-leading {\n left: 0;\n }\n\n .connector-trailing {\n right: 0;\n }\n\n /* No preceding/following step to connect to. */\n :host(:first-of-type) .connector-leading {\n display: none;\n }\n\n :host(:last-of-type) .connector-trailing {\n display: none;\n }\n\n .control {\n all: unset;\n\n /* Declared after `all: unset` (which resets `position` back to `static`), not before it.\n Puts `.control` in the same paint order as `.connector` (also positioned) instead of\n `.connector` — being absolutely positioned — automatically painting above all of this\n *static*, normal-flow content regardless of DOM order. `.control` comes after\n `.connector` in the markup, so with both positioned it (and the opaque indicator inside\n it) now correctly paints over the connector line instead of the line cutting across\n every indicator. */\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n gap: var(--step-gap);\n align-items: center;\n width: 100%;\n min-width: 0;\n padding: var(--size-1);\n font-family: inherit;\n cursor: default;\n border-radius: var(--rounded-lg);\n }\n\n button.control {\n min-height: var(--_touch-target, auto);\n cursor: pointer;\n transition: background var(--transition-fast);\n }\n\n button.control:focus-visible {\n outline: var(--border-2) solid var(--_theme-base, var(--color-contrast-500));\n outline-offset: var(--border-2);\n }\n\n button.control[aria-disabled='true'] {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .indicator {\n /* Without this, the `border` below adds on top of `width`/`height` instead of being\n included in them, rendering the indicator ~2 * border-width larger per axis than\n `--step-indicator-size` — every connector position calc using that variable to line up\n with the indicator's true center/edge (especially the vertical connector's horizontal\n `left`, which has no flexbox centering to fall back on) would then be off by that much. */\n box-sizing: border-box;\n display: flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: var(--step-indicator-size);\n height: var(--step-indicator-size);\n font-size: var(--step-font-size);\n font-weight: var(--font-semibold);\n color: var(--color-contrast-500);\n background: var(--color-contrast-100);\n border: var(--border-2) solid var(--color-contrast-200);\n border-radius: var(--rounded-full);\n transition:\n background var(--transition-fast),\n color var(--transition-fast),\n border-color var(--transition-fast);\n }\n\n .icon-slot[hidden] {\n display: none;\n }\n\n .number {\n line-height: 1;\n }\n\n .content {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-items: center;\n min-width: 0;\n text-align: center;\n }\n\n .label {\n display: flex;\n gap: var(--size-1);\n align-items: baseline;\n justify-content: center;\n min-width: 0;\n font-size: var(--step-font-size);\n font-weight: var(--font-medium);\n color: var(--color-contrast-700);\n }\n\n .label-text {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .optional-hint {\n flex: 0 0 auto;\n font-size: var(--text-xs);\n font-weight: var(--font-normal);\n color: var(--color-contrast-400);\n }\n\n .description {\n font-size: var(--text-xs);\n color: var(--color-contrast-500);\n }\n\n .description[hidden] {\n display: none;\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n white-space: nowrap;\n border-width: 0;\n clip-path: inset(50%);\n }\n}\n\n@layer refine.states {\n :host([current]) .indicator {\n color: var(--_theme-contrast, var(--color-canvas));\n background: var(--_theme-base, var(--color-contrast-800));\n border-color: var(--_theme-base, var(--color-contrast-800));\n }\n\n :host([current]) .label {\n font-weight: var(--font-semibold);\n color: var(--color-contrast-900);\n }\n\n :host([completed]) .indicator {\n color: var(--_theme-contrast, var(--color-canvas));\n background: var(--_theme-focus, var(--color-contrast-600));\n border-color: var(--_theme-focus, var(--color-contrast-600));\n }\n\n /* A completed step colors both the segment leading into it and the one trailing out of it\n (progress has fully passed through); the current step only colors the leading segment\n (progress has arrived, but not yet moved past it into the next step). */\n :host([completed]) .connector,\n :host([current]) .connector-leading {\n background: var(--_theme-focus, var(--color-contrast-400));\n }\n\n :host([error]) .indicator {\n color: var(--color-canvas);\n background: var(--color-error);\n border-color: var(--color-error);\n }\n\n :host([error]) .label {\n color: var(--color-error);\n }\n\n :host([disabled]) .label,\n :host([disabled]) .description {\n color: var(--color-contrast-400);\n }\n\n :host([disabled]) .indicator {\n opacity: 0.6;\n }\n}\n\n@layer refine.sizes {\n :host([size='sm']) {\n --step-indicator-size: var(--size-6);\n --step-font-size: var(--text-xs);\n --step-gap: var(--size-1-5);\n }\n\n :host(:not([size])),\n :host([size='md']) {\n --step-indicator-size: var(--size-8);\n --step-font-size: var(--text-sm);\n --step-gap: var(--size-2);\n }\n\n :host([size='lg']) {\n --step-indicator-size: var(--size-10);\n --step-font-size: var(--text-base);\n --step-gap: var(--size-2-5);\n }\n\n @media (pointer: coarse) {\n :host(:not([size])),\n :host([size='sm']),\n :host([size='md']) {\n --step-indicator-size: var(--size-9);\n --step-font-size: var(--text-sm);\n }\n }\n}\n\n@layer refine.orientation {\n /* Vertical (mobile-friendly) layout: back to the inline icon-beside-label arrangement (more\n compact for narrow/mobile widths), with `padding-block-start` reserving room for a\n top-to-bottom connector into this step's own indicator instead of the horizontal\n center-to-center line above. */\n :host([orientation='vertical']) {\n flex: 0 0 auto;\n width: 100%;\n }\n\n :host([orientation='vertical']) .step {\n align-items: flex-start;\n padding-block-start: var(--stepper-gap, var(--size-4));\n }\n\n :host([orientation='vertical']:first-of-type) .step {\n padding-block-start: 0;\n }\n\n :host([orientation='vertical']) .control {\n flex-direction: row;\n align-items: flex-start;\n }\n\n :host([orientation='vertical']) .content {\n align-items: flex-start;\n text-align: left;\n }\n\n :host([orientation='vertical']) .label {\n justify-content: flex-start;\n }\n\n /* Same two-halves idea as horizontal, rotated: `.connector-leading` runs from this step's own\n top edge down into its indicator (through the `padding-block-start` gap reserved above).\n `.connector-trailing` runs from the *bottom* of this step's indicator down to this step's\n own bottom edge — using `top`+`bottom` (no fixed `height`) so it stretches to whatever this\n step's content actually needs, instead of a fixed length that only reached as far as the\n padding gap. A step with a longer description is taller, and its trailing segment grows\n with it — the next step's leading segment then only has to bridge the fixed padding gap,\n so the two halves always meet exactly at the boundary between the two steps regardless of\n how much content either one has. */\n :host([orientation='vertical']) .connector-leading {\n top: 0;\n left: calc(var(--size-1) + var(--step-indicator-size) / 2);\n width: var(--stepper-connector-size, 2px);\n height: calc(var(--stepper-gap, var(--size-4)) + var(--size-1));\n transform: translateX(-50%);\n }\n\n :host([orientation='vertical']) .connector-trailing {\n inset: calc(var(--stepper-gap, var(--size-4)) + var(--size-1) + var(--step-indicator-size)) auto 0\n calc(var(--size-1) + var(--step-indicator-size) / 2);\n width: var(--stepper-connector-size, 2px);\n height: auto;\n transform: translateX(-50%);\n }\n\n /* The first step's `padding-block-start` is reset to 0 above (no incoming line to make room\n for) — `.connector-trailing`'s `top` has to drop the same gap term here, or it starts\n lower than the indicator's true bottom edge and its `bottom: 0` counterpart can compute a\n negative (clamped to 0) height, hiding the segment entirely. */\n :host([orientation='vertical']:first-of-type) .connector-trailing {\n top: calc(var(--size-1) + var(--step-indicator-size));\n }\n}\n\n@media (forced-colors: active) {\n .indicator {\n border: 1px solid ButtonText;\n }\n\n :host([current]) .indicator,\n :host([completed]) .indicator {\n border: 1px solid Highlight;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/content/stepper/step.css?inline
|
|
2
|
+
var e = "@layer refine.base{:host{--step-indicator-size:var(--size-8);--step-font-size:var(--text-sm);--step-gap:var(--size-2);flex:1;min-width:0;display:flex}.step{box-sizing:border-box;align-items:center;width:100%;list-style:none;display:flex;position:relative}.connector{top:calc(var(--size-1) + var(--step-indicator-size) / 2);width:calc(50% - var(--step-indicator-size) / 2);height:var(--stepper-connector-size,2px);background:var(--stepper-connector-color,var(--color-contrast-200));border-radius:var(--rounded-full);transition:background var(--transition-fast);position:absolute;transform:translateY(-50%)}.connector-leading{left:0}.connector-trailing{right:0}:host(:first-of-type) .connector-leading,:host(:last-of-type) .connector-trailing{display:none}.control{all:unset;box-sizing:border-box;gap:var(--step-gap);width:100%;min-width:0;padding:var(--size-1);cursor:default;border-radius:var(--rounded-lg);flex-direction:column;flex:auto;align-items:center;font-family:inherit;display:flex;position:relative}button.control{min-height:var(--_touch-target,auto);cursor:pointer;transition:background var(--transition-fast)}button.control:focus-visible{outline:var(--border-2) solid var(--_theme-base,var(--color-contrast-500));outline-offset:var(--border-2)}button.control[aria-disabled=true]{cursor:not-allowed;opacity:.5}.indicator{box-sizing:border-box;width:var(--step-indicator-size);height:var(--step-indicator-size);font-size:var(--step-font-size);font-weight:var(--font-semibold);color:var(--color-contrast-500);background:var(--color-contrast-100);border:var(--border-2) solid var(--color-contrast-200);border-radius:var(--rounded-full);transition:background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);flex:none;justify-content:center;align-items:center;display:flex}.icon-slot[hidden]{display:none}.number{line-height:1}.content{text-align:center;flex-direction:column;flex:auto;align-items:center;min-width:0;display:flex}.label{gap:var(--size-1);min-width:0;font-size:var(--step-font-size);font-weight:var(--font-medium);color:var(--color-contrast-700);justify-content:center;align-items:baseline;display:flex}.label-text{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.optional-hint{font-size:var(--text-xs);font-weight:var(--font-normal);color:var(--color-contrast-400);flex:none}.description{font-size:var(--text-xs);color:var(--color-contrast-500)}.description[hidden]{display:none}.sr-only{white-space:nowrap;clip-path:inset(50%);border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}@layer refine.states{:host([current]) .indicator{color:var(--_theme-contrast,var(--color-canvas));background:var(--_theme-base,var(--color-contrast-800));border-color:var(--_theme-base,var(--color-contrast-800))}:host([current]) .label{font-weight:var(--font-semibold);color:var(--color-contrast-900)}:host([completed]) .indicator{color:var(--_theme-contrast,var(--color-canvas));background:var(--_theme-focus,var(--color-contrast-600));border-color:var(--_theme-focus,var(--color-contrast-600))}:host([completed]) .connector,:host([current]) .connector-leading{background:var(--_theme-focus,var(--color-contrast-400))}:host([error]) .indicator{color:var(--color-canvas);background:var(--color-error);border-color:var(--color-error)}:host([error]) .label{color:var(--color-error)}:host([disabled]) .label,:host([disabled]) .description{color:var(--color-contrast-400)}:host([disabled]) .indicator{opacity:.6}}@layer refine.sizes{:host([size=sm]){--step-indicator-size:var(--size-6);--step-font-size:var(--text-xs);--step-gap:var(--size-1-5)}:host(:not([size])),:host([size=md]){--step-indicator-size:var(--size-8);--step-font-size:var(--text-sm);--step-gap:var(--size-2)}:host([size=lg]){--step-indicator-size:var(--size-10);--step-font-size:var(--text-base);--step-gap:var(--size-2-5)}@media (pointer:coarse){:host(:not([size])),:host([size=sm]),:host([size=md]){--step-indicator-size:var(--size-9);--step-font-size:var(--text-sm)}}}@layer refine.orientation{:host([orientation=vertical]){flex:none;width:100%}:host([orientation=vertical]) .step{padding-top:var(--stepper-gap,var(--size-4));align-items:flex-start}:host([orientation=vertical]:first-of-type) .step{padding-top:0}:host([orientation=vertical]) .control{flex-direction:row;align-items:flex-start}:host([orientation=vertical]) .content{text-align:left;align-items:flex-start}:host([orientation=vertical]) .label{justify-content:flex-start}:host([orientation=vertical]) .connector-leading{top:0;left:calc(var(--size-1) + var(--step-indicator-size) / 2);width:var(--stepper-connector-size,2px);height:calc(var(--stepper-gap,var(--size-4)) + var(--size-1));transform:translate(-50%)}:host([orientation=vertical]) .connector-trailing{inset:calc(var(--stepper-gap,var(--size-4)) + var(--size-1) + var(--step-indicator-size)) auto 0 calc(var(--size-1) + var(--step-indicator-size) / 2);width:var(--stepper-connector-size,2px);height:auto;transform:translate(-50%)}:host([orientation=vertical]:first-of-type) .connector-trailing{top:calc(var(--size-1) + var(--step-indicator-size))}}@media (forced-colors:active){.indicator{border:1px solid buttontext}:host([current]) .indicator,:host([completed]) .indicator{border:1px solid highlight}}";
|
|
3
|
+
//#endregion
|
|
4
|
+
export { e as default };
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=step.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step.css.js","names":[],"sources":["../../../src/content/stepper/step.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n display: flex;\n flex: 1 1 0%;\n min-width: 0;\n\n --step-indicator-size: var(--size-8);\n --step-font-size: var(--text-sm);\n --step-gap: var(--size-2);\n }\n\n .step {\n position: relative;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n width: 100%;\n list-style: none;\n }\n\n /* Horizontal (default) layout centers the indicator above the label in each equal-width\n column (see `.control`/`.content` below) so the indicator sits at a predictable, constant\n horizontal position — the midpoint of its own step — regardless of label length. The full\n line between two indicators is drawn as *two* halves — this step's own `.connector-leading`\n (its own left edge to its own indicator) and `.connector-trailing` (its own indicator to its\n own right edge) — each confined entirely inside this step's own box. Reaching a single\n connector backward into the previous step's box (an earlier attempt) doesn't work: `ore-step`\n is its own custom element/shadow root, so a later sibling's positioned content always paints\n in front of an earlier sibling's regardless of internal stacking, and `.control`'s own hover\n background only covers its own box — so the part of the line sitting outside it looked like\n a stray line poking out next to the hover highlight instead of being part of it. */\n .connector {\n position: absolute;\n top: calc(var(--size-1) + var(--step-indicator-size) / 2);\n width: calc(50% - var(--step-indicator-size) / 2);\n height: var(--stepper-connector-size, 2px);\n background: var(--stepper-connector-color, var(--color-contrast-200));\n border-radius: var(--rounded-full);\n transform: translateY(-50%);\n transition: background var(--transition-fast);\n }\n\n .connector-leading {\n left: 0;\n }\n\n .connector-trailing {\n right: 0;\n }\n\n /* No preceding/following step to connect to. */\n :host(:first-of-type) .connector-leading {\n display: none;\n }\n\n :host(:last-of-type) .connector-trailing {\n display: none;\n }\n\n .control {\n all: unset;\n\n /* Declared after `all: unset` (which resets `position` back to `static`), not before it.\n Puts `.control` in the same paint order as `.connector` (also positioned) instead of\n `.connector` — being absolutely positioned — automatically painting above all of this\n *static*, normal-flow content regardless of DOM order. `.control` comes after\n `.connector` in the markup, so with both positioned it (and the opaque indicator inside\n it) now correctly paints over the connector line instead of the line cutting across\n every indicator. */\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n gap: var(--step-gap);\n align-items: center;\n width: 100%;\n min-width: 0;\n padding: var(--size-1);\n font-family: inherit;\n cursor: default;\n border-radius: var(--rounded-lg);\n }\n\n button.control {\n min-height: var(--_touch-target, auto);\n cursor: pointer;\n transition: background var(--transition-fast);\n }\n\n button.control:focus-visible {\n outline: var(--border-2) solid var(--_theme-base, var(--color-contrast-500));\n outline-offset: var(--border-2);\n }\n\n button.control[aria-disabled='true'] {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .indicator {\n /* Without this, the `border` below adds on top of `width`/`height` instead of being\n included in them, rendering the indicator ~2 * border-width larger per axis than\n `--step-indicator-size` — every connector position calc using that variable to line up\n with the indicator's true center/edge (especially the vertical connector's horizontal\n `left`, which has no flexbox centering to fall back on) would then be off by that much. */\n box-sizing: border-box;\n display: flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: var(--step-indicator-size);\n height: var(--step-indicator-size);\n font-size: var(--step-font-size);\n font-weight: var(--font-semibold);\n color: var(--color-contrast-500);\n background: var(--color-contrast-100);\n border: var(--border-2) solid var(--color-contrast-200);\n border-radius: var(--rounded-full);\n transition:\n background var(--transition-fast),\n color var(--transition-fast),\n border-color var(--transition-fast);\n }\n\n .icon-slot[hidden] {\n display: none;\n }\n\n .number {\n line-height: 1;\n }\n\n .content {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-items: center;\n min-width: 0;\n text-align: center;\n }\n\n .label {\n display: flex;\n gap: var(--size-1);\n align-items: baseline;\n justify-content: center;\n min-width: 0;\n font-size: var(--step-font-size);\n font-weight: var(--font-medium);\n color: var(--color-contrast-700);\n }\n\n .label-text {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .optional-hint {\n flex: 0 0 auto;\n font-size: var(--text-xs);\n font-weight: var(--font-normal);\n color: var(--color-contrast-400);\n }\n\n .description {\n font-size: var(--text-xs);\n color: var(--color-contrast-500);\n }\n\n .description[hidden] {\n display: none;\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n white-space: nowrap;\n border-width: 0;\n clip-path: inset(50%);\n }\n}\n\n@layer refine.states {\n :host([current]) .indicator {\n color: var(--_theme-contrast, var(--color-canvas));\n background: var(--_theme-base, var(--color-contrast-800));\n border-color: var(--_theme-base, var(--color-contrast-800));\n }\n\n :host([current]) .label {\n font-weight: var(--font-semibold);\n color: var(--color-contrast-900);\n }\n\n :host([completed]) .indicator {\n color: var(--_theme-contrast, var(--color-canvas));\n background: var(--_theme-focus, var(--color-contrast-600));\n border-color: var(--_theme-focus, var(--color-contrast-600));\n }\n\n /* A completed step colors both the segment leading into it and the one trailing out of it\n (progress has fully passed through); the current step only colors the leading segment\n (progress has arrived, but not yet moved past it into the next step). */\n :host([completed]) .connector,\n :host([current]) .connector-leading {\n background: var(--_theme-focus, var(--color-contrast-400));\n }\n\n :host([error]) .indicator {\n color: var(--color-canvas);\n background: var(--color-error);\n border-color: var(--color-error);\n }\n\n :host([error]) .label {\n color: var(--color-error);\n }\n\n :host([disabled]) .label,\n :host([disabled]) .description {\n color: var(--color-contrast-400);\n }\n\n :host([disabled]) .indicator {\n opacity: 0.6;\n }\n}\n\n@layer refine.sizes {\n :host([size='sm']) {\n --step-indicator-size: var(--size-6);\n --step-font-size: var(--text-xs);\n --step-gap: var(--size-1-5);\n }\n\n :host(:not([size])),\n :host([size='md']) {\n --step-indicator-size: var(--size-8);\n --step-font-size: var(--text-sm);\n --step-gap: var(--size-2);\n }\n\n :host([size='lg']) {\n --step-indicator-size: var(--size-10);\n --step-font-size: var(--text-base);\n --step-gap: var(--size-2-5);\n }\n\n @media (pointer: coarse) {\n :host(:not([size])),\n :host([size='sm']),\n :host([size='md']) {\n --step-indicator-size: var(--size-9);\n --step-font-size: var(--text-sm);\n }\n }\n}\n\n@layer refine.orientation {\n /* Vertical (mobile-friendly) layout: back to the inline icon-beside-label arrangement (more\n compact for narrow/mobile widths), with `padding-block-start` reserving room for a\n top-to-bottom connector into this step's own indicator instead of the horizontal\n center-to-center line above. */\n :host([orientation='vertical']) {\n flex: 0 0 auto;\n width: 100%;\n }\n\n :host([orientation='vertical']) .step {\n align-items: flex-start;\n padding-block-start: var(--stepper-gap, var(--size-4));\n }\n\n :host([orientation='vertical']:first-of-type) .step {\n padding-block-start: 0;\n }\n\n :host([orientation='vertical']) .control {\n flex-direction: row;\n align-items: flex-start;\n }\n\n :host([orientation='vertical']) .content {\n align-items: flex-start;\n text-align: left;\n }\n\n :host([orientation='vertical']) .label {\n justify-content: flex-start;\n }\n\n /* Same two-halves idea as horizontal, rotated: `.connector-leading` runs from this step's own\n top edge down into its indicator (through the `padding-block-start` gap reserved above).\n `.connector-trailing` runs from the *bottom* of this step's indicator down to this step's\n own bottom edge — using `top`+`bottom` (no fixed `height`) so it stretches to whatever this\n step's content actually needs, instead of a fixed length that only reached as far as the\n padding gap. A step with a longer description is taller, and its trailing segment grows\n with it — the next step's leading segment then only has to bridge the fixed padding gap,\n so the two halves always meet exactly at the boundary between the two steps regardless of\n how much content either one has. */\n :host([orientation='vertical']) .connector-leading {\n top: 0;\n left: calc(var(--size-1) + var(--step-indicator-size) / 2);\n width: var(--stepper-connector-size, 2px);\n height: calc(var(--stepper-gap, var(--size-4)) + var(--size-1));\n transform: translateX(-50%);\n }\n\n :host([orientation='vertical']) .connector-trailing {\n inset: calc(var(--stepper-gap, var(--size-4)) + var(--size-1) + var(--step-indicator-size)) auto 0\n calc(var(--size-1) + var(--step-indicator-size) / 2);\n width: var(--stepper-connector-size, 2px);\n height: auto;\n transform: translateX(-50%);\n }\n\n /* The first step's `padding-block-start` is reset to 0 above (no incoming line to make room\n for) — `.connector-trailing`'s `top` has to drop the same gap term here, or it starts\n lower than the indicator's true bottom edge and its `bottom: 0` counterpart can compute a\n negative (clamped to 0) height, hiding the segment entirely. */\n :host([orientation='vertical']:first-of-type) .connector-trailing {\n top: calc(var(--size-1) + var(--step-indicator-size));\n }\n}\n\n@media (forced-colors: active) {\n .indicator {\n border: 1px solid ButtonText;\n }\n\n :host([current]) .indicator,\n :host([completed]) .indicator {\n border: 1px solid Highlight;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ComponentSize, ThemeColor } from '../../types';
|
|
2
|
+
import '../icon/icon';
|
|
3
|
+
export type OreStepProps = {
|
|
4
|
+
/**
|
|
5
|
+
* Theme color. Inherited from the parent `ore-stepper` when nested inside one (overrides
|
|
6
|
+
* this value); only takes effect on its own when `ore-step` is rendered standalone.
|
|
7
|
+
*/
|
|
8
|
+
color?: ThemeColor;
|
|
9
|
+
/** Disables this step — it cannot be navigated to and is skipped by keyboard navigation. */
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
/** Marks this step as failed/invalid. Overrides the completed/current indicator visuals. */
|
|
12
|
+
error?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Marks this step as optional. Renders a small "(optional)" hint next to the label.
|
|
15
|
+
* Purely presentational — has no effect on navigation.
|
|
16
|
+
*/
|
|
17
|
+
optional?: boolean;
|
|
18
|
+
/** Orientation. Inherited from the parent `ore-stepper` when nested inside one. */
|
|
19
|
+
orientation?: 'horizontal' | 'vertical';
|
|
20
|
+
/** Component size. Inherited from the parent `ore-stepper` when nested inside one. */
|
|
21
|
+
size?: ComponentSize;
|
|
22
|
+
/** Unique identifier, matches `ore-stepper`'s `value` attribute. */
|
|
23
|
+
value: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* A single step trigger. Must be placed as a direct child of `ore-stepper`, which provides
|
|
27
|
+
* this step's current/completed/navigable/index/total state via context — those are derived,
|
|
28
|
+
* read-only attributes on this element, not settable props.
|
|
29
|
+
*
|
|
30
|
+
* @element ore-step
|
|
31
|
+
*
|
|
32
|
+
* @attr {string} value - Unique identifier, matches the parent ore-stepper's `value` attribute
|
|
33
|
+
* @attr {boolean} disabled - Prevents navigation to this step
|
|
34
|
+
* @attr {boolean} error - Marks the step as failed/invalid
|
|
35
|
+
* @attr {boolean} optional - Renders an "(optional)" hint next to the label
|
|
36
|
+
* @attr {boolean} current - Read-only. Derived from position relative to the parent ore-stepper's `value`.
|
|
37
|
+
* @attr {boolean} completed - Read-only. Derived from position relative to the parent ore-stepper's `value`.
|
|
38
|
+
* @attr {boolean} navigable - Read-only. Derived from the parent ore-stepper's `clickable`/`linear`/`disabled`.
|
|
39
|
+
* @attr {number} index - Read-only. This step's 1-based position among its siblings.
|
|
40
|
+
* @attr {number} total - Read-only. Total sibling step count.
|
|
41
|
+
* @attr {string} color - Inherited from ore-stepper: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'
|
|
42
|
+
* @attr {string} size - Inherited from ore-stepper: 'sm' | 'md' | 'lg'
|
|
43
|
+
* @attr {string} orientation - Inherited from ore-stepper: 'horizontal' | 'vertical'
|
|
44
|
+
*
|
|
45
|
+
* @slot - Step label
|
|
46
|
+
* @slot description - Optional supporting text shown below the label
|
|
47
|
+
* @slot icon - Custom icon replacing the step number/check/error indicator
|
|
48
|
+
*
|
|
49
|
+
* @part control - Clickable (or static) root element for the step
|
|
50
|
+
* @part indicator - Circular indicator holding the number/icon
|
|
51
|
+
* @part content - Wrapper around the label and description
|
|
52
|
+
* @part label - Step label element
|
|
53
|
+
* @part description - Step description element
|
|
54
|
+
* @part connector - Connector line segments (leading and trailing halves) either side of this step's indicator
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```html
|
|
58
|
+
* <ore-step value="details">Account details</ore-step>
|
|
59
|
+
* <ore-step value="review" disabled>Review</ore-step>
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare const STEP_TAG: "ore-step";
|
|
63
|
+
//# sourceMappingURL=step.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../../src/content/stepper/step.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,cAAc,CAAC;AAOtB,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,sFAAsF;IACtF,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,QAAQ,EAAG,UAAmB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=`@layer refine.base{:host,nav{width:100%;display:block}.steps{align-items:flex-start;gap:0;width:100%;margin:0;padding:0;list-style:none;display:flex}.stepper-message{margin-top:var(--size-3);display:block}}@layer refine.orientation{:host([orientation=vertical]) .steps{flex-direction:column;align-items:stretch}}`;exports.default=e;
|
|
2
|
+
//# sourceMappingURL=stepper.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.css.cjs","names":[],"sources":["../../../src/content/stepper/stepper.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n display: block;\n width: 100%;\n }\n\n nav {\n display: block;\n width: 100%;\n }\n\n .steps {\n /* Spacing between steps comes from each ore-step's own `padding-inline-start` /\n `padding-block-start` (see step.css), not a flex `gap` here — that lets each step's\n connector line be drawn from its own edge to its own indicator using the exact same\n length it was given room for, with no separate gap value to keep in sync by hand. */\n display: flex;\n gap: 0;\n align-items: flex-start;\n width: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .stepper-message {\n display: block;\n margin-top: var(--size-3);\n }\n}\n\n@layer refine.orientation {\n :host([orientation='vertical']) .steps {\n flex-direction: column;\n align-items: stretch;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/content/stepper/stepper.css?inline
|
|
2
|
+
var e = "@layer refine.base{:host,nav{width:100%;display:block}.steps{align-items:flex-start;gap:0;width:100%;margin:0;padding:0;list-style:none;display:flex}.stepper-message{margin-top:var(--size-3);display:block}}@layer refine.orientation{:host([orientation=vertical]) .steps{flex-direction:column;align-items:stretch}}";
|
|
3
|
+
//#endregion
|
|
4
|
+
export { e as default };
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=stepper.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.css.js","names":[],"sources":["../../../src/content/stepper/stepper.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n display: block;\n width: 100%;\n }\n\n nav {\n display: block;\n width: 100%;\n }\n\n .steps {\n /* Spacing between steps comes from each ore-step's own `padding-inline-start` /\n `padding-block-start` (see step.css), not a flex `gap` here — that lets each step's\n connector line be drawn from its own edge to its own indicator using the exact same\n length it was given room for, with no separate gap value to keep in sync by hand. */\n display: flex;\n gap: 0;\n align-items: flex-start;\n width: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .stepper-message {\n display: block;\n margin-top: var(--size-3);\n }\n}\n\n@layer refine.orientation {\n :host([orientation='vertical']) .steps {\n flex-direction: column;\n align-items: stretch;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { type Readable } from '@vielzeug/ripple';
|
|
2
|
+
import type { ComponentSize, ThemeColor } from '../../types';
|
|
3
|
+
/** Context provided by ore-stepper to its ore-step children. */
|
|
4
|
+
export type StepperContext = {
|
|
5
|
+
clickable: Readable<boolean>;
|
|
6
|
+
color: Readable<ThemeColor | undefined>;
|
|
7
|
+
currentValue: Readable<string | undefined>;
|
|
8
|
+
linear: Readable<boolean>;
|
|
9
|
+
orientation: Readable<'horizontal' | 'vertical'>;
|
|
10
|
+
size: Readable<ComponentSize | undefined>;
|
|
11
|
+
/** Ordered `value`s of every sibling `ore-step`, used to derive index/total/completed. */
|
|
12
|
+
stepValues: Readable<string[]>;
|
|
13
|
+
};
|
|
14
|
+
/** Injection key for the stepper context. */
|
|
15
|
+
export declare const STEPPER_CTX: import("@vielzeug/ore").InjectionKey<StepperContext>;
|
|
16
|
+
export type OreStepperEvents = {
|
|
17
|
+
change: {
|
|
18
|
+
value: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export type OreStepperProps = {
|
|
22
|
+
/** When true, steps are clickable/keyboard-focusable for navigation. Default: display-only progress. */
|
|
23
|
+
clickable?: boolean;
|
|
24
|
+
/** Theme color for the current/completed step indicators */
|
|
25
|
+
color?: ThemeColor;
|
|
26
|
+
/** Disables the whole stepper — no step is navigable regardless of `clickable` */
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
/** Accessible label for the nav landmark */
|
|
29
|
+
label?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Restricts navigation to completed steps and the current step — steps ahead of the
|
|
32
|
+
* current one cannot be clicked or focused, even when `clickable` is set.
|
|
33
|
+
*/
|
|
34
|
+
linear?: boolean;
|
|
35
|
+
/** Layout orientation — 'horizontal' (default, desktop) or 'vertical' (compact/mobile-friendly) */
|
|
36
|
+
orientation?: 'horizontal' | 'vertical';
|
|
37
|
+
/** Component size */
|
|
38
|
+
size?: ComponentSize;
|
|
39
|
+
/** The `value` of the currently active `ore-step` */
|
|
40
|
+
value?: string;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Displays progress through a sequence of numbered steps. Manages step selection and provides
|
|
44
|
+
* shared state (current value, clickability, theming) to its `ore-step` children via context.
|
|
45
|
+
* Can be purely informational (progress display) or interactive navigation.
|
|
46
|
+
*
|
|
47
|
+
* @element ore-stepper
|
|
48
|
+
* @element ore-step - Child element for each step (auto-discovered)
|
|
49
|
+
*
|
|
50
|
+
* @attr {string} value - The value of the currently active step
|
|
51
|
+
* @attr {boolean} clickable - Allow clicking/focusing steps to navigate
|
|
52
|
+
* @attr {boolean} linear - Restrict navigation to completed + current steps only
|
|
53
|
+
* @attr {boolean} disabled - Disables the whole stepper
|
|
54
|
+
* @attr {string} orientation - 'horizontal' (default) | 'vertical'
|
|
55
|
+
* @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'
|
|
56
|
+
* @attr {string} size - Size: 'sm' | 'md' | 'lg'
|
|
57
|
+
* @attr {string} label - Accessible nav landmark label (default: 'Progress')
|
|
58
|
+
*
|
|
59
|
+
* @fires change - Emitted when the active step changes via click/keyboard. detail: { value: string }
|
|
60
|
+
*
|
|
61
|
+
* @slot - `ore-step` elements
|
|
62
|
+
*
|
|
63
|
+
* @cssprop --stepper-connector-color - Color of the connector line between steps
|
|
64
|
+
* @cssprop --stepper-connector-size - Thickness of the connector line
|
|
65
|
+
* @cssprop --stepper-gap - Gap between steps
|
|
66
|
+
*
|
|
67
|
+
* @part nav - Navigation landmark element
|
|
68
|
+
* @part list - Ordered list container holding the slotted steps
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```html
|
|
72
|
+
* <!-- Display-only progress -->
|
|
73
|
+
* <ore-stepper value="shipping" color="primary">
|
|
74
|
+
* <ore-step value="cart">Cart</ore-step>
|
|
75
|
+
* <ore-step value="shipping">Shipping</ore-step>
|
|
76
|
+
* <ore-step value="payment">Payment</ore-step>
|
|
77
|
+
* </ore-stepper>
|
|
78
|
+
*
|
|
79
|
+
* <!-- Clickable navigation, mobile-friendly vertical layout -->
|
|
80
|
+
* <ore-stepper value="shipping" clickable linear orientation="vertical">
|
|
81
|
+
* <ore-step value="cart">Cart</ore-step>
|
|
82
|
+
* <ore-step value="shipping">Shipping</ore-step>
|
|
83
|
+
* <ore-step value="payment" disabled>Payment</ore-step>
|
|
84
|
+
* </ore-stepper>
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export declare const STEPPER_TAG: "ore-stepper";
|
|
88
|
+
//# sourceMappingURL=stepper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.d.ts","sourceRoot":"","sources":["../../../src/content/stepper/stepper.ts"],"names":[],"mappings":"AAaA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkB7D,gEAAgE;AAChE,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7B,KAAK,EAAE,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IACxC,YAAY,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,WAAW,EAAE,QAAQ,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC;IACjD,IAAI,EAAE,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAC1C,0FAA0F;IAC1F,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;CAChC,CAAC;AACF,6CAA6C;AAC7C,eAAO,MAAM,WAAW,sDAAkD,CAAC;AAE3E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,wGAAwG;IACxG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mGAAmG;IACnG,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,qBAAqB;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,eAAO,MAAM,WAAW,EAAG,aAAsB,CAAC"}
|
package/dist/copy-command.cjs
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/accessibility.css.cjs"),t=require("./content/copy-command/copy-command.css.cjs");let n=require("@vielzeug/ore"),r=require("@vielzeug/ripple");var i=`ore-copy-command`;(0,n.define)(i,{props:{rounded:n.prop.string(`md`),size:n.prop.string(`md`),value:n.prop.string(``),variant:n.prop.string(`flat`)},setup(e){let t=(0,n.useEmit)(),i=(0,n.useSlots)(),a=(0,r.signal)(!1),o=(0,r.signal)(!1),s=null;(0,n.onCleanup)(()=>{s!==null&&clearTimeout(s)});let c=async()=>{let n=e.value.value??``;if(n){s!==null&&clearTimeout(s);try{await navigator.clipboard.writeText(n),a.value=!0,o.value=!1,t(`copy`,{value:n})}catch{a.value=!1,o.value=!0}s=setTimeout(()=>{a.value=!1,o.value=!1,s=null},2e3)}},l=(0,r.computed)(()=>i.has(`suffix`).value);return n.html`
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/accessibility.css.cjs"),t=require("./content/copy-command/copy-command.css.cjs");let n=require("@vielzeug/ore"),r=require("@vielzeug/ripple");var i=`ore-copy-command`;(0,n.define)(i,{props:{rounded:n.prop.string(`md`),size:n.prop.string(`md`),value:n.prop.string(``),variant:n.prop.string(`flat`)},setup(e){let t=(0,n.useEmit)(),i=(0,n.useSlots)(),a=(0,r.signal)(!1),o=(0,r.signal)(!1),s=null;(0,n.onCleanup)(()=>{s!==null&&clearTimeout(s)});let c=async()=>{let n=e.value.value??``;if(n){s!==null&&clearTimeout(s);try{await navigator.clipboard.writeText(n),a.value=!0,o.value=!1,t(`copy`,{value:n})}catch{a.value=!1,o.value=!0}s=setTimeout(()=>{a.value=!1,o.value=!1,s=null},2e3)}},l=(0,r.computed)(()=>i.has(`suffix`).value),u=(0,r.computed)(()=>a.value?`Copied!`:o.value?`Copy failed — press to try again`:`Copy: ${e.value.value??``}`);return n.html`
|
|
2
2
|
<div class="wrapper" part="wrapper">
|
|
3
|
-
<button class="command" part="command" type="button"
|
|
3
|
+
<button class="command" part="command" type="button" aria-label="${u}" @click=${c}>
|
|
4
4
|
<code class="command-text" part="command-text">${e.value}</code>
|
|
5
5
|
<span class="copy-icon" part="copy-icon" aria-hidden="true">
|
|
6
|
-
${()=>a.value?n.html
|
|
6
|
+
${()=>a.value?n.html`
|
|
7
|
+
<ore-icon name="check" size="14" class="icon-copied" aria-hidden="true"></ore-icon>
|
|
8
|
+
`:o.value?n.html`
|
|
9
|
+
<ore-icon name="circle-alert" size="14" class="icon-failed" aria-hidden="true"></ore-icon>
|
|
10
|
+
`:n.html`
|
|
11
|
+
<ore-icon name="copy" size="14" aria-hidden="true"></ore-icon>
|
|
12
|
+
`}
|
|
7
13
|
</span>
|
|
8
14
|
</button>
|
|
9
15
|
<div class="suffix" part="suffix" ?hidden="${()=>!l.value}">
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-command.cjs","names":[],"sources":["../src/content/copy-command/copy-command.ts"],"sourcesContent":["import { define, html, prop, onCleanup, useEmit, useSlots } from '@vielzeug/ore';\nimport { computed, signal } from '@vielzeug/ripple';\n\nimport type { ComponentSize, RoundedSize } from '../../types';\n\nimport { srOnlyMixin } from '../../styles';\nimport '../icon/icon';\nimport componentStyles from './copy-command.css?inline';\n\n/** Copy command component properties */\nexport type OreCopyCommandProps = {\n /** Border radius size */\n rounded?: RoundedSize;\n /** Component size */\n size?: ComponentSize;\n /** The command string to display and copy to clipboard */\n value?: string;\n /** Visual style variant */\n variant?: 'flat' | 'bordered' | 'ghost';\n};\n\n/** Copy command component events */\nexport type OreCopyCommandEvents = {\n /** Emitted when the command is successfully copied to the clipboard */\n copy: { value: string };\n};\n\n/**\n * A styled, copy-to-clipboard command display component.\n * Shows a command string in a monospace code block with a copy button.\n * Clicking the component copies the value to the clipboard, shows a transient\n * check-mark confirmation, and emits a `copy` event.\n *\n * @element ore-copy-command\n *\n * @attr {string} value - The command string to display and copy\n * @attr {string} size - Component size: 'sm' | 'md' | 'lg'\n * @attr {string} variant - Visual style: 'flat' | 'bordered' | 'ghost'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n *\n * @fires copy - Emitted on successful clipboard write. detail: { value: string }\n *\n * @slot suffix - Optional controls appended after the copy button (e.g. a cycle button)\n *\n * @cssprop --copy-command-bg - Background color of the command block\n * @cssprop --copy-command-color - Text color of the command string\n * @cssprop --copy-command-border-color - Border color\n * @cssprop --copy-command-radius - Border radius (overrides the `rounded` attribute)\n * @cssprop --copy-command-padding - Inner padding of the command button\n * @cssprop --copy-command-font-size - Font size of the command string\n * @cssprop --copy-command-icon-color - Color of the copy/check icon\n * @cssprop --copy-command-hover-bg - Background on hover\n *\n * @part wrapper - Outer flex container\n * @part command - The copy button element\n * @part command-text - The `<code>` element displaying the command string\n * @part copy-icon - The icon wrapper span\n * @part suffix - Suffix slot container\n *\n * @example\n * ```html\n * <ore-copy-command value=\"npm install @vielzeug/ripple\"></ore-copy-command>\n *\n * <ore-copy-command value=\"npx -y @vielzeug/codex\" size=\"sm\" variant=\"bordered\"></ore-copy-command>\n *\n * <!-- With a suffix slot (e.g. a cycle button) -->\n * <ore-copy-command value=\"npm install @vielzeug/ripple\">\n * <button slot=\"suffix\" type=\"button\" aria-label=\"Next package\">›</button>\n * </ore-copy-command>\n * ```\n */\nexport const COPY_COMMAND_TAG = 'ore-copy-command' as const;\n\ndefine<OreCopyCommandProps>(COPY_COMMAND_TAG, {\n props: {\n rounded: prop.string<RoundedSize>('md'),\n size: prop.string<ComponentSize>('md'),\n value: prop.string(''),\n variant: prop.string<'flat' | 'bordered' | 'ghost'>('flat'),\n },\n\n setup(props) {\n const emit = useEmit<OreCopyCommandEvents>();\n const slots = useSlots();\n\n const copied = signal(false);\n const copyFailed = signal(false);\n let resetTimer: ReturnType<typeof setTimeout> | null = null;\n\n onCleanup(() => {\n if (resetTimer !== null) clearTimeout(resetTimer);\n });\n\n const handleCopy = async () => {\n const text = props.value.value ?? '';\n\n if (!text) return;\n\n if (resetTimer !== null) clearTimeout(resetTimer);\n\n try {\n await navigator.clipboard.writeText(text);\n copied.value = true;\n copyFailed.value = false;\n emit('copy', { value: text });\n } catch {\n // Clipboard access denied or unavailable (e.g. insecure context) — surface it instead of failing silently\n copied.value = false;\n copyFailed.value = true;\n }\n\n resetTimer = setTimeout(() => {\n copied.value = false;\n copyFailed.value = false;\n resetTimer = null;\n }, 2000);\n };\n\n const hasSuffix = computed(() => slots.has('suffix').value);\n const btnLabel = computed(() => {\n if (copied.value) return 'Copied!';\n\n if (copyFailed.value) return 'Copy failed — press to try again';\n\n return `Copy: ${props.value.value ?? ''}`;\n });\n\n return html`\n <div class=\"wrapper\" part=\"wrapper\">\n <button class=\"command\" part=\"command\" type=\"button\"
|
|
1
|
+
{"version":3,"file":"copy-command.cjs","names":[],"sources":["../src/content/copy-command/copy-command.ts"],"sourcesContent":["import { define, html, prop, onCleanup, useEmit, useSlots } from '@vielzeug/ore';\nimport { computed, signal } from '@vielzeug/ripple';\n\nimport type { ComponentSize, RoundedSize } from '../../types';\n\nimport { srOnlyMixin } from '../../styles';\nimport '../icon/icon';\nimport componentStyles from './copy-command.css?inline';\n\n/** Copy command component properties */\nexport type OreCopyCommandProps = {\n /** Border radius size */\n rounded?: RoundedSize;\n /** Component size */\n size?: ComponentSize;\n /** The command string to display and copy to clipboard */\n value?: string;\n /** Visual style variant */\n variant?: 'flat' | 'bordered' | 'ghost';\n};\n\n/** Copy command component events */\nexport type OreCopyCommandEvents = {\n /** Emitted when the command is successfully copied to the clipboard */\n copy: { value: string };\n};\n\n/**\n * A styled, copy-to-clipboard command display component.\n * Shows a command string in a monospace code block with a copy button.\n * Clicking the component copies the value to the clipboard, shows a transient\n * check-mark confirmation, and emits a `copy` event.\n *\n * @element ore-copy-command\n *\n * @attr {string} value - The command string to display and copy\n * @attr {string} size - Component size: 'sm' | 'md' | 'lg'\n * @attr {string} variant - Visual style: 'flat' | 'bordered' | 'ghost'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n *\n * @fires copy - Emitted on successful clipboard write. detail: { value: string }\n *\n * @slot suffix - Optional controls appended after the copy button (e.g. a cycle button)\n *\n * @cssprop --copy-command-bg - Background color of the command block\n * @cssprop --copy-command-color - Text color of the command string\n * @cssprop --copy-command-border-color - Border color\n * @cssprop --copy-command-radius - Border radius (overrides the `rounded` attribute)\n * @cssprop --copy-command-padding - Inner padding of the command button\n * @cssprop --copy-command-font-size - Font size of the command string\n * @cssprop --copy-command-icon-color - Color of the copy/check icon\n * @cssprop --copy-command-hover-bg - Background on hover\n *\n * @part wrapper - Outer flex container\n * @part command - The copy button element\n * @part command-text - The `<code>` element displaying the command string\n * @part copy-icon - The icon wrapper span\n * @part suffix - Suffix slot container\n *\n * @example\n * ```html\n * <ore-copy-command value=\"npm install @vielzeug/ripple\"></ore-copy-command>\n *\n * <ore-copy-command value=\"npx -y @vielzeug/codex\" size=\"sm\" variant=\"bordered\"></ore-copy-command>\n *\n * <!-- With a suffix slot (e.g. a cycle button) -->\n * <ore-copy-command value=\"npm install @vielzeug/ripple\">\n * <button slot=\"suffix\" type=\"button\" aria-label=\"Next package\">›</button>\n * </ore-copy-command>\n * ```\n */\nexport const COPY_COMMAND_TAG = 'ore-copy-command' as const;\n\ndefine<OreCopyCommandProps>(COPY_COMMAND_TAG, {\n props: {\n rounded: prop.string<RoundedSize>('md'),\n size: prop.string<ComponentSize>('md'),\n value: prop.string(''),\n variant: prop.string<'flat' | 'bordered' | 'ghost'>('flat'),\n },\n\n setup(props) {\n const emit = useEmit<OreCopyCommandEvents>();\n const slots = useSlots();\n\n const copied = signal(false);\n const copyFailed = signal(false);\n let resetTimer: ReturnType<typeof setTimeout> | null = null;\n\n onCleanup(() => {\n if (resetTimer !== null) clearTimeout(resetTimer);\n });\n\n const handleCopy = async () => {\n const text = props.value.value ?? '';\n\n if (!text) return;\n\n if (resetTimer !== null) clearTimeout(resetTimer);\n\n try {\n await navigator.clipboard.writeText(text);\n copied.value = true;\n copyFailed.value = false;\n emit('copy', { value: text });\n } catch {\n // Clipboard access denied or unavailable (e.g. insecure context) — surface it instead of failing silently\n copied.value = false;\n copyFailed.value = true;\n }\n\n resetTimer = setTimeout(() => {\n copied.value = false;\n copyFailed.value = false;\n resetTimer = null;\n }, 2000);\n };\n\n const hasSuffix = computed(() => slots.has('suffix').value);\n const btnLabel = computed(() => {\n if (copied.value) return 'Copied!';\n\n if (copyFailed.value) return 'Copy failed — press to try again';\n\n return `Copy: ${props.value.value ?? ''}`;\n });\n\n return html`\n <div class=\"wrapper\" part=\"wrapper\">\n <button class=\"command\" part=\"command\" type=\"button\" aria-label=\"${btnLabel}\" @click=${handleCopy}>\n <code class=\"command-text\" part=\"command-text\">${props.value}</code>\n <span class=\"copy-icon\" part=\"copy-icon\" aria-hidden=\"true\">\n ${() => {\n if (copied.value)\n return html`\n <ore-icon name=\"check\" size=\"14\" class=\"icon-copied\" aria-hidden=\"true\"></ore-icon>\n `;\n\n if (copyFailed.value)\n return html`\n <ore-icon name=\"circle-alert\" size=\"14\" class=\"icon-failed\" aria-hidden=\"true\"></ore-icon>\n `;\n\n return html`\n <ore-icon name=\"copy\" size=\"14\" aria-hidden=\"true\"></ore-icon>\n `;\n }}\n </span>\n </button>\n <div class=\"suffix\" part=\"suffix\" ?hidden=\"${() => !hasSuffix.value}\">\n <slot name=\"suffix\"></slot>\n </div>\n </div>\n <div role=\"status\" class=\"sr-only\">\n ${() => {\n if (copied.value) return 'Copied to clipboard.';\n\n if (copyFailed.value) return 'Copy failed. Select the command text and copy it manually.';\n\n return '';\n }}\n </div>\n `;\n },\n\n styles: [srOnlyMixin, componentStyles],\n});\n"],"mappings":"kPAuEA,IAAa,EAAmB,oBAEhC,EAAA,EAAA,OAAA,CAA4B,EAAkB,CAC5C,MAAO,CACL,QAAS,EAAA,KAAK,OAAoB,IAAI,EACtC,KAAM,EAAA,KAAK,OAAsB,IAAI,EACrC,MAAO,EAAA,KAAK,OAAO,EAAE,EACrB,QAAS,EAAA,KAAK,OAAsC,MAAM,CAC5D,EAEA,MAAM,EAAO,CACX,IAAM,GAAA,EAAO,EAAA,QAAA,CAA8B,EACrC,GAAA,EAAQ,EAAA,SAAA,CAAS,EAEjB,GAAA,EAAS,EAAA,OAAA,CAAO,EAAK,EACrB,GAAA,EAAa,EAAA,OAAA,CAAO,EAAK,EAC3B,EAAmD,MAEvD,EAAA,EAAA,UAAA,KAAgB,CACV,IAAe,MAAM,aAAa,CAAU,CAClD,CAAC,EAED,IAAM,EAAa,SAAY,CAC7B,IAAM,EAAO,EAAM,MAAM,OAAS,GAE7B,KAEL,CAAI,IAAe,MAAM,aAAa,CAAU,EAEhD,GAAI,CACF,MAAM,UAAU,UAAU,UAAU,CAAI,EACxC,EAAO,MAAQ,GACf,EAAW,MAAQ,GACnB,EAAK,OAAQ,CAAE,MAAO,CAAK,CAAC,CAC9B,MAAQ,CAEN,EAAO,MAAQ,GACf,EAAW,MAAQ,EACrB,CAEA,EAAa,eAAiB,CAC5B,EAAO,MAAQ,GACf,EAAW,MAAQ,GACnB,EAAa,IACf,EAAG,GAAI,CAjByC,CAkBlD,EAEM,GAAA,EAAY,EAAA,SAAA,KAAe,EAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EACpD,GAAA,EAAW,EAAA,SAAA,KACX,EAAO,MAAc,UAErB,EAAW,MAAc,mCAEtB,SAAS,EAAM,MAAM,OAAS,IACtC,EAED,MAAO,GAAA,IAAI;;2EAE4D,EAAS,WAAW,EAAW;2DAC/C,EAAM,MAAM;;kBAGrD,EAAO,MACF,EAAA,IAAI;;kBAIT,EAAW,MACN,EAAA,IAAI;;kBAIN,EAAA,IAAI;;gBAGX;;;yDAG6C,CAAC,EAAU,MAAM;;;;;cAM9D,EAAO,MAAc,uBAErB,EAAW,MAAc,6DAEtB,GACP;;KAGR,EAEA,OAAQ,CAAC,EAAA,YAAa,EAAA,OAAe,CACvC,CAAC"}
|
package/dist/copy-command.js
CHANGED
|
@@ -29,13 +29,19 @@ n(u, {
|
|
|
29
29
|
a.value = !1, u.value = !1, d = null;
|
|
30
30
|
}, 2e3);
|
|
31
31
|
}
|
|
32
|
-
}, p = c(() => n.has("suffix").value);
|
|
32
|
+
}, p = c(() => n.has("suffix").value), m = c(() => a.value ? "Copied!" : u.value ? "Copy failed — press to try again" : `Copy: ${e.value.value ?? ""}`);
|
|
33
33
|
return r`
|
|
34
34
|
<div class="wrapper" part="wrapper">
|
|
35
|
-
<button class="command" part="command" type="button"
|
|
35
|
+
<button class="command" part="command" type="button" aria-label="${m}" @click=${f}>
|
|
36
36
|
<code class="command-text" part="command-text">${e.value}</code>
|
|
37
37
|
<span class="copy-icon" part="copy-icon" aria-hidden="true">
|
|
38
|
-
${() => a.value ? r
|
|
38
|
+
${() => a.value ? r`
|
|
39
|
+
<ore-icon name="check" size="14" class="icon-copied" aria-hidden="true"></ore-icon>
|
|
40
|
+
` : u.value ? r`
|
|
41
|
+
<ore-icon name="circle-alert" size="14" class="icon-failed" aria-hidden="true"></ore-icon>
|
|
42
|
+
` : r`
|
|
43
|
+
<ore-icon name="copy" size="14" aria-hidden="true"></ore-icon>
|
|
44
|
+
`}
|
|
39
45
|
</span>
|
|
40
46
|
</button>
|
|
41
47
|
<div class="suffix" part="suffix" ?hidden="${() => !p.value}">
|
package/dist/copy-command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-command.js","names":[],"sources":["../src/content/copy-command/copy-command.ts"],"sourcesContent":["import { define, html, prop, onCleanup, useEmit, useSlots } from '@vielzeug/ore';\nimport { computed, signal } from '@vielzeug/ripple';\n\nimport type { ComponentSize, RoundedSize } from '../../types';\n\nimport { srOnlyMixin } from '../../styles';\nimport '../icon/icon';\nimport componentStyles from './copy-command.css?inline';\n\n/** Copy command component properties */\nexport type OreCopyCommandProps = {\n /** Border radius size */\n rounded?: RoundedSize;\n /** Component size */\n size?: ComponentSize;\n /** The command string to display and copy to clipboard */\n value?: string;\n /** Visual style variant */\n variant?: 'flat' | 'bordered' | 'ghost';\n};\n\n/** Copy command component events */\nexport type OreCopyCommandEvents = {\n /** Emitted when the command is successfully copied to the clipboard */\n copy: { value: string };\n};\n\n/**\n * A styled, copy-to-clipboard command display component.\n * Shows a command string in a monospace code block with a copy button.\n * Clicking the component copies the value to the clipboard, shows a transient\n * check-mark confirmation, and emits a `copy` event.\n *\n * @element ore-copy-command\n *\n * @attr {string} value - The command string to display and copy\n * @attr {string} size - Component size: 'sm' | 'md' | 'lg'\n * @attr {string} variant - Visual style: 'flat' | 'bordered' | 'ghost'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n *\n * @fires copy - Emitted on successful clipboard write. detail: { value: string }\n *\n * @slot suffix - Optional controls appended after the copy button (e.g. a cycle button)\n *\n * @cssprop --copy-command-bg - Background color of the command block\n * @cssprop --copy-command-color - Text color of the command string\n * @cssprop --copy-command-border-color - Border color\n * @cssprop --copy-command-radius - Border radius (overrides the `rounded` attribute)\n * @cssprop --copy-command-padding - Inner padding of the command button\n * @cssprop --copy-command-font-size - Font size of the command string\n * @cssprop --copy-command-icon-color - Color of the copy/check icon\n * @cssprop --copy-command-hover-bg - Background on hover\n *\n * @part wrapper - Outer flex container\n * @part command - The copy button element\n * @part command-text - The `<code>` element displaying the command string\n * @part copy-icon - The icon wrapper span\n * @part suffix - Suffix slot container\n *\n * @example\n * ```html\n * <ore-copy-command value=\"npm install @vielzeug/ripple\"></ore-copy-command>\n *\n * <ore-copy-command value=\"npx -y @vielzeug/codex\" size=\"sm\" variant=\"bordered\"></ore-copy-command>\n *\n * <!-- With a suffix slot (e.g. a cycle button) -->\n * <ore-copy-command value=\"npm install @vielzeug/ripple\">\n * <button slot=\"suffix\" type=\"button\" aria-label=\"Next package\">›</button>\n * </ore-copy-command>\n * ```\n */\nexport const COPY_COMMAND_TAG = 'ore-copy-command' as const;\n\ndefine<OreCopyCommandProps>(COPY_COMMAND_TAG, {\n props: {\n rounded: prop.string<RoundedSize>('md'),\n size: prop.string<ComponentSize>('md'),\n value: prop.string(''),\n variant: prop.string<'flat' | 'bordered' | 'ghost'>('flat'),\n },\n\n setup(props) {\n const emit = useEmit<OreCopyCommandEvents>();\n const slots = useSlots();\n\n const copied = signal(false);\n const copyFailed = signal(false);\n let resetTimer: ReturnType<typeof setTimeout> | null = null;\n\n onCleanup(() => {\n if (resetTimer !== null) clearTimeout(resetTimer);\n });\n\n const handleCopy = async () => {\n const text = props.value.value ?? '';\n\n if (!text) return;\n\n if (resetTimer !== null) clearTimeout(resetTimer);\n\n try {\n await navigator.clipboard.writeText(text);\n copied.value = true;\n copyFailed.value = false;\n emit('copy', { value: text });\n } catch {\n // Clipboard access denied or unavailable (e.g. insecure context) — surface it instead of failing silently\n copied.value = false;\n copyFailed.value = true;\n }\n\n resetTimer = setTimeout(() => {\n copied.value = false;\n copyFailed.value = false;\n resetTimer = null;\n }, 2000);\n };\n\n const hasSuffix = computed(() => slots.has('suffix').value);\n const btnLabel = computed(() => {\n if (copied.value) return 'Copied!';\n\n if (copyFailed.value) return 'Copy failed — press to try again';\n\n return `Copy: ${props.value.value ?? ''}`;\n });\n\n return html`\n <div class=\"wrapper\" part=\"wrapper\">\n <button class=\"command\" part=\"command\" type=\"button\"
|
|
1
|
+
{"version":3,"file":"copy-command.js","names":[],"sources":["../src/content/copy-command/copy-command.ts"],"sourcesContent":["import { define, html, prop, onCleanup, useEmit, useSlots } from '@vielzeug/ore';\nimport { computed, signal } from '@vielzeug/ripple';\n\nimport type { ComponentSize, RoundedSize } from '../../types';\n\nimport { srOnlyMixin } from '../../styles';\nimport '../icon/icon';\nimport componentStyles from './copy-command.css?inline';\n\n/** Copy command component properties */\nexport type OreCopyCommandProps = {\n /** Border radius size */\n rounded?: RoundedSize;\n /** Component size */\n size?: ComponentSize;\n /** The command string to display and copy to clipboard */\n value?: string;\n /** Visual style variant */\n variant?: 'flat' | 'bordered' | 'ghost';\n};\n\n/** Copy command component events */\nexport type OreCopyCommandEvents = {\n /** Emitted when the command is successfully copied to the clipboard */\n copy: { value: string };\n};\n\n/**\n * A styled, copy-to-clipboard command display component.\n * Shows a command string in a monospace code block with a copy button.\n * Clicking the component copies the value to the clipboard, shows a transient\n * check-mark confirmation, and emits a `copy` event.\n *\n * @element ore-copy-command\n *\n * @attr {string} value - The command string to display and copy\n * @attr {string} size - Component size: 'sm' | 'md' | 'lg'\n * @attr {string} variant - Visual style: 'flat' | 'bordered' | 'ghost'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n *\n * @fires copy - Emitted on successful clipboard write. detail: { value: string }\n *\n * @slot suffix - Optional controls appended after the copy button (e.g. a cycle button)\n *\n * @cssprop --copy-command-bg - Background color of the command block\n * @cssprop --copy-command-color - Text color of the command string\n * @cssprop --copy-command-border-color - Border color\n * @cssprop --copy-command-radius - Border radius (overrides the `rounded` attribute)\n * @cssprop --copy-command-padding - Inner padding of the command button\n * @cssprop --copy-command-font-size - Font size of the command string\n * @cssprop --copy-command-icon-color - Color of the copy/check icon\n * @cssprop --copy-command-hover-bg - Background on hover\n *\n * @part wrapper - Outer flex container\n * @part command - The copy button element\n * @part command-text - The `<code>` element displaying the command string\n * @part copy-icon - The icon wrapper span\n * @part suffix - Suffix slot container\n *\n * @example\n * ```html\n * <ore-copy-command value=\"npm install @vielzeug/ripple\"></ore-copy-command>\n *\n * <ore-copy-command value=\"npx -y @vielzeug/codex\" size=\"sm\" variant=\"bordered\"></ore-copy-command>\n *\n * <!-- With a suffix slot (e.g. a cycle button) -->\n * <ore-copy-command value=\"npm install @vielzeug/ripple\">\n * <button slot=\"suffix\" type=\"button\" aria-label=\"Next package\">›</button>\n * </ore-copy-command>\n * ```\n */\nexport const COPY_COMMAND_TAG = 'ore-copy-command' as const;\n\ndefine<OreCopyCommandProps>(COPY_COMMAND_TAG, {\n props: {\n rounded: prop.string<RoundedSize>('md'),\n size: prop.string<ComponentSize>('md'),\n value: prop.string(''),\n variant: prop.string<'flat' | 'bordered' | 'ghost'>('flat'),\n },\n\n setup(props) {\n const emit = useEmit<OreCopyCommandEvents>();\n const slots = useSlots();\n\n const copied = signal(false);\n const copyFailed = signal(false);\n let resetTimer: ReturnType<typeof setTimeout> | null = null;\n\n onCleanup(() => {\n if (resetTimer !== null) clearTimeout(resetTimer);\n });\n\n const handleCopy = async () => {\n const text = props.value.value ?? '';\n\n if (!text) return;\n\n if (resetTimer !== null) clearTimeout(resetTimer);\n\n try {\n await navigator.clipboard.writeText(text);\n copied.value = true;\n copyFailed.value = false;\n emit('copy', { value: text });\n } catch {\n // Clipboard access denied or unavailable (e.g. insecure context) — surface it instead of failing silently\n copied.value = false;\n copyFailed.value = true;\n }\n\n resetTimer = setTimeout(() => {\n copied.value = false;\n copyFailed.value = false;\n resetTimer = null;\n }, 2000);\n };\n\n const hasSuffix = computed(() => slots.has('suffix').value);\n const btnLabel = computed(() => {\n if (copied.value) return 'Copied!';\n\n if (copyFailed.value) return 'Copy failed — press to try again';\n\n return `Copy: ${props.value.value ?? ''}`;\n });\n\n return html`\n <div class=\"wrapper\" part=\"wrapper\">\n <button class=\"command\" part=\"command\" type=\"button\" aria-label=\"${btnLabel}\" @click=${handleCopy}>\n <code class=\"command-text\" part=\"command-text\">${props.value}</code>\n <span class=\"copy-icon\" part=\"copy-icon\" aria-hidden=\"true\">\n ${() => {\n if (copied.value)\n return html`\n <ore-icon name=\"check\" size=\"14\" class=\"icon-copied\" aria-hidden=\"true\"></ore-icon>\n `;\n\n if (copyFailed.value)\n return html`\n <ore-icon name=\"circle-alert\" size=\"14\" class=\"icon-failed\" aria-hidden=\"true\"></ore-icon>\n `;\n\n return html`\n <ore-icon name=\"copy\" size=\"14\" aria-hidden=\"true\"></ore-icon>\n `;\n }}\n </span>\n </button>\n <div class=\"suffix\" part=\"suffix\" ?hidden=\"${() => !hasSuffix.value}\">\n <slot name=\"suffix\"></slot>\n </div>\n </div>\n <div role=\"status\" class=\"sr-only\">\n ${() => {\n if (copied.value) return 'Copied to clipboard.';\n\n if (copyFailed.value) return 'Copy failed. Select the command text and copy it manually.';\n\n return '';\n }}\n </div>\n `;\n },\n\n styles: [srOnlyMixin, componentStyles],\n});\n"],"mappings":";;;;;AAuEA,IAAa,IAAmB;AAEhC,EAA4B,GAAkB;CAC5C,OAAO;EACL,SAAS,EAAK,OAAoB,IAAI;EACtC,MAAM,EAAK,OAAsB,IAAI;EACrC,OAAO,EAAK,OAAO,EAAE;EACrB,SAAS,EAAK,OAAsC,MAAM;CAC5D;CAEA,MAAM,GAAO;EACX,IAAM,IAAO,EAA8B,GACrC,IAAQ,EAAS,GAEjB,IAAS,EAAO,EAAK,GACrB,IAAa,EAAO,EAAK,GAC3B,IAAmD;EAEvD,QAAgB;GACd,AAAI,MAAe,QAAM,aAAa,CAAU;EAClD,CAAC;EAED,IAAM,IAAa,YAAY;GAC7B,IAAM,IAAO,EAAM,MAAM,SAAS;GAE7B,OAEL;IAAI,MAAe,QAAM,aAAa,CAAU;IAEhD,IAAI;KAIF,AAHA,MAAM,UAAU,UAAU,UAAU,CAAI,GACxC,EAAO,QAAQ,IACf,EAAW,QAAQ,IACnB,EAAK,QAAQ,EAAE,OAAO,EAAK,CAAC;IAC9B,QAAQ;KAGN,AADA,EAAO,QAAQ,IACf,EAAW,QAAQ;IACrB;IAEA,IAAa,iBAAiB;KAG5B,AAFA,EAAO,QAAQ,IACf,EAAW,QAAQ,IACnB,IAAa;IACf,GAAG,GAAI;GAjByC;EAkBlD,GAEM,IAAY,QAAe,EAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,GACpD,IAAW,QACX,EAAO,QAAc,YAErB,EAAW,QAAc,qCAEtB,SAAS,EAAM,MAAM,SAAS,IACtC;EAED,OAAO,CAAI;;2EAE4D,EAAS,WAAW,EAAW;2DAC/C,EAAM,MAAM;;oBAGrD,EAAO,QACF,CAAI;;oBAIT,EAAW,QACN,CAAI;;oBAIN,CAAI;;gBAGX;;;2DAG6C,CAAC,EAAU,MAAM;;;;;gBAM9D,EAAO,QAAc,yBAErB,EAAW,QAAc,+DAEtB,GACP;;;CAGR;CAEA,QAAQ,CAAC,GAAa,CAAe;AACvC,CAAC"}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Internal barrel — primitives used by refine components but not intended as
|
|
3
|
-
* public API. Not exported from `
|
|
3
|
+
* public API. Not exported from `core/index.ts`.
|
|
4
4
|
*
|
|
5
5
|
* Import via the full path, e.g.:
|
|
6
|
-
* import { createInteraction } from '../../
|
|
6
|
+
* import { createInteraction } from '../../core/_internal';
|
|
7
7
|
*/
|
|
8
8
|
export { createDropdownPositioner, type DropdownPositionerOptions } from './positioner';
|
|
9
9
|
export { createInteraction, dispatchKeyboardAction, type Interaction, type InteractionOptions, type KeyboardDispatchOptions, type PressTrigger, } from './keyboard';
|
|
10
10
|
export { createListControl, type ListControl, type ListKeyAction, type ListNavigationAction, type ListNavigationOptions, } from './nav';
|
|
11
|
-
export {
|
|
11
|
+
export { createListboxDropdown, type ListboxDropdown, type ListboxDropdownOptions, type ListboxDropdownPlacementOptions, } from './option-list';
|
|
12
12
|
export { createTypeahead, type Typeahead, type TypeaheadOptions } from './typeahead';
|
|
13
13
|
export { parseStringTriggers } from './parse';
|
|
14
14
|
export { syncedSignal } from './signals';
|
|
15
|
-
export { createSelectionControl, type SelectionControl, type SelectionControlOptions } from './selection-control';
|
|
16
|
-
export { createSortControl, type SortControl, type SortControlOptions } from './sort-control';
|
|
17
15
|
//# sourceMappingURL=_internal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_internal.d.ts","sourceRoot":"","sources":["../../src/core/_internal.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,OAAO,CAAC;AACf,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,+BAA+B,GACrC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"announcer.cjs","names":[],"sources":["../../src/core/announcer.ts"],"sourcesContent":["// ── Live-Region Announcer ─────────────────────────────────────────────────────\n// Programmatic announcements to screen readers without requiring a visible\n// DOM element. Used for status messages, selection feedback, and count updates\n// that live in components where the visible element is hidden or absent.\n//\n// Two visually-hidden live regions are lazily created in `<body>` — one polite,\n// one assertive. The clear-then-set pattern forces AT to re-read even identical\n// consecutive messages.\n//\n// Usage:\n// ```ts\n// import { announce } from './announcer';\n// announce(`${selectedCount} items selected`);\n// announce('Error: field is required', { politeness: 'assertive' });\n// ```\n\nimport { SR_ONLY_INLINE_STYLE } from '../styles';\n\n// ── Visually-hidden style ─────────────────────────────────────────────────────\n// Shared with the CSS-side `.sr-only` mixin — see `src/styles/mixins/accessibility.css.ts`.\n\n// ── Per-document live regions (WeakMap for automatic GC + test isolation) ────\n\ntype DocumentRegions = { assertive?: HTMLElement; polite?: HTMLElement };\n\nconst _regions = new WeakMap<Document, DocumentRegions>();\nconst _timers = new WeakMap<HTMLElement, ReturnType<typeof setTimeout>>();\n\n/** Creates and mounts a visually-hidden live region with the given politeness. */\nconst createRegion = (politeness: 'assertive' | 'polite', doc: Document): HTMLElement => {\n const el = doc.createElement('div');\n\n el.setAttribute('aria-live', politeness);\n el.setAttribute('aria-atomic', 'true');\n el.setAttribute('data-block-announcer', politeness);\n el.style.cssText = SR_ONLY_INLINE_STYLE;\n\n doc.body.appendChild(el);\n\n return el;\n};\n\n/**\n * Returns the live region for the requested politeness in the given document,\n * creating it on first access. Returns `null` outside a browser context.\n */\nconst getRegion = (politeness: 'assertive' | 'polite', doc: Document): HTMLElement | null => {\n let regions = _regions.get(doc);\n\n // Re-create if this specific region was removed from the DOM (e.g. by test teardown).\n if (regions?.[politeness] && !doc.body.contains(regions[politeness])) {\n regions[politeness] = undefined;\n }\n\n if (!regions?.[politeness]) {\n if (!regions) {\n regions = {};\n _regions.set(doc, regions);\n }\n\n regions[politeness] = createRegion(politeness, doc);\n }\n\n return regions[politeness] ?? null;\n};\n\n// ── Public API ────────────────────────────────────────────────────────────────\n\nexport type AnnouncePoliteness = 'assertive' | 'polite';\n\nexport type AnnounceOptions = {\n /**\n * `'polite'` — queues the announcement; does not interrupt ongoing speech.\n * `'assertive'` — interrupts immediately. Use sparingly; reserve for errors.\n *\n * Default: `'polite'`.\n */\n politeness?: AnnouncePoliteness;\n};\n\n/**\n * Announces a message to screen readers via a singleton visually-hidden\n * live region. Safe to call outside a component lifecycle (no cleanup needed).\n *\n * The clear-then-set pattern (50 ms delay) forces AT to re-read even when the\n * message text hasn't changed.\n *\n * @example\n * ```ts\n * announce('3 results found');\n * announce('Session expired', { politeness: 'assertive' });\n * ```\n */\nexport const announce = (message: string, options: AnnounceOptions = {}): void => {\n if (typeof document === 'undefined') return;\n\n const politeness = options.politeness ?? 'polite';\n const region = getRegion(politeness, document);\n\n if (!region) return;\n\n // Clear immediately so AT registers a content change, then set after a short\n // delay. The 50 ms window is the established minimum for most AT/browser combos.\n region.textContent = '';\n\n // Use a per-element timer so concurrent polite + assertive announcements don't\n // clobber each other's pending writes.\n const existing = _timers.get(region);\n\n if (existing !== undefined) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n region.textContent = message;\n _timers.delete(region);\n }, 50);\n\n _timers.set(region, timer);\n};\n"],"mappings":"0DAyBA,IAAM,EAAW,IAAI,QACf,EAAU,IAAI,QAGd,GAAgB,EAAoC,IAA+B,CACvF,IAAM,EAAK,EAAI,cAAc,KAAK,EASlC,OAPA,EAAG,aAAa,YAAa,CAAU,EACvC,EAAG,aAAa,cAAe,MAAM,EACrC,EAAG,aAAa,uBAAwB,CAAU,EAClD,EAAG,MAAM,QAAU,EAAA,qBAEnB,EAAI,KAAK,YAAY,CAAE,EAEhB,CACT,EAMM,GAAa,EAAoC,IAAsC,CAC3F,IAAI,EAAU,EAAS,IAAI,CAAG,EAgB9B,OAbI,IAAU,IAAe,CAAC,EAAI,KAAK,SAAS,EAAQ,EAAW,IACjE,EAAQ,GAAc,IAAA,IAGnB,IAAU,KACR,IACH,EAAU,CAAC,EACX,EAAS,IAAI,EAAK,CAAO,GAG3B,EAAQ,GAAc,EAAa,EAAY,CAAG,GAG7C,EAAQ,IAAe,IAChC,EA6Ba,GAAY,EAAiB,EAA2B,CAAC,IAAY,CAChF,GAAI,OAAO,SAAa,IAAa,OAGrC,IAAM,EAAS,EADI,EAAQ,YAAc,SACJ,QAAQ,EAE7C,GAAI,CAAC,EAAQ,OAIb,EAAO,YAAc,GAIrB,IAAM,EAAW,EAAQ,IAAI,CAAM,EAE/B,IAAa,IAAA,IAAW,aAAa,CAAQ,EAEjD,IAAM,EAAQ,eAAiB,CAC7B,EAAO,YAAc,EACrB,EAAQ,OAAO,CAAM,CACvB,EAAG,EAAE,EAEL,EAAQ,IAAI,EAAQ,CAAK,CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"announcer.d.ts","sourceRoot":"","sources":["../../src/core/announcer.ts"],"names":[],"mappings":"AAoEA,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExD,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,EAAE,UAAS,eAAoB,KAAG,IAwBzE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SR_ONLY_INLINE_STYLE as e } from "../styles/mixins/accessibility.css.js";
|
|
2
|
-
//#region src/
|
|
2
|
+
//#region src/core/announcer.ts
|
|
3
3
|
var t = /* @__PURE__ */ new WeakMap(), n = /* @__PURE__ */ new WeakMap(), r = (t, n) => {
|
|
4
4
|
let r = n.createElement("div");
|
|
5
5
|
return r.setAttribute("aria-live", t), r.setAttribute("aria-atomic", "true"), r.setAttribute("data-block-announcer", t), r.style.cssText = e, n.body.appendChild(r), r;
|