@vielzeug/buildit 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +124 -0
- package/dist/accordion-item.cjs +32 -0
- package/dist/accordion-item.cjs.map +1 -0
- package/dist/accordion-item.js +72 -0
- package/dist/accordion-item.js.map +1 -0
- package/dist/accordion.cjs +2 -0
- package/dist/accordion.cjs.map +1 -0
- package/dist/accordion.js +37 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert.cjs +31 -0
- package/dist/alert.cjs.map +1 -0
- package/dist/alert.js +85 -0
- package/dist/alert.js.map +1 -0
- package/dist/avatar.cjs +37 -0
- package/dist/avatar.cjs.map +1 -0
- package/dist/avatar.js +123 -0
- package/dist/avatar.js.map +1 -0
- package/dist/badge.cjs +7 -0
- package/dist/badge.cjs.map +1 -0
- package/dist/badge.js +60 -0
- package/dist/badge.js.map +1 -0
- package/dist/box.cjs +2 -0
- package/dist/box.cjs.map +1 -0
- package/dist/box.js +22 -0
- package/dist/box.js.map +1 -0
- package/dist/breadcrumb.cjs +21 -0
- package/dist/breadcrumb.cjs.map +1 -0
- package/dist/breadcrumb.js +58 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/buildit.cjs +1892 -0
- package/dist/buildit.cjs.map +1 -0
- package/dist/buildit.js +1892 -0
- package/dist/buildit.js.map +1 -0
- package/dist/button-group.cjs +6 -0
- package/dist/button-group.cjs.map +1 -0
- package/dist/button-group.js +31 -0
- package/dist/button-group.js.map +1 -0
- package/dist/button.cjs +30 -0
- package/dist/button.cjs.map +1 -0
- package/dist/button.js +115 -0
- package/dist/button.js.map +1 -0
- package/dist/card.cjs +23 -0
- package/dist/card.cjs.map +1 -0
- package/dist/card.js +99 -0
- package/dist/card.js.map +1 -0
- package/dist/checkbox-group.cjs +20 -0
- package/dist/checkbox-group.cjs.map +1 -0
- package/dist/checkbox-group.js +88 -0
- package/dist/checkbox-group.js.map +1 -0
- package/dist/checkbox.cjs +37 -0
- package/dist/checkbox.cjs.map +1 -0
- package/dist/checkbox.js +115 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chip.cjs +56 -0
- package/dist/chip.cjs.map +1 -0
- package/dist/chip.js +140 -0
- package/dist/chip.js.map +1 -0
- package/dist/combobox.cjs +93 -0
- package/dist/combobox.cjs.map +1 -0
- package/dist/combobox.js +401 -0
- package/dist/combobox.js.map +1 -0
- package/dist/content/avatar/avatar-group.css?inline.cjs +2 -0
- package/dist/content/avatar/avatar-group.css?inline.cjs.map +1 -0
- package/dist/content/avatar/avatar-group.css?inline.js +6 -0
- package/dist/content/avatar/avatar-group.css?inline.js.map +1 -0
- package/dist/content/avatar/avatar.css?inline.cjs +2 -0
- package/dist/content/avatar/avatar.css?inline.cjs.map +1 -0
- package/dist/content/avatar/avatar.css?inline.js +6 -0
- package/dist/content/avatar/avatar.css?inline.js.map +1 -0
- package/dist/content/avatar/avatar.d.ts +78 -0
- package/dist/content/avatar/avatar.d.ts.map +1 -0
- package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs +2 -0
- package/dist/content/breadcrumb/breadcrumb-item.css?inline.cjs.map +1 -0
- package/dist/content/breadcrumb/breadcrumb-item.css?inline.js +6 -0
- package/dist/content/breadcrumb/breadcrumb-item.css?inline.js.map +1 -0
- package/dist/content/breadcrumb/breadcrumb.css?inline.cjs +2 -0
- package/dist/content/breadcrumb/breadcrumb.css?inline.cjs.map +1 -0
- package/dist/content/breadcrumb/breadcrumb.css?inline.js +6 -0
- package/dist/content/breadcrumb/breadcrumb.css?inline.js.map +1 -0
- package/dist/content/breadcrumb/breadcrumb.d.ts +36 -0
- package/dist/content/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/dist/content/card/card.css?inline.cjs +2 -0
- package/dist/content/card/card.css?inline.cjs.map +1 -0
- package/dist/content/card/card.css?inline.js +6 -0
- package/dist/content/card/card.css?inline.js.map +1 -0
- package/dist/content/card/card.d.ts +66 -0
- package/dist/content/card/card.d.ts.map +1 -0
- package/dist/content/index.cjs +1 -0
- package/dist/content/index.d.ts +15 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +7 -0
- package/dist/content/pagination/pagination.css?inline.cjs +2 -0
- package/dist/content/pagination/pagination.css?inline.cjs.map +1 -0
- package/dist/content/pagination/pagination.css?inline.js +6 -0
- package/dist/content/pagination/pagination.css?inline.js.map +1 -0
- package/dist/content/pagination/pagination.d.ts +56 -0
- package/dist/content/pagination/pagination.d.ts.map +1 -0
- package/dist/content/separator/separator.css?inline.cjs +2 -0
- package/dist/content/separator/separator.css?inline.cjs.map +1 -0
- package/dist/content/separator/separator.css?inline.js +6 -0
- package/dist/content/separator/separator.css?inline.js.map +1 -0
- package/dist/content/separator/separator.d.ts +35 -0
- package/dist/content/separator/separator.d.ts.map +1 -0
- package/dist/content/table/table.css?inline.cjs +2 -0
- package/dist/content/table/table.css?inline.cjs.map +1 -0
- package/dist/content/table/table.css?inline.js +6 -0
- package/dist/content/table/table.css?inline.js.map +1 -0
- package/dist/content/table/table.d.ts +69 -0
- package/dist/content/table/table.d.ts.map +1 -0
- package/dist/content/text/text.css?inline.cjs +2 -0
- package/dist/content/text/text.css?inline.cjs.map +1 -0
- package/dist/content/text/text.css?inline.js +6 -0
- package/dist/content/text/text.css?inline.js.map +1 -0
- package/dist/content/text/text.d.ts +55 -0
- package/dist/content/text/text.d.ts.map +1 -0
- package/dist/craftit/dist/core/internal.cjs +2 -0
- package/dist/craftit/dist/core/internal.cjs.map +1 -0
- package/dist/craftit/dist/core/internal.js +25 -0
- package/dist/craftit/dist/core/internal.js.map +1 -0
- package/dist/craftit/dist/core/runtime-bindings.cjs +2 -0
- package/dist/craftit/dist/core/runtime-bindings.cjs.map +1 -0
- package/dist/craftit/dist/core/runtime-bindings.js +38 -0
- package/dist/craftit/dist/core/runtime-bindings.js.map +1 -0
- package/dist/craftit/dist/core/runtime-lifecycle.cjs +2 -0
- package/dist/craftit/dist/core/runtime-lifecycle.cjs.map +1 -0
- package/dist/craftit/dist/core/runtime-lifecycle.js +68 -0
- package/dist/craftit/dist/core/runtime-lifecycle.js.map +1 -0
- package/dist/craftit/dist/core/runtime.cjs +1 -0
- package/dist/craftit/dist/core/runtime.js +2 -0
- package/dist/craftit/dist/core/utilities.cjs +2 -0
- package/dist/craftit/dist/core/utilities.cjs.map +1 -0
- package/dist/craftit/dist/core/utilities.js +12 -0
- package/dist/craftit/dist/core/utilities.js.map +1 -0
- package/dist/craftit/dist/directives/attr.cjs +2 -0
- package/dist/craftit/dist/directives/attr.cjs.map +1 -0
- package/dist/craftit/dist/directives/attr.js +13 -0
- package/dist/craftit/dist/directives/attr.js.map +1 -0
- package/dist/craftit/dist/directives/bind.cjs +1 -0
- package/dist/craftit/dist/directives/bind.js +3 -0
- package/dist/craftit/dist/directives/choose.cjs +1 -0
- package/dist/craftit/dist/directives/choose.js +1 -0
- package/dist/craftit/dist/directives/classes.cjs +2 -0
- package/dist/craftit/dist/directives/classes.cjs.map +1 -0
- package/dist/craftit/dist/directives/classes.js +12 -0
- package/dist/craftit/dist/directives/classes.js.map +1 -0
- package/dist/craftit/dist/directives/each.cjs +2 -0
- package/dist/craftit/dist/directives/each.cjs.map +1 -0
- package/dist/craftit/dist/directives/each.js +96 -0
- package/dist/craftit/dist/directives/each.js.map +1 -0
- package/dist/craftit/dist/directives/index.cjs +1 -0
- package/dist/craftit/dist/directives/index.js +12 -0
- package/dist/craftit/dist/directives/match.cjs +1 -0
- package/dist/craftit/dist/directives/match.js +1 -0
- package/dist/craftit/dist/directives/memo.cjs +1 -0
- package/dist/craftit/dist/directives/memo.js +1 -0
- package/dist/craftit/dist/directives/raw.cjs +1 -0
- package/dist/craftit/dist/directives/raw.js +2 -0
- package/dist/craftit/dist/directives/spread.cjs +2 -0
- package/dist/craftit/dist/directives/spread.cjs.map +1 -0
- package/dist/craftit/dist/directives/spread.js +30 -0
- package/dist/craftit/dist/directives/spread.js.map +1 -0
- package/dist/craftit/dist/directives/style.cjs +1 -0
- package/dist/craftit/dist/directives/style.js +1 -0
- package/dist/craftit/dist/directives/until.cjs +1 -0
- package/dist/craftit/dist/directives/until.js +1 -0
- package/dist/craftit/dist/directives/when.cjs +2 -0
- package/dist/craftit/dist/directives/when.cjs.map +1 -0
- package/dist/craftit/dist/directives/when.js +14 -0
- package/dist/craftit/dist/directives/when.js.map +1 -0
- package/dist/craftit/dist/labs/a11y.cjs +2 -0
- package/dist/craftit/dist/labs/a11y.cjs.map +1 -0
- package/dist/craftit/dist/labs/a11y.js +38 -0
- package/dist/craftit/dist/labs/a11y.js.map +1 -0
- package/dist/craftit/dist/labs/list.cjs +2 -0
- package/dist/craftit/dist/labs/list.cjs.map +1 -0
- package/dist/craftit/dist/labs/list.js +87 -0
- package/dist/craftit/dist/labs/list.js.map +1 -0
- package/dist/craftit/dist/labs/observers.cjs +2 -0
- package/dist/craftit/dist/labs/observers.cjs.map +1 -0
- package/dist/craftit/dist/labs/observers.js +28 -0
- package/dist/craftit/dist/labs/observers.js.map +1 -0
- package/dist/craftit/dist/labs/overlay.cjs +2 -0
- package/dist/craftit/dist/labs/overlay.cjs.map +1 -0
- package/dist/craftit/dist/labs/overlay.js +49 -0
- package/dist/craftit/dist/labs/overlay.js.map +1 -0
- package/dist/craftit/dist/labs/selectable.cjs +2 -0
- package/dist/craftit/dist/labs/selectable.cjs.map +1 -0
- package/dist/craftit/dist/labs/selectable.js +29 -0
- package/dist/craftit/dist/labs/selectable.js.map +1 -0
- package/dist/craftit/dist/labs/selection.cjs +2 -0
- package/dist/craftit/dist/labs/selection.cjs.map +1 -0
- package/dist/craftit/dist/labs/selection.js +42 -0
- package/dist/craftit/dist/labs/selection.js.map +1 -0
- package/dist/craftit/dist/labs.cjs +1 -0
- package/dist/craftit/dist/labs.js +6 -0
- package/dist/custom-elements.json +2321 -0
- package/dist/dialog.cjs +33 -0
- package/dist/dialog.cjs.map +1 -0
- package/dist/dialog.js +94 -0
- package/dist/dialog.js.map +1 -0
- package/dist/disclosure/accordion/accordion.css?inline.cjs +2 -0
- package/dist/disclosure/accordion/accordion.css?inline.cjs.map +1 -0
- package/dist/disclosure/accordion/accordion.css?inline.js +6 -0
- package/dist/disclosure/accordion/accordion.css?inline.js.map +1 -0
- package/dist/disclosure/accordion/accordion.d.ts +47 -0
- package/dist/disclosure/accordion/accordion.d.ts.map +1 -0
- package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs +2 -0
- package/dist/disclosure/accordion-item/accordion-item.css?inline.cjs.map +1 -0
- package/dist/disclosure/accordion-item/accordion-item.css?inline.js +6 -0
- package/dist/disclosure/accordion-item/accordion-item.css?inline.js.map +1 -0
- package/dist/disclosure/accordion-item/accordion-item.d.ts +62 -0
- package/dist/disclosure/accordion-item/accordion-item.d.ts.map +1 -0
- package/dist/disclosure/index.cjs +1 -0
- package/dist/disclosure/index.d.ts +11 -0
- package/dist/disclosure/index.d.ts.map +1 -0
- package/dist/disclosure/index.js +5 -0
- package/dist/disclosure/tab-item/tab-item.css?inline.cjs +2 -0
- package/dist/disclosure/tab-item/tab-item.css?inline.cjs.map +1 -0
- package/dist/disclosure/tab-item/tab-item.css?inline.js +6 -0
- package/dist/disclosure/tab-item/tab-item.css?inline.js.map +1 -0
- package/dist/disclosure/tab-item/tab-item.d.ts +39 -0
- package/dist/disclosure/tab-item/tab-item.d.ts.map +1 -0
- package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs +2 -0
- package/dist/disclosure/tab-panel/tab-panel.css?inline.cjs.map +1 -0
- package/dist/disclosure/tab-panel/tab-panel.css?inline.js +6 -0
- package/dist/disclosure/tab-panel/tab-panel.css?inline.js.map +1 -0
- package/dist/disclosure/tab-panel/tab-panel.d.ts +30 -0
- package/dist/disclosure/tab-panel/tab-panel.d.ts.map +1 -0
- package/dist/disclosure/tabs/tabs.css?inline.cjs +2 -0
- package/dist/disclosure/tabs/tabs.css?inline.cjs.map +1 -0
- package/dist/disclosure/tabs/tabs.css?inline.js +6 -0
- package/dist/disclosure/tabs/tabs.css?inline.js.map +1 -0
- package/dist/disclosure/tabs/tabs.d.ts +64 -0
- package/dist/disclosure/tabs/tabs.d.ts.map +1 -0
- package/dist/drawer.cjs +31 -0
- package/dist/drawer.cjs.map +1 -0
- package/dist/drawer.js +98 -0
- package/dist/drawer.js.map +1 -0
- package/dist/feedback/alert/alert.css?inline.cjs +2 -0
- package/dist/feedback/alert/alert.css?inline.cjs.map +1 -0
- package/dist/feedback/alert/alert.css?inline.js +6 -0
- package/dist/feedback/alert/alert.css?inline.js.map +1 -0
- package/dist/feedback/alert/alert.d.ts +63 -0
- package/dist/feedback/alert/alert.d.ts.map +1 -0
- package/dist/feedback/badge/badge.css?inline.cjs +2 -0
- package/dist/feedback/badge/badge.css?inline.cjs.map +1 -0
- package/dist/feedback/badge/badge.css?inline.js +6 -0
- package/dist/feedback/badge/badge.css?inline.js.map +1 -0
- package/dist/feedback/badge/badge.d.ts +67 -0
- package/dist/feedback/badge/badge.d.ts.map +1 -0
- package/dist/feedback/chip/chip.css?inline.cjs +2 -0
- package/dist/feedback/chip/chip.css?inline.cjs.map +1 -0
- package/dist/feedback/chip/chip.css?inline.js +6 -0
- package/dist/feedback/chip/chip.css?inline.js.map +1 -0
- package/dist/feedback/chip/chip.d.ts +124 -0
- package/dist/feedback/chip/chip.d.ts.map +1 -0
- package/dist/feedback/index.cjs +1 -0
- package/dist/feedback/index.d.ts +13 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +6 -0
- package/dist/feedback/progress/progress.css?inline.cjs +2 -0
- package/dist/feedback/progress/progress.css?inline.cjs.map +1 -0
- package/dist/feedback/progress/progress.css?inline.js +6 -0
- package/dist/feedback/progress/progress.css?inline.js.map +1 -0
- package/dist/feedback/progress/progress.d.ts +64 -0
- package/dist/feedback/progress/progress.d.ts.map +1 -0
- package/dist/feedback/skeleton/skeleton.css?inline.cjs +2 -0
- package/dist/feedback/skeleton/skeleton.css?inline.cjs.map +1 -0
- package/dist/feedback/skeleton/skeleton.css?inline.js +6 -0
- package/dist/feedback/skeleton/skeleton.css?inline.js.map +1 -0
- package/dist/feedback/skeleton/skeleton.d.ts +61 -0
- package/dist/feedback/skeleton/skeleton.d.ts.map +1 -0
- package/dist/feedback/toast/index.d.ts +2 -0
- package/dist/feedback/toast/index.d.ts.map +1 -0
- package/dist/feedback/toast/toast.css?inline.cjs +2 -0
- package/dist/feedback/toast/toast.css?inline.cjs.map +1 -0
- package/dist/feedback/toast/toast.css?inline.js +6 -0
- package/dist/feedback/toast/toast.css?inline.js.map +1 -0
- package/dist/feedback/toast/toast.d.ts +95 -0
- package/dist/feedback/toast/toast.d.ts.map +1 -0
- package/dist/file-input.cjs +66 -0
- package/dist/file-input.cjs.map +1 -0
- package/dist/file-input.js +210 -0
- package/dist/file-input.js.map +1 -0
- package/dist/form.cjs +11 -0
- package/dist/form.cjs.map +1 -0
- package/dist/form.js +49 -0
- package/dist/form.js.map +1 -0
- package/dist/grid-item.cjs +2 -0
- package/dist/grid-item.cjs.map +1 -0
- package/dist/grid-item.js +28 -0
- package/dist/grid-item.js.map +1 -0
- package/dist/grid.cjs +2 -0
- package/dist/grid.cjs.map +1 -0
- package/dist/grid.js +90 -0
- package/dist/grid.js.map +1 -0
- package/dist/icons.cjs +176 -0
- package/dist/icons.cjs.map +1 -0
- package/dist/icons.d.ts +15 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +181 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/input.cjs +48 -0
- package/dist/input.cjs.map +1 -0
- package/dist/input.js +182 -0
- package/dist/input.js.map +1 -0
- package/dist/inputs/button/button.css?inline.cjs +2 -0
- package/dist/inputs/button/button.css?inline.cjs.map +1 -0
- package/dist/inputs/button/button.css?inline.js +6 -0
- package/dist/inputs/button/button.css?inline.js.map +1 -0
- package/dist/inputs/button/button.d.ts +73 -0
- package/dist/inputs/button/button.d.ts.map +1 -0
- package/dist/inputs/button-group/button-group.css?inline.cjs +2 -0
- package/dist/inputs/button-group/button-group.css?inline.cjs.map +1 -0
- package/dist/inputs/button-group/button-group.css?inline.js +6 -0
- package/dist/inputs/button-group/button-group.css?inline.js.map +1 -0
- package/dist/inputs/button-group/button-group.d.ts +52 -0
- package/dist/inputs/button-group/button-group.d.ts.map +1 -0
- package/dist/inputs/checkbox/checkbox.css?inline.cjs +2 -0
- package/dist/inputs/checkbox/checkbox.css?inline.cjs.map +1 -0
- package/dist/inputs/checkbox/checkbox.css?inline.js +6 -0
- package/dist/inputs/checkbox/checkbox.css?inline.js.map +1 -0
- package/dist/inputs/checkbox/checkbox.d.ts +43 -0
- package/dist/inputs/checkbox/checkbox.d.ts.map +1 -0
- package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs +2 -0
- package/dist/inputs/checkbox-group/checkbox-group.css?inline.cjs.map +1 -0
- package/dist/inputs/checkbox-group/checkbox-group.css?inline.js +6 -0
- package/dist/inputs/checkbox-group/checkbox-group.css?inline.js.map +1 -0
- package/dist/inputs/checkbox-group/checkbox-group.d.ts +56 -0
- package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -0
- package/dist/inputs/combobox/combobox-options.cjs +2 -0
- package/dist/inputs/combobox/combobox-options.cjs.map +1 -0
- package/dist/inputs/combobox/combobox-options.d.ts +7 -0
- package/dist/inputs/combobox/combobox-options.d.ts.map +1 -0
- package/dist/inputs/combobox/combobox-options.js +36 -0
- package/dist/inputs/combobox/combobox-options.js.map +1 -0
- package/dist/inputs/combobox/combobox-virtualizer.cjs +2 -0
- package/dist/inputs/combobox/combobox-virtualizer.cjs.map +1 -0
- package/dist/inputs/combobox/combobox-virtualizer.d.ts +20 -0
- package/dist/inputs/combobox/combobox-virtualizer.d.ts.map +1 -0
- package/dist/inputs/combobox/combobox-virtualizer.js +71 -0
- package/dist/inputs/combobox/combobox-virtualizer.js.map +1 -0
- package/dist/inputs/combobox/combobox.css?inline.cjs +2 -0
- package/dist/inputs/combobox/combobox.css?inline.cjs.map +1 -0
- package/dist/inputs/combobox/combobox.css?inline.js +6 -0
- package/dist/inputs/combobox/combobox.css?inline.js.map +1 -0
- package/dist/inputs/combobox/combobox.d.ts +28 -0
- package/dist/inputs/combobox/combobox.d.ts.map +1 -0
- package/dist/inputs/combobox/combobox.types.d.ts +36 -0
- package/dist/inputs/combobox/combobox.types.d.ts.map +1 -0
- package/dist/inputs/file-input/file-input.css?inline.cjs +2 -0
- package/dist/inputs/file-input/file-input.css?inline.cjs.map +1 -0
- package/dist/inputs/file-input/file-input.css?inline.js +6 -0
- package/dist/inputs/file-input/file-input.css?inline.js.map +1 -0
- package/dist/inputs/file-input/file-input.d.ts +94 -0
- package/dist/inputs/file-input/file-input.d.ts.map +1 -0
- package/dist/inputs/form/form.css?inline.cjs +2 -0
- package/dist/inputs/form/form.css?inline.cjs.map +1 -0
- package/dist/inputs/form/form.css?inline.js +6 -0
- package/dist/inputs/form/form.css?inline.js.map +1 -0
- package/dist/inputs/form/form.d.ts +61 -0
- package/dist/inputs/form/form.d.ts.map +1 -0
- package/dist/inputs/index.cjs +1 -0
- package/dist/inputs/index.d.ts +38 -0
- package/dist/inputs/index.d.ts.map +1 -0
- package/dist/inputs/index.js +18 -0
- package/dist/inputs/input/input.css?inline.cjs +2 -0
- package/dist/inputs/input/input.css?inline.cjs.map +1 -0
- package/dist/inputs/input/input.css?inline.js +6 -0
- package/dist/inputs/input/input.css?inline.js.map +1 -0
- package/dist/inputs/input/input.d.ts +82 -0
- package/dist/inputs/input/input.d.ts.map +1 -0
- package/dist/inputs/number-input/number-input.css?inline.cjs +2 -0
- package/dist/inputs/number-input/number-input.css?inline.cjs.map +1 -0
- package/dist/inputs/number-input/number-input.css?inline.js +6 -0
- package/dist/inputs/number-input/number-input.css?inline.js.map +1 -0
- package/dist/inputs/number-input/number-input.d.ts +76 -0
- package/dist/inputs/number-input/number-input.d.ts.map +1 -0
- package/dist/inputs/otp-input/otp-input.css?inline.cjs +2 -0
- package/dist/inputs/otp-input/otp-input.css?inline.cjs.map +1 -0
- package/dist/inputs/otp-input/otp-input.css?inline.js +6 -0
- package/dist/inputs/otp-input/otp-input.css?inline.js.map +1 -0
- package/dist/inputs/otp-input/otp-input.d.ts +71 -0
- package/dist/inputs/otp-input/otp-input.d.ts.map +1 -0
- package/dist/inputs/radio/radio.css?inline.cjs +2 -0
- package/dist/inputs/radio/radio.css?inline.cjs.map +1 -0
- package/dist/inputs/radio/radio.css?inline.js +6 -0
- package/dist/inputs/radio/radio.css?inline.js.map +1 -0
- package/dist/inputs/radio/radio.d.ts +41 -0
- package/dist/inputs/radio/radio.d.ts.map +1 -0
- package/dist/inputs/radio-group/radio-group.css?inline.cjs +2 -0
- package/dist/inputs/radio-group/radio-group.css?inline.cjs.map +1 -0
- package/dist/inputs/radio-group/radio-group.css?inline.js +6 -0
- package/dist/inputs/radio-group/radio-group.css?inline.js.map +1 -0
- package/dist/inputs/radio-group/radio-group.d.ts +61 -0
- package/dist/inputs/radio-group/radio-group.d.ts.map +1 -0
- package/dist/inputs/rating/rating.css?inline.cjs +2 -0
- package/dist/inputs/rating/rating.css?inline.cjs.map +1 -0
- package/dist/inputs/rating/rating.css?inline.js +6 -0
- package/dist/inputs/rating/rating.css?inline.js.map +1 -0
- package/dist/inputs/rating/rating.d.ts +48 -0
- package/dist/inputs/rating/rating.d.ts.map +1 -0
- package/dist/inputs/select/select.css?inline.cjs +2 -0
- package/dist/inputs/select/select.css?inline.cjs.map +1 -0
- package/dist/inputs/select/select.css?inline.js +6 -0
- package/dist/inputs/select/select.css?inline.js.map +1 -0
- package/dist/inputs/select/select.d.ts +79 -0
- package/dist/inputs/select/select.d.ts.map +1 -0
- package/dist/inputs/shared/base-props.d.ts +39 -0
- package/dist/inputs/shared/base-props.d.ts.map +1 -0
- package/dist/inputs/shared/composables/index.cjs +1 -0
- package/dist/inputs/shared/composables/index.d.ts +3 -0
- package/dist/inputs/shared/composables/index.d.ts.map +1 -0
- package/dist/inputs/shared/composables/index.js +2 -0
- package/dist/inputs/shared/composables/use-text-field.cjs +2 -0
- package/dist/inputs/shared/composables/use-text-field.cjs.map +1 -0
- package/dist/inputs/shared/composables/use-text-field.d.ts +33 -0
- package/dist/inputs/shared/composables/use-text-field.d.ts.map +1 -0
- package/dist/inputs/shared/composables/use-text-field.js +41 -0
- package/dist/inputs/shared/composables/use-text-field.js.map +1 -0
- package/dist/inputs/shared/composables/use-toggle-field.cjs +2 -0
- package/dist/inputs/shared/composables/use-toggle-field.cjs.map +1 -0
- package/dist/inputs/shared/composables/use-toggle-field.d.ts +18 -0
- package/dist/inputs/shared/composables/use-toggle-field.d.ts.map +1 -0
- package/dist/inputs/shared/composables/use-toggle-field.js +26 -0
- package/dist/inputs/shared/composables/use-toggle-field.js.map +1 -0
- package/dist/inputs/shared/design-presets.cjs +2 -0
- package/dist/inputs/shared/design-presets.cjs.map +1 -0
- package/dist/inputs/shared/design-presets.d.ts +97 -0
- package/dist/inputs/shared/design-presets.d.ts.map +1 -0
- package/dist/inputs/shared/design-presets.js +92 -0
- package/dist/inputs/shared/design-presets.js.map +1 -0
- package/dist/inputs/shared/dom-sync/dropdown.cjs +2 -0
- package/dist/inputs/shared/dom-sync/dropdown.cjs.map +1 -0
- package/dist/inputs/shared/dom-sync/dropdown.d.ts +7 -0
- package/dist/inputs/shared/dom-sync/dropdown.d.ts.map +1 -0
- package/dist/inputs/shared/dom-sync/dropdown.js +30 -0
- package/dist/inputs/shared/dom-sync/dropdown.js.map +1 -0
- package/dist/inputs/shared/dom-sync/field-sync.cjs +2 -0
- package/dist/inputs/shared/dom-sync/field-sync.cjs.map +1 -0
- package/dist/inputs/shared/dom-sync/field-sync.d.ts +36 -0
- package/dist/inputs/shared/dom-sync/field-sync.d.ts.map +1 -0
- package/dist/inputs/shared/dom-sync/field-sync.js +37 -0
- package/dist/inputs/shared/dom-sync/field-sync.js.map +1 -0
- package/dist/inputs/shared/dom-sync/form-context.cjs +2 -0
- package/dist/inputs/shared/dom-sync/form-context.cjs.map +1 -0
- package/dist/inputs/shared/dom-sync/form-context.d.ts +18 -0
- package/dist/inputs/shared/dom-sync/form-context.d.ts.map +1 -0
- package/dist/inputs/shared/dom-sync/form-context.js +20 -0
- package/dist/inputs/shared/dom-sync/form-context.js.map +1 -0
- package/dist/inputs/shared/dom-sync/index.cjs +1 -0
- package/dist/inputs/shared/dom-sync/index.d.ts +5 -0
- package/dist/inputs/shared/dom-sync/index.d.ts.map +1 -0
- package/dist/inputs/shared/dom-sync/index.js +4 -0
- package/dist/inputs/shared/dom-sync/label-sync.cjs +2 -0
- package/dist/inputs/shared/dom-sync/label-sync.cjs.map +1 -0
- package/dist/inputs/shared/dom-sync/label-sync.d.ts +16 -0
- package/dist/inputs/shared/dom-sync/label-sync.d.ts.map +1 -0
- package/dist/inputs/shared/dom-sync/label-sync.js +12 -0
- package/dist/inputs/shared/dom-sync/label-sync.js.map +1 -0
- package/dist/inputs/shared/form-context.cjs +2 -0
- package/dist/inputs/shared/form-context.cjs.map +1 -0
- package/dist/inputs/shared/form-context.d.ts +19 -0
- package/dist/inputs/shared/form-context.d.ts.map +1 -0
- package/dist/inputs/shared/form-context.js +7 -0
- package/dist/inputs/shared/form-context.js.map +1 -0
- package/dist/inputs/shared/utils/assistive-text.cjs +2 -0
- package/dist/inputs/shared/utils/assistive-text.cjs.map +1 -0
- package/dist/inputs/shared/utils/assistive-text.d.ts +24 -0
- package/dist/inputs/shared/utils/assistive-text.d.ts.map +1 -0
- package/dist/inputs/shared/utils/assistive-text.js +37 -0
- package/dist/inputs/shared/utils/assistive-text.js.map +1 -0
- package/dist/inputs/shared/utils/choice-change.cjs +2 -0
- package/dist/inputs/shared/utils/choice-change.cjs.map +1 -0
- package/dist/inputs/shared/utils/choice-change.d.ts +8 -0
- package/dist/inputs/shared/utils/choice-change.d.ts.map +1 -0
- package/dist/inputs/shared/utils/choice-change.js +13 -0
- package/dist/inputs/shared/utils/choice-change.js.map +1 -0
- package/dist/inputs/shared/utils/controlled-csv.cjs +2 -0
- package/dist/inputs/shared/utils/controlled-csv.cjs.map +1 -0
- package/dist/inputs/shared/utils/controlled-csv.d.ts +8 -0
- package/dist/inputs/shared/utils/controlled-csv.d.ts.map +1 -0
- package/dist/inputs/shared/utils/controlled-csv.js +15 -0
- package/dist/inputs/shared/utils/controlled-csv.js.map +1 -0
- package/dist/inputs/shared/utils/field-values.cjs +2 -0
- package/dist/inputs/shared/utils/field-values.cjs.map +1 -0
- package/dist/inputs/shared/utils/field-values.d.ts +5 -0
- package/dist/inputs/shared/utils/field-values.d.ts.map +1 -0
- package/dist/inputs/shared/utils/field-values.js +13 -0
- package/dist/inputs/shared/utils/field-values.js.map +1 -0
- package/dist/inputs/shared/utils/index.d.ts +5 -0
- package/dist/inputs/shared/utils/index.d.ts.map +1 -0
- package/dist/inputs/shared/validation/index.cjs +2 -0
- package/dist/inputs/shared/validation/index.cjs.map +1 -0
- package/dist/inputs/shared/validation/index.d.ts +14 -0
- package/dist/inputs/shared/validation/index.d.ts.map +1 -0
- package/dist/inputs/shared/validation/index.js +13 -0
- package/dist/inputs/shared/validation/index.js.map +1 -0
- package/dist/inputs/slider/slider.css?inline.cjs +2 -0
- package/dist/inputs/slider/slider.css?inline.cjs.map +1 -0
- package/dist/inputs/slider/slider.css?inline.js +6 -0
- package/dist/inputs/slider/slider.css?inline.js.map +1 -0
- package/dist/inputs/slider/slider.d.ts +82 -0
- package/dist/inputs/slider/slider.d.ts.map +1 -0
- package/dist/inputs/switch/switch.css?inline.cjs +2 -0
- package/dist/inputs/switch/switch.css?inline.cjs.map +1 -0
- package/dist/inputs/switch/switch.css?inline.js +6 -0
- package/dist/inputs/switch/switch.css?inline.js.map +1 -0
- package/dist/inputs/switch/switch.d.ts +40 -0
- package/dist/inputs/switch/switch.d.ts.map +1 -0
- package/dist/inputs/textarea/textarea.css?inline.cjs +2 -0
- package/dist/inputs/textarea/textarea.css?inline.cjs.map +1 -0
- package/dist/inputs/textarea/textarea.css?inline.js +6 -0
- package/dist/inputs/textarea/textarea.css?inline.js.map +1 -0
- package/dist/inputs/textarea/textarea.d.ts +57 -0
- package/dist/inputs/textarea/textarea.d.ts.map +1 -0
- package/dist/layout/box/box.css?inline.cjs +2 -0
- package/dist/layout/box/box.css?inline.cjs.map +1 -0
- package/dist/layout/box/box.css?inline.js +6 -0
- package/dist/layout/box/box.css?inline.js.map +1 -0
- package/dist/layout/box/box.d.ts +52 -0
- package/dist/layout/box/box.d.ts.map +1 -0
- package/dist/layout/grid/grid.css?inline.cjs +2 -0
- package/dist/layout/grid/grid.css?inline.cjs.map +1 -0
- package/dist/layout/grid/grid.css?inline.js +6 -0
- package/dist/layout/grid/grid.css?inline.js.map +1 -0
- package/dist/layout/grid/grid.d.ts +105 -0
- package/dist/layout/grid/grid.d.ts.map +1 -0
- package/dist/layout/grid-item/grid-item.css?inline.cjs +2 -0
- package/dist/layout/grid-item/grid-item.css?inline.cjs.map +1 -0
- package/dist/layout/grid-item/grid-item.css?inline.js +6 -0
- package/dist/layout/grid-item/grid-item.css?inline.js.map +1 -0
- package/dist/layout/grid-item/grid-item.d.ts +47 -0
- package/dist/layout/grid-item/grid-item.d.ts.map +1 -0
- package/dist/layout/index.cjs +1 -0
- package/dist/layout/index.d.ts +9 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +4 -0
- package/dist/layout/sidebar/sidebar-group.css?inline.cjs +2 -0
- package/dist/layout/sidebar/sidebar-group.css?inline.cjs.map +1 -0
- package/dist/layout/sidebar/sidebar-group.css?inline.js +6 -0
- package/dist/layout/sidebar/sidebar-group.css?inline.js.map +1 -0
- package/dist/layout/sidebar/sidebar-item.css?inline.cjs +2 -0
- package/dist/layout/sidebar/sidebar-item.css?inline.cjs.map +1 -0
- package/dist/layout/sidebar/sidebar-item.css?inline.js +6 -0
- package/dist/layout/sidebar/sidebar-item.css?inline.js.map +1 -0
- package/dist/layout/sidebar/sidebar.css?inline.cjs +2 -0
- package/dist/layout/sidebar/sidebar.css?inline.cjs.map +1 -0
- package/dist/layout/sidebar/sidebar.css?inline.js +6 -0
- package/dist/layout/sidebar/sidebar.css?inline.js.map +1 -0
- package/dist/layout/sidebar/sidebar.d.ts +190 -0
- package/dist/layout/sidebar/sidebar.d.ts.map +1 -0
- package/dist/menu.cjs +133 -0
- package/dist/menu.cjs.map +1 -0
- package/dist/menu.js +296 -0
- package/dist/menu.js.map +1 -0
- package/dist/number-input.cjs +55 -0
- package/dist/number-input.cjs.map +1 -0
- package/dist/number-input.js +158 -0
- package/dist/number-input.js.map +1 -0
- package/dist/otp-input.cjs +22 -0
- package/dist/otp-input.cjs.map +1 -0
- package/dist/otp-input.js +120 -0
- package/dist/otp-input.js.map +1 -0
- package/dist/overlay/dialog/dialog.css?inline.cjs +2 -0
- package/dist/overlay/dialog/dialog.css?inline.cjs.map +1 -0
- package/dist/overlay/dialog/dialog.css?inline.js +6 -0
- package/dist/overlay/dialog/dialog.css?inline.js.map +1 -0
- package/dist/overlay/dialog/dialog.d.ts +98 -0
- package/dist/overlay/dialog/dialog.d.ts.map +1 -0
- package/dist/overlay/drawer/drawer.css?inline.cjs +2 -0
- package/dist/overlay/drawer/drawer.css?inline.cjs.map +1 -0
- package/dist/overlay/drawer/drawer.css?inline.js +6 -0
- package/dist/overlay/drawer/drawer.css?inline.js.map +1 -0
- package/dist/overlay/drawer/drawer.d.ts +98 -0
- package/dist/overlay/drawer/drawer.d.ts.map +1 -0
- package/dist/overlay/index.cjs +1 -0
- package/dist/overlay/index.d.ts +11 -0
- package/dist/overlay/index.d.ts.map +1 -0
- package/dist/overlay/index.js +5 -0
- package/dist/overlay/menu/menu.css?inline.cjs +2 -0
- package/dist/overlay/menu/menu.css?inline.cjs.map +1 -0
- package/dist/overlay/menu/menu.css?inline.js +6 -0
- package/dist/overlay/menu/menu.css?inline.js.map +1 -0
- package/dist/overlay/menu/menu.d.ts +45 -0
- package/dist/overlay/menu/menu.d.ts.map +1 -0
- package/dist/overlay/popover/popover.css?inline.cjs +2 -0
- package/dist/overlay/popover/popover.css?inline.cjs.map +1 -0
- package/dist/overlay/popover/popover.css?inline.js +6 -0
- package/dist/overlay/popover/popover.css?inline.js.map +1 -0
- package/dist/overlay/popover/popover.d.ts +56 -0
- package/dist/overlay/popover/popover.d.ts.map +1 -0
- package/dist/overlay/tooltip/tooltip.css?inline.cjs +2 -0
- package/dist/overlay/tooltip/tooltip.css?inline.cjs.map +1 -0
- package/dist/overlay/tooltip/tooltip.css?inline.js +6 -0
- package/dist/overlay/tooltip/tooltip.css?inline.js.map +1 -0
- package/dist/overlay/tooltip/tooltip.d.ts +55 -0
- package/dist/overlay/tooltip/tooltip.d.ts.map +1 -0
- package/dist/pagination.cjs +102 -0
- package/dist/pagination.cjs.map +1 -0
- package/dist/pagination.js +168 -0
- package/dist/pagination.js.map +1 -0
- package/dist/popover.cjs +16 -0
- package/dist/popover.cjs.map +1 -0
- package/dist/popover.js +110 -0
- package/dist/popover.js.map +1 -0
- package/dist/progress.cjs +51 -0
- package/dist/progress.cjs.map +1 -0
- package/dist/progress.js +90 -0
- package/dist/progress.js.map +1 -0
- package/dist/radio-group.cjs +20 -0
- package/dist/radio-group.cjs.map +1 -0
- package/dist/radio-group.js +104 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/radio.cjs +16 -0
- package/dist/radio.cjs.map +1 -0
- package/dist/radio.js +135 -0
- package/dist/radio.js.map +1 -0
- package/dist/rating.cjs +37 -0
- package/dist/rating.cjs.map +1 -0
- package/dist/rating.js +123 -0
- package/dist/rating.js.map +1 -0
- package/dist/select.cjs +77 -0
- package/dist/select.cjs.map +1 -0
- package/dist/select.js +317 -0
- package/dist/select.js.map +1 -0
- package/dist/separator.cjs +26 -0
- package/dist/separator.cjs.map +1 -0
- package/dist/separator.js +46 -0
- package/dist/separator.js.map +1 -0
- package/dist/sidebar.cjs +69 -0
- package/dist/sidebar.cjs.map +1 -0
- package/dist/sidebar.js +202 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/skeleton.cjs +10 -0
- package/dist/skeleton.cjs.map +1 -0
- package/dist/skeleton.js +56 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/slider.cjs +24 -0
- package/dist/slider.cjs.map +1 -0
- package/dist/slider.js +209 -0
- package/dist/slider.js.map +1 -0
- package/dist/stateit/dist/computed.cjs +2 -0
- package/dist/stateit/dist/computed.cjs.map +1 -0
- package/dist/stateit/dist/computed.js +65 -0
- package/dist/stateit/dist/computed.js.map +1 -0
- package/dist/stateit/dist/effect.cjs +2 -0
- package/dist/stateit/dist/effect.cjs.map +1 -0
- package/dist/stateit/dist/effect.js +53 -0
- package/dist/stateit/dist/effect.js.map +1 -0
- package/dist/stateit/dist/index.cjs +1 -0
- package/dist/stateit/dist/index.js +5 -0
- package/dist/stateit/dist/runtime.cjs +2 -0
- package/dist/stateit/dist/runtime.cjs.map +1 -0
- package/dist/stateit/dist/runtime.js +43 -0
- package/dist/stateit/dist/runtime.js.map +1 -0
- package/dist/stateit/dist/signal.cjs +2 -0
- package/dist/stateit/dist/signal.cjs.map +1 -0
- package/dist/stateit/dist/signal.js +27 -0
- package/dist/stateit/dist/signal.js.map +1 -0
- package/dist/stateit/dist/store.cjs +2 -0
- package/dist/stateit/dist/store.cjs.map +1 -0
- package/dist/stateit/dist/store.js +17 -0
- package/dist/stateit/dist/store.js.map +1 -0
- package/dist/stateit/dist/types.cjs +2 -0
- package/dist/stateit/dist/types.cjs.map +1 -0
- package/dist/stateit/dist/types.js +6 -0
- package/dist/stateit/dist/types.js.map +1 -0
- package/dist/styles/animation.css +87 -0
- package/dist/styles/index.cjs +2 -0
- package/dist/styles/index.cjs.map +1 -0
- package/dist/styles/index.d.ts +48 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/index.js +26 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/styles/layer.css +18 -0
- package/dist/styles/mixins/accessibility.css.cjs +15 -0
- package/dist/styles/mixins/accessibility.css.cjs.map +1 -0
- package/dist/styles/mixins/accessibility.css.d.ts +46 -0
- package/dist/styles/mixins/accessibility.css.d.ts.map +1 -0
- package/dist/styles/mixins/accessibility.css.js +20 -0
- package/dist/styles/mixins/accessibility.css.js.map +1 -0
- package/dist/styles/mixins/animation.css.cjs +71 -0
- package/dist/styles/mixins/animation.css.cjs.map +1 -0
- package/dist/styles/mixins/animation.css.d.ts +22 -0
- package/dist/styles/mixins/animation.css.d.ts.map +1 -0
- package/dist/styles/mixins/animation.css.js +90 -0
- package/dist/styles/mixins/animation.css.js.map +1 -0
- package/dist/styles/mixins/shape.css.cjs +72 -0
- package/dist/styles/mixins/shape.css.cjs.map +1 -0
- package/dist/styles/mixins/shape.css.d.ts +97 -0
- package/dist/styles/mixins/shape.css.d.ts.map +1 -0
- package/dist/styles/mixins/shape.css.js +104 -0
- package/dist/styles/mixins/shape.css.js.map +1 -0
- package/dist/styles/mixins/states.css.cjs +18 -0
- package/dist/styles/mixins/states.css.cjs.map +1 -0
- package/dist/styles/mixins/states.css.d.ts +61 -0
- package/dist/styles/mixins/states.css.d.ts.map +1 -0
- package/dist/styles/mixins/states.css.js +26 -0
- package/dist/styles/mixins/states.css.js.map +1 -0
- package/dist/styles/mixins/theme.css.cjs +146 -0
- package/dist/styles/mixins/theme.css.cjs.map +1 -0
- package/dist/styles/mixins/theme.css.d.ts +93 -0
- package/dist/styles/mixins/theme.css.d.ts.map +1 -0
- package/dist/styles/mixins/theme.css.js +151 -0
- package/dist/styles/mixins/theme.css.js.map +1 -0
- package/dist/styles/mixins/variants.css.cjs +84 -0
- package/dist/styles/mixins/variants.css.cjs.map +1 -0
- package/dist/styles/mixins/variants.css.d.ts +22 -0
- package/dist/styles/mixins/variants.css.d.ts.map +1 -0
- package/dist/styles/mixins/variants.css.js +89 -0
- package/dist/styles/mixins/variants.css.js.map +1 -0
- package/dist/styles/preflight.css +237 -0
- package/dist/styles/styles.css +5 -0
- package/dist/styles/theme.css +457 -0
- package/dist/switch.cjs +16 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.js +82 -0
- package/dist/switch.js.map +1 -0
- package/dist/tab-item.cjs +17 -0
- package/dist/tab-item.cjs.map +1 -0
- package/dist/tab-item.js +57 -0
- package/dist/tab-item.js.map +1 -0
- package/dist/tab-panel.cjs +14 -0
- package/dist/tab-panel.cjs.map +1 -0
- package/dist/tab-panel.js +51 -0
- package/dist/tab-panel.js.map +1 -0
- package/dist/table.cjs +2 -0
- package/dist/table.cjs.map +1 -0
- package/dist/table.js +101 -0
- package/dist/table.js.map +1 -0
- package/dist/tabs.cjs +17 -0
- package/dist/tabs.cjs.map +1 -0
- package/dist/tabs.js +98 -0
- package/dist/tabs.js.map +1 -0
- package/dist/text.cjs +2 -0
- package/dist/text.cjs.map +1 -0
- package/dist/text.js +30 -0
- package/dist/text.js.map +1 -0
- package/dist/textarea.cjs +16 -0
- package/dist/textarea.cjs.map +1 -0
- package/dist/textarea.js +122 -0
- package/dist/textarea.js.map +1 -0
- package/dist/toast.cjs +63 -0
- package/dist/toast.cjs.map +1 -0
- package/dist/toast.js +221 -0
- package/dist/toast.js.map +1 -0
- package/dist/tooltip.cjs +15 -0
- package/dist/tooltip.cjs.map +1 -0
- package/dist/tooltip.js +111 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/shared.d.ts +120 -0
- package/dist/types/shared.d.ts.map +1 -0
- package/dist/utils/animation.cjs +2 -0
- package/dist/utils/animation.cjs.map +1 -0
- package/dist/utils/animation.d.ts +2 -0
- package/dist/utils/animation.d.ts.map +1 -0
- package/dist/utils/animation.js +29 -0
- package/dist/utils/animation.js.map +1 -0
- package/dist/utils/background-lock.cjs +2 -0
- package/dist/utils/background-lock.cjs.map +1 -0
- package/dist/utils/background-lock.d.ts +20 -0
- package/dist/utils/background-lock.d.ts.map +1 -0
- package/dist/utils/background-lock.js +21 -0
- package/dist/utils/background-lock.js.map +1 -0
- package/dist/utils/index.cjs +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/use-overlay.cjs +2 -0
- package/dist/utils/use-overlay.cjs.map +1 -0
- package/dist/utils/use-overlay.d.ts +26 -0
- package/dist/utils/use-overlay.d.ts.map +1 -0
- package/dist/utils/use-overlay.js +34 -0
- package/dist/utils/use-overlay.js.map +1 -0
- package/dist/virtualit/dist/dom/dom.cjs +2 -0
- package/dist/virtualit/dist/dom/dom.cjs.map +1 -0
- package/dist/virtualit/dist/dom/dom.js +47 -0
- package/dist/virtualit/dist/dom/dom.js.map +1 -0
- package/dist/virtualit/dist/dom.cjs +1 -0
- package/dist/virtualit/dist/dom.js +2 -0
- package/dist/virtualit/dist/virtualit.cjs +2 -0
- package/dist/virtualit/dist/virtualit.cjs.map +1 -0
- package/dist/virtualit/dist/virtualit.js +129 -0
- package/dist/virtualit/dist/virtualit.js.map +1 -0
- package/package.json +282 -0
package/dist/menu.js
ADDED
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { coarsePointerMixin as e } from "./styles/mixins/accessibility.css.js";
|
|
2
|
+
import { sizeVariantMixin as t } from "./styles/mixins/shape.css.js";
|
|
3
|
+
import { colorThemeMixin as n, forcedColorsMixin as r } from "./styles/mixins/theme.css.js";
|
|
4
|
+
import "./styles/index.js";
|
|
5
|
+
import { e as i } from "./craftit/dist/labs/list.js";
|
|
6
|
+
import { t as a } from "./craftit/dist/labs/overlay.js";
|
|
7
|
+
import "./craftit/dist/labs.js";
|
|
8
|
+
import o from "./overlay/menu/menu.css?inline.js";
|
|
9
|
+
import { aria as s, computed as c, createId as l, css as u, defineComponent as d, effect as f, handle as p, html as m, onMount as h, onSlotChange as g, signal as _ } from "@vielzeug/craftit";
|
|
10
|
+
import { flip as v, offset as y, positionFloat as b, shift as x } from "@vielzeug/floatit";
|
|
11
|
+
//#region src/overlay/menu/menu.ts
|
|
12
|
+
var S = u`
|
|
13
|
+
${n}
|
|
14
|
+
${t}
|
|
15
|
+
${r}
|
|
16
|
+
`, C = d({
|
|
17
|
+
props: {
|
|
18
|
+
checked: {
|
|
19
|
+
default: !1,
|
|
20
|
+
type: Boolean
|
|
21
|
+
},
|
|
22
|
+
disabled: {
|
|
23
|
+
default: !1,
|
|
24
|
+
type: Boolean
|
|
25
|
+
},
|
|
26
|
+
type: { default: void 0 },
|
|
27
|
+
value: { default: void 0 }
|
|
28
|
+
},
|
|
29
|
+
setup({ props: t }) {
|
|
30
|
+
let n = u`
|
|
31
|
+
@layer buildit.base {
|
|
32
|
+
:host {
|
|
33
|
+
display: block;
|
|
34
|
+
outline: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.item {
|
|
38
|
+
align-items: center;
|
|
39
|
+
border-radius: 0;
|
|
40
|
+
cursor: pointer;
|
|
41
|
+
display: flex;
|
|
42
|
+
font-size: var(--text-sm);
|
|
43
|
+
gap: var(--size-2);
|
|
44
|
+
line-height: var(--leading-normal);
|
|
45
|
+
padding: var(--size-1-5) var(--size-3);
|
|
46
|
+
transition:
|
|
47
|
+
background var(--transition-fast),
|
|
48
|
+
color var(--transition-fast);
|
|
49
|
+
user-select: none;
|
|
50
|
+
white-space: nowrap;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
:host(:first-of-type) .item {
|
|
54
|
+
border-radius: var(--rounded-sm) var(--rounded-sm) 0 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
:host(:last-child) .item {
|
|
58
|
+
border-radius: 0 0 var(--rounded-sm) var(--rounded-sm);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
:host(:first-of-type:last-child) .item {
|
|
62
|
+
border-radius: var(--rounded-sm);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
:host(:not([disabled])) .item:hover {
|
|
66
|
+
background: var(--color-contrast-100);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
:host(:focus-visible) .item {
|
|
70
|
+
background: color-mix(in srgb, var(--color-primary) 12%, var(--color-contrast-100));
|
|
71
|
+
color: var(--color-primary);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Driven by JS via sync() — avoids :host() attribute selector edge-cases */
|
|
75
|
+
.item.is-checkable {
|
|
76
|
+
background: color-mix(in srgb, var(--color-contrast-900) 5%, var(--color-canvas));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.item.is-checked {
|
|
80
|
+
background: color-mix(in srgb, var(--color-primary) 18%, var(--color-canvas));
|
|
81
|
+
color: var(--color-primary);
|
|
82
|
+
font-weight: var(--font-medium);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
:host([disabled]) .item {
|
|
86
|
+
color: var(--color-contrast-400);
|
|
87
|
+
cursor: not-allowed;
|
|
88
|
+
opacity: 0.6;
|
|
89
|
+
pointer-events: none;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.icon-slot {
|
|
93
|
+
display: contents;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.item-check {
|
|
97
|
+
align-items: center;
|
|
98
|
+
color: currentColor;
|
|
99
|
+
display: inline-flex;
|
|
100
|
+
flex-shrink: 0;
|
|
101
|
+
justify-content: center;
|
|
102
|
+
width: 1.25rem;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.item-label {
|
|
106
|
+
flex: 1;
|
|
107
|
+
min-width: 0;
|
|
108
|
+
overflow: hidden;
|
|
109
|
+
text-overflow: ellipsis;
|
|
110
|
+
white-space: nowrap;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
${e}
|
|
114
|
+
`, r = c(() => t.type.value === "checkbox" || t.type.value === "radio"), i = c(() => r.value && t.checked.value), a = c(() => t.type.value === "checkbox" ? "menuitemcheckbox" : t.type.value === "radio" ? "menuitemradio" : "menuitem"), o = c(() => t.type.value === "checkbox" ? t.checked.value ? "☑" : "☐" : t.type.value === "radio" ? t.checked.value ? "◉" : "◯" : ""), s = c(() => `item${r.value ? " is-checkable" : ""}${i.value ? " is-checked" : ""}`), l = () => m`
|
|
115
|
+
<span class="item-check" aria-hidden="true">${() => o.value}</span>
|
|
116
|
+
<span class="icon-slot"><slot name="icon"></slot></span>
|
|
117
|
+
<span class="item-label"><slot></slot></span>
|
|
118
|
+
`;
|
|
119
|
+
return m`
|
|
120
|
+
<style>
|
|
121
|
+
${n}
|
|
122
|
+
</style>
|
|
123
|
+
${() => r.value ? m`
|
|
124
|
+
<div
|
|
125
|
+
class="${() => s.value}"
|
|
126
|
+
tabindex="-1"
|
|
127
|
+
role="${() => a.value}"
|
|
128
|
+
aria-checked="${() => String(i.value)}"
|
|
129
|
+
aria-disabled="${() => String(t.disabled.value)}">
|
|
130
|
+
${l()}
|
|
131
|
+
</div>
|
|
132
|
+
` : m`
|
|
133
|
+
<div
|
|
134
|
+
class="${() => s.value}"
|
|
135
|
+
tabindex="-1"
|
|
136
|
+
role="menuitem"
|
|
137
|
+
aria-disabled="${() => String(t.disabled.value)}">
|
|
138
|
+
<span class="icon-slot"><slot name="icon"></slot></span>
|
|
139
|
+
<span class="item-label"><slot></slot></span>
|
|
140
|
+
</div>
|
|
141
|
+
`}
|
|
142
|
+
`;
|
|
143
|
+
},
|
|
144
|
+
tag: "bit-menu-item"
|
|
145
|
+
}), w = d({
|
|
146
|
+
setup() {
|
|
147
|
+
return m`<style>
|
|
148
|
+
@layer buildit.base {
|
|
149
|
+
:host {
|
|
150
|
+
display: block;
|
|
151
|
+
margin: var(--size-1) 0;
|
|
152
|
+
border-top: var(--border) solid var(--color-contrast-200);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
</style>`;
|
|
156
|
+
},
|
|
157
|
+
tag: "bit-menu-separator"
|
|
158
|
+
}), T = d({
|
|
159
|
+
props: {
|
|
160
|
+
color: { default: void 0 },
|
|
161
|
+
disabled: { default: !1 },
|
|
162
|
+
placement: { default: "bottom-start" },
|
|
163
|
+
size: { default: void 0 }
|
|
164
|
+
},
|
|
165
|
+
setup({ emit: e, host: t, props: n }) {
|
|
166
|
+
let r = l("menu"), c = _(!1), u = null, d = null;
|
|
167
|
+
function C() {
|
|
168
|
+
return Array.from(t.querySelectorAll("bit-menu-item:not([disabled])"));
|
|
169
|
+
}
|
|
170
|
+
let w = -1, T = i({
|
|
171
|
+
getIndex: () => w,
|
|
172
|
+
getItems: C,
|
|
173
|
+
isItemDisabled: (e) => e.hasAttribute("disabled"),
|
|
174
|
+
setIndex: (e) => {
|
|
175
|
+
w = e, C()[e]?.focus();
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
function E() {
|
|
179
|
+
!d || !u || b(u, d, {
|
|
180
|
+
middleware: [
|
|
181
|
+
y(4),
|
|
182
|
+
v({ padding: 6 }),
|
|
183
|
+
x({ padding: 6 })
|
|
184
|
+
],
|
|
185
|
+
placement: n.placement.value
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
let D = a({
|
|
189
|
+
getBoundaryElement: () => t,
|
|
190
|
+
getPanelElement: () => d,
|
|
191
|
+
getTriggerElement: () => u,
|
|
192
|
+
isDisabled: () => !!n.disabled.value,
|
|
193
|
+
isOpen: () => c.value,
|
|
194
|
+
onClose: (t) => e("close", { reason: t }),
|
|
195
|
+
onOpen: (t) => e("open", { reason: t }),
|
|
196
|
+
positioner: {
|
|
197
|
+
floating: () => d,
|
|
198
|
+
reference: () => u,
|
|
199
|
+
update: E
|
|
200
|
+
},
|
|
201
|
+
setOpen: (e) => {
|
|
202
|
+
c.value = e, e || T.reset();
|
|
203
|
+
}
|
|
204
|
+
}), O = (n) => {
|
|
205
|
+
let r = n.getAttribute("type");
|
|
206
|
+
if (r === "checkbox") n.hasAttribute("checked") ? n.removeAttribute("checked") : n.setAttribute("checked", "");
|
|
207
|
+
else if (r === "radio") {
|
|
208
|
+
for (let e of t.querySelectorAll("bit-menu-item[type=\"radio\"]")) e.removeAttribute("checked");
|
|
209
|
+
n.setAttribute("checked", "");
|
|
210
|
+
}
|
|
211
|
+
let i = n.getAttribute("value") ?? "";
|
|
212
|
+
e("select", {
|
|
213
|
+
checked: r === "checkbox" || r === "radio" ? n.hasAttribute("checked") : void 0,
|
|
214
|
+
value: i
|
|
215
|
+
}), r !== "checkbox" && r !== "radio" && D.close({ reason: "programmatic" });
|
|
216
|
+
};
|
|
217
|
+
function k(e) {
|
|
218
|
+
if (!c.value) {
|
|
219
|
+
(e.key === "Enter" || e.key === " " || e.key === "ArrowDown") && (e.preventDefault(), D.open(), requestAnimationFrame(() => T.first()));
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
switch (e.key) {
|
|
223
|
+
case " ": {
|
|
224
|
+
e.preventDefault();
|
|
225
|
+
let t = T.getActiveItem();
|
|
226
|
+
t && O(t);
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
case "ArrowDown":
|
|
230
|
+
e.preventDefault(), T.next();
|
|
231
|
+
break;
|
|
232
|
+
case "ArrowUp":
|
|
233
|
+
e.preventDefault(), T.prev();
|
|
234
|
+
break;
|
|
235
|
+
case "End":
|
|
236
|
+
e.preventDefault(), T.last();
|
|
237
|
+
break;
|
|
238
|
+
case "Enter": {
|
|
239
|
+
e.preventDefault();
|
|
240
|
+
let t = T.getActiveItem();
|
|
241
|
+
t && O(t);
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
case "Escape":
|
|
245
|
+
e.preventDefault(), D.close({ reason: "escape" });
|
|
246
|
+
break;
|
|
247
|
+
case "Home":
|
|
248
|
+
e.preventDefault(), T.first();
|
|
249
|
+
break;
|
|
250
|
+
case "Tab":
|
|
251
|
+
D.close({ reason: "programmatic" });
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return h(() => {
|
|
256
|
+
let e = t.shadowRoot?.querySelector("slot[name=\"trigger\"]");
|
|
257
|
+
d = t.shadowRoot?.querySelector(".menu-panel") ?? null;
|
|
258
|
+
let i = null;
|
|
259
|
+
function a() {
|
|
260
|
+
i && (i.removeEventListener("click", o), i.removeEventListener("keydown", k)), u = e?.assignedElements({ flatten: !0 })?.[0] ?? null, i = u, u && (s(u, {
|
|
261
|
+
controls: () => r,
|
|
262
|
+
disabled: () => n.disabled.value,
|
|
263
|
+
expanded: () => c.value ? "true" : "false",
|
|
264
|
+
haspopup: "menu"
|
|
265
|
+
}), u.addEventListener("click", o), u.addEventListener("keydown", k));
|
|
266
|
+
}
|
|
267
|
+
function o() {
|
|
268
|
+
D.toggle();
|
|
269
|
+
}
|
|
270
|
+
g("trigger", a), p(t, "click", ((e) => {
|
|
271
|
+
if (!c.value) return;
|
|
272
|
+
let t = e, n = t.composedPath().find((e) => e instanceof HTMLElement && e.tagName === "BIT-MENU-ITEM") ?? t.target?.closest("bit-menu-item") ?? null;
|
|
273
|
+
!n || n.hasAttribute("disabled") || O(n);
|
|
274
|
+
}));
|
|
275
|
+
let l = D.bindOutsideClick(document);
|
|
276
|
+
return f(() => {
|
|
277
|
+
d?.toggleAttribute("data-open", c.value);
|
|
278
|
+
}), p(d, "keydown", k), () => {
|
|
279
|
+
l(), i && (i.removeEventListener("click", o), i.removeEventListener("keydown", k));
|
|
280
|
+
};
|
|
281
|
+
}), m`
|
|
282
|
+
<style>
|
|
283
|
+
${o}${S}
|
|
284
|
+
</style>
|
|
285
|
+
<slot name="trigger"></slot>
|
|
286
|
+
<div class="menu-panel" id="${r}" role="menu" aria-orientation="vertical">
|
|
287
|
+
<slot></slot>
|
|
288
|
+
</div>
|
|
289
|
+
`;
|
|
290
|
+
},
|
|
291
|
+
tag: "bit-menu"
|
|
292
|
+
});
|
|
293
|
+
//#endregion
|
|
294
|
+
export { C as MENU_ITEM_TAG, T as MENU_TAG, w as SEPARATOR_TAG };
|
|
295
|
+
|
|
296
|
+
//# sourceMappingURL=menu.js.map
|
package/dist/menu.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","names":[],"sources":["../src/overlay/menu/menu.ts"],"sourcesContent":["import {\n aria,\n computed,\n createId,\n css,\n defineComponent,\n effect,\n handle,\n html,\n onMount,\n onSlotChange,\n signal,\n} from '@vielzeug/craftit';\nimport {\n createListNavigation,\n createOverlayControl,\n type OverlayOpenReason,\n type OverlayCloseReason,\n} from '@vielzeug/craftit/labs';\nimport { flip, offset, positionFloat, shift } from '@vielzeug/floatit';\n\nimport type { AddEventListeners, ComponentSize, ThemeColor } from '../../types';\n\nimport { coarsePointerMixin, colorThemeMixin, forcedColorsMixin, sizeVariantMixin } from '../../styles';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface MenuSelectDetail {\n value: string;\n checked?: boolean;\n}\n\nexport type BitMenuItemType = 'checkbox' | 'radio';\n\nexport type BitMenuEvents = {\n close: { reason: OverlayCloseReason };\n open: { reason: OverlayOpenReason };\n select: MenuSelectDetail;\n};\n\nexport type BitMenuItemProps = {\n checked?: boolean;\n disabled?: boolean;\n type?: BitMenuItemType;\n value?: string;\n};\n\nexport type BitMenuProps = {\n color?: ThemeColor;\n disabled?: boolean;\n placement?: 'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end';\n size?: ComponentSize;\n};\n\n// ============================================\n// Styles\n// ============================================\n\nimport componentStyles from './menu.css?inline';\n\nconst themeStyles = /* css */ css`\n ${colorThemeMixin}\n ${sizeVariantMixin}\n ${forcedColorsMixin}\n`;\n\n// ============================================\n// Menu Item Component\n// ============================================\n\nexport const MENU_ITEM_TAG = defineComponent<BitMenuItemProps>({\n props: {\n checked: { default: false, type: Boolean },\n disabled: { default: false, type: Boolean },\n type: { default: undefined },\n value: { default: undefined },\n },\n setup({ props }) {\n const itemStyles = /* css */ css`\n @layer buildit.base {\n :host {\n display: block;\n outline: none;\n }\n\n .item {\n align-items: center;\n border-radius: 0;\n cursor: pointer;\n display: flex;\n font-size: var(--text-sm);\n gap: var(--size-2);\n line-height: var(--leading-normal);\n padding: var(--size-1-5) var(--size-3);\n transition:\n background var(--transition-fast),\n color var(--transition-fast);\n user-select: none;\n white-space: nowrap;\n }\n\n :host(:first-of-type) .item {\n border-radius: var(--rounded-sm) var(--rounded-sm) 0 0;\n }\n\n :host(:last-child) .item {\n border-radius: 0 0 var(--rounded-sm) var(--rounded-sm);\n }\n\n :host(:first-of-type:last-child) .item {\n border-radius: var(--rounded-sm);\n }\n\n :host(:not([disabled])) .item:hover {\n background: var(--color-contrast-100);\n }\n\n :host(:focus-visible) .item {\n background: color-mix(in srgb, var(--color-primary) 12%, var(--color-contrast-100));\n color: var(--color-primary);\n }\n\n /* Driven by JS via sync() — avoids :host() attribute selector edge-cases */\n .item.is-checkable {\n background: color-mix(in srgb, var(--color-contrast-900) 5%, var(--color-canvas));\n }\n\n .item.is-checked {\n background: color-mix(in srgb, var(--color-primary) 18%, var(--color-canvas));\n color: var(--color-primary);\n font-weight: var(--font-medium);\n }\n\n :host([disabled]) .item {\n color: var(--color-contrast-400);\n cursor: not-allowed;\n opacity: 0.6;\n pointer-events: none;\n }\n\n .icon-slot {\n display: contents;\n }\n\n .item-check {\n align-items: center;\n color: currentColor;\n display: inline-flex;\n flex-shrink: 0;\n justify-content: center;\n width: 1.25rem;\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 ${coarsePointerMixin}\n `;\n\n const isCheckable = computed(() => props.type.value === 'checkbox' || props.type.value === 'radio');\n const isChecked = computed(() => isCheckable.value && props.checked.value);\n const itemRole = computed(() => {\n if (props.type.value === 'checkbox') return 'menuitemcheckbox';\n\n if (props.type.value === 'radio') return 'menuitemradio';\n\n return 'menuitem';\n });\n const checkIndicator = computed(() => {\n if (props.type.value === 'checkbox') return props.checked.value ? '☑' : '☐';\n\n if (props.type.value === 'radio') return props.checked.value ? '◉' : '◯';\n\n return '';\n });\n const itemClass = computed(\n () => `item${isCheckable.value ? ' is-checkable' : ''}${isChecked.value ? ' is-checked' : ''}`,\n );\n const renderContent = () => html`\n <span class=\"item-check\" aria-hidden=\"true\">${() => checkIndicator.value}</span>\n <span class=\"icon-slot\"><slot name=\"icon\"></slot></span>\n <span class=\"item-label\"><slot></slot></span>\n `;\n\n return html`\n <style>\n ${itemStyles}\n </style>\n ${() =>\n isCheckable.value\n ? html`\n <div\n class=\"${() => itemClass.value}\"\n tabindex=\"-1\"\n role=\"${() => itemRole.value}\"\n aria-checked=\"${() => String(isChecked.value)}\"\n aria-disabled=\"${() => String(props.disabled.value)}\">\n ${renderContent()}\n </div>\n `\n : html`\n <div\n class=\"${() => itemClass.value}\"\n tabindex=\"-1\"\n role=\"menuitem\"\n aria-disabled=\"${() => String(props.disabled.value)}\">\n <span class=\"icon-slot\"><slot name=\"icon\"></slot></span>\n <span class=\"item-label\"><slot></slot></span>\n </div>\n `}\n `;\n },\n tag: 'bit-menu-item',\n});\n\n// ============================================\n// Menu Separator\n// ============================================\n\nexport const SEPARATOR_TAG = defineComponent({\n setup() {\n return html`<style>\n @layer buildit.base {\n :host {\n display: block;\n margin: var(--size-1) 0;\n border-top: var(--border) solid var(--color-contrast-200);\n }\n }\n </style>`;\n },\n tag: 'bit-menu-separator',\n});\n\n// ============================================\n// Menu Component\n// ============================================\n\n/**\n * `bit-menu` — Action dropdown menu triggered by a slotted trigger element.\n * Nest `<bit-menu-item>` elements inside for menu options.\n *\n * @example\n * ```html\n * <bit-menu>\n * <button slot=\"trigger\">Actions</button>\n * <bit-menu-item value=\"edit\">Edit</bit-menu-item>\n * <bit-menu-item value=\"delete\">Delete</bit-menu-item>\n * </bit-menu>\n * ```\n */\nexport const MENU_TAG = defineComponent<BitMenuProps, BitMenuEvents>({\n props: {\n color: { default: undefined },\n disabled: { default: false },\n placement: { default: 'bottom-start' },\n size: { default: undefined },\n },\n setup({ emit, host, props }) {\n const menuId = createId('menu');\n const isOpen = signal(false);\n let triggerEl: HTMLElement | null = null;\n let panelEl: HTMLElement | null = null;\n\n // ── Helpers ───────────────────────────────────────────────────────────────\n function getItems(): HTMLElement[] {\n return Array.from(host.querySelectorAll<HTMLElement>('bit-menu-item:not([disabled])'));\n }\n\n let focusedIndex = -1;\n\n const listNavigation = createListNavigation<HTMLElement>({\n getIndex: () => focusedIndex,\n getItems,\n isItemDisabled: (item) => item.hasAttribute('disabled'),\n setIndex: (index) => {\n focusedIndex = index;\n getItems()[index]?.focus();\n },\n });\n\n function updatePosition() {\n if (!panelEl || !triggerEl) return;\n\n positionFloat(triggerEl, panelEl, {\n middleware: [offset(4), flip({ padding: 6 }), shift({ padding: 6 })],\n placement: props.placement.value,\n });\n }\n\n const overlay = createOverlayControl({\n getBoundaryElement: () => host,\n getPanelElement: () => panelEl,\n getTriggerElement: () => triggerEl,\n isDisabled: () => Boolean(props.disabled.value),\n isOpen: () => isOpen.value,\n onClose: (reason) => emit('close', { reason }),\n onOpen: (reason) => emit('open', { reason }),\n positioner: {\n floating: () => panelEl,\n reference: () => triggerEl,\n update: updatePosition,\n },\n setOpen: (next) => {\n isOpen.value = next;\n\n if (!next) listNavigation.reset();\n },\n });\n\n const activateItem = (item: HTMLElement): void => {\n const type = item.getAttribute('type');\n\n if (type === 'checkbox') {\n const next = !item.hasAttribute('checked');\n\n if (next) item.setAttribute('checked', '');\n else item.removeAttribute('checked');\n } else if (type === 'radio') {\n for (const radio of host.querySelectorAll<HTMLElement>('bit-menu-item[type=\"radio\"]')) {\n radio.removeAttribute('checked');\n }\n item.setAttribute('checked', '');\n }\n\n const value = item.getAttribute('value') ?? '';\n const checked = type === 'checkbox' || type === 'radio' ? item.hasAttribute('checked') : undefined;\n\n emit('select', { checked, value });\n\n if (type !== 'checkbox' && type !== 'radio') {\n overlay.close({ reason: 'programmatic' });\n }\n };\n\n // ── Keyboard Navigation ───────────────────────────────────────────────────\n function handleMenuKeydown(e: KeyboardEvent) {\n const open = isOpen.value;\n\n // When closed: open on Enter / Space / ArrowDown\n if (!open) {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault();\n overlay.open();\n requestAnimationFrame(() => listNavigation.first());\n }\n\n return;\n }\n\n // When open: navigate and activate\n switch (e.key) {\n case ' ': {\n e.preventDefault();\n\n const focused = listNavigation.getActiveItem();\n\n if (focused) activateItem(focused);\n\n break;\n }\n case 'ArrowDown':\n e.preventDefault();\n listNavigation.next();\n break;\n case 'ArrowUp':\n e.preventDefault();\n listNavigation.prev();\n break;\n case 'End':\n e.preventDefault();\n listNavigation.last();\n break;\n case 'Enter': {\n e.preventDefault();\n\n const focused = listNavigation.getActiveItem();\n\n if (focused) activateItem(focused);\n\n break;\n }\n case 'Escape':\n e.preventDefault();\n overlay.close({ reason: 'escape' });\n break;\n case 'Home':\n e.preventDefault();\n listNavigation.first();\n break;\n case 'Tab':\n overlay.close({ reason: 'programmatic' });\n break;\n }\n }\n\n // ── Lifecycle ─────────────────────────────────────────────────────────────\n onMount(() => {\n const triggerSlot = host.shadowRoot?.querySelector<HTMLSlotElement>('slot[name=\"trigger\"]');\n\n panelEl = host.shadowRoot?.querySelector<HTMLElement>('.menu-panel') ?? null;\n\n let prevTriggerEl: HTMLElement | null = null;\n\n function resolveTrigger() {\n if (prevTriggerEl) {\n prevTriggerEl.removeEventListener('click', toggleMenu);\n prevTriggerEl.removeEventListener('keydown', handleMenuKeydown);\n }\n\n const assigned = triggerSlot?.assignedElements({ flatten: true });\n\n triggerEl = (assigned?.[0] as HTMLElement | undefined) ?? null;\n prevTriggerEl = triggerEl;\n\n if (triggerEl) {\n aria(triggerEl, {\n controls: () => menuId,\n disabled: () => props.disabled.value,\n expanded: () => (isOpen.value ? 'true' : 'false'),\n haspopup: 'menu',\n });\n triggerEl.addEventListener('click', toggleMenu);\n triggerEl.addEventListener('keydown', handleMenuKeydown);\n }\n }\n\n function toggleMenu() {\n overlay.toggle();\n }\n\n onSlotChange('trigger', resolveTrigger);\n\n // Item activation via click\n handle(host, 'click', ((e: Event) => {\n if (!isOpen.value) return;\n\n const me = e as MouseEvent;\n const path = me.composedPath();\n const itemFromPath = path.find(\n (node): node is HTMLElement => node instanceof HTMLElement && node.tagName === 'BIT-MENU-ITEM',\n );\n const item = itemFromPath ?? (me.target as HTMLElement | null)?.closest<HTMLElement>('bit-menu-item') ?? null;\n\n if (!item || item.hasAttribute('disabled')) return;\n\n activateItem(item);\n }) as EventListener);\n\n const removeOutsideClick = overlay.bindOutsideClick(document);\n\n effect(() => {\n panelEl?.toggleAttribute('data-open', isOpen.value);\n });\n\n handle(panelEl, 'keydown', handleMenuKeydown as EventListener);\n\n return () => {\n removeOutsideClick();\n\n if (prevTriggerEl) {\n prevTriggerEl.removeEventListener('click', toggleMenu);\n prevTriggerEl.removeEventListener('keydown', handleMenuKeydown);\n }\n };\n });\n\n return html`\n <style>\n ${componentStyles}${themeStyles}\n </style>\n <slot name=\"trigger\"></slot>\n <div class=\"menu-panel\" id=\"${menuId}\" role=\"menu\" aria-orientation=\"vertical\">\n <slot></slot>\n </div>\n `;\n },\n tag: 'bit-menu',\n}) as unknown as AddEventListeners<BitMenuEvents>;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./styles/mixins/states.css.cjs`);require(`./styles/index.cjs`),require(`./button.cjs`);const t=require(`./icons.cjs`);require(`./input.cjs`);const n=require(`./inputs/number-input/number-input.css?inline.cjs`);let r=require(`@vielzeug/craftit`);var i=(0,r.defineComponent)({formAssociated:!0,props:{color:{default:void 0},disabled:{default:!1},fullwidth:{default:!1},label:{default:void 0},"label-placement":{default:`inset`},"large-step":{default:void 0},max:{default:void 0},min:{default:void 0},name:{default:void 0},nullable:{default:!1},placeholder:{default:void 0},readonly:{default:!1},size:{default:void 0},step:{default:1},value:{default:void 0},variant:{default:void 0}},setup({emit:e,host:n,props:i}){let a=(0,r.signal)(i.value.value==null?``:String(i.value.value));(0,r.defineField)({disabled:(0,r.computed)(()=>!!i.disabled.value),value:(0,r.computed)(()=>a.value===``?null:a.value)},{onReset:()=>{a.value=i.value.value==null?``:String(i.value.value)}}),(0,r.watch)(i.value,e=>{let t=e==null?``:String(e);a.value!==t&&(a.value=t)});function o(e){let t=i.min.value,n=i.max.value;return t!=null&&e<Number(t)?Number(t):n!=null&&e>Number(n)?Number(n):e}function s(){let e=a.value.trim();if(!e)return null;let t=Number.parseFloat(e);return Number.isNaN(t)?null:t}function c(t,r){let i=t==null?null:o(t);a.value=i==null?``:String(i),i==null?n.removeAttribute(`value`):n.setAttribute(`value`,String(i)),e(`change`,{originalEvent:r,value:i})}function l(e,t){i.disabled.value||i.readonly.value||c((s()??(i.min.value==null?0:Number(i.min.value)))+e,t)}function u(e){if(i.disabled.value||i.readonly.value)return;let t=Number(i.step.value)||1,n=Number(i[`large-step`].value)||t*10;switch(e.key){case`ArrowDown`:e.preventDefault(),l(-t,e);break;case`ArrowUp`:e.preventDefault(),l(t,e);break;case`End`:i.max.value!=null&&(e.preventDefault(),c(Number(i.max.value),e));break;case`Home`:i.min.value!=null&&(e.preventDefault(),c(Number(i.min.value),e));break;case`PageDown`:e.preventDefault(),l(-n,e);break;case`PageUp`:e.preventDefault(),l(n,e);break}}let d=(0,r.computed)(()=>i.min.value!=null&&s()!=null&&s()<=Number(i.min.value)),f=(0,r.computed)(()=>i.max.value!=null&&s()!=null&&s()>=Number(i.max.value));return r.html`
|
|
2
|
+
<div
|
|
3
|
+
class="wrapper"
|
|
4
|
+
role="spinbutton"
|
|
5
|
+
part="control"
|
|
6
|
+
:aria-valuenow="${()=>s()??null}"
|
|
7
|
+
:aria-valuemin="${()=>i.min.value??null}"
|
|
8
|
+
:aria-valuemax="${()=>i.max.value??null}"
|
|
9
|
+
:aria-label="${()=>i.label.value||null}"
|
|
10
|
+
:aria-disabled="${()=>i.disabled.value?`true`:null}"
|
|
11
|
+
:aria-readonly="${()=>i.readonly.value?`true`:null}"
|
|
12
|
+
@keydown="${u}">
|
|
13
|
+
<bit-button
|
|
14
|
+
icon-only
|
|
15
|
+
type="button"
|
|
16
|
+
part="decrement-btn"
|
|
17
|
+
aria-label="Decrease"
|
|
18
|
+
variant="ghost"
|
|
19
|
+
:size="${()=>i.size.value||null}"
|
|
20
|
+
:color="${()=>i.color.value||null}"
|
|
21
|
+
?disabled="${()=>i.disabled.value||i.readonly.value||d.value}"
|
|
22
|
+
@click="${e=>l(-(Number(i.step.value)||1),e)}"
|
|
23
|
+
>${t.minusIcon}</bit-button
|
|
24
|
+
>
|
|
25
|
+
<bit-input
|
|
26
|
+
part="input"
|
|
27
|
+
type="text"
|
|
28
|
+
inputmode="decimal"
|
|
29
|
+
aria-hidden="true"
|
|
30
|
+
:value="${()=>a.value}"
|
|
31
|
+
:label="${()=>i.label.value||null}"
|
|
32
|
+
:label-placement="${()=>i[`label-placement`].value}"
|
|
33
|
+
:placeholder="${()=>i.placeholder.value||null}"
|
|
34
|
+
:color="${()=>i.color.value||null}"
|
|
35
|
+
:size="${()=>i.size.value||null}"
|
|
36
|
+
:variant="${()=>i.variant.value||null}"
|
|
37
|
+
?disabled="${()=>i.disabled.value}"
|
|
38
|
+
?readonly="${()=>i.readonly.value}"
|
|
39
|
+
@input="${t=>{let n=t.detail?.value;typeof n==`string`&&(a.value=n,e(`input`,{originalEvent:t.detail?.originalEvent??t,value:s()}))}}"
|
|
40
|
+
@change="${e=>{let t=e.detail?.value;if(typeof t!=`string`)return;a.value=t;let n=e.detail?.originalEvent??e;c(s(),n)}}"></bit-input>
|
|
41
|
+
<bit-button
|
|
42
|
+
icon-only
|
|
43
|
+
type="button"
|
|
44
|
+
part="increment-btn"
|
|
45
|
+
aria-label="Increase"
|
|
46
|
+
variant="ghost"
|
|
47
|
+
:size="${()=>i.size.value||null}"
|
|
48
|
+
:color="${()=>i.color.value||null}"
|
|
49
|
+
?disabled="${()=>i.disabled.value||i.readonly.value||f.value}"
|
|
50
|
+
@click="${e=>l(Number(i.step.value)||1,e)}"
|
|
51
|
+
>${t.plusIcon}</bit-button
|
|
52
|
+
>
|
|
53
|
+
</div>
|
|
54
|
+
`},styles:[e.disabledStateMixin(),n.default],tag:`bit-number-input`});exports.NUMBER_INPUT_TAG=i;
|
|
55
|
+
//# sourceMappingURL=number-input.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-input.cjs","names":[],"sources":["../src/inputs/number-input/number-input.ts"],"sourcesContent":["import { computed, defineComponent, defineField, html, signal, watch } from '@vielzeug/craftit';\n\nimport type { DisablableProps, SizableProps, ThemableProps, VisualVariant } from '../../types';\n\nimport { minusIcon, plusIcon } from '../../icons';\nimport { disabledStateMixin } from '../../styles';\n// Ensure child components are registered\nimport '../button/button';\nimport '../input/input';\nimport styles from './number-input.css?inline';\n\nexport type BitNumberInputEvents = {\n change: { originalEvent?: Event; value: number | null };\n input: { originalEvent?: Event; value: number | null };\n};\n\n/** Number Input props */\nexport type BitNumberInputProps = ThemableProps &\n SizableProps &\n DisablableProps & {\n /** Stretch to full width of container */\n fullwidth?: boolean;\n /** Visible label */\n label?: string;\n /** Label placement: 'inset' renders the label inside the control box, 'outside' renders it above */\n 'label-placement'?: 'inset' | 'outside';\n /** Large step (for Page Up/Down, default: 10 × step) */\n 'large-step'?: number;\n /** Maximum allowed value */\n max?: number;\n /** Minimum allowed value */\n min?: number;\n name?: string;\n /** Allow null/empty value */\n nullable?: boolean;\n /** Form field name */\n\n /** Placeholder text */\n placeholder?: string;\n /** Make the input read-only */\n readonly?: boolean;\n /** Step size for increment/decrement */\n step?: number;\n /** Current numeric value */\n value?: number;\n /** Visual variant */\n variant?: VisualVariant;\n };\n\n/**\n * A numeric spin-button input with +/− controls, min/max clamping, and full keyboard support.\n *\n * @element bit-number-input\n *\n * @attr {number} value - Current value\n * @attr {number} min - Minimum value\n * @attr {number} max - Maximum value\n * @attr {number} step - Increment/decrement step (default: 1)\n * @attr {number} large-step - Step for Page Up/Down (default: 10)\n * @attr {boolean} disabled - Disables the control\n * @attr {boolean} readonly - Read-only mode\n * @attr {string} label - Visible label\n * @attr {string} name - Form field name\n * @attr {string} color - Theme color\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} placeholder - Input placeholder\n *\n * @fires change - On committed value change. detail: { value: number | null, originalEvent?: Event }\n * @fires input - On every keystroke. detail: { value: number | null, originalEvent?: Event }\n *\n * @cssprop --number-input-height - Control height\n * @cssprop --number-input-border-color - Border color\n * @cssprop --number-input-radius - Border radius\n * @cssprop --number-input-bg - Background\n * @cssprop --number-input-btn-bg - Spin button background\n *\n * @example\n * ```html\n * <bit-number-input label=\"Quantity\" value=\"1\" min=\"1\" max=\"99\" step=\"1\"></bit-number-input>\n * ```\n */\nexport const NUMBER_INPUT_TAG = defineComponent<BitNumberInputProps, BitNumberInputEvents>({\n formAssociated: true,\n props: {\n color: { default: undefined },\n disabled: { default: false },\n fullwidth: { default: false },\n label: { default: undefined },\n 'label-placement': { default: 'inset' },\n 'large-step': { default: undefined },\n max: { default: undefined },\n min: { default: undefined },\n name: { default: undefined },\n nullable: { default: false },\n placeholder: { default: undefined },\n readonly: { default: false },\n size: { default: undefined },\n step: { default: 1 },\n value: { default: undefined },\n variant: { default: undefined },\n },\n setup({ emit, host, props }) {\n const inputValue = signal<string>(props.value.value != null ? String(props.value.value) : '');\n\n defineField(\n {\n disabled: computed(() => Boolean(props.disabled.value)),\n value: computed(() => (inputValue.value !== '' ? inputValue.value : null)),\n },\n {\n onReset: () => {\n inputValue.value = props.value.value != null ? String(props.value.value) : '';\n },\n },\n );\n watch(props.value, (v) => {\n const newVal = v != null ? String(v) : '';\n\n if (inputValue.value !== newVal) inputValue.value = newVal;\n });\n function clamp(n: number): number {\n const min = props.min.value;\n const max = props.max.value;\n\n if (min != null && n < Number(min)) return Number(min);\n\n if (max != null && n > Number(max)) return Number(max);\n\n return n;\n }\n function parseValue(): number | null {\n const v = inputValue.value.trim();\n\n if (!v) return null;\n\n const n = Number.parseFloat(v);\n\n return Number.isNaN(n) ? null : n;\n }\n function commit(val: number | null, originalEvent?: Event) {\n const clamped = val != null ? clamp(val) : null;\n\n inputValue.value = clamped != null ? String(clamped) : '';\n\n if (clamped != null) host.setAttribute('value', String(clamped));\n else host.removeAttribute('value');\n\n emit('change', { originalEvent, value: clamped });\n }\n function increment(delta: number, originalEvent?: Event) {\n if (props.disabled.value || props.readonly.value) return;\n\n const current = parseValue() ?? (props.min.value != null ? Number(props.min.value) : 0);\n\n commit(current + delta, originalEvent);\n }\n function handleKeydown(e: KeyboardEvent) {\n if (props.disabled.value || props.readonly.value) return;\n\n const step = Number(props.step.value) || 1;\n const largeStep = Number(props['large-step'].value) || step * 10;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n increment(-step, e);\n break;\n case 'ArrowUp':\n e.preventDefault();\n increment(step, e);\n break;\n case 'End':\n if (props.max.value != null) {\n e.preventDefault();\n commit(Number(props.max.value), e);\n }\n\n break;\n case 'Home':\n if (props.min.value != null) {\n e.preventDefault();\n commit(Number(props.min.value), e);\n }\n\n break;\n case 'PageDown':\n e.preventDefault();\n increment(-largeStep, e);\n break;\n case 'PageUp':\n e.preventDefault();\n increment(largeStep, e);\n break;\n }\n }\n\n const atMin = computed(\n () => props.min.value != null && parseValue() != null && parseValue()! <= Number(props.min.value),\n );\n const atMax = computed(\n () => props.max.value != null && parseValue() != null && parseValue()! >= Number(props.max.value),\n );\n\n return html`\n <div\n class=\"wrapper\"\n role=\"spinbutton\"\n part=\"control\"\n :aria-valuenow=\"${() => parseValue() ?? null}\"\n :aria-valuemin=\"${() => props.min.value ?? null}\"\n :aria-valuemax=\"${() => props.max.value ?? null}\"\n :aria-label=\"${() => props.label.value || null}\"\n :aria-disabled=\"${() => (props.disabled.value ? 'true' : null)}\"\n :aria-readonly=\"${() => (props.readonly.value ? 'true' : null)}\"\n @keydown=\"${handleKeydown}\">\n <bit-button\n icon-only\n type=\"button\"\n part=\"decrement-btn\"\n aria-label=\"Decrease\"\n variant=\"ghost\"\n :size=\"${() => props.size.value || null}\"\n :color=\"${() => props.color.value || null}\"\n ?disabled=\"${() => props.disabled.value || props.readonly.value || atMin.value}\"\n @click=\"${(e: Event) => increment(-(Number(props.step.value) || 1), e)}\"\n >${minusIcon}</bit-button\n >\n <bit-input\n part=\"input\"\n type=\"text\"\n inputmode=\"decimal\"\n aria-hidden=\"true\"\n :value=\"${() => inputValue.value}\"\n :label=\"${() => props.label.value || null}\"\n :label-placement=\"${() => props['label-placement'].value}\"\n :placeholder=\"${() => props.placeholder.value || null}\"\n :color=\"${() => props.color.value || null}\"\n :size=\"${() => props.size.value || null}\"\n :variant=\"${() => props.variant.value || null}\"\n ?disabled=\"${() => props.disabled.value}\"\n ?readonly=\"${() => props.readonly.value}\"\n @input=\"${(e: Event) => {\n const v = (\n e as CustomEvent<{\n value?: string;\n }>\n ).detail?.value;\n\n if (typeof v !== 'string') return;\n\n inputValue.value = v;\n\n const originalEvent = (e as CustomEvent<{ originalEvent?: Event }>).detail?.originalEvent ?? e;\n\n emit('input', { originalEvent, value: parseValue() });\n }}\"\n @change=\"${(e: Event) => {\n const v = (\n e as CustomEvent<{\n value?: string;\n }>\n ).detail?.value;\n\n if (typeof v !== 'string') return;\n\n inputValue.value = v;\n\n const originalEvent = (e as CustomEvent<{ originalEvent?: Event }>).detail?.originalEvent ?? e;\n\n commit(parseValue(), originalEvent);\n }}\"></bit-input>\n <bit-button\n icon-only\n type=\"button\"\n part=\"increment-btn\"\n aria-label=\"Increase\"\n variant=\"ghost\"\n :size=\"${() => props.size.value || null}\"\n :color=\"${() => props.color.value || null}\"\n ?disabled=\"${() => props.disabled.value || props.readonly.value || atMax.value}\"\n @click=\"${(e: Event) => increment(Number(props.step.value) || 1, e)}\"\n >${plusIcon}</bit-button\n >\n </div>\n `;\n },\n styles: [disabledStateMixin(), styles],\n tag: 'bit-number-input',\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { disabledStateMixin as e } from "./styles/mixins/states.css.js";
|
|
2
|
+
import "./styles/index.js";
|
|
3
|
+
import "./button.js";
|
|
4
|
+
import { minusIcon as t, plusIcon as n } from "./icons.js";
|
|
5
|
+
import "./input.js";
|
|
6
|
+
import r from "./inputs/number-input/number-input.css?inline.js";
|
|
7
|
+
import { computed as i, defineComponent as a, defineField as o, html as s, signal as c, watch as l } from "@vielzeug/craftit";
|
|
8
|
+
//#region src/inputs/number-input/number-input.ts
|
|
9
|
+
var u = a({
|
|
10
|
+
formAssociated: !0,
|
|
11
|
+
props: {
|
|
12
|
+
color: { default: void 0 },
|
|
13
|
+
disabled: { default: !1 },
|
|
14
|
+
fullwidth: { default: !1 },
|
|
15
|
+
label: { default: void 0 },
|
|
16
|
+
"label-placement": { default: "inset" },
|
|
17
|
+
"large-step": { default: void 0 },
|
|
18
|
+
max: { default: void 0 },
|
|
19
|
+
min: { default: void 0 },
|
|
20
|
+
name: { default: void 0 },
|
|
21
|
+
nullable: { default: !1 },
|
|
22
|
+
placeholder: { default: void 0 },
|
|
23
|
+
readonly: { default: !1 },
|
|
24
|
+
size: { default: void 0 },
|
|
25
|
+
step: { default: 1 },
|
|
26
|
+
value: { default: void 0 },
|
|
27
|
+
variant: { default: void 0 }
|
|
28
|
+
},
|
|
29
|
+
setup({ emit: e, host: r, props: a }) {
|
|
30
|
+
let u = c(a.value.value == null ? "" : String(a.value.value));
|
|
31
|
+
o({
|
|
32
|
+
disabled: i(() => !!a.disabled.value),
|
|
33
|
+
value: i(() => u.value === "" ? null : u.value)
|
|
34
|
+
}, { onReset: () => {
|
|
35
|
+
u.value = a.value.value == null ? "" : String(a.value.value);
|
|
36
|
+
} }), l(a.value, (e) => {
|
|
37
|
+
let t = e == null ? "" : String(e);
|
|
38
|
+
u.value !== t && (u.value = t);
|
|
39
|
+
});
|
|
40
|
+
function d(e) {
|
|
41
|
+
let t = a.min.value, n = a.max.value;
|
|
42
|
+
return t != null && e < Number(t) ? Number(t) : n != null && e > Number(n) ? Number(n) : e;
|
|
43
|
+
}
|
|
44
|
+
function f() {
|
|
45
|
+
let e = u.value.trim();
|
|
46
|
+
if (!e) return null;
|
|
47
|
+
let t = Number.parseFloat(e);
|
|
48
|
+
return Number.isNaN(t) ? null : t;
|
|
49
|
+
}
|
|
50
|
+
function p(t, n) {
|
|
51
|
+
let i = t == null ? null : d(t);
|
|
52
|
+
u.value = i == null ? "" : String(i), i == null ? r.removeAttribute("value") : r.setAttribute("value", String(i)), e("change", {
|
|
53
|
+
originalEvent: n,
|
|
54
|
+
value: i
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function m(e, t) {
|
|
58
|
+
a.disabled.value || a.readonly.value || p((f() ?? (a.min.value == null ? 0 : Number(a.min.value))) + e, t);
|
|
59
|
+
}
|
|
60
|
+
function h(e) {
|
|
61
|
+
if (a.disabled.value || a.readonly.value) return;
|
|
62
|
+
let t = Number(a.step.value) || 1, n = Number(a["large-step"].value) || t * 10;
|
|
63
|
+
switch (e.key) {
|
|
64
|
+
case "ArrowDown":
|
|
65
|
+
e.preventDefault(), m(-t, e);
|
|
66
|
+
break;
|
|
67
|
+
case "ArrowUp":
|
|
68
|
+
e.preventDefault(), m(t, e);
|
|
69
|
+
break;
|
|
70
|
+
case "End":
|
|
71
|
+
a.max.value != null && (e.preventDefault(), p(Number(a.max.value), e));
|
|
72
|
+
break;
|
|
73
|
+
case "Home":
|
|
74
|
+
a.min.value != null && (e.preventDefault(), p(Number(a.min.value), e));
|
|
75
|
+
break;
|
|
76
|
+
case "PageDown":
|
|
77
|
+
e.preventDefault(), m(-n, e);
|
|
78
|
+
break;
|
|
79
|
+
case "PageUp":
|
|
80
|
+
e.preventDefault(), m(n, e);
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
let g = i(() => a.min.value != null && f() != null && f() <= Number(a.min.value)), _ = i(() => a.max.value != null && f() != null && f() >= Number(a.max.value));
|
|
85
|
+
return s`
|
|
86
|
+
<div
|
|
87
|
+
class="wrapper"
|
|
88
|
+
role="spinbutton"
|
|
89
|
+
part="control"
|
|
90
|
+
:aria-valuenow="${() => f() ?? null}"
|
|
91
|
+
:aria-valuemin="${() => a.min.value ?? null}"
|
|
92
|
+
:aria-valuemax="${() => a.max.value ?? null}"
|
|
93
|
+
:aria-label="${() => a.label.value || null}"
|
|
94
|
+
:aria-disabled="${() => a.disabled.value ? "true" : null}"
|
|
95
|
+
:aria-readonly="${() => a.readonly.value ? "true" : null}"
|
|
96
|
+
@keydown="${h}">
|
|
97
|
+
<bit-button
|
|
98
|
+
icon-only
|
|
99
|
+
type="button"
|
|
100
|
+
part="decrement-btn"
|
|
101
|
+
aria-label="Decrease"
|
|
102
|
+
variant="ghost"
|
|
103
|
+
:size="${() => a.size.value || null}"
|
|
104
|
+
:color="${() => a.color.value || null}"
|
|
105
|
+
?disabled="${() => a.disabled.value || a.readonly.value || g.value}"
|
|
106
|
+
@click="${(e) => m(-(Number(a.step.value) || 1), e)}"
|
|
107
|
+
>${t}</bit-button
|
|
108
|
+
>
|
|
109
|
+
<bit-input
|
|
110
|
+
part="input"
|
|
111
|
+
type="text"
|
|
112
|
+
inputmode="decimal"
|
|
113
|
+
aria-hidden="true"
|
|
114
|
+
:value="${() => u.value}"
|
|
115
|
+
:label="${() => a.label.value || null}"
|
|
116
|
+
:label-placement="${() => a["label-placement"].value}"
|
|
117
|
+
:placeholder="${() => a.placeholder.value || null}"
|
|
118
|
+
:color="${() => a.color.value || null}"
|
|
119
|
+
:size="${() => a.size.value || null}"
|
|
120
|
+
:variant="${() => a.variant.value || null}"
|
|
121
|
+
?disabled="${() => a.disabled.value}"
|
|
122
|
+
?readonly="${() => a.readonly.value}"
|
|
123
|
+
@input="${(t) => {
|
|
124
|
+
let n = t.detail?.value;
|
|
125
|
+
typeof n == "string" && (u.value = n, e("input", {
|
|
126
|
+
originalEvent: t.detail?.originalEvent ?? t,
|
|
127
|
+
value: f()
|
|
128
|
+
}));
|
|
129
|
+
}}"
|
|
130
|
+
@change="${(e) => {
|
|
131
|
+
let t = e.detail?.value;
|
|
132
|
+
if (typeof t != "string") return;
|
|
133
|
+
u.value = t;
|
|
134
|
+
let n = e.detail?.originalEvent ?? e;
|
|
135
|
+
p(f(), n);
|
|
136
|
+
}}"></bit-input>
|
|
137
|
+
<bit-button
|
|
138
|
+
icon-only
|
|
139
|
+
type="button"
|
|
140
|
+
part="increment-btn"
|
|
141
|
+
aria-label="Increase"
|
|
142
|
+
variant="ghost"
|
|
143
|
+
:size="${() => a.size.value || null}"
|
|
144
|
+
:color="${() => a.color.value || null}"
|
|
145
|
+
?disabled="${() => a.disabled.value || a.readonly.value || _.value}"
|
|
146
|
+
@click="${(e) => m(Number(a.step.value) || 1, e)}"
|
|
147
|
+
>${n}</bit-button
|
|
148
|
+
>
|
|
149
|
+
</div>
|
|
150
|
+
`;
|
|
151
|
+
},
|
|
152
|
+
styles: [e(), r],
|
|
153
|
+
tag: "bit-number-input"
|
|
154
|
+
});
|
|
155
|
+
//#endregion
|
|
156
|
+
export { u as NUMBER_INPUT_TAG };
|
|
157
|
+
|
|
158
|
+
//# sourceMappingURL=number-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-input.js","names":[],"sources":["../src/inputs/number-input/number-input.ts"],"sourcesContent":["import { computed, defineComponent, defineField, html, signal, watch } from '@vielzeug/craftit';\n\nimport type { DisablableProps, SizableProps, ThemableProps, VisualVariant } from '../../types';\n\nimport { minusIcon, plusIcon } from '../../icons';\nimport { disabledStateMixin } from '../../styles';\n// Ensure child components are registered\nimport '../button/button';\nimport '../input/input';\nimport styles from './number-input.css?inline';\n\nexport type BitNumberInputEvents = {\n change: { originalEvent?: Event; value: number | null };\n input: { originalEvent?: Event; value: number | null };\n};\n\n/** Number Input props */\nexport type BitNumberInputProps = ThemableProps &\n SizableProps &\n DisablableProps & {\n /** Stretch to full width of container */\n fullwidth?: boolean;\n /** Visible label */\n label?: string;\n /** Label placement: 'inset' renders the label inside the control box, 'outside' renders it above */\n 'label-placement'?: 'inset' | 'outside';\n /** Large step (for Page Up/Down, default: 10 × step) */\n 'large-step'?: number;\n /** Maximum allowed value */\n max?: number;\n /** Minimum allowed value */\n min?: number;\n name?: string;\n /** Allow null/empty value */\n nullable?: boolean;\n /** Form field name */\n\n /** Placeholder text */\n placeholder?: string;\n /** Make the input read-only */\n readonly?: boolean;\n /** Step size for increment/decrement */\n step?: number;\n /** Current numeric value */\n value?: number;\n /** Visual variant */\n variant?: VisualVariant;\n };\n\n/**\n * A numeric spin-button input with +/− controls, min/max clamping, and full keyboard support.\n *\n * @element bit-number-input\n *\n * @attr {number} value - Current value\n * @attr {number} min - Minimum value\n * @attr {number} max - Maximum value\n * @attr {number} step - Increment/decrement step (default: 1)\n * @attr {number} large-step - Step for Page Up/Down (default: 10)\n * @attr {boolean} disabled - Disables the control\n * @attr {boolean} readonly - Read-only mode\n * @attr {string} label - Visible label\n * @attr {string} name - Form field name\n * @attr {string} color - Theme color\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} placeholder - Input placeholder\n *\n * @fires change - On committed value change. detail: { value: number | null, originalEvent?: Event }\n * @fires input - On every keystroke. detail: { value: number | null, originalEvent?: Event }\n *\n * @cssprop --number-input-height - Control height\n * @cssprop --number-input-border-color - Border color\n * @cssprop --number-input-radius - Border radius\n * @cssprop --number-input-bg - Background\n * @cssprop --number-input-btn-bg - Spin button background\n *\n * @example\n * ```html\n * <bit-number-input label=\"Quantity\" value=\"1\" min=\"1\" max=\"99\" step=\"1\"></bit-number-input>\n * ```\n */\nexport const NUMBER_INPUT_TAG = defineComponent<BitNumberInputProps, BitNumberInputEvents>({\n formAssociated: true,\n props: {\n color: { default: undefined },\n disabled: { default: false },\n fullwidth: { default: false },\n label: { default: undefined },\n 'label-placement': { default: 'inset' },\n 'large-step': { default: undefined },\n max: { default: undefined },\n min: { default: undefined },\n name: { default: undefined },\n nullable: { default: false },\n placeholder: { default: undefined },\n readonly: { default: false },\n size: { default: undefined },\n step: { default: 1 },\n value: { default: undefined },\n variant: { default: undefined },\n },\n setup({ emit, host, props }) {\n const inputValue = signal<string>(props.value.value != null ? String(props.value.value) : '');\n\n defineField(\n {\n disabled: computed(() => Boolean(props.disabled.value)),\n value: computed(() => (inputValue.value !== '' ? inputValue.value : null)),\n },\n {\n onReset: () => {\n inputValue.value = props.value.value != null ? String(props.value.value) : '';\n },\n },\n );\n watch(props.value, (v) => {\n const newVal = v != null ? String(v) : '';\n\n if (inputValue.value !== newVal) inputValue.value = newVal;\n });\n function clamp(n: number): number {\n const min = props.min.value;\n const max = props.max.value;\n\n if (min != null && n < Number(min)) return Number(min);\n\n if (max != null && n > Number(max)) return Number(max);\n\n return n;\n }\n function parseValue(): number | null {\n const v = inputValue.value.trim();\n\n if (!v) return null;\n\n const n = Number.parseFloat(v);\n\n return Number.isNaN(n) ? null : n;\n }\n function commit(val: number | null, originalEvent?: Event) {\n const clamped = val != null ? clamp(val) : null;\n\n inputValue.value = clamped != null ? String(clamped) : '';\n\n if (clamped != null) host.setAttribute('value', String(clamped));\n else host.removeAttribute('value');\n\n emit('change', { originalEvent, value: clamped });\n }\n function increment(delta: number, originalEvent?: Event) {\n if (props.disabled.value || props.readonly.value) return;\n\n const current = parseValue() ?? (props.min.value != null ? Number(props.min.value) : 0);\n\n commit(current + delta, originalEvent);\n }\n function handleKeydown(e: KeyboardEvent) {\n if (props.disabled.value || props.readonly.value) return;\n\n const step = Number(props.step.value) || 1;\n const largeStep = Number(props['large-step'].value) || step * 10;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n increment(-step, e);\n break;\n case 'ArrowUp':\n e.preventDefault();\n increment(step, e);\n break;\n case 'End':\n if (props.max.value != null) {\n e.preventDefault();\n commit(Number(props.max.value), e);\n }\n\n break;\n case 'Home':\n if (props.min.value != null) {\n e.preventDefault();\n commit(Number(props.min.value), e);\n }\n\n break;\n case 'PageDown':\n e.preventDefault();\n increment(-largeStep, e);\n break;\n case 'PageUp':\n e.preventDefault();\n increment(largeStep, e);\n break;\n }\n }\n\n const atMin = computed(\n () => props.min.value != null && parseValue() != null && parseValue()! <= Number(props.min.value),\n );\n const atMax = computed(\n () => props.max.value != null && parseValue() != null && parseValue()! >= Number(props.max.value),\n );\n\n return html`\n <div\n class=\"wrapper\"\n role=\"spinbutton\"\n part=\"control\"\n :aria-valuenow=\"${() => parseValue() ?? null}\"\n :aria-valuemin=\"${() => props.min.value ?? null}\"\n :aria-valuemax=\"${() => props.max.value ?? null}\"\n :aria-label=\"${() => props.label.value || null}\"\n :aria-disabled=\"${() => (props.disabled.value ? 'true' : null)}\"\n :aria-readonly=\"${() => (props.readonly.value ? 'true' : null)}\"\n @keydown=\"${handleKeydown}\">\n <bit-button\n icon-only\n type=\"button\"\n part=\"decrement-btn\"\n aria-label=\"Decrease\"\n variant=\"ghost\"\n :size=\"${() => props.size.value || null}\"\n :color=\"${() => props.color.value || null}\"\n ?disabled=\"${() => props.disabled.value || props.readonly.value || atMin.value}\"\n @click=\"${(e: Event) => increment(-(Number(props.step.value) || 1), e)}\"\n >${minusIcon}</bit-button\n >\n <bit-input\n part=\"input\"\n type=\"text\"\n inputmode=\"decimal\"\n aria-hidden=\"true\"\n :value=\"${() => inputValue.value}\"\n :label=\"${() => props.label.value || null}\"\n :label-placement=\"${() => props['label-placement'].value}\"\n :placeholder=\"${() => props.placeholder.value || null}\"\n :color=\"${() => props.color.value || null}\"\n :size=\"${() => props.size.value || null}\"\n :variant=\"${() => props.variant.value || null}\"\n ?disabled=\"${() => props.disabled.value}\"\n ?readonly=\"${() => props.readonly.value}\"\n @input=\"${(e: Event) => {\n const v = (\n e as CustomEvent<{\n value?: string;\n }>\n ).detail?.value;\n\n if (typeof v !== 'string') return;\n\n inputValue.value = v;\n\n const originalEvent = (e as CustomEvent<{ originalEvent?: Event }>).detail?.originalEvent ?? e;\n\n emit('input', { originalEvent, value: parseValue() });\n }}\"\n @change=\"${(e: Event) => {\n const v = (\n e as CustomEvent<{\n value?: string;\n }>\n ).detail?.value;\n\n if (typeof v !== 'string') return;\n\n inputValue.value = v;\n\n const originalEvent = (e as CustomEvent<{ originalEvent?: Event }>).detail?.originalEvent ?? e;\n\n commit(parseValue(), originalEvent);\n }}\"></bit-input>\n <bit-button\n icon-only\n type=\"button\"\n part=\"increment-btn\"\n aria-label=\"Increase\"\n variant=\"ghost\"\n :size=\"${() => props.size.value || null}\"\n :color=\"${() => props.color.value || null}\"\n ?disabled=\"${() => props.disabled.value || props.readonly.value || atMax.value}\"\n @click=\"${(e: Event) => increment(Number(props.step.value) || 1, e)}\"\n >${plusIcon}</bit-button\n >\n </div>\n `;\n },\n styles: [disabledStateMixin(), styles],\n tag: 'bit-number-input',\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./styles/mixins/shape.css.cjs`),t=require(`./styles/mixins/theme.css.cjs`);require(`./styles/index.cjs`);const n=require(`./inputs/otp-input/otp-input.css?inline.cjs`);let r=require(`@vielzeug/craftit`);var i=(0,r.defineComponent)({props:{color:(0,r.typed)(void 0),disabled:(0,r.typed)(!1),label:(0,r.typed)(`One-time password`),length:(0,r.typed)(6),masked:(0,r.typed)(!1),name:(0,r.typed)(void 0),separator:(0,r.typed)(void 0),size:(0,r.typed)(void 0),type:(0,r.typed)(`numeric`),value:(0,r.typed)(``),variant:(0,r.typed)(void 0)},setup({emit:e,host:t,props:n}){let i=(0,r.computed)(()=>Array.from({length:Number(n.length.value)||6},(e,t)=>t));function a(){return[...t.shadowRoot?.querySelectorAll(`input.cell`)??[]]}function o(){return a().map(e=>e.value).join(``)}function s(e){return n.type.value===`numeric`?/^\d$/.test(e):/^[a-z\d]$/i.test(e)}function c(n,r){let i=n.target,c=i.value;if(c.length>1&&(c=c.slice(-1)),c&&!s(c)){i.value=``;return}i.value=c;let l=a(),u=o(),d=u.length===l.length&&u.split(``).every(Boolean);t.setAttribute(`value`,u),e(`change`,{complete:d,originalEvent:n,value:u}),d&&e(`complete`,{originalEvent:n,value:u}),c&&r<l.length-1&&(l[r+1].focus(),l[r+1].select())}function l(n,r){let i=n.target,s=a();if(n.key===`Backspace`){i.value?i.value=``:r>0&&(s[r-1].focus(),s[r-1].select(),s[r-1].value=``);let a=o();t.setAttribute(`value`,a),e(`change`,{complete:!1,originalEvent:n,value:a}),n.preventDefault()}else n.key===`ArrowLeft`&&r>0?(s[r-1].focus(),n.preventDefault()):n.key===`ArrowRight`&&r<s.length-1?(s[r+1].focus(),n.preventDefault()):n.key===`Home`?(s[0].focus(),n.preventDefault()):n.key===`End`&&(s[s.length-1].focus(),n.preventDefault())}function u(r){r.preventDefault();let i=(r.clipboardData?.getData(`text`)??``).split(``).filter(e=>s(e)).slice(0,Number(n.length.value)||6),c=a();i.forEach((e,t)=>{c[t]&&(c[t].value=e)});let l=o(),u=l.length===c.length&&l.split(``).every(Boolean);t.setAttribute(`value`,l),e(`change`,{complete:u,originalEvent:r,value:l}),u&&e(`complete`,{originalEvent:r,value:l}),c[Math.min(i.length,c.length-1)]?.focus()}(0,r.onMount)(()=>{let e=String(n.value.value||``),t=a();e.split(``).forEach((e,n)=>{t[n]&&(t[n].value=e)})});let d=(0,r.computed)(()=>{let e=Number(n.length.value)||6;return n.separator.value==null?-1:Math.floor(e/2)});return r.html`
|
|
2
|
+
<div class="otp-group" part="group" role="group" :aria-label="${()=>n.label.value}">
|
|
3
|
+
${()=>i.value.map(e=>r.html`
|
|
4
|
+
${()=>d.value>0&&e===d.value?r.html`<span class="separator" aria-hidden="true">${()=>n.separator.value||`-`}</span>`:``}
|
|
5
|
+
<input
|
|
6
|
+
class="cell"
|
|
7
|
+
part="cell"
|
|
8
|
+
:type="${()=>n.masked.value?`password`:`text`}"
|
|
9
|
+
:inputmode="${()=>n.type.value===`numeric`?`numeric`:`text`}"
|
|
10
|
+
maxlength="1"
|
|
11
|
+
:autocomplete="${()=>e===0?`one-time-code`:`off`}"
|
|
12
|
+
:aria-label="${()=>`Digit ${e+1} of ${n.length.value}`}"
|
|
13
|
+
:disabled="${()=>n.disabled.value||null}"
|
|
14
|
+
:name="${()=>n.name.value?`${n.name.value}[${e}]`:null}"
|
|
15
|
+
@input="${t=>c(t,e)}"
|
|
16
|
+
@keydown="${t=>l(t,e)}"
|
|
17
|
+
@paste="${t=>e===0?u(t):t.preventDefault()}"
|
|
18
|
+
@focus="${e=>e.target.select()}" />
|
|
19
|
+
`)}
|
|
20
|
+
</div>
|
|
21
|
+
`},styles:[t.colorThemeMixin,e.sizeVariantMixin({}),t.forcedColorsFocusMixin(`.cell`),n.default],tag:`bit-otp-input`});exports.OTP_INPUT_TAG=i;
|
|
22
|
+
//# sourceMappingURL=otp-input.cjs.map
|