@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","names":[],"sources":["../../../../../ore/dist/utils/dom.js"],"sourcesContent":["import{warn as e}from\"../_dev.js\";var t=e=>{for(let t=e.length-1;t>=0;t--)e[t]()},n=e=>{for(let t of e)t.remove()},r=new Set([`action`,`cite`,`codebase`,`data`,`formaction`,`href`,`manifest`,`ping`,`poster`,`src`,`xlink:href`]),i=/^\\s*(?:(?:javascript|vbscript|blob):|data:(?:[^,]*\\/(?:html|svg\\+xml)|application\\/(?:xhtml|xml)))/i,a=(t,n,a)=>{let o=n.toLowerCase();if(/^on[a-z]/i.test(n)){e(`Blocked setAttribute(\"${n}\", ...) — inline event handler attributes are not supported. Use @${n.slice(2)} binding syntax instead.`),t.removeAttribute(n);return}if(o===`srcdoc`){e(`Blocked setAttribute(\"srcdoc\", ...) — \"srcdoc\" holds raw HTML, not a URL, and is not supported via attribute binding. Use raw() with a registered sanitizer if you need to inject trusted HTML.`),t.removeAttribute(n);return}if(a==null||a===!1){t.removeAttribute(n);return}let s=a===!0?`true`:String(a);if(r.has(o)&&i.test(s)){e(`Blocked dangerous URL scheme in attribute \"${n}\". Only safe URLs are permitted in URL-accepting attributes.`),t.removeAttribute(n);return}t.setAttribute(n,s)},o=(e,t,n,r)=>{if(!e)return()=>{};let i=n;return e.addEventListener(t,i,r),()=>e.removeEventListener(t,i,r)},s=e=>e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),c=e=>Array.isArray(e)||typeof e==`object`&&!!e;export{c as isStructuredValue,o as listen,n as removeNodes,t as runAll,a as setAttr,s as toKebab};\n//# sourceMappingURL=dom.js.map"],"mappings":";;AAAkC,IAAI,KAAE,MAAG;CAAC,KAAI,IAAI,IAAE,EAAE,SAAO,GAAE,KAAG,GAAE,KAAI,EAAE,EAAE,CAAC;AAAC,GAAE,KAAE,MAAG;CAAC,KAAI,IAAI,KAAK,GAAE,EAAE,OAAO;AAAC,GAAE,oBAAE,IAAI,IAAI;CAAC;CAAS;CAAO;CAAW;CAAO;CAAa;CAAO;CAAW;CAAO;CAAS;CAAM;AAAY,CAAC,GAAE,IAAE,uGAAsG,KAAG,GAAE,GAAE,MAAI;CAAC,IAAI,IAAE,EAAE,YAAY;CAAE,IAAG,YAAY,KAAK,CAAC,GAAE;EAAC,EAAE,yBAAyB,EAAE,oEAAoE,EAAE,MAAM,CAAC,EAAE,yBAAyB,GAAE,EAAE,gBAAgB,CAAC;EAAE;CAAM;CAAC,IAAG,MAAI,UAAS;EAAC,EAAE,qMAAiM,GAAE,EAAE,gBAAgB,CAAC;EAAE;CAAM;CAAC,IAAG,KAAG,QAAM,MAAI,CAAC,GAAE;EAAC,EAAE,gBAAgB,CAAC;EAAE;CAAM;CAAC,IAAI,IAAE,MAAI,CAAC,IAAE,SAAO,OAAO,CAAC;CAAE,IAAG,EAAE,IAAI,CAAC,KAAG,EAAE,KAAK,CAAC,GAAE;EAAC,EAAE,8CAA8C,EAAE,6DAA6D,GAAE,EAAE,gBAAgB,CAAC;EAAE;CAAM;CAAC,EAAE,aAAa,GAAE,CAAC;AAAC,
|
|
1
|
+
{"version":3,"file":"dom.js","names":[],"sources":["../../../../../ore/dist/utils/dom.js"],"sourcesContent":["import{warn as e}from\"../_dev.js\";var t=e=>{for(let t=e.length-1;t>=0;t--)e[t]()},n=e=>{for(let t of e)t.remove()},r=new Set([`action`,`cite`,`codebase`,`data`,`formaction`,`href`,`manifest`,`ping`,`poster`,`src`,`xlink:href`]),i=/^\\s*(?:(?:javascript|vbscript|blob):|data:(?:[^,]*\\/(?:html|svg\\+xml)|application\\/(?:xhtml|xml)))/i,a=(t,n,a)=>{let o=n.toLowerCase();if(/^on[a-z]/i.test(n)){e(`Blocked setAttribute(\"${n}\", ...) — inline event handler attributes are not supported. Use @${n.slice(2)} binding syntax instead.`),t.removeAttribute(n);return}if(o===`srcdoc`){e(`Blocked setAttribute(\"srcdoc\", ...) — \"srcdoc\" holds raw HTML, not a URL, and is not supported via attribute binding. Use raw() with a registered sanitizer if you need to inject trusted HTML.`),t.removeAttribute(n);return}if(a==null||a===!1){t.removeAttribute(n);return}let s=a===!0?`true`:String(a);if(r.has(o)&&i.test(s)){e(`Blocked dangerous URL scheme in attribute \"${n}\". Only safe URLs are permitted in URL-accepting attributes.`),t.removeAttribute(n);return}t.setAttribute(n,s)},o=(e,t,n,r)=>{if(!e)return()=>{};let i=n;return e.addEventListener(t,i,r),()=>e.removeEventListener(t,i,r)},s=e=>e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),c=e=>Array.isArray(e)||typeof e==`object`&&!!e;export{c as isStructuredValue,o as listen,n as removeNodes,t as runAll,a as setAttr,s as toKebab};\n//# sourceMappingURL=dom.js.map"],"mappings":";;AAAkC,IAAI,KAAE,MAAG;CAAC,KAAI,IAAI,IAAE,EAAE,SAAO,GAAE,KAAG,GAAE,KAAI,EAAE,EAAE,CAAC;AAAC,GAAE,KAAE,MAAG;CAAC,KAAI,IAAI,KAAK,GAAE,EAAE,OAAO;AAAC,GAAE,oBAAE,IAAI,IAAI;CAAC;CAAS;CAAO;CAAW;CAAO;CAAa;CAAO;CAAW;CAAO;CAAS;CAAM;AAAY,CAAC,GAAE,IAAE,uGAAsG,KAAG,GAAE,GAAE,MAAI;CAAC,IAAI,IAAE,EAAE,YAAY;CAAE,IAAG,YAAY,KAAK,CAAC,GAAE;EAAC,EAAE,yBAAyB,EAAE,oEAAoE,EAAE,MAAM,CAAC,EAAE,yBAAyB,GAAE,EAAE,gBAAgB,CAAC;EAAE;CAAM;CAAC,IAAG,MAAI,UAAS;EAAC,EAAE,qMAAiM,GAAE,EAAE,gBAAgB,CAAC;EAAE;CAAM;CAAC,IAAG,KAAG,QAAM,MAAI,CAAC,GAAE;EAAC,EAAE,gBAAgB,CAAC;EAAE;CAAM;CAAC,IAAI,IAAE,MAAI,CAAC,IAAE,SAAO,OAAO,CAAC;CAAE,IAAG,EAAE,IAAI,CAAC,KAAG,EAAE,KAAK,CAAC,GAAE;EAAC,EAAE,8CAA8C,EAAE,6DAA6D,GAAE,EAAE,gBAAgB,CAAC;EAAE;CAAM;CAAC,EAAE,aAAa,GAAE,CAAC;AAAC,GAA8G,KAAE,MAAG,EAAE,QAAQ,WAAS,MAAG,IAAI,EAAE,YAAY,GAAG,GAAE,KAAE,MAAG,MAAM,QAAQ,CAAC,KAAG,OAAO,KAAG,YAAU,CAAC,CAAC"}
|
package/dist/otp-input.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/shape.css.cjs"),t=require("./styles/mixins/theme.css.cjs"),n=require("./shared/prop-bundles.cjs"),r=require("./headless/nav.cjs"),i=require("./inputs/shared/form-context.cjs"),
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/shape.css.cjs"),t=require("./styles/mixins/theme.css.cjs"),n=require("./shared/prop-bundles.cjs"),r=require("./headless/nav.cjs"),i=require("./ore/dist/forms/field.cjs");require("./ore/dist/forms.cjs");const a=require("./inputs/shared/form-context.cjs"),o=require("./inputs/otp-input/otp-input.css.cjs");let s=require("@vielzeug/ore"),c=require("@vielzeug/ripple");var l=`ore-otp-input`;(0,s.define)(l,{formAssociated:!0,props:{...n.themableBundle,...n.sizableBundle,...n.disablableBundle,label:s.prop.string(`One-time password`),length:s.prop.number(6),masked:s.prop.bool(!1),name:s.prop.string(),separator:s.prop.string(),type:s.prop.oneOf([`numeric`,`alphanumeric`],`numeric`),value:s.prop.string(),variant:s.prop.string()},setup(e){let t=(0,s.getHost)(),n=(0,s.useEmit)(),o=a.useFormContext(e,(0,s.inject)(a.FORM_CTX)),l=(0,c.computed)(()=>Number(e.length.value)||6),u=o.disabled,d=(0,c.computed)(()=>Array.from({length:l.value},(e,t)=>t)),f=(0,c.signal)(String(e.value.value||``)),p=()=>String(e.value.value||``);i.useField({disabled:u,toFormValue:e=>e,value:f}),(0,s.bind)({attr:{size:o.size,value:()=>f.value||null,variant:o.variant}});function m(){return[...t.shadowRoot?.querySelectorAll(`input.cell`)??[]]}let h=r.createListControl({getItems:()=>m(),keys:{next:[`ArrowRight`],prev:[`ArrowLeft`]},loop:!1,onNavigate:(e,t)=>{m()[t]?.focus()}});function g(){return m().map(e=>e.value).join(``)}function _(e){let t=m(),n=String(e||``).slice(0,t.length);for(let e of t)e.value=``;n.split(``).forEach((e,n)=>{t[n]&&(t[n].value=e)}),f.value=g()}function v(e,t){let r=m(),i=g(),a=t??(i.length===r.length&&i.split(``).every(Boolean));f.value=i,n(`change`,{complete:a,originalEvent:e,value:i}),a&&n(`complete`,{originalEvent:e,value:i})}function y(t){return e.type.value===`numeric`?/^\d$/.test(t):/^[a-z\d]$/i.test(t)}function b(e,t){let n=e.target,r=n.value;if(r.length>1&&(r=r.slice(-1)),r&&!y(r)){n.value=``;return}n.value=r;let i=m();v(e),r&&t<i.length-1&&(i[t+1].focus(),i[t+1].select())}function x(e,t){let n=e.target,r=m();if(h.set(t),e.key===`Backspace`){if(n.value)n.value=``;else if(t>0){let e=r[h.navigate(`prev`)];e&&(e.select(),e.value=``)}v(e,!1),e.preventDefault()}else h.handleKeydown(e)}function S(e){e.preventDefault();let t=(e.clipboardData?.getData(`text`)??``).split(``).filter(e=>y(e)).slice(0,l.value),n=m();t.forEach((e,t)=>{n[t]&&(n[t].value=e)}),v(e),n[Math.min(t.length,n.length-1)]?.focus()}(0,c.watch)(e.value,e=>{_(String(e||``))}),(0,c.watch)(e.length,()=>{requestAnimationFrame(()=>_(p()))});let C=(0,c.computed)(()=>{let t=Number(e.length.value)||6;return e.separator.value==null?-1:Math.floor(t/2)});return(0,s.onMounted)(()=>{_(p())}),s.html`
|
|
2
2
|
<div class="otp-group" part="group" role="group" :aria-label="${e.label}">
|
|
3
|
-
${()=>
|
|
4
|
-
${()=>
|
|
3
|
+
${()=>d.value.map(t=>s.html`
|
|
4
|
+
${()=>C.value>0&&t===C.value?s.html`<span class="separator" aria-hidden="true">${()=>e.separator.value||`-`}</span>`:``}
|
|
5
5
|
<input
|
|
6
6
|
class="cell"
|
|
7
7
|
part="cell"
|
|
@@ -9,13 +9,13 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
|
|
|
9
9
|
:inputmode="${()=>e.type.value===`numeric`?`numeric`:`text`}"
|
|
10
10
|
maxlength="1"
|
|
11
11
|
:autocomplete="${()=>t===0?`one-time-code`:`off`}"
|
|
12
|
-
:aria-label="${()=>`Digit ${t+1} of ${
|
|
13
|
-
:disabled="${()=>
|
|
14
|
-
@input="${e=>
|
|
15
|
-
@keydown="${e=>
|
|
16
|
-
@paste="${e=>t===0?
|
|
12
|
+
:aria-label="${()=>`Digit ${t+1} of ${l.value}`}"
|
|
13
|
+
:disabled="${()=>u.value?!0:null}"
|
|
14
|
+
@input="${e=>b(e,t)}"
|
|
15
|
+
@keydown="${e=>x(e,t)}"
|
|
16
|
+
@paste="${e=>t===0?S(e):e.preventDefault()}"
|
|
17
17
|
@focus="${e=>e.target.select()}" />
|
|
18
18
|
`)}
|
|
19
19
|
</div>
|
|
20
|
-
`},styles:[t.colorThemeMixin,e.sizeVariantMixin({}),t.forcedColorsFocusMixin(`.cell`),
|
|
20
|
+
`},styles:[t.colorThemeMixin,e.sizeVariantMixin({}),t.forcedColorsFocusMixin(`.cell`),o.default]}),exports.OTP_INPUT_TAG=l;
|
|
21
21
|
//# sourceMappingURL=otp-input.cjs.map
|
package/dist/otp-input.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otp-input.cjs","names":[],"sources":["../src/inputs/otp-input/otp-input.ts"],"sourcesContent":["import { define, useField, html, inject, prop } from '@vielzeug/ore';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor, VisualVariant } from '../../types';\n\nimport { createListControl } from '../../headless';\nimport { disablableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, forcedColorsFocusMixin, sizeVariantMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport styles from './otp-input.css?inline';\n\nexport type OreOtpInputEvents = {\n change: { complete: boolean; originalEvent?: Event; value: string };\n complete: { originalEvent?: Event; value: string };\n};\n\n/** OTP Input props */\nexport type OreOtpInputProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Make inputs disabled */\n disabled?: boolean;\n /** Accessible label */\n label?: string;\n /** Number of input cells */\n length?: number;\n /** Mask input (show dots instead of characters) */\n masked?: boolean;\n /** Form field name */\n name?: string;\n /** Show a separator in the middle (e.g. \"–\") */\n separator?: string;\n /** Component size */\n size?: ComponentSize;\n /** Input type: 'numeric' (digits only) or 'alphanumeric' */\n type?: 'numeric' | 'alphanumeric';\n /** Current value */\n value?: string;\n /** Visual variant */\n variant?: Exclude<VisualVariant, 'text' | 'frost'>;\n};\n\n/**\n * A segmented OTP (One-Time Password) input with N individual cells.\n * Auto-advances focus on input, auto-backs on Backspace, handles paste.\n *\n * @element ore-otp-input\n *\n * @attr {number} length - Number of cells (default: 6)\n * @attr {string} type - 'numeric' (default) | 'alphanumeric'\n * @attr {string} value - Current code value\n * @attr {boolean} disabled - Disable all cells\n * @attr {boolean} masked - Show as password\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} name - Form field name\n * @attr {string} label - Group aria-label\n * @attr {string} separator - Optional separator character shown in the middle\n *\n * @fires change - Emitted whenever a cell changes. detail: { value: string, complete: boolean, originalEvent?: Event }\n * @fires complete - Emitted when all cells are filled. detail: { value: string, originalEvent?: Event }\n *\n * @slot label - Custom label above the OTP input\n * @slot helper - Custom helper text below the OTP input\n * @slot error - Custom error content below the OTP input\n *\n * @cssprop --otp-cell-size - Width and height of each cell\n * @cssprop --otp-cell-gap - Gap between cells\n * @cssprop --otp-cell-font-size - Font size inside cells\n * @cssprop --otp-cell-radius - Border radius of cells\n * @cssprop --otp-cell-bg - Cell background color\n * @cssprop --otp-cell-border-color - Default border color\n * @cssprop --otp-cell-focus-border - Focused border/caret color\n * @cssprop --otp-cell-hover-bg - Cell background on hover (flat/ghost variants)\n * @cssprop --otp-cell-hover-border-color - Cell border on hover (flat/bordered variants)\n * @cssprop --otp-cell-focus-bg - Cell background when focused (flat variant)\n * @cssprop --otp-cell-focus-border-color - Cell border when focused (flat variant)\n *\n * @part group - Group container.\n * @part cell - Shadow part for the `cell` element.\n * @example\n * ```html\n * <ore-otp-input length=\"6\" color=\"primary\"></ore-otp-input>\n * ```\n */\nexport const OTP_INPUT_TAG = 'ore-otp-input' as const;\ndefine<OreOtpInputProps, OreOtpInputEvents>(OTP_INPUT_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n label: prop.string('One-time password'),\n length: prop.number(6),\n masked: prop.bool(false),\n name: prop.string(),\n separator: prop.string(),\n type: prop.oneOf(['numeric', 'alphanumeric'] as const, 'numeric'),\n value: prop.string(),\n variant: prop.string<Exclude<VisualVariant, 'text' | 'frost'>>(),\n },\n setup(props, { bind, el, emit, onMounted }) {\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(bind, props, formCtx);\n const lengthValue = computed(() => Number(props.length.value) || 6);\n const isDisabled = fCtxProps.disabled;\n const cells = computed(() => Array.from({ length: lengthValue.value }, (_, i) => i));\n const otpValue = signal(String(props.value.value || ''));\n const normalizedPropValue = () => String(props.value.value || '');\n\n // Form association: the joined cell value is the single form value for `name`,\n // since individual per-cell <input> elements inside the shadow root cannot\n // participate in an ancestor <form>'s submission on their own.\n useField<string>({ disabled: isDisabled, toFormValue: (v) => v, value: otpValue });\n\n bind({\n attr: {\n size: fCtxProps.size,\n value: () => otpValue.value || null,\n variant: fCtxProps.variant,\n },\n });\n\n function getInputs(): HTMLInputElement[] {\n return [...(el.shadowRoot?.querySelectorAll<HTMLInputElement>('input.cell') ?? [])];\n }\n\n const listControl = createListControl({\n getItems: () => getInputs(),\n keys: { next: ['ArrowRight'], prev: ['ArrowLeft'] },\n loop: false,\n onNavigate: (_action, index) => {\n const inputs = getInputs();\n\n inputs[index]?.focus();\n },\n });\n\n function getValue(): string {\n return getInputs()\n .map((i) => i.value)\n .join('');\n }\n function syncInputsFromValue(raw: string) {\n const allInputs = getInputs();\n const normalized = String(raw || '').slice(0, allInputs.length);\n\n for (const input of allInputs) input.value = '';\n\n normalized.split('').forEach((c, i) => {\n if (allInputs[i]) allInputs[i].value = c;\n });\n\n otpValue.value = getValue();\n }\n function emitOtpState(originalEvent?: Event, forceComplete?: boolean): void {\n const allInputs = getInputs();\n const full = getValue();\n const complete = forceComplete ?? (full.length === allInputs.length && full.split('').every(Boolean));\n\n otpValue.value = full;\n emit('change', { complete, originalEvent, value: full });\n\n if (complete) emit('complete', { originalEvent, value: full });\n }\n function isAllowed(char: string): boolean {\n if (props.type.value === 'numeric') return /^\\d$/.test(char);\n\n return /^[a-z\\d]$/i.test(char);\n }\n function handleInput(e: Event, index: number) {\n const input = e.target as HTMLInputElement;\n let val = input.value;\n\n // Keep only last character if multiple were typed somehow\n if (val.length > 1) val = val.slice(-1);\n\n // Validate character\n if (val && !isAllowed(val)) {\n input.value = '';\n\n return;\n }\n\n input.value = val;\n\n const allInputs = getInputs();\n\n emitOtpState(e);\n\n // Auto-advance\n if (val && index < allInputs.length - 1) {\n allInputs[index + 1].focus();\n allInputs[index + 1].select();\n }\n }\n function handleKeydown(e: KeyboardEvent, index: number) {\n const input = e.target as HTMLInputElement;\n const allInputs = getInputs();\n\n listControl.set(index);\n\n if (e.key === 'Backspace') {\n if (input.value) {\n input.value = '';\n } else if (index > 0) {\n const prevIndex = listControl.navigate('prev');\n const prevInput = allInputs[prevIndex];\n\n if (prevInput) {\n prevInput.select();\n prevInput.value = '';\n }\n }\n\n emitOtpState(e, false);\n e.preventDefault();\n } else {\n listControl.handleKeydown(e);\n }\n }\n function handlePaste(e: ClipboardEvent) {\n e.preventDefault();\n\n const pasted = e.clipboardData?.getData('text') ?? '';\n const chars = pasted\n .split('')\n .filter((c) => isAllowed(c))\n .slice(0, lengthValue.value);\n const allInputs = getInputs();\n\n chars.forEach((char, i) => {\n if (allInputs[i]) allInputs[i].value = char;\n });\n\n emitOtpState(e);\n\n // Focus the cell after last pasted char\n const focusIdx = Math.min(chars.length, allInputs.length - 1);\n\n allInputs[focusIdx]?.focus();\n }\n\n watch(props.value, (value) => {\n syncInputsFromValue(String(value || ''));\n });\n\n watch(props.length, () => {\n // Cells re-render when length changes; sync after DOM updates.\n requestAnimationFrame(() => syncInputsFromValue(normalizedPropValue()));\n });\n\n const separatorIdx = computed(() => {\n const len = Number(props.length.value) || 6;\n\n return props.separator.value != null ? Math.floor(len / 2) : -1;\n });\n\n onMounted(() => {\n // Populate cells from value prop on mount\n syncInputsFromValue(normalizedPropValue());\n });\n\n return html`\n <div class=\"otp-group\" part=\"group\" role=\"group\" :aria-label=\"${props.label}\">\n ${() =>\n cells.value.map(\n (i) => html`\n ${() =>\n separatorIdx.value > 0 && i === separatorIdx.value\n ? html`<span class=\"separator\" aria-hidden=\"true\">${() => props.separator.value || '-'}</span>`\n : ''}\n <input\n class=\"cell\"\n part=\"cell\"\n :type=\"${() => (props.masked.value ? 'password' : 'text')}\"\n :inputmode=\"${() => (props.type.value === 'numeric' ? 'numeric' : 'text')}\"\n maxlength=\"1\"\n :autocomplete=\"${() => (i === 0 ? 'one-time-code' : 'off')}\"\n :aria-label=\"${() => `Digit ${i + 1} of ${lengthValue.value}`}\"\n :disabled=\"${() => (isDisabled.value ? true : null)}\"\n @input=\"${(e: Event) => handleInput(e, i)}\"\n @keydown=\"${(e: KeyboardEvent) => handleKeydown(e, i)}\"\n @paste=\"${(e: ClipboardEvent) => (i === 0 ? handlePaste(e) : e.preventDefault())}\"\n @focus=\"${(e: FocusEvent) => (e.target as HTMLInputElement).select()}\" />\n `,\n )}\n </div>\n `;\n },\n styles: [colorThemeMixin, sizeVariantMixin({}), forcedColorsFocusMixin('.cell'), styles],\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"otp-input.cjs","names":[],"sources":["../src/inputs/otp-input/otp-input.ts"],"sourcesContent":["import { define, html, inject, prop, bind, getHost, onMounted, useEmit } from '@vielzeug/ore';\nimport { useField } from '@vielzeug/ore/forms';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor, VisualVariant } from '../../types';\n\nimport { createListControl } from '../../headless';\nimport { disablableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, forcedColorsFocusMixin, sizeVariantMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport styles from './otp-input.css?inline';\n\nexport type OreOtpInputEvents = {\n change: { complete: boolean; originalEvent?: Event; value: string };\n complete: { originalEvent?: Event; value: string };\n};\n\n/** OTP Input props */\nexport type OreOtpInputProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Make inputs disabled */\n disabled?: boolean;\n /** Accessible label */\n label?: string;\n /** Number of input cells */\n length?: number;\n /** Mask input (show dots instead of characters) */\n masked?: boolean;\n /** Form field name */\n name?: string;\n /** Show a separator in the middle (e.g. \"–\") */\n separator?: string;\n /** Component size */\n size?: ComponentSize;\n /** Input type: 'numeric' (digits only) or 'alphanumeric' */\n type?: 'numeric' | 'alphanumeric';\n /** Current value */\n value?: string;\n /** Visual variant */\n variant?: Exclude<VisualVariant, 'text' | 'frost'>;\n};\n\n/**\n * A segmented OTP (One-Time Password) input with N individual cells.\n * Auto-advances focus on input, auto-backs on Backspace, handles paste.\n *\n * @element ore-otp-input\n *\n * @attr {number} length - Number of cells (default: 6)\n * @attr {string} type - 'numeric' (default) | 'alphanumeric'\n * @attr {string} value - Current code value\n * @attr {boolean} disabled - Disable all cells\n * @attr {boolean} masked - Show as password\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} name - Form field name\n * @attr {string} label - Group aria-label\n * @attr {string} separator - Optional separator character shown in the middle\n *\n * @fires change - Emitted whenever a cell changes. detail: { value: string, complete: boolean, originalEvent?: Event }\n * @fires complete - Emitted when all cells are filled. detail: { value: string, originalEvent?: Event }\n *\n * @slot label - Custom label above the OTP input\n * @slot helper - Custom helper text below the OTP input\n * @slot error - Custom error content below the OTP input\n *\n * @cssprop --otp-cell-size - Width and height of each cell\n * @cssprop --otp-cell-gap - Gap between cells\n * @cssprop --otp-cell-font-size - Font size inside cells\n * @cssprop --otp-cell-radius - Border radius of cells\n * @cssprop --otp-cell-bg - Cell background color\n * @cssprop --otp-cell-border-color - Default border color\n * @cssprop --otp-cell-focus-border - Focused border/caret color\n * @cssprop --otp-cell-hover-bg - Cell background on hover (flat/ghost variants)\n * @cssprop --otp-cell-hover-border-color - Cell border on hover (flat/bordered variants)\n * @cssprop --otp-cell-focus-bg - Cell background when focused (flat variant)\n * @cssprop --otp-cell-focus-border-color - Cell border when focused (flat variant)\n *\n * @part group - Group container.\n * @part cell - Shadow part for the `cell` element.\n * @example\n * ```html\n * <ore-otp-input length=\"6\" color=\"primary\"></ore-otp-input>\n * ```\n */\nexport const OTP_INPUT_TAG = 'ore-otp-input' as const;\ndefine<OreOtpInputProps>(OTP_INPUT_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n label: prop.string('One-time password'),\n length: prop.number(6),\n masked: prop.bool(false),\n name: prop.string(),\n separator: prop.string(),\n type: prop.oneOf(['numeric', 'alphanumeric'] as const, 'numeric'),\n value: prop.string(),\n variant: prop.string<Exclude<VisualVariant, 'text' | 'frost'>>(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreOtpInputEvents>();\n\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(props, formCtx);\n const lengthValue = computed(() => Number(props.length.value) || 6);\n const isDisabled = fCtxProps.disabled;\n const cells = computed(() => Array.from({ length: lengthValue.value }, (_, i) => i));\n const otpValue = signal(String(props.value.value || ''));\n const normalizedPropValue = () => String(props.value.value || '');\n\n // Form association: the joined cell value is the single form value for `name`,\n // since individual per-cell <input> elements inside the shadow root cannot\n // participate in an ancestor <form>'s submission on their own.\n useField<string>({ disabled: isDisabled, toFormValue: (v) => v, value: otpValue });\n\n bind({\n attr: {\n size: fCtxProps.size,\n value: () => otpValue.value || null,\n variant: fCtxProps.variant,\n },\n });\n\n function getInputs(): HTMLInputElement[] {\n return [...(el.shadowRoot?.querySelectorAll<HTMLInputElement>('input.cell') ?? [])];\n }\n\n const listControl = createListControl({\n getItems: () => getInputs(),\n keys: { next: ['ArrowRight'], prev: ['ArrowLeft'] },\n loop: false,\n onNavigate: (_action, index) => {\n const inputs = getInputs();\n\n inputs[index]?.focus();\n },\n });\n\n function getValue(): string {\n return getInputs()\n .map((i) => i.value)\n .join('');\n }\n function syncInputsFromValue(raw: string) {\n const allInputs = getInputs();\n const normalized = String(raw || '').slice(0, allInputs.length);\n\n for (const input of allInputs) input.value = '';\n\n normalized.split('').forEach((c, i) => {\n if (allInputs[i]) allInputs[i].value = c;\n });\n\n otpValue.value = getValue();\n }\n function emitOtpState(originalEvent?: Event, forceComplete?: boolean): void {\n const allInputs = getInputs();\n const full = getValue();\n const complete = forceComplete ?? (full.length === allInputs.length && full.split('').every(Boolean));\n\n otpValue.value = full;\n emit('change', { complete, originalEvent, value: full });\n\n if (complete) emit('complete', { originalEvent, value: full });\n }\n function isAllowed(char: string): boolean {\n if (props.type.value === 'numeric') return /^\\d$/.test(char);\n\n return /^[a-z\\d]$/i.test(char);\n }\n function handleInput(e: Event, index: number) {\n const input = e.target as HTMLInputElement;\n let val = input.value;\n\n // Keep only last character if multiple were typed somehow\n if (val.length > 1) val = val.slice(-1);\n\n // Validate character\n if (val && !isAllowed(val)) {\n input.value = '';\n\n return;\n }\n\n input.value = val;\n\n const allInputs = getInputs();\n\n emitOtpState(e);\n\n // Auto-advance\n if (val && index < allInputs.length - 1) {\n allInputs[index + 1].focus();\n allInputs[index + 1].select();\n }\n }\n function handleKeydown(e: KeyboardEvent, index: number) {\n const input = e.target as HTMLInputElement;\n const allInputs = getInputs();\n\n listControl.set(index);\n\n if (e.key === 'Backspace') {\n if (input.value) {\n input.value = '';\n } else if (index > 0) {\n const prevIndex = listControl.navigate('prev');\n const prevInput = allInputs[prevIndex];\n\n if (prevInput) {\n prevInput.select();\n prevInput.value = '';\n }\n }\n\n emitOtpState(e, false);\n e.preventDefault();\n } else {\n listControl.handleKeydown(e);\n }\n }\n function handlePaste(e: ClipboardEvent) {\n e.preventDefault();\n\n const pasted = e.clipboardData?.getData('text') ?? '';\n const chars = pasted\n .split('')\n .filter((c) => isAllowed(c))\n .slice(0, lengthValue.value);\n const allInputs = getInputs();\n\n chars.forEach((char, i) => {\n if (allInputs[i]) allInputs[i].value = char;\n });\n\n emitOtpState(e);\n\n // Focus the cell after last pasted char\n const focusIdx = Math.min(chars.length, allInputs.length - 1);\n\n allInputs[focusIdx]?.focus();\n }\n\n watch(props.value, (value) => {\n syncInputsFromValue(String(value || ''));\n });\n\n watch(props.length, () => {\n // Cells re-render when length changes; sync after DOM updates.\n requestAnimationFrame(() => syncInputsFromValue(normalizedPropValue()));\n });\n\n const separatorIdx = computed(() => {\n const len = Number(props.length.value) || 6;\n\n return props.separator.value != null ? Math.floor(len / 2) : -1;\n });\n\n onMounted(() => {\n // Populate cells from value prop on mount\n syncInputsFromValue(normalizedPropValue());\n });\n\n return html`\n <div class=\"otp-group\" part=\"group\" role=\"group\" :aria-label=\"${props.label}\">\n ${() =>\n cells.value.map(\n (i) => html`\n ${() =>\n separatorIdx.value > 0 && i === separatorIdx.value\n ? html`<span class=\"separator\" aria-hidden=\"true\">${() => props.separator.value || '-'}</span>`\n : ''}\n <input\n class=\"cell\"\n part=\"cell\"\n :type=\"${() => (props.masked.value ? 'password' : 'text')}\"\n :inputmode=\"${() => (props.type.value === 'numeric' ? 'numeric' : 'text')}\"\n maxlength=\"1\"\n :autocomplete=\"${() => (i === 0 ? 'one-time-code' : 'off')}\"\n :aria-label=\"${() => `Digit ${i + 1} of ${lengthValue.value}`}\"\n :disabled=\"${() => (isDisabled.value ? true : null)}\"\n @input=\"${(e: Event) => handleInput(e, i)}\"\n @keydown=\"${(e: KeyboardEvent) => handleKeydown(e, i)}\"\n @paste=\"${(e: ClipboardEvent) => (i === 0 ? handlePaste(e) : e.preventDefault())}\"\n @focus=\"${(e: FocusEvent) => (e.target as HTMLInputElement).select()}\" />\n `,\n )}\n </div>\n `;\n },\n styles: [colorThemeMixin, sizeVariantMixin({}), forcedColorsFocusMixin('.cell'), styles],\n});\n"],"mappings":"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"}
|
package/dist/otp-input.js
CHANGED
|
@@ -2,119 +2,121 @@ import { sizeVariantMixin as e } from "./styles/mixins/shape.css.js";
|
|
|
2
2
|
import { colorThemeMixin as t, forcedColorsFocusMixin as n } from "./styles/mixins/theme.css.js";
|
|
3
3
|
import { disablableBundle as r, sizableBundle as i, themableBundle as a } from "./shared/prop-bundles.js";
|
|
4
4
|
import { createListControl as o } from "./headless/nav.js";
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
5
|
+
import { useField as s } from "./ore/dist/forms/field.js";
|
|
6
|
+
import "./ore/dist/forms.js";
|
|
7
|
+
import { FORM_CTX as c, useFormContext as l } from "./inputs/shared/form-context.js";
|
|
8
|
+
import u from "./inputs/otp-input/otp-input.css.js";
|
|
9
|
+
import { bind as d, define as f, getHost as p, html as m, inject as h, onMounted as g, prop as _, useEmit as v } from "@vielzeug/ore";
|
|
10
|
+
import { computed as y, signal as b, watch as x } from "@vielzeug/ripple";
|
|
9
11
|
//#region src/inputs/otp-input/otp-input.ts
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
+
var S = "ore-otp-input";
|
|
13
|
+
f(S, {
|
|
12
14
|
formAssociated: !0,
|
|
13
15
|
props: {
|
|
14
16
|
...a,
|
|
15
17
|
...i,
|
|
16
18
|
...r,
|
|
17
|
-
label:
|
|
18
|
-
length:
|
|
19
|
-
masked:
|
|
20
|
-
name:
|
|
21
|
-
separator:
|
|
22
|
-
type:
|
|
23
|
-
value:
|
|
24
|
-
variant:
|
|
19
|
+
label: _.string("One-time password"),
|
|
20
|
+
length: _.number(6),
|
|
21
|
+
masked: _.bool(!1),
|
|
22
|
+
name: _.string(),
|
|
23
|
+
separator: _.string(),
|
|
24
|
+
type: _.oneOf(["numeric", "alphanumeric"], "numeric"),
|
|
25
|
+
value: _.string(),
|
|
26
|
+
variant: _.string()
|
|
25
27
|
},
|
|
26
|
-
setup(e
|
|
27
|
-
let
|
|
28
|
-
|
|
29
|
-
disabled:
|
|
28
|
+
setup(e) {
|
|
29
|
+
let t = p(), n = v(), r = l(e, h(c)), i = y(() => Number(e.length.value) || 6), a = r.disabled, u = y(() => Array.from({ length: i.value }, (e, t) => t)), f = b(String(e.value.value || "")), _ = () => String(e.value.value || "");
|
|
30
|
+
s({
|
|
31
|
+
disabled: a,
|
|
30
32
|
toFormValue: (e) => e,
|
|
31
|
-
value:
|
|
32
|
-
}),
|
|
33
|
-
size:
|
|
34
|
-
value: () =>
|
|
35
|
-
variant:
|
|
33
|
+
value: f
|
|
34
|
+
}), d({ attr: {
|
|
35
|
+
size: r.size,
|
|
36
|
+
value: () => f.value || null,
|
|
37
|
+
variant: r.variant
|
|
36
38
|
} });
|
|
37
|
-
function
|
|
38
|
-
return [...
|
|
39
|
+
function S() {
|
|
40
|
+
return [...t.shadowRoot?.querySelectorAll("input.cell") ?? []];
|
|
39
41
|
}
|
|
40
|
-
let
|
|
41
|
-
getItems: () =>
|
|
42
|
+
let C = o({
|
|
43
|
+
getItems: () => S(),
|
|
42
44
|
keys: {
|
|
43
45
|
next: ["ArrowRight"],
|
|
44
46
|
prev: ["ArrowLeft"]
|
|
45
47
|
},
|
|
46
48
|
loop: !1,
|
|
47
49
|
onNavigate: (e, t) => {
|
|
48
|
-
|
|
50
|
+
S()[t]?.focus();
|
|
49
51
|
}
|
|
50
52
|
});
|
|
51
|
-
function
|
|
52
|
-
return
|
|
53
|
+
function w() {
|
|
54
|
+
return S().map((e) => e.value).join("");
|
|
53
55
|
}
|
|
54
|
-
function
|
|
55
|
-
let t =
|
|
56
|
+
function T(e) {
|
|
57
|
+
let t = S(), n = String(e || "").slice(0, t.length);
|
|
56
58
|
for (let e of t) e.value = "";
|
|
57
59
|
n.split("").forEach((e, n) => {
|
|
58
60
|
t[n] && (t[n].value = e);
|
|
59
|
-
}),
|
|
61
|
+
}), f.value = w();
|
|
60
62
|
}
|
|
61
|
-
function
|
|
62
|
-
let
|
|
63
|
-
|
|
63
|
+
function E(e, t) {
|
|
64
|
+
let r = S(), i = w(), a = t ?? (i.length === r.length && i.split("").every(Boolean));
|
|
65
|
+
f.value = i, n("change", {
|
|
64
66
|
complete: a,
|
|
65
67
|
originalEvent: e,
|
|
66
68
|
value: i
|
|
67
|
-
}), a &&
|
|
69
|
+
}), a && n("complete", {
|
|
68
70
|
originalEvent: e,
|
|
69
71
|
value: i
|
|
70
72
|
});
|
|
71
73
|
}
|
|
72
|
-
function
|
|
74
|
+
function D(t) {
|
|
73
75
|
return e.type.value === "numeric" ? /^\d$/.test(t) : /^[a-z\d]$/i.test(t);
|
|
74
76
|
}
|
|
75
|
-
function
|
|
77
|
+
function O(e, t) {
|
|
76
78
|
let n = e.target, r = n.value;
|
|
77
|
-
if (r.length > 1 && (r = r.slice(-1)), r && !
|
|
79
|
+
if (r.length > 1 && (r = r.slice(-1)), r && !D(r)) {
|
|
78
80
|
n.value = "";
|
|
79
81
|
return;
|
|
80
82
|
}
|
|
81
83
|
n.value = r;
|
|
82
|
-
let i =
|
|
83
|
-
|
|
84
|
+
let i = S();
|
|
85
|
+
E(e), r && t < i.length - 1 && (i[t + 1].focus(), i[t + 1].select());
|
|
84
86
|
}
|
|
85
|
-
function
|
|
86
|
-
let n = e.target, r =
|
|
87
|
-
if (
|
|
87
|
+
function k(e, t) {
|
|
88
|
+
let n = e.target, r = S();
|
|
89
|
+
if (C.set(t), e.key === "Backspace") {
|
|
88
90
|
if (n.value) n.value = "";
|
|
89
91
|
else if (t > 0) {
|
|
90
|
-
let e = r[
|
|
92
|
+
let e = r[C.navigate("prev")];
|
|
91
93
|
e && (e.select(), e.value = "");
|
|
92
94
|
}
|
|
93
|
-
|
|
94
|
-
} else
|
|
95
|
+
E(e, !1), e.preventDefault();
|
|
96
|
+
} else C.handleKeydown(e);
|
|
95
97
|
}
|
|
96
|
-
function
|
|
98
|
+
function A(e) {
|
|
97
99
|
e.preventDefault();
|
|
98
|
-
let t = (e.clipboardData?.getData("text") ?? "").split("").filter((e) =>
|
|
100
|
+
let t = (e.clipboardData?.getData("text") ?? "").split("").filter((e) => D(e)).slice(0, i.value), n = S();
|
|
99
101
|
t.forEach((e, t) => {
|
|
100
102
|
n[t] && (n[t].value = e);
|
|
101
|
-
}),
|
|
103
|
+
}), E(e), n[Math.min(t.length, n.length - 1)]?.focus();
|
|
102
104
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}),
|
|
106
|
-
requestAnimationFrame(() =>
|
|
105
|
+
x(e.value, (e) => {
|
|
106
|
+
T(String(e || ""));
|
|
107
|
+
}), x(e.length, () => {
|
|
108
|
+
requestAnimationFrame(() => T(_()));
|
|
107
109
|
});
|
|
108
|
-
let
|
|
110
|
+
let j = y(() => {
|
|
109
111
|
let t = Number(e.length.value) || 6;
|
|
110
112
|
return e.separator.value == null ? -1 : Math.floor(t / 2);
|
|
111
113
|
});
|
|
112
|
-
return
|
|
113
|
-
|
|
114
|
-
}),
|
|
114
|
+
return g(() => {
|
|
115
|
+
T(_());
|
|
116
|
+
}), m`
|
|
115
117
|
<div class="otp-group" part="group" role="group" :aria-label="${e.label}">
|
|
116
|
-
${() =>
|
|
117
|
-
${() =>
|
|
118
|
+
${() => u.value.map((t) => m`
|
|
119
|
+
${() => j.value > 0 && t === j.value ? m`<span class="separator" aria-hidden="true">${() => e.separator.value || "-"}</span>` : ""}
|
|
118
120
|
<input
|
|
119
121
|
class="cell"
|
|
120
122
|
part="cell"
|
|
@@ -122,11 +124,11 @@ u(v, {
|
|
|
122
124
|
:inputmode="${() => e.type.value === "numeric" ? "numeric" : "text"}"
|
|
123
125
|
maxlength="1"
|
|
124
126
|
:autocomplete="${() => t === 0 ? "one-time-code" : "off"}"
|
|
125
|
-
:aria-label="${() => `Digit ${t + 1} of ${
|
|
126
|
-
:disabled="${() =>
|
|
127
|
-
@input="${(e) =>
|
|
128
|
-
@keydown="${(e) =>
|
|
129
|
-
@paste="${(e) => t === 0 ?
|
|
127
|
+
:aria-label="${() => `Digit ${t + 1} of ${i.value}`}"
|
|
128
|
+
:disabled="${() => a.value ? !0 : null}"
|
|
129
|
+
@input="${(e) => O(e, t)}"
|
|
130
|
+
@keydown="${(e) => k(e, t)}"
|
|
131
|
+
@paste="${(e) => t === 0 ? A(e) : e.preventDefault()}"
|
|
130
132
|
@focus="${(e) => e.target.select()}" />
|
|
131
133
|
`)}
|
|
132
134
|
</div>
|
|
@@ -136,10 +138,10 @@ u(v, {
|
|
|
136
138
|
t,
|
|
137
139
|
e({}),
|
|
138
140
|
n(".cell"),
|
|
139
|
-
|
|
141
|
+
u
|
|
140
142
|
]
|
|
141
143
|
});
|
|
142
144
|
//#endregion
|
|
143
|
-
export {
|
|
145
|
+
export { S as OTP_INPUT_TAG };
|
|
144
146
|
|
|
145
147
|
//# sourceMappingURL=otp-input.js.map
|
package/dist/otp-input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otp-input.js","names":[],"sources":["../src/inputs/otp-input/otp-input.ts"],"sourcesContent":["import { define, useField, html, inject, prop } from '@vielzeug/ore';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor, VisualVariant } from '../../types';\n\nimport { createListControl } from '../../headless';\nimport { disablableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, forcedColorsFocusMixin, sizeVariantMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport styles from './otp-input.css?inline';\n\nexport type OreOtpInputEvents = {\n change: { complete: boolean; originalEvent?: Event; value: string };\n complete: { originalEvent?: Event; value: string };\n};\n\n/** OTP Input props */\nexport type OreOtpInputProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Make inputs disabled */\n disabled?: boolean;\n /** Accessible label */\n label?: string;\n /** Number of input cells */\n length?: number;\n /** Mask input (show dots instead of characters) */\n masked?: boolean;\n /** Form field name */\n name?: string;\n /** Show a separator in the middle (e.g. \"–\") */\n separator?: string;\n /** Component size */\n size?: ComponentSize;\n /** Input type: 'numeric' (digits only) or 'alphanumeric' */\n type?: 'numeric' | 'alphanumeric';\n /** Current value */\n value?: string;\n /** Visual variant */\n variant?: Exclude<VisualVariant, 'text' | 'frost'>;\n};\n\n/**\n * A segmented OTP (One-Time Password) input with N individual cells.\n * Auto-advances focus on input, auto-backs on Backspace, handles paste.\n *\n * @element ore-otp-input\n *\n * @attr {number} length - Number of cells (default: 6)\n * @attr {string} type - 'numeric' (default) | 'alphanumeric'\n * @attr {string} value - Current code value\n * @attr {boolean} disabled - Disable all cells\n * @attr {boolean} masked - Show as password\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} name - Form field name\n * @attr {string} label - Group aria-label\n * @attr {string} separator - Optional separator character shown in the middle\n *\n * @fires change - Emitted whenever a cell changes. detail: { value: string, complete: boolean, originalEvent?: Event }\n * @fires complete - Emitted when all cells are filled. detail: { value: string, originalEvent?: Event }\n *\n * @slot label - Custom label above the OTP input\n * @slot helper - Custom helper text below the OTP input\n * @slot error - Custom error content below the OTP input\n *\n * @cssprop --otp-cell-size - Width and height of each cell\n * @cssprop --otp-cell-gap - Gap between cells\n * @cssprop --otp-cell-font-size - Font size inside cells\n * @cssprop --otp-cell-radius - Border radius of cells\n * @cssprop --otp-cell-bg - Cell background color\n * @cssprop --otp-cell-border-color - Default border color\n * @cssprop --otp-cell-focus-border - Focused border/caret color\n * @cssprop --otp-cell-hover-bg - Cell background on hover (flat/ghost variants)\n * @cssprop --otp-cell-hover-border-color - Cell border on hover (flat/bordered variants)\n * @cssprop --otp-cell-focus-bg - Cell background when focused (flat variant)\n * @cssprop --otp-cell-focus-border-color - Cell border when focused (flat variant)\n *\n * @part group - Group container.\n * @part cell - Shadow part for the `cell` element.\n * @example\n * ```html\n * <ore-otp-input length=\"6\" color=\"primary\"></ore-otp-input>\n * ```\n */\nexport const OTP_INPUT_TAG = 'ore-otp-input' as const;\ndefine<OreOtpInputProps, OreOtpInputEvents>(OTP_INPUT_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n label: prop.string('One-time password'),\n length: prop.number(6),\n masked: prop.bool(false),\n name: prop.string(),\n separator: prop.string(),\n type: prop.oneOf(['numeric', 'alphanumeric'] as const, 'numeric'),\n value: prop.string(),\n variant: prop.string<Exclude<VisualVariant, 'text' | 'frost'>>(),\n },\n setup(props, { bind, el, emit, onMounted }) {\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(bind, props, formCtx);\n const lengthValue = computed(() => Number(props.length.value) || 6);\n const isDisabled = fCtxProps.disabled;\n const cells = computed(() => Array.from({ length: lengthValue.value }, (_, i) => i));\n const otpValue = signal(String(props.value.value || ''));\n const normalizedPropValue = () => String(props.value.value || '');\n\n // Form association: the joined cell value is the single form value for `name`,\n // since individual per-cell <input> elements inside the shadow root cannot\n // participate in an ancestor <form>'s submission on their own.\n useField<string>({ disabled: isDisabled, toFormValue: (v) => v, value: otpValue });\n\n bind({\n attr: {\n size: fCtxProps.size,\n value: () => otpValue.value || null,\n variant: fCtxProps.variant,\n },\n });\n\n function getInputs(): HTMLInputElement[] {\n return [...(el.shadowRoot?.querySelectorAll<HTMLInputElement>('input.cell') ?? [])];\n }\n\n const listControl = createListControl({\n getItems: () => getInputs(),\n keys: { next: ['ArrowRight'], prev: ['ArrowLeft'] },\n loop: false,\n onNavigate: (_action, index) => {\n const inputs = getInputs();\n\n inputs[index]?.focus();\n },\n });\n\n function getValue(): string {\n return getInputs()\n .map((i) => i.value)\n .join('');\n }\n function syncInputsFromValue(raw: string) {\n const allInputs = getInputs();\n const normalized = String(raw || '').slice(0, allInputs.length);\n\n for (const input of allInputs) input.value = '';\n\n normalized.split('').forEach((c, i) => {\n if (allInputs[i]) allInputs[i].value = c;\n });\n\n otpValue.value = getValue();\n }\n function emitOtpState(originalEvent?: Event, forceComplete?: boolean): void {\n const allInputs = getInputs();\n const full = getValue();\n const complete = forceComplete ?? (full.length === allInputs.length && full.split('').every(Boolean));\n\n otpValue.value = full;\n emit('change', { complete, originalEvent, value: full });\n\n if (complete) emit('complete', { originalEvent, value: full });\n }\n function isAllowed(char: string): boolean {\n if (props.type.value === 'numeric') return /^\\d$/.test(char);\n\n return /^[a-z\\d]$/i.test(char);\n }\n function handleInput(e: Event, index: number) {\n const input = e.target as HTMLInputElement;\n let val = input.value;\n\n // Keep only last character if multiple were typed somehow\n if (val.length > 1) val = val.slice(-1);\n\n // Validate character\n if (val && !isAllowed(val)) {\n input.value = '';\n\n return;\n }\n\n input.value = val;\n\n const allInputs = getInputs();\n\n emitOtpState(e);\n\n // Auto-advance\n if (val && index < allInputs.length - 1) {\n allInputs[index + 1].focus();\n allInputs[index + 1].select();\n }\n }\n function handleKeydown(e: KeyboardEvent, index: number) {\n const input = e.target as HTMLInputElement;\n const allInputs = getInputs();\n\n listControl.set(index);\n\n if (e.key === 'Backspace') {\n if (input.value) {\n input.value = '';\n } else if (index > 0) {\n const prevIndex = listControl.navigate('prev');\n const prevInput = allInputs[prevIndex];\n\n if (prevInput) {\n prevInput.select();\n prevInput.value = '';\n }\n }\n\n emitOtpState(e, false);\n e.preventDefault();\n } else {\n listControl.handleKeydown(e);\n }\n }\n function handlePaste(e: ClipboardEvent) {\n e.preventDefault();\n\n const pasted = e.clipboardData?.getData('text') ?? '';\n const chars = pasted\n .split('')\n .filter((c) => isAllowed(c))\n .slice(0, lengthValue.value);\n const allInputs = getInputs();\n\n chars.forEach((char, i) => {\n if (allInputs[i]) allInputs[i].value = char;\n });\n\n emitOtpState(e);\n\n // Focus the cell after last pasted char\n const focusIdx = Math.min(chars.length, allInputs.length - 1);\n\n allInputs[focusIdx]?.focus();\n }\n\n watch(props.value, (value) => {\n syncInputsFromValue(String(value || ''));\n });\n\n watch(props.length, () => {\n // Cells re-render when length changes; sync after DOM updates.\n requestAnimationFrame(() => syncInputsFromValue(normalizedPropValue()));\n });\n\n const separatorIdx = computed(() => {\n const len = Number(props.length.value) || 6;\n\n return props.separator.value != null ? Math.floor(len / 2) : -1;\n });\n\n onMounted(() => {\n // Populate cells from value prop on mount\n syncInputsFromValue(normalizedPropValue());\n });\n\n return html`\n <div class=\"otp-group\" part=\"group\" role=\"group\" :aria-label=\"${props.label}\">\n ${() =>\n cells.value.map(\n (i) => html`\n ${() =>\n separatorIdx.value > 0 && i === separatorIdx.value\n ? html`<span class=\"separator\" aria-hidden=\"true\">${() => props.separator.value || '-'}</span>`\n : ''}\n <input\n class=\"cell\"\n part=\"cell\"\n :type=\"${() => (props.masked.value ? 'password' : 'text')}\"\n :inputmode=\"${() => (props.type.value === 'numeric' ? 'numeric' : 'text')}\"\n maxlength=\"1\"\n :autocomplete=\"${() => (i === 0 ? 'one-time-code' : 'off')}\"\n :aria-label=\"${() => `Digit ${i + 1} of ${lengthValue.value}`}\"\n :disabled=\"${() => (isDisabled.value ? true : null)}\"\n @input=\"${(e: Event) => handleInput(e, i)}\"\n @keydown=\"${(e: KeyboardEvent) => handleKeydown(e, i)}\"\n @paste=\"${(e: ClipboardEvent) => (i === 0 ? handlePaste(e) : e.preventDefault())}\"\n @focus=\"${(e: FocusEvent) => (e.target as HTMLInputElement).select()}\" />\n `,\n )}\n </div>\n `;\n },\n styles: [colorThemeMixin, sizeVariantMixin({}), forcedColorsFocusMixin('.cell'), styles],\n});\n"],"mappings":";;;;;;;;;AAqFA,IAAa,IAAgB;AAC7B,EAA4C,GAAe;CACzD,gBAAgB;CAChB,OAAO;EACL,GAAG;EACH,GAAG;EACH,GAAG;EACH,OAAO,EAAK,OAAO,mBAAmB;EACtC,QAAQ,EAAK,OAAO,CAAC;EACrB,QAAQ,EAAK,KAAK,EAAK;EACvB,MAAM,EAAK,OAAO;EAClB,WAAW,EAAK,OAAO;EACvB,MAAM,EAAK,MAAM,CAAC,WAAW,cAAc,GAAY,SAAS;EAChE,OAAO,EAAK,OAAO;EACnB,SAAS,EAAK,OAAiD;CACjE;CACA,MAAM,GAAO,EAAE,SAAM,OAAI,SAAM,gBAAa;EAE1C,IAAM,IAAY,EAAe,GAAM,GADvB,EAAO,CACuB,CAAO,GAC/C,IAAc,QAAe,OAAO,EAAM,OAAO,KAAK,KAAK,CAAC,GAC5D,IAAa,EAAU,UACvB,IAAQ,QAAe,MAAM,KAAK,EAAE,QAAQ,EAAY,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAC7E,IAAW,EAAO,OAAO,EAAM,MAAM,SAAS,EAAE,CAAC,GACjD,UAA4B,OAAO,EAAM,MAAM,SAAS,EAAE;EAOhE,AAFA,EAAiB;GAAE,UAAU;GAAY,cAAc,MAAM;GAAG,OAAO;EAAS,CAAC,GAEjF,EAAK,EACH,MAAM;GACJ,MAAM,EAAU;GAChB,aAAa,EAAS,SAAS;GAC/B,SAAS,EAAU;EACrB,EACF,CAAC;EAED,SAAS,IAAgC;GACvC,OAAO,CAAC,GAAI,EAAG,YAAY,iBAAmC,YAAY,KAAK,CAAC,CAAE;EACpF;EAEA,IAAM,IAAc,EAAkB;GACpC,gBAAgB,EAAU;GAC1B,MAAM;IAAE,MAAM,CAAC,YAAY;IAAG,MAAM,CAAC,WAAW;GAAE;GAClD,MAAM;GACN,aAAa,GAAS,MAAU;IAG9B,EAAA,CAAA,CAAO,EAAM,EAAE,MAAM;GACvB;EACF,CAAC;EAED,SAAS,IAAmB;GAC1B,OAAO,EAAU,CAAC,CACf,KAAK,MAAM,EAAE,KAAK,CAAC,CACnB,KAAK,EAAE;EACZ;EACA,SAAS,EAAoB,GAAa;GACxC,IAAM,IAAY,EAAU,GACtB,IAAa,OAAO,KAAO,EAAE,CAAC,CAAC,MAAM,GAAG,EAAU,MAAM;GAE9D,KAAK,IAAM,KAAS,GAAW,EAAM,QAAQ;GAM7C,AAJA,EAAW,MAAM,EAAE,CAAC,CAAC,SAAS,GAAG,MAAM;IACrC,AAAI,EAAU,OAAI,EAAU,EAAE,CAAC,QAAQ;GACzC,CAAC,GAED,EAAS,QAAQ,EAAS;EAC5B;EACA,SAAS,EAAa,GAAuB,GAA+B;GAC1E,IAAM,IAAY,EAAU,GACtB,IAAO,EAAS,GAChB,IAAW,MAAkB,EAAK,WAAW,EAAU,UAAU,EAAK,MAAM,EAAE,CAAC,CAAC,MAAM,OAAO;GAKnG,AAHA,EAAS,QAAQ,GACjB,EAAK,UAAU;IAAE;IAAU;IAAe,OAAO;GAAK,CAAC,GAEnD,KAAU,EAAK,YAAY;IAAE;IAAe,OAAO;GAAK,CAAC;EAC/D;EACA,SAAS,EAAU,GAAuB;GAGxC,OAFI,EAAM,KAAK,UAAU,YAAkB,OAAO,KAAK,CAAI,IAEpD,aAAa,KAAK,CAAI;EAC/B;EACA,SAAS,EAAY,GAAU,GAAe;GAC5C,IAAM,IAAQ,EAAE,QACZ,IAAM,EAAM;GAMhB,IAHI,EAAI,SAAS,MAAG,IAAM,EAAI,MAAM,EAAE,IAGlC,KAAO,CAAC,EAAU,CAAG,GAAG;IAC1B,EAAM,QAAQ;IAEd;GACF;GAEA,EAAM,QAAQ;GAEd,IAAM,IAAY,EAAU;GAK5B,AAHA,EAAa,CAAC,GAGV,KAAO,IAAQ,EAAU,SAAS,MACpC,EAAU,IAAQ,EAAE,CAAC,MAAM,GAC3B,EAAU,IAAQ,EAAE,CAAC,OAAO;EAEhC;EACA,SAAS,EAAc,GAAkB,GAAe;GACtD,IAAM,IAAQ,EAAE,QACV,IAAY,EAAU;GAI5B,IAFA,EAAY,IAAI,CAAK,GAEjB,EAAE,QAAQ,aAAa;IACzB,IAAI,EAAM,OACR,EAAM,QAAQ;SACT,IAAI,IAAQ,GAAG;KAEpB,IAAM,IAAY,EADA,EAAY,SAAS,MACX;KAE5B,AAAI,MACF,EAAU,OAAO,GACjB,EAAU,QAAQ;IAEtB;IAGA,AADA,EAAa,GAAG,EAAK,GACrB,EAAE,eAAe;GACnB,OACE,EAAY,cAAc,CAAC;EAE/B;EACA,SAAS,EAAY,GAAmB;GACtC,EAAE,eAAe;GAGjB,IAAM,KADS,EAAE,eAAe,QAAQ,MAAM,KAAK,GAAA,CAEhD,MAAM,EAAE,CAAC,CACT,QAAQ,MAAM,EAAU,CAAC,CAAC,CAAC,CAC3B,MAAM,GAAG,EAAY,KAAK,GACvB,IAAY,EAAU;GAW5B,AATA,EAAM,SAAS,GAAM,MAAM;IACzB,AAAI,EAAU,OAAI,EAAU,EAAE,CAAC,QAAQ;GACzC,CAAC,GAED,EAAa,CAAC,GAKd,EAFiB,KAAK,IAAI,EAAM,QAAQ,EAAU,SAAS,CAEjD,EAAS,EAAE,MAAM;EAC7B;EAMA,AAJA,EAAM,EAAM,QAAQ,MAAU;GAC5B,EAAoB,OAAO,KAAS,EAAE,CAAC;EACzC,CAAC,GAED,EAAM,EAAM,cAAc;GAExB,4BAA4B,EAAoB,EAAoB,CAAC,CAAC;EACxE,CAAC;EAED,IAAM,IAAe,QAAe;GAClC,IAAM,IAAM,OAAO,EAAM,OAAO,KAAK,KAAK;GAE1C,OAAO,EAAM,UAAU,SAAS,OAA6B,KAAtB,KAAK,MAAM,IAAM,CAAC;EAC3D,CAAC;EAOD,OALA,QAAgB;GAEd,EAAoB,EAAoB,CAAC;EAC3C,CAAC,GAEM,CAAI;sEACuD,EAAM,MAAM;gBAExE,EAAM,MAAM,KACT,MAAM,CAAI;sBAEP,EAAa,QAAQ,KAAK,MAAM,EAAa,QACzC,CAAI,oDAAoD,EAAM,UAAU,SAAS,IAAI,WACrF,GAAG;;;;+BAIS,EAAM,OAAO,QAAQ,aAAa,OAAQ;oCACrC,EAAM,KAAK,UAAU,YAAY,YAAY,OAAQ;;uCAElD,MAAM,IAAI,kBAAkB,MAAO;qCACtC,SAAS,IAAI,EAAE,MAAM,EAAY,QAAQ;mCAC1C,EAAW,QAAQ,KAAO,KAAM;2BACzC,MAAa,EAAY,GAAG,CAAC,EAAE;6BAC7B,MAAqB,EAAc,GAAG,CAAC,EAAE;2BAC3C,MAAuB,MAAM,IAAI,EAAY,CAAC,IAAI,EAAE,eAAe,EAAG;2BACtE,MAAmB,EAAE,OAA4B,OAAO,EAAE;aAE3E,EAAE;;;CAGV;CACA,QAAQ;EAAC;EAAiB,EAAiB,CAAC,CAAC;EAAG,EAAuB,OAAO;EAAG;CAAM;AACzF,CAAC"}
|
|
1
|
+
{"version":3,"file":"otp-input.js","names":[],"sources":["../src/inputs/otp-input/otp-input.ts"],"sourcesContent":["import { define, html, inject, prop, bind, getHost, onMounted, useEmit } from '@vielzeug/ore';\nimport { useField } from '@vielzeug/ore/forms';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, ThemeColor, VisualVariant } from '../../types';\n\nimport { createListControl } from '../../headless';\nimport { disablableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, forcedColorsFocusMixin, sizeVariantMixin } from '../../styles';\nimport { FORM_CTX, useFormContext } from '../shared/form-context';\nimport styles from './otp-input.css?inline';\n\nexport type OreOtpInputEvents = {\n change: { complete: boolean; originalEvent?: Event; value: string };\n complete: { originalEvent?: Event; value: string };\n};\n\n/** OTP Input props */\nexport type OreOtpInputProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Make inputs disabled */\n disabled?: boolean;\n /** Accessible label */\n label?: string;\n /** Number of input cells */\n length?: number;\n /** Mask input (show dots instead of characters) */\n masked?: boolean;\n /** Form field name */\n name?: string;\n /** Show a separator in the middle (e.g. \"–\") */\n separator?: string;\n /** Component size */\n size?: ComponentSize;\n /** Input type: 'numeric' (digits only) or 'alphanumeric' */\n type?: 'numeric' | 'alphanumeric';\n /** Current value */\n value?: string;\n /** Visual variant */\n variant?: Exclude<VisualVariant, 'text' | 'frost'>;\n};\n\n/**\n * A segmented OTP (One-Time Password) input with N individual cells.\n * Auto-advances focus on input, auto-backs on Backspace, handles paste.\n *\n * @element ore-otp-input\n *\n * @attr {number} length - Number of cells (default: 6)\n * @attr {string} type - 'numeric' (default) | 'alphanumeric'\n * @attr {string} value - Current code value\n * @attr {boolean} disabled - Disable all cells\n * @attr {boolean} masked - Show as password\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} name - Form field name\n * @attr {string} label - Group aria-label\n * @attr {string} separator - Optional separator character shown in the middle\n *\n * @fires change - Emitted whenever a cell changes. detail: { value: string, complete: boolean, originalEvent?: Event }\n * @fires complete - Emitted when all cells are filled. detail: { value: string, originalEvent?: Event }\n *\n * @slot label - Custom label above the OTP input\n * @slot helper - Custom helper text below the OTP input\n * @slot error - Custom error content below the OTP input\n *\n * @cssprop --otp-cell-size - Width and height of each cell\n * @cssprop --otp-cell-gap - Gap between cells\n * @cssprop --otp-cell-font-size - Font size inside cells\n * @cssprop --otp-cell-radius - Border radius of cells\n * @cssprop --otp-cell-bg - Cell background color\n * @cssprop --otp-cell-border-color - Default border color\n * @cssprop --otp-cell-focus-border - Focused border/caret color\n * @cssprop --otp-cell-hover-bg - Cell background on hover (flat/ghost variants)\n * @cssprop --otp-cell-hover-border-color - Cell border on hover (flat/bordered variants)\n * @cssprop --otp-cell-focus-bg - Cell background when focused (flat variant)\n * @cssprop --otp-cell-focus-border-color - Cell border when focused (flat variant)\n *\n * @part group - Group container.\n * @part cell - Shadow part for the `cell` element.\n * @example\n * ```html\n * <ore-otp-input length=\"6\" color=\"primary\"></ore-otp-input>\n * ```\n */\nexport const OTP_INPUT_TAG = 'ore-otp-input' as const;\ndefine<OreOtpInputProps>(OTP_INPUT_TAG, {\n formAssociated: true,\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...disablableBundle,\n label: prop.string('One-time password'),\n length: prop.number(6),\n masked: prop.bool(false),\n name: prop.string(),\n separator: prop.string(),\n type: prop.oneOf(['numeric', 'alphanumeric'] as const, 'numeric'),\n value: prop.string(),\n variant: prop.string<Exclude<VisualVariant, 'text' | 'frost'>>(),\n },\n setup(props) {\n const el = getHost();\n const emit = useEmit<OreOtpInputEvents>();\n\n const formCtx = inject(FORM_CTX);\n const fCtxProps = useFormContext(props, formCtx);\n const lengthValue = computed(() => Number(props.length.value) || 6);\n const isDisabled = fCtxProps.disabled;\n const cells = computed(() => Array.from({ length: lengthValue.value }, (_, i) => i));\n const otpValue = signal(String(props.value.value || ''));\n const normalizedPropValue = () => String(props.value.value || '');\n\n // Form association: the joined cell value is the single form value for `name`,\n // since individual per-cell <input> elements inside the shadow root cannot\n // participate in an ancestor <form>'s submission on their own.\n useField<string>({ disabled: isDisabled, toFormValue: (v) => v, value: otpValue });\n\n bind({\n attr: {\n size: fCtxProps.size,\n value: () => otpValue.value || null,\n variant: fCtxProps.variant,\n },\n });\n\n function getInputs(): HTMLInputElement[] {\n return [...(el.shadowRoot?.querySelectorAll<HTMLInputElement>('input.cell') ?? [])];\n }\n\n const listControl = createListControl({\n getItems: () => getInputs(),\n keys: { next: ['ArrowRight'], prev: ['ArrowLeft'] },\n loop: false,\n onNavigate: (_action, index) => {\n const inputs = getInputs();\n\n inputs[index]?.focus();\n },\n });\n\n function getValue(): string {\n return getInputs()\n .map((i) => i.value)\n .join('');\n }\n function syncInputsFromValue(raw: string) {\n const allInputs = getInputs();\n const normalized = String(raw || '').slice(0, allInputs.length);\n\n for (const input of allInputs) input.value = '';\n\n normalized.split('').forEach((c, i) => {\n if (allInputs[i]) allInputs[i].value = c;\n });\n\n otpValue.value = getValue();\n }\n function emitOtpState(originalEvent?: Event, forceComplete?: boolean): void {\n const allInputs = getInputs();\n const full = getValue();\n const complete = forceComplete ?? (full.length === allInputs.length && full.split('').every(Boolean));\n\n otpValue.value = full;\n emit('change', { complete, originalEvent, value: full });\n\n if (complete) emit('complete', { originalEvent, value: full });\n }\n function isAllowed(char: string): boolean {\n if (props.type.value === 'numeric') return /^\\d$/.test(char);\n\n return /^[a-z\\d]$/i.test(char);\n }\n function handleInput(e: Event, index: number) {\n const input = e.target as HTMLInputElement;\n let val = input.value;\n\n // Keep only last character if multiple were typed somehow\n if (val.length > 1) val = val.slice(-1);\n\n // Validate character\n if (val && !isAllowed(val)) {\n input.value = '';\n\n return;\n }\n\n input.value = val;\n\n const allInputs = getInputs();\n\n emitOtpState(e);\n\n // Auto-advance\n if (val && index < allInputs.length - 1) {\n allInputs[index + 1].focus();\n allInputs[index + 1].select();\n }\n }\n function handleKeydown(e: KeyboardEvent, index: number) {\n const input = e.target as HTMLInputElement;\n const allInputs = getInputs();\n\n listControl.set(index);\n\n if (e.key === 'Backspace') {\n if (input.value) {\n input.value = '';\n } else if (index > 0) {\n const prevIndex = listControl.navigate('prev');\n const prevInput = allInputs[prevIndex];\n\n if (prevInput) {\n prevInput.select();\n prevInput.value = '';\n }\n }\n\n emitOtpState(e, false);\n e.preventDefault();\n } else {\n listControl.handleKeydown(e);\n }\n }\n function handlePaste(e: ClipboardEvent) {\n e.preventDefault();\n\n const pasted = e.clipboardData?.getData('text') ?? '';\n const chars = pasted\n .split('')\n .filter((c) => isAllowed(c))\n .slice(0, lengthValue.value);\n const allInputs = getInputs();\n\n chars.forEach((char, i) => {\n if (allInputs[i]) allInputs[i].value = char;\n });\n\n emitOtpState(e);\n\n // Focus the cell after last pasted char\n const focusIdx = Math.min(chars.length, allInputs.length - 1);\n\n allInputs[focusIdx]?.focus();\n }\n\n watch(props.value, (value) => {\n syncInputsFromValue(String(value || ''));\n });\n\n watch(props.length, () => {\n // Cells re-render when length changes; sync after DOM updates.\n requestAnimationFrame(() => syncInputsFromValue(normalizedPropValue()));\n });\n\n const separatorIdx = computed(() => {\n const len = Number(props.length.value) || 6;\n\n return props.separator.value != null ? Math.floor(len / 2) : -1;\n });\n\n onMounted(() => {\n // Populate cells from value prop on mount\n syncInputsFromValue(normalizedPropValue());\n });\n\n return html`\n <div class=\"otp-group\" part=\"group\" role=\"group\" :aria-label=\"${props.label}\">\n ${() =>\n cells.value.map(\n (i) => html`\n ${() =>\n separatorIdx.value > 0 && i === separatorIdx.value\n ? html`<span class=\"separator\" aria-hidden=\"true\">${() => props.separator.value || '-'}</span>`\n : ''}\n <input\n class=\"cell\"\n part=\"cell\"\n :type=\"${() => (props.masked.value ? 'password' : 'text')}\"\n :inputmode=\"${() => (props.type.value === 'numeric' ? 'numeric' : 'text')}\"\n maxlength=\"1\"\n :autocomplete=\"${() => (i === 0 ? 'one-time-code' : 'off')}\"\n :aria-label=\"${() => `Digit ${i + 1} of ${lengthValue.value}`}\"\n :disabled=\"${() => (isDisabled.value ? true : null)}\"\n @input=\"${(e: Event) => handleInput(e, i)}\"\n @keydown=\"${(e: KeyboardEvent) => handleKeydown(e, i)}\"\n @paste=\"${(e: ClipboardEvent) => (i === 0 ? handlePaste(e) : e.preventDefault())}\"\n @focus=\"${(e: FocusEvent) => (e.target as HTMLInputElement).select()}\" />\n `,\n )}\n </div>\n `;\n },\n styles: [colorThemeMixin, sizeVariantMixin({}), forcedColorsFocusMixin('.cell'), styles],\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){return e.filter(e=>e.localName===`ore-command-palette-item`).map(e=>({disabled:e.hasAttribute(`disabled`),group:e.getAttribute(`group`)??void 0,icon:e.getAttribute(`icon`)??void 0,keywords:(e.getAttribute(`keywords`)??``).split(`,`).map(e=>e.trim()).filter(Boolean),label:e.getAttribute(`label`)||[...e.childNodes].filter(e=>e.nodeType===Node.TEXT_NODE).map(e=>e.textContent?.trim()).filter(Boolean).join(` `)||``,shortcut:e.getAttribute(`shortcut`)??void 0,value:e.getAttribute(`value`)??``}))}function t(e){return e.split(`+`).map(e=>e.trim()).filter(Boolean)}function n(e){return{disabled:!!e.disabled,group:e.group,icon:e.icon,keywords:e.keywords??[],label:e.label??e.value,shortcut:e.shortcut,value:e.value}}function r(e,t,n){if(n)return e;let r=t.toLowerCase().trim();return r?e.filter(e=>e.label.toLowerCase().includes(r)||e.value.toLowerCase().includes(r)||e.keywords.some(e=>e.toLowerCase().includes(r))):e}function i(e){let t=new Map;for(let n of e){let e=n.group,r=t.get(e);r||(r=[],t.set(e,r)),r.push(n)}let n=[],r=0;for(let[e,i]of t){e!==void 0&&n.push({group:e,type:`group`});for(let e of i)n.push({idx:r++,item:e,type:`item`})}return n}exports.buildRows=i,exports.filterItems=r,exports.normalizeItem=n,exports.parseSlottedItems=e,exports.splitShortcutKeys=t;
|
|
2
|
+
//# sourceMappingURL=command-palette-items.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette-items.cjs","names":[],"sources":["../../../src/overlay/command-palette/command-palette-items.ts"],"sourcesContent":["import type { CommandPaletteItem, CommandPaletteItemInput } from './command-palette.types';\n\n// ── Flat row model ────────────────────────────────────────────────────────────\n// Items are grouped by `group` (preserving first-seen order) and flattened into a\n// single list of rows so the listbox can render group headings inline while\n// keyboard navigation still walks a single, index-addressable sequence.\n\nexport type CommandPaletteRow =\n { group: string; type: 'group' } | { idx: number; item: CommandPaletteItem; type: 'item' };\n\nexport function parseSlottedItems(elements: Element[]): CommandPaletteItem[] {\n return elements\n .filter((el) => el.localName === 'ore-command-palette-item')\n .map((el) => ({\n disabled: el.hasAttribute('disabled'),\n group: el.getAttribute('group') ?? undefined,\n icon: el.getAttribute('icon') ?? undefined,\n keywords: (el.getAttribute('keywords') ?? '')\n .split(',')\n .map((term) => term.trim())\n .filter(Boolean),\n label:\n el.getAttribute('label') ||\n [...el.childNodes]\n .filter((node) => node.nodeType === Node.TEXT_NODE)\n .map((node) => node.textContent?.trim())\n .filter(Boolean)\n .join(' ') ||\n '',\n shortcut: el.getAttribute('shortcut') ?? undefined,\n value: el.getAttribute('value') ?? '',\n }));\n}\n\n/**\n * Splits a display-only shortcut hint into individual keys so each can be rendered in its\n * own `<kbd>`. Keys are separated with `+` (e.g. `\"⌘+N\"` → `[\"⌘\", \"N\"]`); a shortcut with no\n * `+` renders as a single key, unchanged. A literal `+` key can't be represented this way —\n * spell it out instead (e.g. `\"Ctrl+Plus\"`).\n */\nexport function splitShortcutKeys(shortcut: string): string[] {\n return shortcut\n .split('+')\n .map((key) => key.trim())\n .filter(Boolean);\n}\n\nexport function normalizeItem(input: CommandPaletteItemInput): CommandPaletteItem {\n return {\n disabled: Boolean(input.disabled),\n group: input.group,\n icon: input.icon,\n keywords: input.keywords ?? [],\n label: input.label ?? input.value,\n shortcut: input.shortcut,\n value: input.value,\n };\n}\n\nexport function filterItems(items: CommandPaletteItem[], query: string, noFilter: boolean): CommandPaletteItem[] {\n if (noFilter) return items;\n\n const normalizedQuery = query.toLowerCase().trim();\n\n if (!normalizedQuery) return items;\n\n return items.filter(\n (item) =>\n item.label.toLowerCase().includes(normalizedQuery) ||\n item.value.toLowerCase().includes(normalizedQuery) ||\n item.keywords.some((keyword) => keyword.toLowerCase().includes(normalizedQuery)),\n );\n}\n\n/** Groups items by `group` (first-seen order) and flattens into index-addressable rows. */\nexport function buildRows(items: CommandPaletteItem[]): CommandPaletteRow[] {\n const groups = new Map<string | undefined, CommandPaletteItem[]>();\n\n for (const item of items) {\n const key = item.group;\n let bucket = groups.get(key);\n\n if (!bucket) {\n bucket = [];\n groups.set(key, bucket);\n }\n\n bucket.push(item);\n }\n\n const rows: CommandPaletteRow[] = [];\n let idx = 0;\n\n for (const [group, groupItems] of groups) {\n if (group !== undefined) rows.push({ group, type: 'group' });\n\n for (const item of groupItems) rows.push({ idx: idx++, item, type: 'item' });\n }\n\n return rows;\n}\n"],"mappings":"AAUA,SAAgB,EAAkB,EAA2C,CAC3E,OAAO,EACJ,OAAQ,GAAO,EAAG,YAAc,0BAA0B,CAAC,CAC3D,IAAK,IAAQ,CACZ,SAAU,EAAG,aAAa,UAAU,EACpC,MAAO,EAAG,aAAa,OAAO,GAAK,IAAA,GACnC,KAAM,EAAG,aAAa,MAAM,GAAK,IAAA,GACjC,UAAW,EAAG,aAAa,UAAU,GAAK,GAAA,CACvC,MAAM,GAAG,CAAC,CACV,IAAK,GAAS,EAAK,KAAK,CAAC,CAAC,CAC1B,OAAO,OAAO,EACjB,MACE,EAAG,aAAa,OAAO,GACvB,CAAC,GAAG,EAAG,UAAU,CAAC,CACf,OAAQ,GAAS,EAAK,WAAa,KAAK,SAAS,CAAC,CAClD,IAAK,GAAS,EAAK,aAAa,KAAK,CAAC,CAAC,CACvC,OAAO,OAAO,CAAC,CACf,KAAK,GAAG,GACX,GACF,SAAU,EAAG,aAAa,UAAU,GAAK,IAAA,GACzC,MAAO,EAAG,aAAa,OAAO,GAAK,EACrC,EAAE,CACN,CAQA,SAAgB,EAAkB,EAA4B,CAC5D,OAAO,EACJ,MAAM,GAAG,CAAC,CACV,IAAK,GAAQ,EAAI,KAAK,CAAC,CAAC,CACxB,OAAO,OAAO,CACnB,CAEA,SAAgB,EAAc,EAAoD,CAChF,MAAO,CACL,SAAU,EAAQ,EAAM,SACxB,MAAO,EAAM,MACb,KAAM,EAAM,KACZ,SAAU,EAAM,UAAY,CAAC,EAC7B,MAAO,EAAM,OAAS,EAAM,MAC5B,SAAU,EAAM,SAChB,MAAO,EAAM,KACf,CACF,CAEA,SAAgB,EAAY,EAA6B,EAAe,EAAyC,CAC/G,GAAI,EAAU,OAAO,EAErB,IAAM,EAAkB,EAAM,YAAY,CAAC,CAAC,KAAK,EAIjD,OAFK,EAEE,EAAM,OACV,GACC,EAAK,MAAM,YAAY,CAAC,CAAC,SAAS,CAAe,GACjD,EAAK,MAAM,YAAY,CAAC,CAAC,SAAS,CAAe,GACjD,EAAK,SAAS,KAAM,GAAY,EAAQ,YAAY,CAAC,CAAC,SAAS,CAAe,CAAC,CACnF,EAP6B,CAQ/B,CAGA,SAAgB,EAAU,EAAkD,CAC1E,IAAM,EAAS,IAAI,IAEnB,IAAK,IAAM,KAAQ,EAAO,CACxB,IAAM,EAAM,EAAK,MACb,EAAS,EAAO,IAAI,CAAG,EAEtB,IACH,EAAS,CAAC,EACV,EAAO,IAAI,EAAK,CAAM,GAGxB,EAAO,KAAK,CAAI,CAClB,CAEA,IAAM,EAA4B,CAAC,EAC/B,EAAM,EAEV,IAAK,GAAM,CAAC,EAAO,KAAe,EAAQ,CACpC,IAAU,IAAA,IAAW,EAAK,KAAK,CAAE,QAAO,KAAM,OAAQ,CAAC,EAE3D,IAAK,IAAM,KAAQ,EAAY,EAAK,KAAK,CAAE,IAAK,IAAO,OAAM,KAAM,MAAO,CAAC,CAC7E,CAEA,OAAO,CACT"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CommandPaletteItem, CommandPaletteItemInput } from './command-palette.types';
|
|
2
|
+
export type CommandPaletteRow = {
|
|
3
|
+
group: string;
|
|
4
|
+
type: 'group';
|
|
5
|
+
} | {
|
|
6
|
+
idx: number;
|
|
7
|
+
item: CommandPaletteItem;
|
|
8
|
+
type: 'item';
|
|
9
|
+
};
|
|
10
|
+
export declare function parseSlottedItems(elements: Element[]): CommandPaletteItem[];
|
|
11
|
+
/**
|
|
12
|
+
* Splits a display-only shortcut hint into individual keys so each can be rendered in its
|
|
13
|
+
* own `<kbd>`. Keys are separated with `+` (e.g. `"⌘+N"` → `["⌘", "N"]`); a shortcut with no
|
|
14
|
+
* `+` renders as a single key, unchanged. A literal `+` key can't be represented this way —
|
|
15
|
+
* spell it out instead (e.g. `"Ctrl+Plus"`).
|
|
16
|
+
*/
|
|
17
|
+
export declare function splitShortcutKeys(shortcut: string): string[];
|
|
18
|
+
export declare function normalizeItem(input: CommandPaletteItemInput): CommandPaletteItem;
|
|
19
|
+
export declare function filterItems(items: CommandPaletteItem[], query: string, noFilter: boolean): CommandPaletteItem[];
|
|
20
|
+
/** Groups items by `group` (first-seen order) and flattens into index-addressable rows. */
|
|
21
|
+
export declare function buildRows(items: CommandPaletteItem[]): CommandPaletteRow[];
|
|
22
|
+
//# sourceMappingURL=command-palette-items.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette-items.d.ts","sourceRoot":"","sources":["../../../src/overlay/command-palette/command-palette-items.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAO3F,MAAM,MAAM,iBAAiB,GAC3B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7F,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,kBAAkB,EAAE,CAsB3E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAK5D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,uBAAuB,GAAG,kBAAkB,CAUhF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,kBAAkB,EAAE,CAa/G;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,iBAAiB,EAAE,CAyB1E"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
//#region src/overlay/command-palette/command-palette-items.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
return e.filter((e) => e.localName === "ore-command-palette-item").map((e) => ({
|
|
4
|
+
disabled: e.hasAttribute("disabled"),
|
|
5
|
+
group: e.getAttribute("group") ?? void 0,
|
|
6
|
+
icon: e.getAttribute("icon") ?? void 0,
|
|
7
|
+
keywords: (e.getAttribute("keywords") ?? "").split(",").map((e) => e.trim()).filter(Boolean),
|
|
8
|
+
label: e.getAttribute("label") || [...e.childNodes].filter((e) => e.nodeType === Node.TEXT_NODE).map((e) => e.textContent?.trim()).filter(Boolean).join(" ") || "",
|
|
9
|
+
shortcut: e.getAttribute("shortcut") ?? void 0,
|
|
10
|
+
value: e.getAttribute("value") ?? ""
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
function t(e) {
|
|
14
|
+
return e.split("+").map((e) => e.trim()).filter(Boolean);
|
|
15
|
+
}
|
|
16
|
+
function n(e) {
|
|
17
|
+
return {
|
|
18
|
+
disabled: !!e.disabled,
|
|
19
|
+
group: e.group,
|
|
20
|
+
icon: e.icon,
|
|
21
|
+
keywords: e.keywords ?? [],
|
|
22
|
+
label: e.label ?? e.value,
|
|
23
|
+
shortcut: e.shortcut,
|
|
24
|
+
value: e.value
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function r(e, t, n) {
|
|
28
|
+
if (n) return e;
|
|
29
|
+
let r = t.toLowerCase().trim();
|
|
30
|
+
return r ? e.filter((e) => e.label.toLowerCase().includes(r) || e.value.toLowerCase().includes(r) || e.keywords.some((e) => e.toLowerCase().includes(r))) : e;
|
|
31
|
+
}
|
|
32
|
+
function i(e) {
|
|
33
|
+
let t = /* @__PURE__ */ new Map();
|
|
34
|
+
for (let n of e) {
|
|
35
|
+
let e = n.group, r = t.get(e);
|
|
36
|
+
r || (r = [], t.set(e, r)), r.push(n);
|
|
37
|
+
}
|
|
38
|
+
let n = [], r = 0;
|
|
39
|
+
for (let [e, i] of t) {
|
|
40
|
+
e !== void 0 && n.push({
|
|
41
|
+
group: e,
|
|
42
|
+
type: "group"
|
|
43
|
+
});
|
|
44
|
+
for (let e of i) n.push({
|
|
45
|
+
idx: r++,
|
|
46
|
+
item: e,
|
|
47
|
+
type: "item"
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return n;
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { i as buildRows, r as filterItems, n as normalizeItem, e as parseSlottedItems, t as splitShortcutKeys };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=command-palette-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette-items.js","names":[],"sources":["../../../src/overlay/command-palette/command-palette-items.ts"],"sourcesContent":["import type { CommandPaletteItem, CommandPaletteItemInput } from './command-palette.types';\n\n// ── Flat row model ────────────────────────────────────────────────────────────\n// Items are grouped by `group` (preserving first-seen order) and flattened into a\n// single list of rows so the listbox can render group headings inline while\n// keyboard navigation still walks a single, index-addressable sequence.\n\nexport type CommandPaletteRow =\n { group: string; type: 'group' } | { idx: number; item: CommandPaletteItem; type: 'item' };\n\nexport function parseSlottedItems(elements: Element[]): CommandPaletteItem[] {\n return elements\n .filter((el) => el.localName === 'ore-command-palette-item')\n .map((el) => ({\n disabled: el.hasAttribute('disabled'),\n group: el.getAttribute('group') ?? undefined,\n icon: el.getAttribute('icon') ?? undefined,\n keywords: (el.getAttribute('keywords') ?? '')\n .split(',')\n .map((term) => term.trim())\n .filter(Boolean),\n label:\n el.getAttribute('label') ||\n [...el.childNodes]\n .filter((node) => node.nodeType === Node.TEXT_NODE)\n .map((node) => node.textContent?.trim())\n .filter(Boolean)\n .join(' ') ||\n '',\n shortcut: el.getAttribute('shortcut') ?? undefined,\n value: el.getAttribute('value') ?? '',\n }));\n}\n\n/**\n * Splits a display-only shortcut hint into individual keys so each can be rendered in its\n * own `<kbd>`. Keys are separated with `+` (e.g. `\"⌘+N\"` → `[\"⌘\", \"N\"]`); a shortcut with no\n * `+` renders as a single key, unchanged. A literal `+` key can't be represented this way —\n * spell it out instead (e.g. `\"Ctrl+Plus\"`).\n */\nexport function splitShortcutKeys(shortcut: string): string[] {\n return shortcut\n .split('+')\n .map((key) => key.trim())\n .filter(Boolean);\n}\n\nexport function normalizeItem(input: CommandPaletteItemInput): CommandPaletteItem {\n return {\n disabled: Boolean(input.disabled),\n group: input.group,\n icon: input.icon,\n keywords: input.keywords ?? [],\n label: input.label ?? input.value,\n shortcut: input.shortcut,\n value: input.value,\n };\n}\n\nexport function filterItems(items: CommandPaletteItem[], query: string, noFilter: boolean): CommandPaletteItem[] {\n if (noFilter) return items;\n\n const normalizedQuery = query.toLowerCase().trim();\n\n if (!normalizedQuery) return items;\n\n return items.filter(\n (item) =>\n item.label.toLowerCase().includes(normalizedQuery) ||\n item.value.toLowerCase().includes(normalizedQuery) ||\n item.keywords.some((keyword) => keyword.toLowerCase().includes(normalizedQuery)),\n );\n}\n\n/** Groups items by `group` (first-seen order) and flattens into index-addressable rows. */\nexport function buildRows(items: CommandPaletteItem[]): CommandPaletteRow[] {\n const groups = new Map<string | undefined, CommandPaletteItem[]>();\n\n for (const item of items) {\n const key = item.group;\n let bucket = groups.get(key);\n\n if (!bucket) {\n bucket = [];\n groups.set(key, bucket);\n }\n\n bucket.push(item);\n }\n\n const rows: CommandPaletteRow[] = [];\n let idx = 0;\n\n for (const [group, groupItems] of groups) {\n if (group !== undefined) rows.push({ group, type: 'group' });\n\n for (const item of groupItems) rows.push({ idx: idx++, item, type: 'item' });\n }\n\n return rows;\n}\n"],"mappings":";AAUA,SAAgB,EAAkB,GAA2C;CAC3E,OAAO,EACJ,QAAQ,MAAO,EAAG,cAAc,0BAA0B,CAAC,CAC3D,KAAK,OAAQ;EACZ,UAAU,EAAG,aAAa,UAAU;EACpC,OAAO,EAAG,aAAa,OAAO,KAAK,KAAA;EACnC,MAAM,EAAG,aAAa,MAAM,KAAK,KAAA;EACjC,WAAW,EAAG,aAAa,UAAU,KAAK,GAAA,CACvC,MAAM,GAAG,CAAC,CACV,KAAK,MAAS,EAAK,KAAK,CAAC,CAAC,CAC1B,OAAO,OAAO;EACjB,OACE,EAAG,aAAa,OAAO,KACvB,CAAC,GAAG,EAAG,UAAU,CAAC,CACf,QAAQ,MAAS,EAAK,aAAa,KAAK,SAAS,CAAC,CAClD,KAAK,MAAS,EAAK,aAAa,KAAK,CAAC,CAAC,CACvC,OAAO,OAAO,CAAC,CACf,KAAK,GAAG,KACX;EACF,UAAU,EAAG,aAAa,UAAU,KAAK,KAAA;EACzC,OAAO,EAAG,aAAa,OAAO,KAAK;CACrC,EAAE;AACN;AAQA,SAAgB,EAAkB,GAA4B;CAC5D,OAAO,EACJ,MAAM,GAAG,CAAC,CACV,KAAK,MAAQ,EAAI,KAAK,CAAC,CAAC,CACxB,OAAO,OAAO;AACnB;AAEA,SAAgB,EAAc,GAAoD;CAChF,OAAO;EACL,UAAU,EAAQ,EAAM;EACxB,OAAO,EAAM;EACb,MAAM,EAAM;EACZ,UAAU,EAAM,YAAY,CAAC;EAC7B,OAAO,EAAM,SAAS,EAAM;EAC5B,UAAU,EAAM;EAChB,OAAO,EAAM;CACf;AACF;AAEA,SAAgB,EAAY,GAA6B,GAAe,GAAyC;CAC/G,IAAI,GAAU,OAAO;CAErB,IAAM,IAAkB,EAAM,YAAY,CAAC,CAAC,KAAK;CAIjD,OAFK,IAEE,EAAM,QACV,MACC,EAAK,MAAM,YAAY,CAAC,CAAC,SAAS,CAAe,KACjD,EAAK,MAAM,YAAY,CAAC,CAAC,SAAS,CAAe,KACjD,EAAK,SAAS,MAAM,MAAY,EAAQ,YAAY,CAAC,CAAC,SAAS,CAAe,CAAC,CACnF,IAP6B;AAQ/B;AAGA,SAAgB,EAAU,GAAkD;CAC1E,IAAM,oBAAS,IAAI,IAA8C;CAEjE,KAAK,IAAM,KAAQ,GAAO;EACxB,IAAM,IAAM,EAAK,OACb,IAAS,EAAO,IAAI,CAAG;EAO3B,AALK,MACH,IAAS,CAAC,GACV,EAAO,IAAI,GAAK,CAAM,IAGxB,EAAO,KAAK,CAAI;CAClB;CAEA,IAAM,IAA4B,CAAC,GAC/B,IAAM;CAEV,KAAK,IAAM,CAAC,GAAO,MAAe,GAAQ;EACxC,AAAI,MAAU,KAAA,KAAW,EAAK,KAAK;GAAE;GAAO,MAAM;EAAQ,CAAC;EAE3D,KAAK,IAAM,KAAQ,GAAY,EAAK,KAAK;GAAE,KAAK;GAAO;GAAM,MAAM;EAAO,CAAC;CAC7E;CAEA,OAAO;AACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=`@layer refine.base{:host{--_radius:var(--command-palette-radius,var(--rounded-lg));--_max-width:var(--command-palette-max-width,40rem);--_backdrop-bg:var(--command-palette-backdrop,color-mix(in oklch, var(--color-canvas) 40%, transparent));--_panel-bg:var(--command-palette-bg,var(--color-canvas));--_panel-border-color:var(--command-palette-border-color,var(--color-divider));--_option-hover-bg:var(--command-palette-option-hover-bg,var(--color-contrast-100));--_option-focus-bg:var(--command-palette-option-focus-bg,color-mix(in oklch, var(--color-primary) 12%, var(--color-contrast-100)));display:contents}dialog{all:unset;box-sizing:border-box;pointer-events:none;width:100%;max-width:100%;height:100%;max-height:100%;transition:display .2s allow-discrete, overlay .2s allow-discrete;padding-top:min(14vh, var(--size-24));background:0 0;border:none;justify-content:center;align-items:flex-start;margin:0;display:flex;position:fixed;inset:0;overflow:hidden}dialog:not([open]),dialog:not([open]) .panel{display:none}dialog[open]{pointer-events:auto}dialog::backdrop{background:var(--_backdrop-bg);opacity:1;-webkit-backdrop-filter:blur(var(--blur-xs));backdrop-filter:blur(var(--blur-xs));transition:opacity var(--transition-normal), overlay var(--transition-normal) allow-discrete, display var(--transition-normal) allow-discrete}@starting-style{dialog::backdrop{opacity:0}}dialog.closing::backdrop{opacity:0}.panel{box-sizing:border-box;width:var(--_max-width);max-width:calc(100vw - var(--size-8));max-height:min(28rem, calc(100dvh - var(--size-16)));background:var(--_panel-bg);border:var(--border) solid var(--_panel-border-color);border-radius:var(--_radius);box-shadow:var(--command-palette-shadow,var(--shadow-2xl));opacity:1;-webkit-backdrop-filter:blur(var(--blur-md));backdrop-filter:blur(var(--blur-md));transition:opacity .2s var(--ease-spring), transform .2s var(--ease-spring);flex-direction:column;display:flex;position:relative;overflow:hidden;transform:scale(1)translateY(0)}@starting-style{.panel{opacity:0;transform:scale(var(--overlay-enter-scale-dialog)) translateY(-4px)}}dialog.closing .panel{opacity:0;transform:scale(var(--overlay-enter-scale-dialog)) translateY(-4px);transition:opacity .15s var(--ease-spring), transform .15s var(--ease-spring)}@media (width<=640px){.panel{width:calc(100vw - var(--size-4));max-width:calc(100vw - var(--size-4))}dialog{padding-top:var(--size-4)}}.search{gap:var(--size-2);padding:var(--size-3) var(--size-4);border-bottom:var(--border) solid var(--color-contrast-100);flex-shrink:0;align-items:center;display:flex}.search-icon{color:var(--color-contrast-400);flex-shrink:0;display:inline-flex}.search-input{min-width:0;font:inherit;font-size:var(--text-md);color:var(--color-contrast-900);background:0 0;border:none;outline:none;flex:1;padding:0}.search-input::placeholder{color:var(--color-contrast-400)}.search-loader{border:2px solid var(--color-contrast-300);width:1em;height:1em;animation:command-palette-spin var(--transition-loader) infinite;border-radius:50%;flex-shrink:0;display:inline-flex}.search-loader:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-right-color:#0000}.search-loader:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-left-color:#0000}.search-loader[hidden]{display:none}@keyframes command-palette-spin{to{transform:rotate(360deg)}}.listbox{padding:var(--size-1);overscroll-behavior:contain;scrollbar-width:thin;flex:1;overflow-y:auto}.empty{padding:var(--size-6) var(--size-3);font-size:var(--text-sm);color:var(--color-contrast-400);text-align:center}.group-heading{padding:var(--size-2) var(--size-2-5) var(--size-1);font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-500);text-transform:uppercase;letter-spacing:var(--tracking-wide,.05em)}.item{gap:var(--size-2-5);padding:var(--size-2) var(--size-2-5);font-size:var(--text-sm);line-height:var(--leading-normal);color:var(--color-contrast-800);cursor:pointer;border-radius:var(--rounded-md);transition:background var(--transition-fast);align-items:center;display:flex}.item:hover:not([data-disabled]){background:var(--_option-hover-bg)}.item[data-focused]:not([data-disabled]){background:var(--_option-focus-bg)}.item[data-disabled]{color:var(--color-contrast-400);cursor:not-allowed;opacity:.6}.item-icon{color:var(--color-contrast-500);flex-shrink:0;align-items:center;display:inline-flex}.item-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.item-shortcut{gap:var(--size-1);flex-shrink:0;display:inline-flex}.item-shortcut kbd{padding:var(--size-0-5) var(--size-1-5);font-family:var(--font-mono,monospace);font-size:var(--text-xs);color:var(--color-contrast-500);background:var(--color-contrast-100);border:var(--border) solid var(--color-contrast-200);border-bottom-width:calc(var(--border) + 1px);border-radius:var(--rounded-sm)}.footer{gap:var(--size-4);padding:var(--size-2) var(--size-4);font-size:var(--text-xs);color:var(--color-contrast-500);border-top:var(--border) solid var(--color-contrast-100);flex-shrink:0;align-items:center;display:flex}.footer-hint{gap:var(--size-1);align-items:center;display:inline-flex}.footer kbd{padding:var(--size-0-5) var(--size-1);font-family:inherit;font-size:var(--text-xs);background:var(--color-contrast-100);border:var(--border) solid var(--color-contrast-200);border-bottom-width:calc(var(--border) + 1px);border-radius:var(--rounded-sm)}::slotted(ore-command-palette-item){display:none!important}}`;exports.default=e;
|
|
2
|
+
//# sourceMappingURL=command-palette.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette.css.cjs","names":[],"sources":["../../../src/overlay/command-palette/command-palette.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_radius: var(--command-palette-radius, var(--rounded-lg));\n --_max-width: var(--command-palette-max-width, 40rem);\n --_backdrop-bg: var(--command-palette-backdrop, color-mix(in oklch, var(--color-canvas) 40%, transparent));\n --_panel-bg: var(--command-palette-bg, var(--color-canvas));\n --_panel-border-color: var(--command-palette-border-color, var(--color-divider));\n --_option-hover-bg: var(--command-palette-option-hover-bg, var(--color-contrast-100));\n --_option-focus-bg: var(\n --command-palette-option-focus-bg,\n color-mix(in oklch, var(--color-primary) 12%, var(--color-contrast-100))\n );\n\n display: contents;\n }\n\n /* =====================\n Native <dialog> resets — see ore-dialog for the full rationale.\n ===================== */\n\n dialog {\n all: unset;\n position: fixed;\n inset: 0;\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n width: 100%;\n max-width: 100%;\n height: 100%;\n max-height: 100%;\n padding-block-start: min(14vh, var(--size-24));\n margin: 0;\n overflow: hidden;\n pointer-events: none;\n background: transparent;\n border: none;\n transition:\n display 200ms allow-discrete,\n overlay 200ms allow-discrete;\n }\n\n dialog:not([open]) {\n display: none;\n }\n\n dialog:not([open]) .panel {\n display: none;\n }\n\n dialog[open] {\n pointer-events: auto;\n }\n\n dialog::backdrop {\n background: var(--_backdrop-bg);\n opacity: 1;\n backdrop-filter: blur(var(--blur-xs));\n transition:\n opacity var(--transition-normal),\n overlay var(--transition-normal) allow-discrete,\n display var(--transition-normal) allow-discrete;\n\n @starting-style {\n opacity: 0;\n }\n }\n\n dialog.closing::backdrop {\n opacity: 0;\n }\n\n /* =====================\n Panel\n ===================== */\n\n .panel {\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n width: var(--_max-width);\n max-width: calc(100vw - var(--size-8));\n max-height: min(28rem, calc(100dvh - var(--size-16)));\n overflow: hidden;\n background: var(--_panel-bg);\n border: var(--border) solid var(--_panel-border-color);\n border-radius: var(--_radius);\n box-shadow: var(--command-palette-shadow, var(--shadow-2xl));\n opacity: 1;\n backdrop-filter: blur(var(--blur-md));\n transform: scale(1) translateY(0);\n transition:\n opacity 200ms var(--ease-spring),\n transform 200ms var(--ease-spring);\n\n @starting-style {\n opacity: 0;\n transform: scale(var(--overlay-enter-scale-dialog)) translateY(-4px);\n }\n }\n\n dialog.closing .panel {\n opacity: 0;\n transform: scale(var(--overlay-enter-scale-dialog)) translateY(-4px);\n transition:\n opacity 150ms var(--ease-spring),\n transform 150ms var(--ease-spring);\n }\n\n @media (width <= 640px) {\n .panel {\n width: calc(100vw - var(--size-4));\n max-width: calc(100vw - var(--size-4));\n }\n\n dialog {\n padding-block-start: var(--size-4);\n }\n }\n\n /* =====================\n Search field\n ===================== */\n\n .search {\n display: flex;\n flex-shrink: 0;\n gap: var(--size-2);\n align-items: center;\n padding: var(--size-3) var(--size-4);\n border-block-end: var(--border) solid var(--color-contrast-100);\n }\n\n .search-icon {\n display: inline-flex;\n flex-shrink: 0;\n color: var(--color-contrast-400);\n }\n\n .search-input {\n flex: 1;\n min-width: 0;\n padding: 0;\n font: inherit;\n font-size: var(--text-md);\n color: var(--color-contrast-900);\n outline: none;\n background: transparent;\n border: none;\n }\n\n .search-input::placeholder {\n color: var(--color-contrast-400);\n }\n\n .search-loader {\n display: inline-flex;\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n border: 2px solid var(--color-contrast-300);\n border-inline-end-color: transparent;\n border-radius: 50%;\n animation: command-palette-spin var(--transition-loader) infinite;\n }\n\n .search-loader[hidden] {\n display: none;\n }\n\n @keyframes command-palette-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n /* =====================\n Listbox\n ===================== */\n\n .listbox {\n flex: 1;\n padding: var(--size-1);\n overflow-y: auto;\n overscroll-behavior: contain;\n scrollbar-width: thin;\n }\n\n .empty {\n padding: var(--size-6) var(--size-3);\n font-size: var(--text-sm);\n color: var(--color-contrast-400);\n text-align: center;\n }\n\n .group-heading {\n padding: var(--size-2) var(--size-2-5) var(--size-1);\n font-size: var(--text-xs);\n font-weight: var(--font-semibold);\n color: var(--color-contrast-500);\n text-transform: uppercase;\n letter-spacing: var(--tracking-wide, 0.05em);\n }\n\n .item {\n display: flex;\n gap: var(--size-2-5);\n align-items: center;\n padding: var(--size-2) var(--size-2-5);\n font-size: var(--text-sm);\n line-height: var(--leading-normal);\n color: var(--color-contrast-800);\n cursor: pointer;\n border-radius: var(--rounded-md);\n transition: background var(--transition-fast);\n }\n\n .item:hover:not([data-disabled]) {\n background: var(--_option-hover-bg);\n }\n\n .item[data-focused]:not([data-disabled]) {\n background: var(--_option-focus-bg);\n }\n\n .item[data-disabled] {\n color: var(--color-contrast-400);\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .item-icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n color: var(--color-contrast-500);\n }\n\n .item-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .item-shortcut {\n display: inline-flex;\n flex-shrink: 0;\n gap: var(--size-1);\n }\n\n .item-shortcut kbd {\n padding: var(--size-0-5) var(--size-1-5);\n font-family: var(--font-mono, monospace);\n font-size: var(--text-xs);\n color: var(--color-contrast-500);\n background: var(--color-contrast-100);\n border: var(--border) solid var(--color-contrast-200);\n border-bottom-width: calc(var(--border) + 1px);\n border-radius: var(--rounded-sm);\n }\n\n /* =====================\n Footer hints\n ===================== */\n\n .footer {\n display: flex;\n flex-shrink: 0;\n gap: var(--size-4);\n align-items: center;\n padding: var(--size-2) var(--size-4);\n font-size: var(--text-xs);\n color: var(--color-contrast-500);\n border-block-start: var(--border) solid var(--color-contrast-100);\n }\n\n .footer-hint {\n display: inline-flex;\n gap: var(--size-1);\n align-items: center;\n }\n\n .footer kbd {\n padding: var(--size-0-5) var(--size-1);\n font-family: inherit;\n font-size: var(--text-xs);\n background: var(--color-contrast-100);\n border: var(--border) solid var(--color-contrast-200);\n border-bottom-width: calc(var(--border) + 1px);\n border-radius: var(--rounded-sm);\n }\n\n /* Slotted item elements are pure data nodes — never rendered directly. */\n ::slotted(ore-command-palette-item) {\n display: none !important;\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/overlay/command-palette/command-palette.css?inline
|
|
2
|
+
var e = "@layer refine.base{:host{--_radius:var(--command-palette-radius,var(--rounded-lg));--_max-width:var(--command-palette-max-width,40rem);--_backdrop-bg:var(--command-palette-backdrop,color-mix(in oklch, var(--color-canvas) 40%, transparent));--_panel-bg:var(--command-palette-bg,var(--color-canvas));--_panel-border-color:var(--command-palette-border-color,var(--color-divider));--_option-hover-bg:var(--command-palette-option-hover-bg,var(--color-contrast-100));--_option-focus-bg:var(--command-palette-option-focus-bg,color-mix(in oklch, var(--color-primary) 12%, var(--color-contrast-100)));display:contents}dialog{all:unset;box-sizing:border-box;pointer-events:none;width:100%;max-width:100%;height:100%;max-height:100%;transition:display .2s allow-discrete, overlay .2s allow-discrete;padding-top:min(14vh, var(--size-24));background:0 0;border:none;justify-content:center;align-items:flex-start;margin:0;display:flex;position:fixed;inset:0;overflow:hidden}dialog:not([open]),dialog:not([open]) .panel{display:none}dialog[open]{pointer-events:auto}dialog::backdrop{background:var(--_backdrop-bg);opacity:1;-webkit-backdrop-filter:blur(var(--blur-xs));backdrop-filter:blur(var(--blur-xs));transition:opacity var(--transition-normal), overlay var(--transition-normal) allow-discrete, display var(--transition-normal) allow-discrete}@starting-style{dialog::backdrop{opacity:0}}dialog.closing::backdrop{opacity:0}.panel{box-sizing:border-box;width:var(--_max-width);max-width:calc(100vw - var(--size-8));max-height:min(28rem, calc(100dvh - var(--size-16)));background:var(--_panel-bg);border:var(--border) solid var(--_panel-border-color);border-radius:var(--_radius);box-shadow:var(--command-palette-shadow,var(--shadow-2xl));opacity:1;-webkit-backdrop-filter:blur(var(--blur-md));backdrop-filter:blur(var(--blur-md));transition:opacity .2s var(--ease-spring), transform .2s var(--ease-spring);flex-direction:column;display:flex;position:relative;overflow:hidden;transform:scale(1)translateY(0)}@starting-style{.panel{opacity:0;transform:scale(var(--overlay-enter-scale-dialog)) translateY(-4px)}}dialog.closing .panel{opacity:0;transform:scale(var(--overlay-enter-scale-dialog)) translateY(-4px);transition:opacity .15s var(--ease-spring), transform .15s var(--ease-spring)}@media (width<=640px){.panel{width:calc(100vw - var(--size-4));max-width:calc(100vw - var(--size-4))}dialog{padding-top:var(--size-4)}}.search{gap:var(--size-2);padding:var(--size-3) var(--size-4);border-bottom:var(--border) solid var(--color-contrast-100);flex-shrink:0;align-items:center;display:flex}.search-icon{color:var(--color-contrast-400);flex-shrink:0;display:inline-flex}.search-input{min-width:0;font:inherit;font-size:var(--text-md);color:var(--color-contrast-900);background:0 0;border:none;outline:none;flex:1;padding:0}.search-input::placeholder{color:var(--color-contrast-400)}.search-loader{border:2px solid var(--color-contrast-300);width:1em;height:1em;animation:command-palette-spin var(--transition-loader) infinite;border-radius:50%;flex-shrink:0;display:inline-flex}.search-loader:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-right-color:#0000}.search-loader:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){border-left-color:#0000}.search-loader[hidden]{display:none}@keyframes command-palette-spin{to{transform:rotate(360deg)}}.listbox{padding:var(--size-1);overscroll-behavior:contain;scrollbar-width:thin;flex:1;overflow-y:auto}.empty{padding:var(--size-6) var(--size-3);font-size:var(--text-sm);color:var(--color-contrast-400);text-align:center}.group-heading{padding:var(--size-2) var(--size-2-5) var(--size-1);font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-500);text-transform:uppercase;letter-spacing:var(--tracking-wide,.05em)}.item{gap:var(--size-2-5);padding:var(--size-2) var(--size-2-5);font-size:var(--text-sm);line-height:var(--leading-normal);color:var(--color-contrast-800);cursor:pointer;border-radius:var(--rounded-md);transition:background var(--transition-fast);align-items:center;display:flex}.item:hover:not([data-disabled]){background:var(--_option-hover-bg)}.item[data-focused]:not([data-disabled]){background:var(--_option-focus-bg)}.item[data-disabled]{color:var(--color-contrast-400);cursor:not-allowed;opacity:.6}.item-icon{color:var(--color-contrast-500);flex-shrink:0;align-items:center;display:inline-flex}.item-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.item-shortcut{gap:var(--size-1);flex-shrink:0;display:inline-flex}.item-shortcut kbd{padding:var(--size-0-5) var(--size-1-5);font-family:var(--font-mono,monospace);font-size:var(--text-xs);color:var(--color-contrast-500);background:var(--color-contrast-100);border:var(--border) solid var(--color-contrast-200);border-bottom-width:calc(var(--border) + 1px);border-radius:var(--rounded-sm)}.footer{gap:var(--size-4);padding:var(--size-2) var(--size-4);font-size:var(--text-xs);color:var(--color-contrast-500);border-top:var(--border) solid var(--color-contrast-100);flex-shrink:0;align-items:center;display:flex}.footer-hint{gap:var(--size-1);align-items:center;display:inline-flex}.footer kbd{padding:var(--size-0-5) var(--size-1);font-family:inherit;font-size:var(--text-xs);background:var(--color-contrast-100);border:var(--border) solid var(--color-contrast-200);border-bottom-width:calc(var(--border) + 1px);border-radius:var(--rounded-sm)}::slotted(ore-command-palette-item){display:none!important}}";
|
|
3
|
+
//#endregion
|
|
4
|
+
export { e as default };
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=command-palette.css.js.map
|