@vielzeug/refine 1.1.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accordion-item.cjs +4 -4
- package/dist/accordion-item.cjs.map +1 -1
- package/dist/accordion-item.js +41 -41
- package/dist/accordion-item.js.map +1 -1
- package/dist/accordion.cjs +1 -1
- package/dist/accordion.cjs.map +1 -1
- package/dist/accordion.js +21 -21
- package/dist/accordion.js.map +1 -1
- package/dist/alert.cjs +5 -5
- package/dist/alert.cjs.map +1 -1
- package/dist/alert.js +21 -21
- package/dist/alert.js.map +1 -1
- package/dist/async.cjs +10 -10
- package/dist/async.cjs.map +1 -1
- package/dist/async.js +27 -27
- package/dist/async.js.map +1 -1
- package/dist/avatar.cjs +2 -2
- package/dist/avatar.cjs.map +1 -1
- package/dist/avatar.js +30 -30
- package/dist/avatar.js.map +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.cjs.map +1 -1
- package/dist/badge.js +1 -1
- package/dist/box.cjs +1 -1
- package/dist/box.cjs.map +1 -1
- package/dist/box.js +1 -1
- package/dist/breadcrumb.cjs +2 -2
- package/dist/breadcrumb.cjs.map +1 -1
- package/dist/breadcrumb.js +20 -20
- package/dist/breadcrumb.js.map +1 -1
- package/dist/button-group.cjs +1 -1
- package/dist/button-group.cjs.map +1 -1
- package/dist/button-group.js +7 -7
- package/dist/button-group.js.map +1 -1
- package/dist/button.cjs +6 -6
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +44 -42
- package/dist/button.js.map +1 -1
- package/dist/calendar.cjs +28 -28
- package/dist/calendar.cjs.map +1 -1
- package/dist/calendar.js +93 -91
- package/dist/calendar.js.map +1 -1
- package/dist/card.cjs +6 -6
- package/dist/card.cjs.map +1 -1
- package/dist/card.js +35 -34
- package/dist/card.js.map +1 -1
- package/dist/carousel.cjs +19 -19
- package/dist/carousel.cjs.map +1 -1
- package/dist/carousel.js +111 -111
- package/dist/carousel.js.map +1 -1
- package/dist/chat-message.cjs +47 -0
- package/dist/chat-message.cjs.map +1 -0
- package/dist/chat-message.js +121 -0
- package/dist/chat-message.js.map +1 -0
- package/dist/checkbox-group.cjs +9 -9
- package/dist/checkbox-group.cjs.map +1 -1
- package/dist/checkbox-group.js +54 -52
- 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 +39 -37
- package/dist/checkbox.js.map +1 -1
- package/dist/chip.cjs +14 -14
- package/dist/chip.cjs.map +1 -1
- package/dist/chip.js +43 -43
- package/dist/chip.js.map +1 -1
- package/dist/code-window.cjs +1 -1
- package/dist/code-window.cjs.map +1 -1
- package/dist/code-window.js +1 -1
- package/dist/combobox.cjs +25 -25
- package/dist/combobox.cjs.map +1 -1
- package/dist/combobox.js +181 -179
- package/dist/combobox.js.map +1 -1
- package/dist/command-palette.cjs +62 -0
- package/dist/command-palette.cjs.map +1 -0
- package/dist/command-palette.js +179 -0
- package/dist/command-palette.js.map +1 -0
- package/dist/content/avatar/{avatar-group.css?inline.cjs → avatar-group.css.cjs} +1 -1
- package/dist/content/avatar/avatar-group.css.cjs.map +1 -0
- package/dist/content/avatar/{avatar-group.css?inline.js → avatar-group.css.js} +1 -1
- package/dist/content/avatar/avatar-group.css.js.map +1 -0
- package/dist/content/avatar/{avatar.css?inline.cjs → avatar.css.cjs} +1 -1
- package/dist/content/avatar/avatar.css.cjs.map +1 -0
- package/dist/content/avatar/{avatar.css?inline.js → avatar.css.js} +1 -1
- package/dist/content/avatar/avatar.css.js.map +1 -0
- package/dist/content/breadcrumb/{breadcrumb-item.css?inline.cjs → breadcrumb-item.css.cjs} +1 -1
- package/dist/content/breadcrumb/breadcrumb-item.css.cjs.map +1 -0
- package/dist/content/breadcrumb/{breadcrumb-item.css?inline.js → breadcrumb-item.css.js} +1 -1
- package/dist/content/breadcrumb/breadcrumb-item.css.js.map +1 -0
- package/dist/content/breadcrumb/{breadcrumb.css?inline.cjs → breadcrumb.css.cjs} +1 -1
- package/dist/content/breadcrumb/breadcrumb.css.cjs.map +1 -0
- package/dist/content/breadcrumb/{breadcrumb.css?inline.js → breadcrumb.css.js} +1 -1
- package/dist/content/breadcrumb/breadcrumb.css.js.map +1 -0
- package/dist/content/card/{card.css?inline.cjs → card.css.cjs} +1 -1
- package/dist/content/card/card.css.cjs.map +1 -0
- package/dist/content/card/{card.css?inline.js → card.css.js} +1 -1
- package/dist/content/card/card.css.js.map +1 -0
- package/dist/content/carousel/carousel-slide.cjs +1 -1
- package/dist/content/carousel/carousel-slide.cjs.map +1 -1
- package/dist/content/carousel/{carousel-slide.css?inline.cjs → carousel-slide.css.cjs} +1 -1
- package/dist/content/carousel/carousel-slide.css.cjs.map +1 -0
- package/dist/content/carousel/{carousel-slide.css?inline.js → carousel-slide.css.js} +1 -1
- package/dist/content/carousel/carousel-slide.css.js.map +1 -0
- package/dist/content/carousel/carousel-slide.js +7 -7
- package/dist/content/carousel/carousel-slide.js.map +1 -1
- package/dist/content/carousel/{carousel.css?inline.cjs → carousel.css.cjs} +1 -1
- package/dist/content/carousel/carousel.css.cjs.map +1 -0
- package/dist/content/carousel/{carousel.css?inline.js → carousel.css.js} +1 -1
- package/dist/content/carousel/carousel.css.js.map +1 -0
- package/dist/content/chat-message/chat-message.css.cjs +2 -0
- package/dist/content/chat-message/chat-message.css.cjs.map +1 -0
- package/dist/content/chat-message/chat-message.css.js +6 -0
- package/dist/content/chat-message/chat-message.css.js.map +1 -0
- package/dist/content/chat-message/chat-message.d.ts +87 -0
- package/dist/content/chat-message/chat-message.d.ts.map +1 -0
- package/dist/content/code-window/{code-window.css?inline.cjs → code-window.css.cjs} +1 -1
- package/dist/content/code-window/code-window.css.cjs.map +1 -0
- package/dist/content/code-window/{code-window.css?inline.js → code-window.css.js} +1 -1
- package/dist/content/code-window/code-window.css.js.map +1 -0
- package/dist/content/copy-command/{copy-command.css?inline.cjs → copy-command.css.cjs} +1 -1
- package/dist/content/copy-command/copy-command.css.cjs.map +1 -0
- package/dist/content/copy-command/{copy-command.css?inline.js → copy-command.css.js} +1 -1
- package/dist/content/copy-command/copy-command.css.js.map +1 -0
- package/dist/content/icon/{icon.css?inline.cjs → icon.css.cjs} +1 -1
- package/dist/content/icon/icon.css.cjs.map +1 -0
- package/dist/content/icon/{icon.css?inline.js → icon.css.js} +1 -1
- package/dist/content/icon/icon.css.js.map +1 -0
- package/dist/content/index.d.ts +2 -0
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/pagination/{pagination.css?inline.cjs → pagination.css.cjs} +1 -1
- package/dist/content/pagination/pagination.css.cjs.map +1 -0
- package/dist/content/pagination/{pagination.css?inline.js → pagination.css.js} +1 -1
- package/dist/content/pagination/pagination.css.js.map +1 -0
- package/dist/content/separator/{separator.css?inline.cjs → separator.css.cjs} +1 -1
- package/dist/content/separator/separator.css.cjs.map +1 -0
- package/dist/content/separator/{separator.css?inline.js → separator.css.js} +1 -1
- package/dist/content/separator/separator.css.js.map +1 -0
- package/dist/content/table/{table.css?inline.cjs → table.css.cjs} +1 -1
- package/dist/content/table/table.css.cjs.map +1 -0
- package/dist/content/table/{table.css?inline.js → table.css.js} +1 -1
- package/dist/content/table/table.css.js.map +1 -0
- package/dist/content/text/{text.css?inline.cjs → text.css.cjs} +1 -1
- package/dist/content/text/text.css.cjs.map +1 -0
- package/dist/content/text/{text.css?inline.js → text.css.js} +1 -1
- package/dist/content/text/text.css.js.map +1 -0
- package/dist/copy-command.cjs +5 -5
- package/dist/copy-command.cjs.map +1 -1
- package/dist/copy-command.js +25 -25
- package/dist/copy-command.js.map +1 -1
- package/dist/custom-elements.json +5579 -4843
- package/dist/datagrid.cjs +109 -109
- package/dist/datagrid.cjs.map +1 -1
- package/dist/datagrid.js +194 -194
- package/dist/datagrid.js.map +1 -1
- package/dist/date-picker.cjs +40 -40
- package/dist/date-picker.cjs.map +1 -1
- package/dist/date-picker.js +116 -114
- package/dist/date-picker.js.map +1 -1
- package/dist/dialog.cjs +5 -5
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.js +28 -28
- package/dist/dialog.js.map +1 -1
- package/dist/disclosure/accordion/{accordion.css?inline.cjs → accordion.css.cjs} +1 -1
- package/dist/disclosure/accordion/accordion.css.cjs.map +1 -0
- package/dist/disclosure/accordion/{accordion.css?inline.js → accordion.css.js} +1 -1
- package/dist/disclosure/accordion/accordion.css.js.map +1 -0
- package/dist/disclosure/accordion-item/{accordion-item.css?inline.cjs → accordion-item.css.cjs} +1 -1
- package/dist/disclosure/accordion-item/accordion-item.css.cjs.map +1 -0
- package/dist/disclosure/accordion-item/{accordion-item.css?inline.js → accordion-item.css.js} +1 -1
- package/dist/disclosure/accordion-item/accordion-item.css.js.map +1 -0
- package/dist/disclosure/tab-item/{tab-item.css?inline.cjs → tab-item.css.cjs} +1 -1
- package/dist/disclosure/tab-item/tab-item.css.cjs.map +1 -0
- package/dist/disclosure/tab-item/{tab-item.css?inline.js → tab-item.css.js} +1 -1
- package/dist/disclosure/tab-item/tab-item.css.js.map +1 -0
- package/dist/disclosure/tab-panel/{tab-panel.css?inline.cjs → tab-panel.css.cjs} +1 -1
- package/dist/disclosure/tab-panel/tab-panel.css.cjs.map +1 -0
- package/dist/disclosure/tab-panel/{tab-panel.css?inline.js → tab-panel.css.js} +1 -1
- package/dist/disclosure/tab-panel/tab-panel.css.js.map +1 -0
- package/dist/disclosure/tabs/{tabs.css?inline.cjs → tabs.css.cjs} +1 -1
- package/dist/disclosure/tabs/tabs.css.cjs.map +1 -0
- package/dist/disclosure/tabs/{tabs.css?inline.js → tabs.css.js} +1 -1
- package/dist/disclosure/tabs/tabs.css.js.map +1 -0
- package/dist/drawer.cjs +9 -9
- package/dist/drawer.cjs.map +1 -1
- package/dist/drawer.js +80 -80
- package/dist/drawer.js.map +1 -1
- package/dist/feedback/alert/{alert.css?inline.cjs → alert.css.cjs} +1 -1
- package/dist/feedback/alert/alert.css.cjs.map +1 -0
- package/dist/feedback/alert/{alert.css?inline.js → alert.css.js} +1 -1
- package/dist/feedback/alert/alert.css.js.map +1 -0
- package/dist/feedback/async/{async.css?inline.cjs → async.css.cjs} +1 -1
- package/dist/feedback/async/async.css.cjs.map +1 -0
- package/dist/feedback/async/{async.css?inline.js → async.css.js} +1 -1
- package/dist/feedback/async/async.css.js.map +1 -0
- package/dist/feedback/badge/{badge.css?inline.cjs → badge.css.cjs} +1 -1
- package/dist/feedback/badge/badge.css.cjs.map +1 -0
- package/dist/feedback/badge/{badge.css?inline.js → badge.css.js} +1 -1
- package/dist/feedback/badge/badge.css.js.map +1 -0
- package/dist/feedback/chip/{chip.css?inline.cjs → chip.css.cjs} +1 -1
- package/dist/feedback/chip/chip.css.cjs.map +1 -0
- package/dist/feedback/chip/{chip.css?inline.js → chip.css.js} +1 -1
- package/dist/feedback/chip/chip.css.js.map +1 -0
- package/dist/feedback/index.d.ts +2 -0
- package/dist/feedback/index.d.ts.map +1 -1
- package/dist/feedback/password-strength/{password-strength.css?inline.cjs → password-strength.css.cjs} +1 -1
- package/dist/feedback/password-strength/password-strength.css.cjs.map +1 -0
- package/dist/feedback/password-strength/{password-strength.css?inline.js → password-strength.css.js} +1 -1
- package/dist/feedback/password-strength/password-strength.css.js.map +1 -0
- package/dist/feedback/progress/{progress.css?inline.cjs → progress.css.cjs} +1 -1
- package/dist/feedback/progress/progress.css.cjs.map +1 -0
- package/dist/feedback/progress/{progress.css?inline.js → progress.css.js} +1 -1
- package/dist/feedback/progress/progress.css.js.map +1 -0
- package/dist/feedback/skeleton/{skeleton.css?inline.cjs → skeleton.css.cjs} +1 -1
- package/dist/feedback/skeleton/skeleton.css.cjs.map +1 -0
- package/dist/feedback/skeleton/{skeleton.css?inline.js → skeleton.css.js} +1 -1
- package/dist/feedback/skeleton/skeleton.css.js.map +1 -0
- package/dist/feedback/toast/{toast.css?inline.cjs → toast.css.cjs} +1 -1
- package/dist/feedback/toast/toast.css.cjs.map +1 -0
- package/dist/feedback/toast/{toast.css?inline.js → toast.css.js} +1 -1
- package/dist/feedback/toast/toast.css.js.map +1 -0
- package/dist/feedback/toast/toast.d.ts.map +1 -1
- package/dist/feedback/typing-indicator/typing-indicator.css.cjs +2 -0
- package/dist/feedback/typing-indicator/typing-indicator.css.cjs.map +1 -0
- package/dist/feedback/typing-indicator/typing-indicator.css.js +6 -0
- package/dist/feedback/typing-indicator/typing-indicator.css.js.map +1 -0
- package/dist/feedback/typing-indicator/typing-indicator.d.ts +42 -0
- package/dist/feedback/typing-indicator/typing-indicator.d.ts.map +1 -0
- package/dist/file-input.cjs +56 -34
- package/dist/file-input.cjs.map +1 -1
- package/dist/file-input.js +143 -104
- package/dist/file-input.js.map +1 -1
- package/dist/form.cjs +3 -3
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +28 -25
- package/dist/form.js.map +1 -1
- package/dist/grid-item.cjs +1 -1
- package/dist/grid-item.cjs.map +1 -1
- package/dist/grid-item.js +19 -19
- package/dist/grid-item.js.map +1 -1
- package/dist/grid.cjs +1 -1
- package/dist/grid.cjs.map +1 -1
- package/dist/grid.js +48 -48
- package/dist/grid.js.map +1 -1
- package/dist/icon.cjs +1 -1
- package/dist/icon.cjs.map +1 -1
- package/dist/icon.js +26 -26
- package/dist/icon.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +52 -49
- package/dist/input.cjs +25 -25
- package/dist/input.cjs.map +1 -1
- package/dist/input.js +75 -73
- package/dist/input.js.map +1 -1
- package/dist/inputs/button/{button.css?inline.cjs → button.css.cjs} +1 -1
- package/dist/inputs/button/button.css.cjs.map +1 -0
- package/dist/inputs/button/{button.css?inline.js → button.css.js} +1 -1
- package/dist/inputs/button/button.css.js.map +1 -0
- package/dist/inputs/button/button.d.ts.map +1 -1
- package/dist/inputs/button-group/{button-group.css?inline.cjs → button-group.css.cjs} +1 -1
- package/dist/inputs/button-group/button-group.css.cjs.map +1 -0
- package/dist/inputs/button-group/{button-group.css?inline.js → button-group.css.js} +1 -1
- package/dist/inputs/button-group/button-group.css.js.map +1 -0
- package/dist/inputs/calendar/{calendar.css?inline.cjs → calendar.css.cjs} +1 -1
- package/dist/inputs/calendar/calendar.css.cjs.map +1 -0
- package/dist/inputs/calendar/{calendar.css?inline.js → calendar.css.js} +1 -1
- package/dist/inputs/calendar/calendar.css.js.map +1 -0
- package/dist/inputs/calendar/calendar.d.ts.map +1 -1
- package/dist/inputs/checkbox/{checkbox.css?inline.cjs → checkbox.css.cjs} +1 -1
- package/dist/inputs/checkbox/checkbox.css.cjs.map +1 -0
- package/dist/inputs/checkbox/{checkbox.css?inline.js → checkbox.css.js} +1 -1
- package/dist/inputs/checkbox/checkbox.css.js.map +1 -0
- package/dist/inputs/checkbox/checkbox.d.ts.map +1 -1
- package/dist/inputs/checkbox-group/{checkbox-group.css?inline.cjs → checkbox-group.css.cjs} +1 -1
- package/dist/inputs/checkbox-group/checkbox-group.css.cjs.map +1 -0
- package/dist/inputs/checkbox-group/{checkbox-group.css?inline.js → checkbox-group.css.js} +1 -1
- package/dist/inputs/checkbox-group/checkbox-group.css.js.map +1 -0
- package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -1
- package/dist/inputs/combobox/{combobox.css?inline.cjs → combobox.css.cjs} +1 -1
- package/dist/inputs/combobox/combobox.css.cjs.map +1 -0
- package/dist/inputs/combobox/{combobox.css?inline.js → combobox.css.js} +1 -1
- package/dist/inputs/combobox/combobox.css.js.map +1 -0
- package/dist/inputs/combobox/combobox.d.ts.map +1 -1
- package/dist/inputs/datagrid/{datagrid.css?inline.cjs → datagrid.css.cjs} +1 -1
- package/dist/inputs/datagrid/datagrid.css.cjs.map +1 -0
- package/dist/inputs/datagrid/{datagrid.css?inline.js → datagrid.css.js} +1 -1
- package/dist/inputs/datagrid/datagrid.css.js.map +1 -0
- package/dist/inputs/date-picker/{date-picker.css?inline.cjs → date-picker.css.cjs} +1 -1
- package/dist/inputs/date-picker/date-picker.css.cjs.map +1 -0
- package/dist/inputs/date-picker/{date-picker.css?inline.js → date-picker.css.js} +1 -1
- package/dist/inputs/date-picker/date-picker.css.js.map +1 -0
- package/dist/inputs/date-picker/date-picker.d.ts.map +1 -1
- package/dist/inputs/file-input/{file-input.css?inline.cjs → file-input.css.cjs} +2 -2
- package/dist/inputs/file-input/file-input.css.cjs.map +1 -0
- package/dist/inputs/file-input/{file-input.css?inline.js → file-input.css.js} +2 -2
- package/dist/inputs/file-input/file-input.css.js.map +1 -0
- package/dist/inputs/file-input/file-input.d.ts +9 -0
- package/dist/inputs/file-input/file-input.d.ts.map +1 -1
- package/dist/inputs/form/{form.css?inline.cjs → form.css.cjs} +1 -1
- package/dist/inputs/form/form.css.cjs.map +1 -0
- package/dist/inputs/form/{form.css?inline.js → form.css.js} +1 -1
- package/dist/inputs/form/form.css.js.map +1 -0
- package/dist/inputs/input/{input.css?inline.cjs → input.css.cjs} +1 -1
- package/dist/inputs/input/input.css.cjs.map +1 -0
- package/dist/inputs/input/{input.css?inline.js → input.css.js} +1 -1
- package/dist/inputs/input/input.css.js.map +1 -0
- package/dist/inputs/input/input.d.ts.map +1 -1
- package/dist/inputs/number-input/{number-input.css?inline.cjs → number-input.css.cjs} +1 -1
- package/dist/inputs/number-input/number-input.css.cjs.map +1 -0
- package/dist/inputs/number-input/{number-input.css?inline.js → number-input.css.js} +1 -1
- package/dist/inputs/number-input/number-input.css.js.map +1 -0
- package/dist/inputs/otp-input/{otp-input.css?inline.cjs → otp-input.css.cjs} +1 -1
- package/dist/inputs/otp-input/otp-input.css.cjs.map +1 -0
- package/dist/inputs/otp-input/{otp-input.css?inline.js → otp-input.css.js} +1 -1
- package/dist/inputs/otp-input/otp-input.css.js.map +1 -0
- package/dist/inputs/otp-input/otp-input.d.ts.map +1 -1
- package/dist/inputs/radio/{radio.css?inline.cjs → radio.css.cjs} +1 -1
- package/dist/inputs/radio/radio.css.cjs.map +1 -0
- package/dist/inputs/radio/{radio.css?inline.js → radio.css.js} +1 -1
- package/dist/inputs/radio/radio.css.js.map +1 -0
- package/dist/inputs/radio/radio.d.ts.map +1 -1
- package/dist/inputs/radio-group/{radio-group.css?inline.cjs → radio-group.css.cjs} +1 -1
- package/dist/inputs/radio-group/radio-group.css.cjs.map +1 -0
- package/dist/inputs/radio-group/{radio-group.css?inline.js → radio-group.css.js} +1 -1
- package/dist/inputs/radio-group/radio-group.css.js.map +1 -0
- package/dist/inputs/radio-group/radio-group.d.ts.map +1 -1
- package/dist/inputs/rating/{rating.css?inline.cjs → rating.css.cjs} +1 -1
- package/dist/inputs/rating/rating.css.cjs.map +1 -0
- package/dist/inputs/rating/{rating.css?inline.js → rating.css.js} +1 -1
- package/dist/inputs/rating/rating.css.js.map +1 -0
- package/dist/inputs/rating/rating.d.ts.map +1 -1
- package/dist/inputs/select/{select.css?inline.cjs → select.css.cjs} +1 -1
- package/dist/inputs/select/select.css.cjs.map +1 -0
- package/dist/inputs/select/{select.css?inline.js → select.css.js} +1 -1
- package/dist/inputs/select/select.css.js.map +1 -0
- package/dist/inputs/select/select.d.ts.map +1 -1
- package/dist/inputs/shared/field-binding.cjs +1 -1
- package/dist/inputs/shared/field-binding.cjs.map +1 -1
- package/dist/inputs/shared/field-binding.d.ts +1 -2
- package/dist/inputs/shared/field-binding.d.ts.map +1 -1
- package/dist/inputs/shared/field-binding.js +3 -2
- package/dist/inputs/shared/field-binding.js.map +1 -1
- package/dist/inputs/shared/form-context.cjs +1 -1
- package/dist/inputs/shared/form-context.cjs.map +1 -1
- package/dist/inputs/shared/form-context.d.ts +4 -4
- package/dist/inputs/shared/form-context.d.ts.map +1 -1
- package/dist/inputs/shared/form-context.js +10 -10
- package/dist/inputs/shared/form-context.js.map +1 -1
- package/dist/inputs/slider/{slider.css?inline.cjs → slider.css.cjs} +1 -1
- package/dist/inputs/slider/slider.css.cjs.map +1 -0
- package/dist/inputs/slider/{slider.css?inline.js → slider.css.js} +1 -1
- package/dist/inputs/slider/slider.css.js.map +1 -0
- package/dist/inputs/slider/slider.d.ts.map +1 -1
- package/dist/inputs/switch/{switch.css?inline.cjs → switch.css.cjs} +1 -1
- package/dist/inputs/switch/switch.css.cjs.map +1 -0
- package/dist/inputs/switch/{switch.css?inline.js → switch.css.js} +1 -1
- package/dist/inputs/switch/switch.css.js.map +1 -0
- package/dist/inputs/switch/switch.d.ts.map +1 -1
- package/dist/inputs/textarea/{textarea.css?inline.cjs → textarea.css.cjs} +1 -1
- package/dist/inputs/textarea/textarea.css.cjs.map +1 -0
- package/dist/inputs/textarea/{textarea.css?inline.js → textarea.css.js} +1 -1
- package/dist/inputs/textarea/textarea.css.js.map +1 -0
- package/dist/inputs/textarea/textarea.d.ts.map +1 -1
- package/dist/inputs/time-picker/{time-picker.css?inline.cjs → time-picker.css.cjs} +1 -1
- package/dist/inputs/time-picker/time-picker.css.cjs.map +1 -0
- package/dist/inputs/time-picker/{time-picker.css?inline.js → time-picker.css.js} +1 -1
- package/dist/inputs/time-picker/time-picker.css.js.map +1 -0
- package/dist/inputs/time-picker/time-picker.d.ts.map +1 -1
- package/dist/keymap/dist/_dev.cjs +2 -0
- package/dist/keymap/dist/_dev.cjs.map +1 -0
- package/dist/keymap/dist/_dev.js +4 -0
- package/dist/keymap/dist/_dev.js.map +1 -0
- package/dist/keymap/dist/format.cjs +1 -0
- package/dist/keymap/dist/format.js +1 -0
- package/dist/keymap/dist/index.cjs +1 -0
- package/dist/keymap/dist/index.js +4 -0
- package/dist/keymap/dist/keymap.cjs +2 -0
- package/dist/keymap/dist/keymap.cjs.map +1 -0
- package/dist/keymap/dist/keymap.js +221 -0
- package/dist/keymap/dist/keymap.js.map +1 -0
- package/dist/keymap/dist/layer.cjs +1 -0
- package/dist/keymap/dist/layer.js +1 -0
- package/dist/layout/box/{box.css?inline.cjs → box.css.cjs} +1 -1
- package/dist/layout/box/box.css.cjs.map +1 -0
- package/dist/layout/box/{box.css?inline.js → box.css.js} +1 -1
- package/dist/layout/box/box.css.js.map +1 -0
- package/dist/layout/grid/{grid.css?inline.cjs → grid.css.cjs} +1 -1
- package/dist/layout/grid/grid.css.cjs.map +1 -0
- package/dist/layout/grid/{grid.css?inline.js → grid.css.js} +1 -1
- package/dist/layout/grid/grid.css.js.map +1 -0
- package/dist/layout/grid-item/{grid-item.css?inline.cjs → grid-item.css.cjs} +1 -1
- package/dist/layout/grid-item/grid-item.css.cjs.map +1 -0
- package/dist/layout/grid-item/{grid-item.css?inline.js → grid-item.css.js} +1 -1
- package/dist/layout/grid-item/grid-item.css.js.map +1 -0
- package/dist/layout/navbar/{navbar.css?inline.cjs → navbar.css.cjs} +1 -1
- package/dist/layout/navbar/navbar.css.cjs.map +1 -0
- package/dist/layout/navbar/{navbar.css?inline.js → navbar.css.js} +1 -1
- package/dist/layout/navbar/navbar.css.js.map +1 -0
- package/dist/layout/navbar/navbar.d.ts.map +1 -1
- package/dist/layout/sidebar/{sidebar-group.css?inline.cjs → sidebar-group.css.cjs} +1 -1
- package/dist/layout/sidebar/sidebar-group.css.cjs.map +1 -0
- package/dist/layout/sidebar/{sidebar-group.css?inline.js → sidebar-group.css.js} +1 -1
- package/dist/layout/sidebar/sidebar-group.css.js.map +1 -0
- package/dist/layout/sidebar/{sidebar-item.css?inline.cjs → sidebar-item.css.cjs} +1 -1
- package/dist/layout/sidebar/sidebar-item.css.cjs.map +1 -0
- package/dist/layout/sidebar/{sidebar-item.css?inline.js → sidebar-item.css.js} +1 -1
- package/dist/layout/sidebar/sidebar-item.css.js.map +1 -0
- package/dist/layout/sidebar/{sidebar.css?inline.cjs → sidebar.css.cjs} +1 -1
- package/dist/layout/sidebar/sidebar.css.cjs.map +1 -0
- package/dist/layout/sidebar/{sidebar.css?inline.js → sidebar.css.js} +1 -1
- package/dist/layout/sidebar/sidebar.css.js.map +1 -0
- package/dist/layout/sidebar/sidebar.d.ts.map +1 -1
- package/dist/menu.cjs +5 -5
- package/dist/menu.cjs.map +1 -1
- package/dist/menu.js +85 -85
- package/dist/menu.js.map +1 -1
- package/dist/navbar.cjs +15 -15
- package/dist/navbar.cjs.map +1 -1
- package/dist/navbar.js +127 -127
- package/dist/navbar.js.map +1 -1
- package/dist/number-input.cjs +11 -11
- package/dist/number-input.cjs.map +1 -1
- package/dist/number-input.js +69 -69
- package/dist/number-input.js.map +1 -1
- package/dist/ore/dist/_dev.cjs.map +1 -1
- package/dist/ore/dist/_dev.js.map +1 -1
- package/dist/ore/dist/base-element.cjs +1 -1
- package/dist/ore/dist/base-element.cjs.map +1 -1
- package/dist/ore/dist/base-element.js +37 -35
- package/dist/ore/dist/base-element.js.map +1 -1
- package/dist/ore/dist/context.cjs +1 -1
- package/dist/ore/dist/context.cjs.map +1 -1
- package/dist/ore/dist/context.js +6 -33
- package/dist/ore/dist/context.js.map +1 -1
- package/dist/ore/dist/define.cjs.map +1 -1
- package/dist/ore/dist/define.js.map +1 -1
- package/dist/ore/dist/directives/raw.cjs +1 -1
- package/dist/ore/dist/directives/raw.cjs.map +1 -1
- package/dist/ore/dist/directives/raw.js +20 -17
- package/dist/ore/dist/directives/raw.js.map +1 -1
- package/dist/ore/dist/directives/when.cjs +1 -1
- package/dist/ore/dist/directives/when.cjs.map +1 -1
- package/dist/ore/dist/directives/when.js +29 -24
- package/dist/ore/dist/directives/when.js.map +1 -1
- package/dist/ore/dist/errors.cjs +2 -2
- package/dist/ore/dist/errors.cjs.map +1 -1
- package/dist/ore/dist/errors.js +12 -3
- package/dist/ore/dist/errors.js.map +1 -1
- package/dist/ore/dist/forms/context.cjs +2 -0
- package/dist/ore/dist/forms/context.cjs.map +1 -0
- package/dist/ore/dist/forms/context.js +6 -0
- package/dist/ore/dist/forms/context.js.map +1 -0
- package/dist/ore/dist/forms/field.cjs +2 -0
- package/dist/ore/dist/forms/field.cjs.map +1 -0
- package/dist/ore/dist/forms/field.js +35 -0
- package/dist/ore/dist/forms/field.js.map +1 -0
- package/dist/ore/dist/forms.cjs +1 -0
- package/dist/ore/dist/forms.js +3 -0
- package/dist/ore/dist/props.cjs +1 -1
- package/dist/ore/dist/props.cjs.map +1 -1
- package/dist/ore/dist/props.js +29 -27
- package/dist/ore/dist/props.js.map +1 -1
- package/dist/ore/dist/runtime.cjs +1 -1
- package/dist/ore/dist/runtime.cjs.map +1 -1
- package/dist/ore/dist/runtime.js +13 -23
- package/dist/ore/dist/runtime.js.map +1 -1
- package/dist/ore/dist/testing/render-hook.cjs +1 -1
- package/dist/ore/dist/testing/render-hook.js +0 -1
- package/dist/ore/dist/utils/dom.cjs +1 -1
- package/dist/ore/dist/utils/dom.cjs.map +1 -1
- package/dist/ore/dist/utils/dom.js +2 -6
- package/dist/ore/dist/utils/dom.js.map +1 -1
- package/dist/otp-input.cjs +9 -9
- package/dist/otp-input.cjs.map +1 -1
- package/dist/otp-input.js +70 -68
- package/dist/otp-input.js.map +1 -1
- package/dist/overlay/command-palette/command-palette-items.cjs +2 -0
- package/dist/overlay/command-palette/command-palette-items.cjs.map +1 -0
- package/dist/overlay/command-palette/command-palette-items.d.ts +22 -0
- package/dist/overlay/command-palette/command-palette-items.d.ts.map +1 -0
- package/dist/overlay/command-palette/command-palette-items.js +55 -0
- package/dist/overlay/command-palette/command-palette-items.js.map +1 -0
- package/dist/overlay/command-palette/command-palette.css.cjs +2 -0
- package/dist/overlay/command-palette/command-palette.css.cjs.map +1 -0
- package/dist/overlay/command-palette/command-palette.css.js +6 -0
- package/dist/overlay/command-palette/command-palette.css.js.map +1 -0
- package/dist/overlay/command-palette/command-palette.d.ts +72 -0
- package/dist/overlay/command-palette/command-palette.d.ts.map +1 -0
- package/dist/overlay/command-palette/command-palette.types.d.ts +76 -0
- package/dist/overlay/command-palette/command-palette.types.d.ts.map +1 -0
- package/dist/overlay/dialog/{dialog.css?inline.cjs → dialog.css.cjs} +1 -1
- package/dist/overlay/dialog/dialog.css.cjs.map +1 -0
- package/dist/overlay/dialog/{dialog.css?inline.js → dialog.css.js} +1 -1
- package/dist/overlay/dialog/dialog.css.js.map +1 -0
- package/dist/overlay/drawer/{drawer.css?inline.cjs → drawer.css.cjs} +1 -1
- package/dist/overlay/drawer/drawer.css.cjs.map +1 -0
- package/dist/overlay/drawer/{drawer.css?inline.js → drawer.css.js} +1 -1
- package/dist/overlay/drawer/drawer.css.js.map +1 -0
- package/dist/overlay/drawer/drawer.d.ts.map +1 -1
- package/dist/overlay/index.d.ts +2 -0
- package/dist/overlay/index.d.ts.map +1 -1
- package/dist/overlay/menu/{menu-item.css?inline.cjs → menu-item.css.cjs} +1 -1
- package/dist/overlay/menu/menu-item.css.cjs.map +1 -0
- package/dist/overlay/menu/{menu-item.css?inline.js → menu-item.css.js} +1 -1
- package/dist/overlay/menu/menu-item.css.js.map +1 -0
- package/dist/overlay/menu/{menu-separator.css?inline.cjs → menu-separator.css.cjs} +1 -1
- package/dist/overlay/menu/menu-separator.css.cjs.map +1 -0
- package/dist/overlay/menu/{menu-separator.css?inline.js → menu-separator.css.js} +1 -1
- package/dist/overlay/menu/menu-separator.css.js.map +1 -0
- package/dist/overlay/menu/{menu.css?inline.cjs → menu.css.cjs} +1 -1
- package/dist/overlay/menu/menu.css.cjs.map +1 -0
- package/dist/overlay/menu/{menu.css?inline.js → menu.css.js} +1 -1
- package/dist/overlay/menu/menu.css.js.map +1 -0
- package/dist/overlay/menu/menu.d.ts.map +1 -1
- package/dist/overlay/popover/{popover.css?inline.cjs → popover.css.cjs} +1 -1
- package/dist/overlay/popover/popover.css.cjs.map +1 -0
- package/dist/overlay/popover/{popover.css?inline.js → popover.css.js} +1 -1
- package/dist/overlay/popover/popover.css.js.map +1 -0
- package/dist/overlay/popover/popover.d.ts.map +1 -1
- package/dist/overlay/tooltip/{tooltip.css?inline.cjs → tooltip.css.cjs} +1 -1
- package/dist/overlay/tooltip/tooltip.css.cjs.map +1 -0
- package/dist/overlay/tooltip/{tooltip.css?inline.js → tooltip.css.js} +1 -1
- package/dist/overlay/tooltip/tooltip.css.js.map +1 -0
- package/dist/pagination.cjs +12 -12
- package/dist/pagination.cjs.map +1 -1
- package/dist/pagination.js +39 -38
- package/dist/pagination.js.map +1 -1
- package/dist/password-strength.cjs +8 -8
- package/dist/password-strength.cjs.map +1 -1
- package/dist/password-strength.js +34 -34
- 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 +30 -30
- package/dist/popover.js.map +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.cjs.map +1 -1
- package/dist/progress.js +30 -30
- package/dist/progress.js.map +1 -1
- package/dist/radio-group.cjs +11 -11
- package/dist/radio-group.cjs.map +1 -1
- package/dist/radio-group.js +67 -63
- 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 +69 -67
- package/dist/radio.js.map +1 -1
- package/dist/rating.cjs +4 -4
- package/dist/rating.cjs.map +1 -1
- package/dist/rating.js +57 -55
- package/dist/rating.js.map +1 -1
- package/dist/refine.cjs +763 -630
- package/dist/refine.cjs.map +1 -1
- package/dist/refine.iife.js +752 -619
- package/dist/refine.iife.js.map +1 -1
- package/dist/refine.js +774 -641
- package/dist/refine.js.map +1 -1
- package/dist/select.cjs +37 -37
- package/dist/select.cjs.map +1 -1
- package/dist/select.js +130 -128
- package/dist/select.js.map +1 -1
- package/dist/separator.cjs +1 -1
- package/dist/separator.cjs.map +1 -1
- package/dist/separator.js +1 -1
- package/dist/sidebar.cjs +22 -22
- package/dist/sidebar.cjs.map +1 -1
- package/dist/sidebar.js +135 -135
- package/dist/sidebar.js.map +1 -1
- package/dist/skeleton.cjs +2 -2
- package/dist/skeleton.cjs.map +1 -1
- package/dist/skeleton.js +28 -28
- package/dist/skeleton.js.map +1 -1
- package/dist/slider.cjs +13 -13
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +142 -140
- package/dist/slider.js.map +1 -1
- package/dist/switch.cjs +4 -4
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +35 -33
- package/dist/switch.js.map +1 -1
- package/dist/tab-item.cjs +5 -5
- package/dist/tab-item.cjs.map +1 -1
- package/dist/tab-item.js +25 -25
- package/dist/tab-item.js.map +1 -1
- package/dist/tab-panel.cjs +6 -6
- package/dist/tab-panel.cjs.map +1 -1
- package/dist/tab-panel.js +24 -24
- package/dist/tab-panel.js.map +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +36 -35
- package/dist/table.js.map +1 -1
- package/dist/tabs.cjs +3 -3
- package/dist/tabs.cjs.map +1 -1
- package/dist/tabs.js +61 -61
- package/dist/tabs.js.map +1 -1
- package/dist/text.cjs +1 -1
- package/dist/text.cjs.map +1 -1
- package/dist/text.js +16 -16
- package/dist/text.js.map +1 -1
- package/dist/textarea.cjs +15 -15
- package/dist/textarea.cjs.map +1 -1
- package/dist/textarea.js +67 -65
- package/dist/textarea.js.map +1 -1
- package/dist/time-picker.cjs +31 -31
- package/dist/time-picker.cjs.map +1 -1
- package/dist/time-picker.js +115 -113
- package/dist/time-picker.js.map +1 -1
- package/dist/toast.cjs +14 -14
- package/dist/toast.cjs.map +1 -1
- package/dist/toast.js +85 -85
- package/dist/toast.js.map +1 -1
- package/dist/tooltip.cjs +5 -5
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.js +55 -55
- package/dist/tooltip.js.map +1 -1
- package/dist/typing-indicator.cjs +8 -0
- package/dist/typing-indicator.cjs.map +1 -0
- package/dist/typing-indicator.js +49 -0
- package/dist/typing-indicator.js.map +1 -0
- package/package.json +21 -2
- package/dist/content/avatar/avatar-group.css?inline.cjs.map +0 -1
- package/dist/content/avatar/avatar-group.css?inline.js.map +0 -1
- package/dist/content/avatar/avatar.css?inline.cjs.map +0 -1
- package/dist/content/avatar/avatar.css?inline.js.map +0 -1
- package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs.map +0 -1
- package/dist/content/breadcrumb/breadcrumb-item.css?inline.js.map +0 -1
- package/dist/content/breadcrumb/breadcrumb.css?inline.cjs.map +0 -1
- package/dist/content/breadcrumb/breadcrumb.css?inline.js.map +0 -1
- package/dist/content/card/card.css?inline.cjs.map +0 -1
- package/dist/content/card/card.css?inline.js.map +0 -1
- package/dist/content/carousel/carousel-slide.css?inline.cjs.map +0 -1
- package/dist/content/carousel/carousel-slide.css?inline.js.map +0 -1
- package/dist/content/carousel/carousel.css?inline.cjs.map +0 -1
- package/dist/content/carousel/carousel.css?inline.js.map +0 -1
- package/dist/content/code-window/code-window.css?inline.cjs.map +0 -1
- package/dist/content/code-window/code-window.css?inline.js.map +0 -1
- package/dist/content/copy-command/copy-command.css?inline.cjs.map +0 -1
- package/dist/content/copy-command/copy-command.css?inline.js.map +0 -1
- package/dist/content/icon/icon.css?inline.cjs.map +0 -1
- package/dist/content/icon/icon.css?inline.js.map +0 -1
- package/dist/content/pagination/pagination.css?inline.cjs.map +0 -1
- package/dist/content/pagination/pagination.css?inline.js.map +0 -1
- package/dist/content/separator/separator.css?inline.cjs.map +0 -1
- package/dist/content/separator/separator.css?inline.js.map +0 -1
- package/dist/content/table/table.css?inline.cjs.map +0 -1
- package/dist/content/table/table.css?inline.js.map +0 -1
- package/dist/content/text/text.css?inline.cjs.map +0 -1
- package/dist/content/text/text.css?inline.js.map +0 -1
- package/dist/disclosure/accordion/accordion.css?inline.cjs.map +0 -1
- package/dist/disclosure/accordion/accordion.css?inline.js.map +0 -1
- package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs.map +0 -1
- package/dist/disclosure/accordion-item/accordion-item.css?inline.js.map +0 -1
- package/dist/disclosure/tab-item/tab-item.css?inline.cjs.map +0 -1
- package/dist/disclosure/tab-item/tab-item.css?inline.js.map +0 -1
- package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs.map +0 -1
- package/dist/disclosure/tab-panel/tab-panel.css?inline.js.map +0 -1
- package/dist/disclosure/tabs/tabs.css?inline.cjs.map +0 -1
- package/dist/disclosure/tabs/tabs.css?inline.js.map +0 -1
- package/dist/feedback/alert/alert.css?inline.cjs.map +0 -1
- package/dist/feedback/alert/alert.css?inline.js.map +0 -1
- package/dist/feedback/async/async.css?inline.cjs.map +0 -1
- package/dist/feedback/async/async.css?inline.js.map +0 -1
- package/dist/feedback/badge/badge.css?inline.cjs.map +0 -1
- package/dist/feedback/badge/badge.css?inline.js.map +0 -1
- package/dist/feedback/chip/chip.css?inline.cjs.map +0 -1
- package/dist/feedback/chip/chip.css?inline.js.map +0 -1
- package/dist/feedback/password-strength/password-strength.css?inline.cjs.map +0 -1
- package/dist/feedback/password-strength/password-strength.css?inline.js.map +0 -1
- package/dist/feedback/progress/progress.css?inline.cjs.map +0 -1
- package/dist/feedback/progress/progress.css?inline.js.map +0 -1
- package/dist/feedback/skeleton/skeleton.css?inline.cjs.map +0 -1
- package/dist/feedback/skeleton/skeleton.css?inline.js.map +0 -1
- package/dist/feedback/toast/toast.css?inline.cjs.map +0 -1
- package/dist/feedback/toast/toast.css?inline.js.map +0 -1
- package/dist/inputs/button/button.css?inline.cjs.map +0 -1
- package/dist/inputs/button/button.css?inline.js.map +0 -1
- package/dist/inputs/button-group/button-group.css?inline.cjs.map +0 -1
- package/dist/inputs/button-group/button-group.css?inline.js.map +0 -1
- package/dist/inputs/calendar/calendar.css?inline.cjs.map +0 -1
- package/dist/inputs/calendar/calendar.css?inline.js.map +0 -1
- package/dist/inputs/checkbox/checkbox.css?inline.cjs.map +0 -1
- package/dist/inputs/checkbox/checkbox.css?inline.js.map +0 -1
- package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs.map +0 -1
- package/dist/inputs/checkbox-group/checkbox-group.css?inline.js.map +0 -1
- package/dist/inputs/combobox/combobox.css?inline.cjs.map +0 -1
- package/dist/inputs/combobox/combobox.css?inline.js.map +0 -1
- package/dist/inputs/datagrid/datagrid.css?inline.cjs.map +0 -1
- package/dist/inputs/datagrid/datagrid.css?inline.js.map +0 -1
- package/dist/inputs/date-picker/date-picker.css?inline.cjs.map +0 -1
- package/dist/inputs/date-picker/date-picker.css?inline.js.map +0 -1
- package/dist/inputs/file-input/file-input.css?inline.cjs.map +0 -1
- package/dist/inputs/file-input/file-input.css?inline.js.map +0 -1
- package/dist/inputs/form/form.css?inline.cjs.map +0 -1
- package/dist/inputs/form/form.css?inline.js.map +0 -1
- package/dist/inputs/input/input.css?inline.cjs.map +0 -1
- package/dist/inputs/input/input.css?inline.js.map +0 -1
- package/dist/inputs/number-input/number-input.css?inline.cjs.map +0 -1
- package/dist/inputs/number-input/number-input.css?inline.js.map +0 -1
- package/dist/inputs/otp-input/otp-input.css?inline.cjs.map +0 -1
- package/dist/inputs/otp-input/otp-input.css?inline.js.map +0 -1
- package/dist/inputs/radio/radio.css?inline.cjs.map +0 -1
- package/dist/inputs/radio/radio.css?inline.js.map +0 -1
- package/dist/inputs/radio-group/radio-group.css?inline.cjs.map +0 -1
- package/dist/inputs/radio-group/radio-group.css?inline.js.map +0 -1
- package/dist/inputs/rating/rating.css?inline.cjs.map +0 -1
- package/dist/inputs/rating/rating.css?inline.js.map +0 -1
- package/dist/inputs/select/select.css?inline.cjs.map +0 -1
- package/dist/inputs/select/select.css?inline.js.map +0 -1
- package/dist/inputs/slider/slider.css?inline.cjs.map +0 -1
- package/dist/inputs/slider/slider.css?inline.js.map +0 -1
- package/dist/inputs/switch/switch.css?inline.cjs.map +0 -1
- package/dist/inputs/switch/switch.css?inline.js.map +0 -1
- package/dist/inputs/textarea/textarea.css?inline.cjs.map +0 -1
- package/dist/inputs/textarea/textarea.css?inline.js.map +0 -1
- package/dist/inputs/time-picker/time-picker.css?inline.cjs.map +0 -1
- package/dist/inputs/time-picker/time-picker.css?inline.js.map +0 -1
- package/dist/layout/box/box.css?inline.cjs.map +0 -1
- package/dist/layout/box/box.css?inline.js.map +0 -1
- package/dist/layout/grid/grid.css?inline.cjs.map +0 -1
- package/dist/layout/grid/grid.css?inline.js.map +0 -1
- package/dist/layout/grid-item/grid-item.css?inline.cjs.map +0 -1
- package/dist/layout/grid-item/grid-item.css?inline.js.map +0 -1
- package/dist/layout/navbar/navbar.css?inline.cjs.map +0 -1
- package/dist/layout/navbar/navbar.css?inline.js.map +0 -1
- package/dist/layout/sidebar/sidebar-group.css?inline.cjs.map +0 -1
- package/dist/layout/sidebar/sidebar-group.css?inline.js.map +0 -1
- package/dist/layout/sidebar/sidebar-item.css?inline.cjs.map +0 -1
- package/dist/layout/sidebar/sidebar-item.css?inline.js.map +0 -1
- package/dist/layout/sidebar/sidebar.css?inline.cjs.map +0 -1
- package/dist/layout/sidebar/sidebar.css?inline.js.map +0 -1
- package/dist/ore/dist/aria.cjs +0 -2
- package/dist/ore/dist/aria.cjs.map +0 -1
- package/dist/ore/dist/aria.js +0 -37
- package/dist/ore/dist/aria.js.map +0 -1
- package/dist/ore/dist/context-bag.cjs +0 -2
- package/dist/ore/dist/context-bag.cjs.map +0 -1
- package/dist/ore/dist/context-bag.js +0 -28
- package/dist/ore/dist/context-bag.js.map +0 -1
- package/dist/ore/dist/host-bind.cjs +0 -2
- package/dist/ore/dist/host-bind.cjs.map +0 -1
- package/dist/ore/dist/host-bind.js +0 -60
- package/dist/ore/dist/host-bind.js.map +0 -1
- package/dist/ore/dist/slots.cjs +0 -2
- package/dist/ore/dist/slots.cjs.map +0 -1
- package/dist/ore/dist/slots.js +0 -61
- package/dist/ore/dist/slots.js.map +0 -1
- package/dist/ore/dist/utils/aria.cjs +0 -2
- package/dist/ore/dist/utils/aria.cjs.map +0 -1
- package/dist/ore/dist/utils/aria.js +0 -6
- package/dist/ore/dist/utils/aria.js.map +0 -1
- package/dist/ore/dist/utils/emit.cjs +0 -2
- package/dist/ore/dist/utils/emit.cjs.map +0 -1
- package/dist/ore/dist/utils/emit.js +0 -16
- package/dist/ore/dist/utils/emit.js.map +0 -1
- package/dist/overlay/dialog/dialog.css?inline.cjs.map +0 -1
- package/dist/overlay/dialog/dialog.css?inline.js.map +0 -1
- package/dist/overlay/drawer/drawer.css?inline.cjs.map +0 -1
- package/dist/overlay/drawer/drawer.css?inline.js.map +0 -1
- package/dist/overlay/menu/menu-item.css?inline.cjs.map +0 -1
- package/dist/overlay/menu/menu-item.css?inline.js.map +0 -1
- package/dist/overlay/menu/menu-separator.css?inline.cjs.map +0 -1
- package/dist/overlay/menu/menu-separator.css?inline.js.map +0 -1
- package/dist/overlay/menu/menu.css?inline.cjs.map +0 -1
- package/dist/overlay/menu/menu.css?inline.js.map +0 -1
- package/dist/overlay/popover/popover.css?inline.cjs.map +0 -1
- package/dist/overlay/popover/popover.css?inline.js.map +0 -1
- package/dist/overlay/tooltip/tooltip.css?inline.cjs.map +0 -1
- package/dist/overlay/tooltip/tooltip.css?inline.js.map +0 -1
package/dist/slider.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.cjs","names":[],"sources":["../src/inputs/slider/slider.ts"],"sourcesContent":["import { createStableId, define, useField, html, inject, prop, ref } from '@vielzeug/ore';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { createErrorHelperState, createSliderControl } from '../../headless';\nimport { disablableBundle, sizableBundle, SLIDER_SIZE_PRESET, themableBundle } from '../../shared';\nimport { coarsePointerMixin, colorThemeMixin, disabledStateMixin, sizeVariantMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport { renderHelperRegion } from '../shared/templates';\nimport componentStyles from './slider.css?inline';\n\nconst guard =\n <E extends Event = Event>(condition: () => unknown, handler: (e: E) => void): ((e: E) => void) =>\n (e) => {\n if (condition()) handler(e);\n };\n\n/** Slider component properties */\n\nexport type OreSliderEvents = {\n change: { from?: number; originalEvent?: Event; to?: number; value: number | { from: number; to: number } };\n};\n\nexport type OreSliderProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Disable interaction */\n disabled?: boolean;\n /** Error message — marks the field as invalid (fallback when the `error` slot is empty) */\n error?: string;\n /** Range mode: lower bound */\n from?: number | string;\n /** Range mode a11y label for the start thumb (e.g. \"$20\") */\n 'from-value-text'?: string;\n /** Helper text displayed below the slider (fallback when the `helper` slot is empty) */\n helper?: string;\n /** Maximum value */\n max?: number | string;\n /** Minimum value */\n min?: number | string;\n /** Single-value mode: form field name */\n name?: string;\n /** Activate two-thumb range selection */\n range?: boolean;\n /** Component size */\n size?: ComponentSize;\n /** Step increment */\n step?: number | string;\n /** Range mode: upper bound */\n to?: number | string;\n /** Range mode a11y label for the end thumb (e.g. \"$80\") */\n 'to-value-text'?: string;\n /** Single-value mode: current value */\n value?: number | string;\n /** Single-value mode a11y label override (e.g. \"75%\"). Overrides raw aria-valuenow. */\n 'value-text'?: string;\n};\n\n/**\n * A slider for selecting a single numeric value or a numeric range.\n *\n * Add the boolean `range` attribute to activate two-thumb range mode.\n *\n * @element ore-slider\n *\n * @attr {number} min - Minimum value (default: 0)\n * @attr {number} max - Maximum value (default: 100)\n * @attr {number} step - Step increment (default: 1)\n * @attr {number} value - Current value (single mode)\n * @attr {number} from - Lower bound (range mode)\n * @attr {number} to - Upper bound (range mode)\n * @attr {boolean} range - Activate range mode\n * @attr {boolean} disabled - Disable interaction\n * @attr {string} name - Form field name (single mode)\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} helper - Helper text below the slider\n * @attr {string} error - Error message below the slider\n *\n * @fires change - detail always includes `value`; single mode: { value: number }, range mode: { value: { from, to }, from, to }, plus optional originalEvent\n *\n * @slot - Slider label text\n *\n * @part slider - Slider container\n * @part track - Track element\n * @part fill - Fill element\n * @part thumb - Single-value thumb\n * @part thumb-start - Range start thumb\n * @part thumb-end - Range end thumb\n * @part label - Label element\n * @part helper-text - The helper/error text element\n *\n * @cssprop --slider-height - Track height\n * @cssprop --slider-size - Thumb dimensions\n * @cssprop --slider-track-bg - Track background color\n * @cssprop --slider-fill - Active fill color\n * @cssprop --slider-thumb-bg - Thumb background color\n *\n * @example\n * ```html\n * <ore-slider value=\"50\" name=\"volume\">Volume</ore-slider>\n * <ore-slider range from=\"20\" to=\"80\" color=\"primary\">Price range</ore-slider>\n * ```\n */\nexport const SLIDER_TAG = 'ore-slider' as const;\ndefine<OreSliderProps, OreSliderEvents>(SLIDER_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n error: prop.string(),\n from: prop.number(0),\n 'from-value-text': prop.string(),\n helper: prop.string(),\n max: prop.number(100),\n min: prop.number(0),\n name: prop.string(),\n range: prop.bool(false),\n step: prop.number(1),\n to: prop.number(100),\n 'to-value-text': prop.string(),\n value: prop.number(0),\n 'value-text': prop.string(),\n },\n setup(props, { aria, bind, el, emit, onCleanup, onEvent, onMounted, slots }) {\n // Treat `range` as static — determined at first render\n const isRange = props.range.value;\n // ── Shared helpers ────────────────────────────────────────────\n const sliderControl = createSliderControl({\n max: props.max,\n min: props.min,\n step: props.step,\n });\n // ── Single-value state ────────────────────────────────────────\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(bind, props, formCtx);\n const isDragging = signal(false);\n const isDisabled = fCtxProps.disabled;\n const labelledById = signal<string | undefined>(undefined);\n const assistiveId = createStableId('helper');\n const assistive = createErrorHelperState({ error: props.error, helper: props.helper });\n const errorText = computed(() => assistive.value.errorText);\n const helperText = computed(() => assistive.value.helperText);\n const ariaDescribedBy = computed(() => (errorText.value || helperText.value ? assistiveId : null));\n\n bind({\n attr: {\n 'data-dragging': () => (isDragging.value ? true : undefined),\n size: fCtxProps.size,\n },\n });\n\n let sliderFd:\n | {\n reportValidity: () => boolean;\n }\n | undefined;\n const valueSignal = signal('0');\n\n if (!isRange) {\n sliderFd = useField({ disabled: isDisabled, value: valueSignal });\n watch(\n props.value,\n (v) => {\n valueSignal.value = String(v);\n },\n { immediate: true },\n );\n bind({\n attr: {\n ariaDescribedby: () => ariaDescribedBy.value ?? null,\n ariaDisabled: () => (isDisabled.value ? 'true' : null),\n ariaLabelledby: () => labelledById.value ?? null,\n ariaValuemax: () => sliderControl.max(),\n ariaValuemin: () => sliderControl.min(),\n ariaValuenow: () => Number(valueSignal.value || 0),\n ariaValuetext: () => props['value-text'].value ?? null,\n role: () => 'slider',\n tabindex: () => (isDisabled.value ? null : '0'),\n },\n });\n }\n\n // ── Range state ───────────────────────────────────────────────\n const startVal = signal(0);\n const endVal = signal(100);\n\n if (isRange) {\n sliderFd = useField<{\n from: number;\n to: number;\n }>({\n disabled: isDisabled,\n toFormValue: ({ from, to }) => {\n const name = props.name.value;\n\n if (!name) return null;\n\n const fd = new FormData();\n\n fd.append(`${name}[from]`, String(from));\n fd.append(`${name}[to]`, String(to));\n\n return fd;\n },\n value: computed(() => ({ from: startVal.value, to: endVal.value })),\n });\n watch(\n props.from,\n (v) => {\n startVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n watch(\n props.to,\n (v) => {\n endVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n }\n\n // ── Refs ──────────────────────────────────────────────────────\n const containerRef = ref<HTMLDivElement>();\n const labelRef = ref<HTMLSpanElement>();\n const thumbStartRef = ref<HTMLDivElement>();\n const thumbEndRef = ref<HTMLDivElement>();\n const startId = createStableId('slider-start');\n const endId = createStableId('slider-end');\n // ── CSS update helpers ────────────────────────────────────────\n const updateSingleCSS = (value: number) => {\n const pct = sliderControl.toPercent(value);\n\n el.style.setProperty('--_thumb-pos', `${pct}%`);\n el.style.setProperty('--_fill-start', '0%');\n el.style.setProperty('--_fill-width', `${pct}%`);\n };\n const updateRangeCSS = () => {\n const s = sliderControl.toPercent(startVal.value);\n const e = sliderControl.toPercent(endVal.value);\n\n el.style.setProperty('--_thumb-start', `${s}%`);\n el.style.setProperty('--_thumb-end', `${e}%`);\n el.style.setProperty('--_fill-start', `${s}%`);\n el.style.setProperty('--_fill-width', `${e - s}%`);\n };\n\n // ── Range mode setup ──────────────────────────────────────────\n const triggerValidation = (on: 'blur' | 'change') => {\n if (formCtx?.validateOn?.value === on) {\n sliderFd?.reportValidity();\n }\n };\n\n const setupRangeMode = (container: HTMLDivElement) => {\n updateRangeCSS();\n\n const clientToValue = (clientX: number) => {\n const rect = container.getBoundingClientRect();\n\n return sliderControl.fromClientX(clientX, rect);\n };\n let dragging: 'start' | 'end' | null = null;\n const applyDrag = (val: number) => {\n if (dragging === 'start') startVal.value = Math.min(sliderControl.snap(val), endVal.value);\n else if (dragging === 'end') endVal.value = Math.max(sliderControl.snap(val), startVal.value);\n\n startVal.value = sliderControl.clamp(startVal.value);\n endVal.value = sliderControl.clamp(endVal.value);\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n\n const val = clientToValue(e.clientX);\n\n dragging = Math.abs(val - startVal.value) <= Math.abs(val - endVal.value) ? 'start' : 'end';\n (e.target as Element).setPointerCapture(e.pointerId);\n applyDrag(val);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n applyDrag(clientToValue(e.clientX));\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n dragging = null;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n\n const makeThumbKeydown = (getVal: () => number, setVal: (v: number) => void) => (e: KeyboardEvent) => {\n if (isDisabled.value) return;\n\n const next = sliderControl.nextFromKey(e.key, getVal());\n\n if (next === null) return;\n\n e.preventDefault();\n setVal(sliderControl.snap(next));\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n originalEvent: e,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n const thumbStartEl = thumbStartRef.value;\n const thumbEndEl = thumbEndRef.value;\n\n if (thumbStartEl) {\n onEvent(\n thumbStartEl,\n 'keydown',\n makeThumbKeydown(\n () => startVal.value,\n (v) => {\n startVal.value = Math.min(v, endVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbStartEl, {\n label: 'Range start',\n valuemax: () => endVal.value,\n valuemin: () => sliderControl.min(),\n valuenow: () => startVal.value,\n valuetext: () => props['from-value-text'].value ?? null,\n }),\n );\n }\n\n if (thumbEndEl) {\n onEvent(\n thumbEndEl,\n 'keydown',\n makeThumbKeydown(\n () => endVal.value,\n (v) => {\n endVal.value = Math.max(v, startVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbEndEl, {\n label: 'Range end',\n valuemax: () => sliderControl.max(),\n valuemin: () => startVal.value,\n valuenow: () => endVal.value,\n valuetext: () => props['to-value-text'].value ?? null,\n }),\n );\n }\n };\n // ── Single-value mode setup ───────────────────────────────────\n const setupSingleMode = (container: HTMLDivElement) => {\n updateSingleCSS(Number(valueSignal.value));\n\n const updateValue = (clientX: number) => {\n if (isDisabled.value) return;\n\n const rect = container.getBoundingClientRect();\n const newValue = sliderControl.fromClientX(clientX, rect);\n\n if (Number(valueSignal.value) !== newValue) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { value: newValue });\n triggerValidation('change');\n }\n };\n let isPointerDragging = false;\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = true;\n updateValue(e.clientX);\n (e.target as Element).setPointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n updateValue(e.clientX);\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = false;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n el,\n 'keydown',\n guard(\n () => !isDisabled.value,\n (e: KeyboardEvent) => {\n const val = Number(valueSignal.value || 0);\n const next = sliderControl.nextFromKey(e.key, val);\n\n if (next === null) return;\n\n e.preventDefault();\n\n const newValue = sliderControl.clamp(next);\n\n if (newValue !== val) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { originalEvent: e, value: newValue });\n triggerValidation('change');\n }\n },\n ),\n );\n };\n\n onMounted(() => {\n const container = containerRef.value;\n\n if (!container) return;\n\n if (slots.has().value && labelRef.value) {\n const labelId = createStableId('slider-label');\n\n labelRef.value.id = labelId;\n\n if (!isRange) labelledById.value = labelId;\n }\n\n if (isRange) setupRangeMode(container);\n else setupSingleMode(container);\n });\n\n return html`\n <div class=\"slider-container\" part=\"slider\" ref=${containerRef}>\n <div class=\"slider-track\" part=\"track\">\n <div class=\"slider-fill\" part=\"fill\"></div>\n <div class=\"slider-thumb slider-thumb-sole\" part=\"thumb\"></div>\n <div\n class=\"slider-thumb slider-thumb-start\"\n part=\"thumb-start\"\n ref=${thumbStartRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${startId}\"></div>\n <div\n class=\"slider-thumb slider-thumb-end\"\n part=\"thumb-end\"\n ref=${thumbEndRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${endId}\"></div>\n </div>\n </div>\n <span class=\"label\" part=\"label\" ref=${labelRef}><slot></slot></span>\n ${renderHelperRegion(assistiveId, errorText, helperText)}\n `;\n },\n styles: [\n disabledStateMixin,\n colorThemeMixin,\n sizeVariantMixin(SLIDER_SIZE_PRESET),\n componentStyles,\n coarsePointerMixin,\n ],\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slider.cjs","names":[],"sources":["../src/inputs/slider/slider.ts"],"sourcesContent":["import {\n createStableId,\n define,\n html,\n inject,\n prop,\n ref,\n aria,\n bind,\n getHost,\n onCleanup,\n onEvent,\n onMounted,\n useEmit,\n useSlots,\n} from '@vielzeug/ore';\nimport { useField } from '@vielzeug/ore/forms';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { createErrorHelperState, createSliderControl } from '../../headless';\nimport { disablableBundle, sizableBundle, SLIDER_SIZE_PRESET, themableBundle } from '../../shared';\nimport { coarsePointerMixin, colorThemeMixin, disabledStateMixin, sizeVariantMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport { renderHelperRegion } from '../shared/templates';\nimport componentStyles from './slider.css?inline';\n\nconst guard =\n <E extends Event = Event>(condition: () => unknown, handler: (e: E) => void): ((e: E) => void) =>\n (e) => {\n if (condition()) handler(e);\n };\n\n/** Slider component properties */\n\nexport type OreSliderEvents = {\n change: { from?: number; originalEvent?: Event; to?: number; value: number | { from: number; to: number } };\n};\n\nexport type OreSliderProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Disable interaction */\n disabled?: boolean;\n /** Error message — marks the field as invalid (fallback when the `error` slot is empty) */\n error?: string;\n /** Range mode: lower bound */\n from?: number | string;\n /** Range mode a11y label for the start thumb (e.g. \"$20\") */\n 'from-value-text'?: string;\n /** Helper text displayed below the slider (fallback when the `helper` slot is empty) */\n helper?: string;\n /** Maximum value */\n max?: number | string;\n /** Minimum value */\n min?: number | string;\n /** Single-value mode: form field name */\n name?: string;\n /** Activate two-thumb range selection */\n range?: boolean;\n /** Component size */\n size?: ComponentSize;\n /** Step increment */\n step?: number | string;\n /** Range mode: upper bound */\n to?: number | string;\n /** Range mode a11y label for the end thumb (e.g. \"$80\") */\n 'to-value-text'?: string;\n /** Single-value mode: current value */\n value?: number | string;\n /** Single-value mode a11y label override (e.g. \"75%\"). Overrides raw aria-valuenow. */\n 'value-text'?: string;\n};\n\n/**\n * A slider for selecting a single numeric value or a numeric range.\n *\n * Add the boolean `range` attribute to activate two-thumb range mode.\n *\n * @element ore-slider\n *\n * @attr {number} min - Minimum value (default: 0)\n * @attr {number} max - Maximum value (default: 100)\n * @attr {number} step - Step increment (default: 1)\n * @attr {number} value - Current value (single mode)\n * @attr {number} from - Lower bound (range mode)\n * @attr {number} to - Upper bound (range mode)\n * @attr {boolean} range - Activate range mode\n * @attr {boolean} disabled - Disable interaction\n * @attr {string} name - Form field name (single mode)\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} helper - Helper text below the slider\n * @attr {string} error - Error message below the slider\n *\n * @fires change - detail always includes `value`; single mode: { value: number }, range mode: { value: { from, to }, from, to }, plus optional originalEvent\n *\n * @slot - Slider label text\n *\n * @part slider - Slider container\n * @part track - Track element\n * @part fill - Fill element\n * @part thumb - Single-value thumb\n * @part thumb-start - Range start thumb\n * @part thumb-end - Range end thumb\n * @part label - Label element\n * @part helper-text - The helper/error text element\n *\n * @cssprop --slider-height - Track height\n * @cssprop --slider-size - Thumb dimensions\n * @cssprop --slider-track-bg - Track background color\n * @cssprop --slider-fill - Active fill color\n * @cssprop --slider-thumb-bg - Thumb background color\n *\n * @example\n * ```html\n * <ore-slider value=\"50\" name=\"volume\">Volume</ore-slider>\n * <ore-slider range from=\"20\" to=\"80\" color=\"primary\">Price range</ore-slider>\n * ```\n */\nexport const SLIDER_TAG = 'ore-slider' as const;\ndefine<OreSliderProps>(SLIDER_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n error: prop.string(),\n from: prop.number(0),\n 'from-value-text': prop.string(),\n helper: prop.string(),\n max: prop.number(100),\n min: prop.number(0),\n name: prop.string(),\n range: prop.bool(false),\n step: prop.number(1),\n to: prop.number(100),\n 'to-value-text': prop.string(),\n value: prop.number(0),\n 'value-text': prop.string(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreSliderEvents>();\n const slots = useSlots();\n\n // Treat `range` as static — determined at first render\n const isRange = props.range.value;\n // ── Shared helpers ────────────────────────────────────────────\n const sliderControl = createSliderControl({\n max: props.max,\n min: props.min,\n step: props.step,\n });\n // ── Single-value state ────────────────────────────────────────\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(props, formCtx);\n const isDragging = signal(false);\n const isDisabled = fCtxProps.disabled;\n const labelledById = signal<string | undefined>(undefined);\n const assistiveId = createStableId('helper');\n const assistive = createErrorHelperState({ error: props.error, helper: props.helper });\n const errorText = computed(() => assistive.value.errorText);\n const helperText = computed(() => assistive.value.helperText);\n const ariaDescribedBy = computed(() => (errorText.value || helperText.value ? assistiveId : null));\n\n bind({\n attr: {\n 'data-dragging': () => (isDragging.value ? true : undefined),\n size: fCtxProps.size,\n },\n });\n\n let sliderFd:\n | {\n reportValidity: () => boolean;\n }\n | undefined;\n const valueSignal = signal('0');\n\n if (!isRange) {\n sliderFd = useField({ disabled: isDisabled, value: valueSignal });\n watch(\n props.value,\n (v) => {\n valueSignal.value = String(v);\n },\n { immediate: true },\n );\n bind({\n attr: {\n ariaDescribedby: () => ariaDescribedBy.value ?? null,\n ariaDisabled: () => (isDisabled.value ? 'true' : null),\n ariaLabelledby: () => labelledById.value ?? null,\n ariaValuemax: () => sliderControl.max(),\n ariaValuemin: () => sliderControl.min(),\n ariaValuenow: () => Number(valueSignal.value || 0),\n ariaValuetext: () => props['value-text'].value ?? null,\n role: () => 'slider',\n tabindex: () => (isDisabled.value ? null : '0'),\n },\n });\n }\n\n // ── Range state ───────────────────────────────────────────────\n const startVal = signal(0);\n const endVal = signal(100);\n\n if (isRange) {\n sliderFd = useField<{\n from: number;\n to: number;\n }>({\n disabled: isDisabled,\n toFormValue: ({ from, to }) => {\n const name = props.name.value;\n\n if (!name) return null;\n\n const fd = new FormData();\n\n fd.append(`${name}[from]`, String(from));\n fd.append(`${name}[to]`, String(to));\n\n return fd;\n },\n value: computed(() => ({ from: startVal.value, to: endVal.value })),\n });\n watch(\n props.from,\n (v) => {\n startVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n watch(\n props.to,\n (v) => {\n endVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n }\n\n // ── Refs ──────────────────────────────────────────────────────\n const containerRef = ref<HTMLDivElement>();\n const labelRef = ref<HTMLSpanElement>();\n const thumbStartRef = ref<HTMLDivElement>();\n const thumbEndRef = ref<HTMLDivElement>();\n const startId = createStableId('slider-start');\n const endId = createStableId('slider-end');\n // ── CSS update helpers ────────────────────────────────────────\n const updateSingleCSS = (value: number) => {\n const pct = sliderControl.toPercent(value);\n\n el.style.setProperty('--_thumb-pos', `${pct}%`);\n el.style.setProperty('--_fill-start', '0%');\n el.style.setProperty('--_fill-width', `${pct}%`);\n };\n const updateRangeCSS = () => {\n const s = sliderControl.toPercent(startVal.value);\n const e = sliderControl.toPercent(endVal.value);\n\n el.style.setProperty('--_thumb-start', `${s}%`);\n el.style.setProperty('--_thumb-end', `${e}%`);\n el.style.setProperty('--_fill-start', `${s}%`);\n el.style.setProperty('--_fill-width', `${e - s}%`);\n };\n\n // ── Range mode setup ──────────────────────────────────────────\n const triggerValidation = (on: 'blur' | 'change') => {\n if (formCtx?.validateOn?.value === on) {\n sliderFd?.reportValidity();\n }\n };\n\n const setupRangeMode = (container: HTMLDivElement) => {\n updateRangeCSS();\n\n const clientToValue = (clientX: number) => {\n const rect = container.getBoundingClientRect();\n\n return sliderControl.fromClientX(clientX, rect);\n };\n let dragging: 'start' | 'end' | null = null;\n const applyDrag = (val: number) => {\n if (dragging === 'start') startVal.value = Math.min(sliderControl.snap(val), endVal.value);\n else if (dragging === 'end') endVal.value = Math.max(sliderControl.snap(val), startVal.value);\n\n startVal.value = sliderControl.clamp(startVal.value);\n endVal.value = sliderControl.clamp(endVal.value);\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n\n const val = clientToValue(e.clientX);\n\n dragging = Math.abs(val - startVal.value) <= Math.abs(val - endVal.value) ? 'start' : 'end';\n (e.target as Element).setPointerCapture(e.pointerId);\n applyDrag(val);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n applyDrag(clientToValue(e.clientX));\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n dragging = null;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n\n const makeThumbKeydown = (getVal: () => number, setVal: (v: number) => void) => (e: KeyboardEvent) => {\n if (isDisabled.value) return;\n\n const next = sliderControl.nextFromKey(e.key, getVal());\n\n if (next === null) return;\n\n e.preventDefault();\n setVal(sliderControl.snap(next));\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n originalEvent: e,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n const thumbStartEl = thumbStartRef.value;\n const thumbEndEl = thumbEndRef.value;\n\n if (thumbStartEl) {\n onEvent(\n thumbStartEl,\n 'keydown',\n makeThumbKeydown(\n () => startVal.value,\n (v) => {\n startVal.value = Math.min(v, endVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbStartEl, {\n label: 'Range start',\n valuemax: () => endVal.value,\n valuemin: () => sliderControl.min(),\n valuenow: () => startVal.value,\n valuetext: () => props['from-value-text'].value ?? null,\n }),\n );\n }\n\n if (thumbEndEl) {\n onEvent(\n thumbEndEl,\n 'keydown',\n makeThumbKeydown(\n () => endVal.value,\n (v) => {\n endVal.value = Math.max(v, startVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbEndEl, {\n label: 'Range end',\n valuemax: () => sliderControl.max(),\n valuemin: () => startVal.value,\n valuenow: () => endVal.value,\n valuetext: () => props['to-value-text'].value ?? null,\n }),\n );\n }\n };\n // ── Single-value mode setup ───────────────────────────────────\n const setupSingleMode = (container: HTMLDivElement) => {\n updateSingleCSS(Number(valueSignal.value));\n\n const updateValue = (clientX: number) => {\n if (isDisabled.value) return;\n\n const rect = container.getBoundingClientRect();\n const newValue = sliderControl.fromClientX(clientX, rect);\n\n if (Number(valueSignal.value) !== newValue) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { value: newValue });\n triggerValidation('change');\n }\n };\n let isPointerDragging = false;\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = true;\n updateValue(e.clientX);\n (e.target as Element).setPointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n updateValue(e.clientX);\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = false;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n el,\n 'keydown',\n guard(\n () => !isDisabled.value,\n (e: KeyboardEvent) => {\n const val = Number(valueSignal.value || 0);\n const next = sliderControl.nextFromKey(e.key, val);\n\n if (next === null) return;\n\n e.preventDefault();\n\n const newValue = sliderControl.clamp(next);\n\n if (newValue !== val) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { originalEvent: e, value: newValue });\n triggerValidation('change');\n }\n },\n ),\n );\n };\n\n onMounted(() => {\n const container = containerRef.value;\n\n if (!container) return;\n\n if (slots.has().value && labelRef.value) {\n const labelId = createStableId('slider-label');\n\n labelRef.value.id = labelId;\n\n if (!isRange) labelledById.value = labelId;\n }\n\n if (isRange) setupRangeMode(container);\n else setupSingleMode(container);\n });\n\n return html`\n <div class=\"slider-container\" part=\"slider\" ref=${containerRef}>\n <div class=\"slider-track\" part=\"track\">\n <div class=\"slider-fill\" part=\"fill\"></div>\n <div class=\"slider-thumb slider-thumb-sole\" part=\"thumb\"></div>\n <div\n class=\"slider-thumb slider-thumb-start\"\n part=\"thumb-start\"\n ref=${thumbStartRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${startId}\"></div>\n <div\n class=\"slider-thumb slider-thumb-end\"\n part=\"thumb-end\"\n ref=${thumbEndRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${endId}\"></div>\n </div>\n </div>\n <span class=\"label\" part=\"label\" ref=${labelRef}><slot></slot></span>\n ${renderHelperRegion(assistiveId, errorText, helperText)}\n `;\n },\n styles: [\n disabledStateMixin,\n colorThemeMixin,\n sizeVariantMixin(SLIDER_SIZE_PRESET),\n componentStyles,\n coarsePointerMixin,\n ],\n});\n"],"mappings":"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"}
|
package/dist/slider.js
CHANGED
|
@@ -6,214 +6,216 @@ import { disablableBundle as i, sizableBundle as a, themableBundle as o } from "
|
|
|
6
6
|
import { SLIDER_SIZE_PRESET as s } from "./shared/size-presets.js";
|
|
7
7
|
import { createErrorHelperState as c } from "./headless/field-base.js";
|
|
8
8
|
import { createSliderControl as l } from "./headless/slider.js";
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import {
|
|
13
|
-
import
|
|
9
|
+
import { useField as u } from "./ore/dist/forms/field.js";
|
|
10
|
+
import "./ore/dist/forms.js";
|
|
11
|
+
import { FORM_CTX as d, useFormContext as f } from "./inputs/shared/form-context.js";
|
|
12
|
+
import { renderHelperRegion as p } from "./inputs/shared/templates.js";
|
|
13
|
+
import m from "./inputs/slider/slider.css.js";
|
|
14
|
+
import { aria as h, bind as g, createStableId as _, define as v, getHost as y, html as b, inject as x, onCleanup as S, onEvent as C, onMounted as w, prop as T, ref as E, useEmit as D, useSlots as O } from "@vielzeug/ore";
|
|
15
|
+
import { computed as k, signal as A, watch as j } from "@vielzeug/ripple";
|
|
14
16
|
//#region src/inputs/slider/slider.ts
|
|
15
|
-
var
|
|
17
|
+
var M = (e, t) => (n) => {
|
|
16
18
|
e() && t(n);
|
|
17
|
-
},
|
|
18
|
-
|
|
19
|
+
}, N = "ore-slider";
|
|
20
|
+
v(N, {
|
|
19
21
|
formAssociated: !0,
|
|
20
22
|
props: {
|
|
21
23
|
...o,
|
|
22
24
|
...a,
|
|
23
25
|
...i,
|
|
24
|
-
error:
|
|
25
|
-
from:
|
|
26
|
-
"from-value-text":
|
|
27
|
-
helper:
|
|
28
|
-
max:
|
|
29
|
-
min:
|
|
30
|
-
name:
|
|
31
|
-
range:
|
|
32
|
-
step:
|
|
33
|
-
to:
|
|
34
|
-
"to-value-text":
|
|
35
|
-
value:
|
|
36
|
-
"value-text":
|
|
26
|
+
error: T.string(),
|
|
27
|
+
from: T.number(0),
|
|
28
|
+
"from-value-text": T.string(),
|
|
29
|
+
helper: T.string(),
|
|
30
|
+
max: T.number(100),
|
|
31
|
+
min: T.number(0),
|
|
32
|
+
name: T.string(),
|
|
33
|
+
range: T.bool(!1),
|
|
34
|
+
step: T.number(1),
|
|
35
|
+
to: T.number(100),
|
|
36
|
+
"to-value-text": T.string(),
|
|
37
|
+
value: T.number(0),
|
|
38
|
+
"value-text": T.string()
|
|
37
39
|
},
|
|
38
|
-
setup(e
|
|
39
|
-
let
|
|
40
|
+
setup(e) {
|
|
41
|
+
let t = y(), n = D(), r = O(), i = e.range.value, a = l({
|
|
40
42
|
max: e.max,
|
|
41
43
|
min: e.min,
|
|
42
44
|
step: e.step
|
|
43
|
-
}),
|
|
45
|
+
}), o = x(d), s = f(e, o), m = A(!1), v = s.disabled, T = A(void 0), N = _("helper"), P = c({
|
|
44
46
|
error: e.error,
|
|
45
47
|
helper: e.helper
|
|
46
|
-
}),
|
|
47
|
-
|
|
48
|
-
"data-dragging": () =>
|
|
49
|
-
size:
|
|
48
|
+
}), F = k(() => P.value.errorText), I = k(() => P.value.helperText), L = k(() => F.value || I.value ? N : null);
|
|
49
|
+
g({ attr: {
|
|
50
|
+
"data-dragging": () => m.value ? !0 : void 0,
|
|
51
|
+
size: s.size
|
|
50
52
|
} });
|
|
51
|
-
let
|
|
52
|
-
|
|
53
|
-
disabled:
|
|
54
|
-
value:
|
|
55
|
-
}),
|
|
56
|
-
|
|
57
|
-
}, { immediate: !0 }),
|
|
58
|
-
ariaDescribedby: () =>
|
|
59
|
-
ariaDisabled: () =>
|
|
60
|
-
ariaLabelledby: () =>
|
|
61
|
-
ariaValuemax: () =>
|
|
62
|
-
ariaValuemin: () =>
|
|
63
|
-
ariaValuenow: () => Number(
|
|
53
|
+
let R, z = A("0");
|
|
54
|
+
i || (R = u({
|
|
55
|
+
disabled: v,
|
|
56
|
+
value: z
|
|
57
|
+
}), j(e.value, (e) => {
|
|
58
|
+
z.value = String(e);
|
|
59
|
+
}, { immediate: !0 }), g({ attr: {
|
|
60
|
+
ariaDescribedby: () => L.value ?? null,
|
|
61
|
+
ariaDisabled: () => v.value ? "true" : null,
|
|
62
|
+
ariaLabelledby: () => T.value ?? null,
|
|
63
|
+
ariaValuemax: () => a.max(),
|
|
64
|
+
ariaValuemin: () => a.min(),
|
|
65
|
+
ariaValuenow: () => Number(z.value || 0),
|
|
64
66
|
ariaValuetext: () => e["value-text"].value ?? null,
|
|
65
67
|
role: () => "slider",
|
|
66
|
-
tabindex: () =>
|
|
68
|
+
tabindex: () => v.value ? null : "0"
|
|
67
69
|
} }));
|
|
68
|
-
let
|
|
69
|
-
|
|
70
|
-
disabled:
|
|
70
|
+
let B = A(0), V = A(100);
|
|
71
|
+
i && (R = u({
|
|
72
|
+
disabled: v,
|
|
71
73
|
toFormValue: ({ from: t, to: n }) => {
|
|
72
74
|
let r = e.name.value;
|
|
73
75
|
if (!r) return null;
|
|
74
76
|
let i = new FormData();
|
|
75
77
|
return i.append(`${r}[from]`, String(t)), i.append(`${r}[to]`, String(n)), i;
|
|
76
78
|
},
|
|
77
|
-
value:
|
|
78
|
-
from:
|
|
79
|
-
to:
|
|
79
|
+
value: k(() => ({
|
|
80
|
+
from: B.value,
|
|
81
|
+
to: V.value
|
|
80
82
|
}))
|
|
81
|
-
}),
|
|
82
|
-
|
|
83
|
-
}, { immediate: !0 }),
|
|
84
|
-
|
|
83
|
+
}), j(e.from, (e) => {
|
|
84
|
+
B.value = a.snap(Number(e));
|
|
85
|
+
}, { immediate: !0 }), j(e.to, (e) => {
|
|
86
|
+
V.value = a.snap(Number(e));
|
|
85
87
|
}, { immediate: !0 }));
|
|
86
|
-
let
|
|
87
|
-
let
|
|
88
|
-
|
|
89
|
-
},
|
|
90
|
-
let e =
|
|
91
|
-
|
|
92
|
-
},
|
|
93
|
-
|
|
94
|
-
},
|
|
95
|
-
|
|
88
|
+
let H = E(), U = E(), W = E(), G = E(), K = _("slider-start"), q = _("slider-end"), J = (e) => {
|
|
89
|
+
let n = a.toPercent(e);
|
|
90
|
+
t.style.setProperty("--_thumb-pos", `${n}%`), t.style.setProperty("--_fill-start", "0%"), t.style.setProperty("--_fill-width", `${n}%`);
|
|
91
|
+
}, Y = () => {
|
|
92
|
+
let e = a.toPercent(B.value), n = a.toPercent(V.value);
|
|
93
|
+
t.style.setProperty("--_thumb-start", `${e}%`), t.style.setProperty("--_thumb-end", `${n}%`), t.style.setProperty("--_fill-start", `${e}%`), t.style.setProperty("--_fill-width", `${n - e}%`);
|
|
94
|
+
}, X = (e) => {
|
|
95
|
+
o?.validateOn?.value === e && R?.reportValidity();
|
|
96
|
+
}, Z = (t) => {
|
|
97
|
+
Y();
|
|
96
98
|
let r = (e) => {
|
|
97
|
-
let
|
|
98
|
-
return
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
from:
|
|
102
|
-
to:
|
|
99
|
+
let n = t.getBoundingClientRect();
|
|
100
|
+
return a.fromClientX(e, n);
|
|
101
|
+
}, i = null, o = (e) => {
|
|
102
|
+
i === "start" ? B.value = Math.min(a.snap(e), V.value) : i === "end" && (V.value = Math.max(a.snap(e), B.value)), B.value = a.clamp(B.value), V.value = a.clamp(V.value), Y(), n("change", {
|
|
103
|
+
from: B.value,
|
|
104
|
+
to: V.value,
|
|
103
105
|
value: {
|
|
104
|
-
from:
|
|
105
|
-
to:
|
|
106
|
+
from: B.value,
|
|
107
|
+
to: V.value
|
|
106
108
|
}
|
|
107
|
-
}),
|
|
109
|
+
}), X("change");
|
|
108
110
|
};
|
|
109
|
-
|
|
111
|
+
C(t, "pointerdown", M(() => !v.value, (e) => {
|
|
110
112
|
e.preventDefault();
|
|
111
113
|
let t = r(e.clientX);
|
|
112
|
-
|
|
113
|
-
})),
|
|
114
|
-
e.preventDefault(),
|
|
115
|
-
})),
|
|
116
|
-
e.preventDefault(),
|
|
114
|
+
i = Math.abs(t - B.value) <= Math.abs(t - V.value) ? "start" : "end", e.target.setPointerCapture(e.pointerId), o(t);
|
|
115
|
+
})), C(t, "pointermove", M(() => !!i, (e) => {
|
|
116
|
+
e.preventDefault(), m.value ||= !0, o(r(e.clientX));
|
|
117
|
+
})), C(t, "pointerup", M(() => !!i, (e) => {
|
|
118
|
+
e.preventDefault(), i = null, m.value = !1, e.target.releasePointerCapture(e.pointerId);
|
|
117
119
|
}));
|
|
118
|
-
let
|
|
119
|
-
if (
|
|
120
|
-
let
|
|
121
|
-
|
|
122
|
-
from:
|
|
123
|
-
originalEvent:
|
|
124
|
-
to:
|
|
120
|
+
let s = (e, t) => (r) => {
|
|
121
|
+
if (v.value) return;
|
|
122
|
+
let i = a.nextFromKey(r.key, e());
|
|
123
|
+
i !== null && (r.preventDefault(), t(a.snap(i)), Y(), n("change", {
|
|
124
|
+
from: B.value,
|
|
125
|
+
originalEvent: r,
|
|
126
|
+
to: V.value,
|
|
125
127
|
value: {
|
|
126
|
-
from:
|
|
127
|
-
to:
|
|
128
|
+
from: B.value,
|
|
129
|
+
to: V.value
|
|
128
130
|
}
|
|
129
|
-
}),
|
|
130
|
-
},
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
})),
|
|
131
|
+
}), X("change"));
|
|
132
|
+
}, c = W.value, l = G.value;
|
|
133
|
+
c && (C(c, "keydown", s(() => B.value, (e) => {
|
|
134
|
+
B.value = Math.min(e, V.value);
|
|
135
|
+
})), S(h(c, {
|
|
134
136
|
label: "Range start",
|
|
135
|
-
valuemax: () =>
|
|
136
|
-
valuemin: () =>
|
|
137
|
-
valuenow: () =>
|
|
137
|
+
valuemax: () => V.value,
|
|
138
|
+
valuemin: () => a.min(),
|
|
139
|
+
valuenow: () => B.value,
|
|
138
140
|
valuetext: () => e["from-value-text"].value ?? null
|
|
139
|
-
}))),
|
|
140
|
-
|
|
141
|
-
})),
|
|
141
|
+
}))), l && (C(l, "keydown", s(() => V.value, (e) => {
|
|
142
|
+
V.value = Math.max(e, B.value);
|
|
143
|
+
})), S(h(l, {
|
|
142
144
|
label: "Range end",
|
|
143
|
-
valuemax: () =>
|
|
144
|
-
valuemin: () =>
|
|
145
|
-
valuenow: () =>
|
|
145
|
+
valuemax: () => a.max(),
|
|
146
|
+
valuemin: () => B.value,
|
|
147
|
+
valuenow: () => V.value,
|
|
146
148
|
valuetext: () => e["to-value-text"].value ?? null
|
|
147
149
|
})));
|
|
148
|
-
},
|
|
149
|
-
|
|
150
|
-
let
|
|
151
|
-
if (
|
|
152
|
-
let
|
|
153
|
-
Number(
|
|
154
|
-
},
|
|
155
|
-
|
|
156
|
-
e.preventDefault(),
|
|
157
|
-
})),
|
|
158
|
-
e.preventDefault(),
|
|
159
|
-
})),
|
|
160
|
-
e.preventDefault(),
|
|
161
|
-
})),
|
|
162
|
-
let t = Number(
|
|
163
|
-
if (
|
|
150
|
+
}, Q = (e) => {
|
|
151
|
+
J(Number(z.value));
|
|
152
|
+
let r = (t) => {
|
|
153
|
+
if (v.value) return;
|
|
154
|
+
let r = e.getBoundingClientRect(), i = a.fromClientX(t, r);
|
|
155
|
+
Number(z.value) !== i && (z.value = i.toString(), J(i), n("change", { value: i }), X("change"));
|
|
156
|
+
}, i = !1;
|
|
157
|
+
C(e, "pointerdown", M(() => !v.value, (e) => {
|
|
158
|
+
e.preventDefault(), i = !0, r(e.clientX), e.target.setPointerCapture(e.pointerId);
|
|
159
|
+
})), C(e, "pointermove", M(() => i, (e) => {
|
|
160
|
+
e.preventDefault(), m.value ||= !0, r(e.clientX);
|
|
161
|
+
})), C(e, "pointerup", M(() => i, (e) => {
|
|
162
|
+
e.preventDefault(), i = !1, m.value = !1, e.target.releasePointerCapture(e.pointerId);
|
|
163
|
+
})), C(t, "keydown", M(() => !v.value, (e) => {
|
|
164
|
+
let t = Number(z.value || 0), r = a.nextFromKey(e.key, t);
|
|
165
|
+
if (r === null) return;
|
|
164
166
|
e.preventDefault();
|
|
165
|
-
let
|
|
166
|
-
|
|
167
|
+
let i = a.clamp(r);
|
|
168
|
+
i !== t && (z.value = i.toString(), J(i), n("change", {
|
|
167
169
|
originalEvent: e,
|
|
168
|
-
value:
|
|
169
|
-
}),
|
|
170
|
+
value: i
|
|
171
|
+
}), X("change"));
|
|
170
172
|
}));
|
|
171
173
|
};
|
|
172
|
-
return
|
|
173
|
-
let e =
|
|
174
|
+
return w(() => {
|
|
175
|
+
let e = H.value;
|
|
174
176
|
if (e) {
|
|
175
|
-
if (
|
|
176
|
-
let e =
|
|
177
|
-
|
|
177
|
+
if (r.has().value && U.value) {
|
|
178
|
+
let e = _("slider-label");
|
|
179
|
+
U.value.id = e, i || (T.value = e);
|
|
178
180
|
}
|
|
179
|
-
|
|
181
|
+
i ? Z(e) : Q(e);
|
|
180
182
|
}
|
|
181
|
-
}),
|
|
182
|
-
<div class="slider-container" part="slider" ref=${
|
|
183
|
+
}), b`
|
|
184
|
+
<div class="slider-container" part="slider" ref=${H}>
|
|
183
185
|
<div class="slider-track" part="track">
|
|
184
186
|
<div class="slider-fill" part="fill"></div>
|
|
185
187
|
<div class="slider-thumb slider-thumb-sole" part="thumb"></div>
|
|
186
188
|
<div
|
|
187
189
|
class="slider-thumb slider-thumb-start"
|
|
188
190
|
part="thumb-start"
|
|
189
|
-
ref=${
|
|
191
|
+
ref=${W}
|
|
190
192
|
role="slider"
|
|
191
|
-
tabindex="${() =>
|
|
192
|
-
:aria-describedby="${
|
|
193
|
-
id="${
|
|
193
|
+
tabindex="${() => v.value ? "-1" : "0"}"
|
|
194
|
+
:aria-describedby="${L}"
|
|
195
|
+
id="${K}"></div>
|
|
194
196
|
<div
|
|
195
197
|
class="slider-thumb slider-thumb-end"
|
|
196
198
|
part="thumb-end"
|
|
197
|
-
ref=${
|
|
199
|
+
ref=${G}
|
|
198
200
|
role="slider"
|
|
199
|
-
tabindex="${() =>
|
|
200
|
-
:aria-describedby="${
|
|
201
|
-
id="${
|
|
201
|
+
tabindex="${() => v.value ? "-1" : "0"}"
|
|
202
|
+
:aria-describedby="${L}"
|
|
203
|
+
id="${q}"></div>
|
|
202
204
|
</div>
|
|
203
205
|
</div>
|
|
204
|
-
<span class="label" part="label" ref=${
|
|
205
|
-
${
|
|
206
|
+
<span class="label" part="label" ref=${U}><slot></slot></span>
|
|
207
|
+
${p(N, F, I)}
|
|
206
208
|
`;
|
|
207
209
|
},
|
|
208
210
|
styles: [
|
|
209
211
|
n,
|
|
210
212
|
r,
|
|
211
213
|
t(s),
|
|
212
|
-
|
|
214
|
+
m,
|
|
213
215
|
e
|
|
214
216
|
]
|
|
215
217
|
});
|
|
216
218
|
//#endregion
|
|
217
|
-
export {
|
|
219
|
+
export { N as SLIDER_TAG };
|
|
218
220
|
|
|
219
221
|
//# sourceMappingURL=slider.js.map
|
package/dist/slider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.js","names":[],"sources":["../src/inputs/slider/slider.ts"],"sourcesContent":["import { createStableId, define, useField, html, inject, prop, ref } from '@vielzeug/ore';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { createErrorHelperState, createSliderControl } from '../../headless';\nimport { disablableBundle, sizableBundle, SLIDER_SIZE_PRESET, themableBundle } from '../../shared';\nimport { coarsePointerMixin, colorThemeMixin, disabledStateMixin, sizeVariantMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport { renderHelperRegion } from '../shared/templates';\nimport componentStyles from './slider.css?inline';\n\nconst guard =\n <E extends Event = Event>(condition: () => unknown, handler: (e: E) => void): ((e: E) => void) =>\n (e) => {\n if (condition()) handler(e);\n };\n\n/** Slider component properties */\n\nexport type OreSliderEvents = {\n change: { from?: number; originalEvent?: Event; to?: number; value: number | { from: number; to: number } };\n};\n\nexport type OreSliderProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Disable interaction */\n disabled?: boolean;\n /** Error message — marks the field as invalid (fallback when the `error` slot is empty) */\n error?: string;\n /** Range mode: lower bound */\n from?: number | string;\n /** Range mode a11y label for the start thumb (e.g. \"$20\") */\n 'from-value-text'?: string;\n /** Helper text displayed below the slider (fallback when the `helper` slot is empty) */\n helper?: string;\n /** Maximum value */\n max?: number | string;\n /** Minimum value */\n min?: number | string;\n /** Single-value mode: form field name */\n name?: string;\n /** Activate two-thumb range selection */\n range?: boolean;\n /** Component size */\n size?: ComponentSize;\n /** Step increment */\n step?: number | string;\n /** Range mode: upper bound */\n to?: number | string;\n /** Range mode a11y label for the end thumb (e.g. \"$80\") */\n 'to-value-text'?: string;\n /** Single-value mode: current value */\n value?: number | string;\n /** Single-value mode a11y label override (e.g. \"75%\"). Overrides raw aria-valuenow. */\n 'value-text'?: string;\n};\n\n/**\n * A slider for selecting a single numeric value or a numeric range.\n *\n * Add the boolean `range` attribute to activate two-thumb range mode.\n *\n * @element ore-slider\n *\n * @attr {number} min - Minimum value (default: 0)\n * @attr {number} max - Maximum value (default: 100)\n * @attr {number} step - Step increment (default: 1)\n * @attr {number} value - Current value (single mode)\n * @attr {number} from - Lower bound (range mode)\n * @attr {number} to - Upper bound (range mode)\n * @attr {boolean} range - Activate range mode\n * @attr {boolean} disabled - Disable interaction\n * @attr {string} name - Form field name (single mode)\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} helper - Helper text below the slider\n * @attr {string} error - Error message below the slider\n *\n * @fires change - detail always includes `value`; single mode: { value: number }, range mode: { value: { from, to }, from, to }, plus optional originalEvent\n *\n * @slot - Slider label text\n *\n * @part slider - Slider container\n * @part track - Track element\n * @part fill - Fill element\n * @part thumb - Single-value thumb\n * @part thumb-start - Range start thumb\n * @part thumb-end - Range end thumb\n * @part label - Label element\n * @part helper-text - The helper/error text element\n *\n * @cssprop --slider-height - Track height\n * @cssprop --slider-size - Thumb dimensions\n * @cssprop --slider-track-bg - Track background color\n * @cssprop --slider-fill - Active fill color\n * @cssprop --slider-thumb-bg - Thumb background color\n *\n * @example\n * ```html\n * <ore-slider value=\"50\" name=\"volume\">Volume</ore-slider>\n * <ore-slider range from=\"20\" to=\"80\" color=\"primary\">Price range</ore-slider>\n * ```\n */\nexport const SLIDER_TAG = 'ore-slider' as const;\ndefine<OreSliderProps, OreSliderEvents>(SLIDER_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n error: prop.string(),\n from: prop.number(0),\n 'from-value-text': prop.string(),\n helper: prop.string(),\n max: prop.number(100),\n min: prop.number(0),\n name: prop.string(),\n range: prop.bool(false),\n step: prop.number(1),\n to: prop.number(100),\n 'to-value-text': prop.string(),\n value: prop.number(0),\n 'value-text': prop.string(),\n },\n setup(props, { aria, bind, el, emit, onCleanup, onEvent, onMounted, slots }) {\n // Treat `range` as static — determined at first render\n const isRange = props.range.value;\n // ── Shared helpers ────────────────────────────────────────────\n const sliderControl = createSliderControl({\n max: props.max,\n min: props.min,\n step: props.step,\n });\n // ── Single-value state ────────────────────────────────────────\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(bind, props, formCtx);\n const isDragging = signal(false);\n const isDisabled = fCtxProps.disabled;\n const labelledById = signal<string | undefined>(undefined);\n const assistiveId = createStableId('helper');\n const assistive = createErrorHelperState({ error: props.error, helper: props.helper });\n const errorText = computed(() => assistive.value.errorText);\n const helperText = computed(() => assistive.value.helperText);\n const ariaDescribedBy = computed(() => (errorText.value || helperText.value ? assistiveId : null));\n\n bind({\n attr: {\n 'data-dragging': () => (isDragging.value ? true : undefined),\n size: fCtxProps.size,\n },\n });\n\n let sliderFd:\n | {\n reportValidity: () => boolean;\n }\n | undefined;\n const valueSignal = signal('0');\n\n if (!isRange) {\n sliderFd = useField({ disabled: isDisabled, value: valueSignal });\n watch(\n props.value,\n (v) => {\n valueSignal.value = String(v);\n },\n { immediate: true },\n );\n bind({\n attr: {\n ariaDescribedby: () => ariaDescribedBy.value ?? null,\n ariaDisabled: () => (isDisabled.value ? 'true' : null),\n ariaLabelledby: () => labelledById.value ?? null,\n ariaValuemax: () => sliderControl.max(),\n ariaValuemin: () => sliderControl.min(),\n ariaValuenow: () => Number(valueSignal.value || 0),\n ariaValuetext: () => props['value-text'].value ?? null,\n role: () => 'slider',\n tabindex: () => (isDisabled.value ? null : '0'),\n },\n });\n }\n\n // ── Range state ───────────────────────────────────────────────\n const startVal = signal(0);\n const endVal = signal(100);\n\n if (isRange) {\n sliderFd = useField<{\n from: number;\n to: number;\n }>({\n disabled: isDisabled,\n toFormValue: ({ from, to }) => {\n const name = props.name.value;\n\n if (!name) return null;\n\n const fd = new FormData();\n\n fd.append(`${name}[from]`, String(from));\n fd.append(`${name}[to]`, String(to));\n\n return fd;\n },\n value: computed(() => ({ from: startVal.value, to: endVal.value })),\n });\n watch(\n props.from,\n (v) => {\n startVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n watch(\n props.to,\n (v) => {\n endVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n }\n\n // ── Refs ──────────────────────────────────────────────────────\n const containerRef = ref<HTMLDivElement>();\n const labelRef = ref<HTMLSpanElement>();\n const thumbStartRef = ref<HTMLDivElement>();\n const thumbEndRef = ref<HTMLDivElement>();\n const startId = createStableId('slider-start');\n const endId = createStableId('slider-end');\n // ── CSS update helpers ────────────────────────────────────────\n const updateSingleCSS = (value: number) => {\n const pct = sliderControl.toPercent(value);\n\n el.style.setProperty('--_thumb-pos', `${pct}%`);\n el.style.setProperty('--_fill-start', '0%');\n el.style.setProperty('--_fill-width', `${pct}%`);\n };\n const updateRangeCSS = () => {\n const s = sliderControl.toPercent(startVal.value);\n const e = sliderControl.toPercent(endVal.value);\n\n el.style.setProperty('--_thumb-start', `${s}%`);\n el.style.setProperty('--_thumb-end', `${e}%`);\n el.style.setProperty('--_fill-start', `${s}%`);\n el.style.setProperty('--_fill-width', `${e - s}%`);\n };\n\n // ── Range mode setup ──────────────────────────────────────────\n const triggerValidation = (on: 'blur' | 'change') => {\n if (formCtx?.validateOn?.value === on) {\n sliderFd?.reportValidity();\n }\n };\n\n const setupRangeMode = (container: HTMLDivElement) => {\n updateRangeCSS();\n\n const clientToValue = (clientX: number) => {\n const rect = container.getBoundingClientRect();\n\n return sliderControl.fromClientX(clientX, rect);\n };\n let dragging: 'start' | 'end' | null = null;\n const applyDrag = (val: number) => {\n if (dragging === 'start') startVal.value = Math.min(sliderControl.snap(val), endVal.value);\n else if (dragging === 'end') endVal.value = Math.max(sliderControl.snap(val), startVal.value);\n\n startVal.value = sliderControl.clamp(startVal.value);\n endVal.value = sliderControl.clamp(endVal.value);\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n\n const val = clientToValue(e.clientX);\n\n dragging = Math.abs(val - startVal.value) <= Math.abs(val - endVal.value) ? 'start' : 'end';\n (e.target as Element).setPointerCapture(e.pointerId);\n applyDrag(val);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n applyDrag(clientToValue(e.clientX));\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n dragging = null;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n\n const makeThumbKeydown = (getVal: () => number, setVal: (v: number) => void) => (e: KeyboardEvent) => {\n if (isDisabled.value) return;\n\n const next = sliderControl.nextFromKey(e.key, getVal());\n\n if (next === null) return;\n\n e.preventDefault();\n setVal(sliderControl.snap(next));\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n originalEvent: e,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n const thumbStartEl = thumbStartRef.value;\n const thumbEndEl = thumbEndRef.value;\n\n if (thumbStartEl) {\n onEvent(\n thumbStartEl,\n 'keydown',\n makeThumbKeydown(\n () => startVal.value,\n (v) => {\n startVal.value = Math.min(v, endVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbStartEl, {\n label: 'Range start',\n valuemax: () => endVal.value,\n valuemin: () => sliderControl.min(),\n valuenow: () => startVal.value,\n valuetext: () => props['from-value-text'].value ?? null,\n }),\n );\n }\n\n if (thumbEndEl) {\n onEvent(\n thumbEndEl,\n 'keydown',\n makeThumbKeydown(\n () => endVal.value,\n (v) => {\n endVal.value = Math.max(v, startVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbEndEl, {\n label: 'Range end',\n valuemax: () => sliderControl.max(),\n valuemin: () => startVal.value,\n valuenow: () => endVal.value,\n valuetext: () => props['to-value-text'].value ?? null,\n }),\n );\n }\n };\n // ── Single-value mode setup ───────────────────────────────────\n const setupSingleMode = (container: HTMLDivElement) => {\n updateSingleCSS(Number(valueSignal.value));\n\n const updateValue = (clientX: number) => {\n if (isDisabled.value) return;\n\n const rect = container.getBoundingClientRect();\n const newValue = sliderControl.fromClientX(clientX, rect);\n\n if (Number(valueSignal.value) !== newValue) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { value: newValue });\n triggerValidation('change');\n }\n };\n let isPointerDragging = false;\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = true;\n updateValue(e.clientX);\n (e.target as Element).setPointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n updateValue(e.clientX);\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = false;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n el,\n 'keydown',\n guard(\n () => !isDisabled.value,\n (e: KeyboardEvent) => {\n const val = Number(valueSignal.value || 0);\n const next = sliderControl.nextFromKey(e.key, val);\n\n if (next === null) return;\n\n e.preventDefault();\n\n const newValue = sliderControl.clamp(next);\n\n if (newValue !== val) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { originalEvent: e, value: newValue });\n triggerValidation('change');\n }\n },\n ),\n );\n };\n\n onMounted(() => {\n const container = containerRef.value;\n\n if (!container) return;\n\n if (slots.has().value && labelRef.value) {\n const labelId = createStableId('slider-label');\n\n labelRef.value.id = labelId;\n\n if (!isRange) labelledById.value = labelId;\n }\n\n if (isRange) setupRangeMode(container);\n else setupSingleMode(container);\n });\n\n return html`\n <div class=\"slider-container\" part=\"slider\" ref=${containerRef}>\n <div class=\"slider-track\" part=\"track\">\n <div class=\"slider-fill\" part=\"fill\"></div>\n <div class=\"slider-thumb slider-thumb-sole\" part=\"thumb\"></div>\n <div\n class=\"slider-thumb slider-thumb-start\"\n part=\"thumb-start\"\n ref=${thumbStartRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${startId}\"></div>\n <div\n class=\"slider-thumb slider-thumb-end\"\n part=\"thumb-end\"\n ref=${thumbEndRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${endId}\"></div>\n </div>\n </div>\n <span class=\"label\" part=\"label\" ref=${labelRef}><slot></slot></span>\n ${renderHelperRegion(assistiveId, errorText, helperText)}\n `;\n },\n styles: [\n disabledStateMixin,\n colorThemeMixin,\n sizeVariantMixin(SLIDER_SIZE_PRESET),\n componentStyles,\n coarsePointerMixin,\n ],\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slider.js","names":[],"sources":["../src/inputs/slider/slider.ts"],"sourcesContent":["import {\n createStableId,\n define,\n html,\n inject,\n prop,\n ref,\n aria,\n bind,\n getHost,\n onCleanup,\n onEvent,\n onMounted,\n useEmit,\n useSlots,\n} from '@vielzeug/ore';\nimport { useField } from '@vielzeug/ore/forms';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { createErrorHelperState, createSliderControl } from '../../headless';\nimport { disablableBundle, sizableBundle, SLIDER_SIZE_PRESET, themableBundle } from '../../shared';\nimport { coarsePointerMixin, colorThemeMixin, disabledStateMixin, sizeVariantMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport { renderHelperRegion } from '../shared/templates';\nimport componentStyles from './slider.css?inline';\n\nconst guard =\n <E extends Event = Event>(condition: () => unknown, handler: (e: E) => void): ((e: E) => void) =>\n (e) => {\n if (condition()) handler(e);\n };\n\n/** Slider component properties */\n\nexport type OreSliderEvents = {\n change: { from?: number; originalEvent?: Event; to?: number; value: number | { from: number; to: number } };\n};\n\nexport type OreSliderProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Disable interaction */\n disabled?: boolean;\n /** Error message — marks the field as invalid (fallback when the `error` slot is empty) */\n error?: string;\n /** Range mode: lower bound */\n from?: number | string;\n /** Range mode a11y label for the start thumb (e.g. \"$20\") */\n 'from-value-text'?: string;\n /** Helper text displayed below the slider (fallback when the `helper` slot is empty) */\n helper?: string;\n /** Maximum value */\n max?: number | string;\n /** Minimum value */\n min?: number | string;\n /** Single-value mode: form field name */\n name?: string;\n /** Activate two-thumb range selection */\n range?: boolean;\n /** Component size */\n size?: ComponentSize;\n /** Step increment */\n step?: number | string;\n /** Range mode: upper bound */\n to?: number | string;\n /** Range mode a11y label for the end thumb (e.g. \"$80\") */\n 'to-value-text'?: string;\n /** Single-value mode: current value */\n value?: number | string;\n /** Single-value mode a11y label override (e.g. \"75%\"). Overrides raw aria-valuenow. */\n 'value-text'?: string;\n};\n\n/**\n * A slider for selecting a single numeric value or a numeric range.\n *\n * Add the boolean `range` attribute to activate two-thumb range mode.\n *\n * @element ore-slider\n *\n * @attr {number} min - Minimum value (default: 0)\n * @attr {number} max - Maximum value (default: 100)\n * @attr {number} step - Step increment (default: 1)\n * @attr {number} value - Current value (single mode)\n * @attr {number} from - Lower bound (range mode)\n * @attr {number} to - Upper bound (range mode)\n * @attr {boolean} range - Activate range mode\n * @attr {boolean} disabled - Disable interaction\n * @attr {string} name - Form field name (single mode)\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} helper - Helper text below the slider\n * @attr {string} error - Error message below the slider\n *\n * @fires change - detail always includes `value`; single mode: { value: number }, range mode: { value: { from, to }, from, to }, plus optional originalEvent\n *\n * @slot - Slider label text\n *\n * @part slider - Slider container\n * @part track - Track element\n * @part fill - Fill element\n * @part thumb - Single-value thumb\n * @part thumb-start - Range start thumb\n * @part thumb-end - Range end thumb\n * @part label - Label element\n * @part helper-text - The helper/error text element\n *\n * @cssprop --slider-height - Track height\n * @cssprop --slider-size - Thumb dimensions\n * @cssprop --slider-track-bg - Track background color\n * @cssprop --slider-fill - Active fill color\n * @cssprop --slider-thumb-bg - Thumb background color\n *\n * @example\n * ```html\n * <ore-slider value=\"50\" name=\"volume\">Volume</ore-slider>\n * <ore-slider range from=\"20\" to=\"80\" color=\"primary\">Price range</ore-slider>\n * ```\n */\nexport const SLIDER_TAG = 'ore-slider' as const;\ndefine<OreSliderProps>(SLIDER_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n error: prop.string(),\n from: prop.number(0),\n 'from-value-text': prop.string(),\n helper: prop.string(),\n max: prop.number(100),\n min: prop.number(0),\n name: prop.string(),\n range: prop.bool(false),\n step: prop.number(1),\n to: prop.number(100),\n 'to-value-text': prop.string(),\n value: prop.number(0),\n 'value-text': prop.string(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreSliderEvents>();\n const slots = useSlots();\n\n // Treat `range` as static — determined at first render\n const isRange = props.range.value;\n // ── Shared helpers ────────────────────────────────────────────\n const sliderControl = createSliderControl({\n max: props.max,\n min: props.min,\n step: props.step,\n });\n // ── Single-value state ────────────────────────────────────────\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(props, formCtx);\n const isDragging = signal(false);\n const isDisabled = fCtxProps.disabled;\n const labelledById = signal<string | undefined>(undefined);\n const assistiveId = createStableId('helper');\n const assistive = createErrorHelperState({ error: props.error, helper: props.helper });\n const errorText = computed(() => assistive.value.errorText);\n const helperText = computed(() => assistive.value.helperText);\n const ariaDescribedBy = computed(() => (errorText.value || helperText.value ? assistiveId : null));\n\n bind({\n attr: {\n 'data-dragging': () => (isDragging.value ? true : undefined),\n size: fCtxProps.size,\n },\n });\n\n let sliderFd:\n | {\n reportValidity: () => boolean;\n }\n | undefined;\n const valueSignal = signal('0');\n\n if (!isRange) {\n sliderFd = useField({ disabled: isDisabled, value: valueSignal });\n watch(\n props.value,\n (v) => {\n valueSignal.value = String(v);\n },\n { immediate: true },\n );\n bind({\n attr: {\n ariaDescribedby: () => ariaDescribedBy.value ?? null,\n ariaDisabled: () => (isDisabled.value ? 'true' : null),\n ariaLabelledby: () => labelledById.value ?? null,\n ariaValuemax: () => sliderControl.max(),\n ariaValuemin: () => sliderControl.min(),\n ariaValuenow: () => Number(valueSignal.value || 0),\n ariaValuetext: () => props['value-text'].value ?? null,\n role: () => 'slider',\n tabindex: () => (isDisabled.value ? null : '0'),\n },\n });\n }\n\n // ── Range state ───────────────────────────────────────────────\n const startVal = signal(0);\n const endVal = signal(100);\n\n if (isRange) {\n sliderFd = useField<{\n from: number;\n to: number;\n }>({\n disabled: isDisabled,\n toFormValue: ({ from, to }) => {\n const name = props.name.value;\n\n if (!name) return null;\n\n const fd = new FormData();\n\n fd.append(`${name}[from]`, String(from));\n fd.append(`${name}[to]`, String(to));\n\n return fd;\n },\n value: computed(() => ({ from: startVal.value, to: endVal.value })),\n });\n watch(\n props.from,\n (v) => {\n startVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n watch(\n props.to,\n (v) => {\n endVal.value = sliderControl.snap(Number(v));\n },\n { immediate: true },\n );\n }\n\n // ── Refs ──────────────────────────────────────────────────────\n const containerRef = ref<HTMLDivElement>();\n const labelRef = ref<HTMLSpanElement>();\n const thumbStartRef = ref<HTMLDivElement>();\n const thumbEndRef = ref<HTMLDivElement>();\n const startId = createStableId('slider-start');\n const endId = createStableId('slider-end');\n // ── CSS update helpers ────────────────────────────────────────\n const updateSingleCSS = (value: number) => {\n const pct = sliderControl.toPercent(value);\n\n el.style.setProperty('--_thumb-pos', `${pct}%`);\n el.style.setProperty('--_fill-start', '0%');\n el.style.setProperty('--_fill-width', `${pct}%`);\n };\n const updateRangeCSS = () => {\n const s = sliderControl.toPercent(startVal.value);\n const e = sliderControl.toPercent(endVal.value);\n\n el.style.setProperty('--_thumb-start', `${s}%`);\n el.style.setProperty('--_thumb-end', `${e}%`);\n el.style.setProperty('--_fill-start', `${s}%`);\n el.style.setProperty('--_fill-width', `${e - s}%`);\n };\n\n // ── Range mode setup ──────────────────────────────────────────\n const triggerValidation = (on: 'blur' | 'change') => {\n if (formCtx?.validateOn?.value === on) {\n sliderFd?.reportValidity();\n }\n };\n\n const setupRangeMode = (container: HTMLDivElement) => {\n updateRangeCSS();\n\n const clientToValue = (clientX: number) => {\n const rect = container.getBoundingClientRect();\n\n return sliderControl.fromClientX(clientX, rect);\n };\n let dragging: 'start' | 'end' | null = null;\n const applyDrag = (val: number) => {\n if (dragging === 'start') startVal.value = Math.min(sliderControl.snap(val), endVal.value);\n else if (dragging === 'end') endVal.value = Math.max(sliderControl.snap(val), startVal.value);\n\n startVal.value = sliderControl.clamp(startVal.value);\n endVal.value = sliderControl.clamp(endVal.value);\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n\n const val = clientToValue(e.clientX);\n\n dragging = Math.abs(val - startVal.value) <= Math.abs(val - endVal.value) ? 'start' : 'end';\n (e.target as Element).setPointerCapture(e.pointerId);\n applyDrag(val);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n applyDrag(clientToValue(e.clientX));\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => !!dragging,\n (e: PointerEvent) => {\n e.preventDefault();\n dragging = null;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n\n const makeThumbKeydown = (getVal: () => number, setVal: (v: number) => void) => (e: KeyboardEvent) => {\n if (isDisabled.value) return;\n\n const next = sliderControl.nextFromKey(e.key, getVal());\n\n if (next === null) return;\n\n e.preventDefault();\n setVal(sliderControl.snap(next));\n updateRangeCSS();\n emit('change', {\n from: startVal.value,\n originalEvent: e,\n to: endVal.value,\n value: { from: startVal.value, to: endVal.value },\n });\n triggerValidation('change');\n };\n const thumbStartEl = thumbStartRef.value;\n const thumbEndEl = thumbEndRef.value;\n\n if (thumbStartEl) {\n onEvent(\n thumbStartEl,\n 'keydown',\n makeThumbKeydown(\n () => startVal.value,\n (v) => {\n startVal.value = Math.min(v, endVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbStartEl, {\n label: 'Range start',\n valuemax: () => endVal.value,\n valuemin: () => sliderControl.min(),\n valuenow: () => startVal.value,\n valuetext: () => props['from-value-text'].value ?? null,\n }),\n );\n }\n\n if (thumbEndEl) {\n onEvent(\n thumbEndEl,\n 'keydown',\n makeThumbKeydown(\n () => endVal.value,\n (v) => {\n endVal.value = Math.max(v, startVal.value);\n },\n ),\n );\n onCleanup(\n aria(thumbEndEl, {\n label: 'Range end',\n valuemax: () => sliderControl.max(),\n valuemin: () => startVal.value,\n valuenow: () => endVal.value,\n valuetext: () => props['to-value-text'].value ?? null,\n }),\n );\n }\n };\n // ── Single-value mode setup ───────────────────────────────────\n const setupSingleMode = (container: HTMLDivElement) => {\n updateSingleCSS(Number(valueSignal.value));\n\n const updateValue = (clientX: number) => {\n if (isDisabled.value) return;\n\n const rect = container.getBoundingClientRect();\n const newValue = sliderControl.fromClientX(clientX, rect);\n\n if (Number(valueSignal.value) !== newValue) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { value: newValue });\n triggerValidation('change');\n }\n };\n let isPointerDragging = false;\n\n onEvent(\n container,\n 'pointerdown',\n guard(\n () => !isDisabled.value,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = true;\n updateValue(e.clientX);\n (e.target as Element).setPointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n container,\n 'pointermove',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n\n if (!isDragging.value) isDragging.value = true;\n\n updateValue(e.clientX);\n },\n ),\n );\n onEvent(\n container,\n 'pointerup',\n guard(\n () => isPointerDragging,\n (e: PointerEvent) => {\n e.preventDefault();\n isPointerDragging = false;\n isDragging.value = false;\n (e.target as Element).releasePointerCapture(e.pointerId);\n },\n ),\n );\n onEvent(\n el,\n 'keydown',\n guard(\n () => !isDisabled.value,\n (e: KeyboardEvent) => {\n const val = Number(valueSignal.value || 0);\n const next = sliderControl.nextFromKey(e.key, val);\n\n if (next === null) return;\n\n e.preventDefault();\n\n const newValue = sliderControl.clamp(next);\n\n if (newValue !== val) {\n valueSignal.value = newValue.toString();\n updateSingleCSS(newValue);\n emit('change', { originalEvent: e, value: newValue });\n triggerValidation('change');\n }\n },\n ),\n );\n };\n\n onMounted(() => {\n const container = containerRef.value;\n\n if (!container) return;\n\n if (slots.has().value && labelRef.value) {\n const labelId = createStableId('slider-label');\n\n labelRef.value.id = labelId;\n\n if (!isRange) labelledById.value = labelId;\n }\n\n if (isRange) setupRangeMode(container);\n else setupSingleMode(container);\n });\n\n return html`\n <div class=\"slider-container\" part=\"slider\" ref=${containerRef}>\n <div class=\"slider-track\" part=\"track\">\n <div class=\"slider-fill\" part=\"fill\"></div>\n <div class=\"slider-thumb slider-thumb-sole\" part=\"thumb\"></div>\n <div\n class=\"slider-thumb slider-thumb-start\"\n part=\"thumb-start\"\n ref=${thumbStartRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${startId}\"></div>\n <div\n class=\"slider-thumb slider-thumb-end\"\n part=\"thumb-end\"\n ref=${thumbEndRef}\n role=\"slider\"\n tabindex=\"${() => (isDisabled.value ? '-1' : '0')}\"\n :aria-describedby=\"${ariaDescribedBy}\"\n id=\"${endId}\"></div>\n </div>\n </div>\n <span class=\"label\" part=\"label\" ref=${labelRef}><slot></slot></span>\n ${renderHelperRegion(assistiveId, errorText, helperText)}\n `;\n },\n styles: [\n disabledStateMixin,\n colorThemeMixin,\n sizeVariantMixin(SLIDER_SIZE_PRESET),\n componentStyles,\n coarsePointerMixin,\n ],\n});\n"],"mappings":"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"}
|