@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/tab-item.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { coarsePointerMixin as e } from "./styles/mixins/accessibility.css.js";
|
|
2
|
+
import { colorThemeMixin as t, forcedColorsFocusMixin as n } from "./styles/mixins/theme.css.js";
|
|
3
|
+
import "./styles/index.js";
|
|
4
|
+
import { TABS_CTX as r } from "./tabs.js";
|
|
5
|
+
import i from "./disclosure/tab-item/tab-item.css?inline.js";
|
|
6
|
+
import { computed as a, defineComponent as o, effect as s, fire as c, html as l, inject as u, syncContextProps as d, typed as f } from "@vielzeug/craftit";
|
|
7
|
+
//#region src/disclosure/tab-item/tab-item.ts
|
|
8
|
+
var p = o({
|
|
9
|
+
props: {
|
|
10
|
+
active: f(!1),
|
|
11
|
+
color: f(void 0),
|
|
12
|
+
disabled: f(!1),
|
|
13
|
+
size: f(void 0),
|
|
14
|
+
value: f(""),
|
|
15
|
+
variant: f(void 0)
|
|
16
|
+
},
|
|
17
|
+
setup({ host: e, props: t }) {
|
|
18
|
+
let n = u(r, void 0);
|
|
19
|
+
d(n, t, [
|
|
20
|
+
"color",
|
|
21
|
+
"size",
|
|
22
|
+
"variant"
|
|
23
|
+
]);
|
|
24
|
+
let i = n ? a(() => !!n.value.value && n.value.value === t.value.value) : t.active;
|
|
25
|
+
return s(() => {
|
|
26
|
+
e.toggleAttribute("active", i.value);
|
|
27
|
+
}), l`
|
|
28
|
+
<button
|
|
29
|
+
role="tab"
|
|
30
|
+
type="button"
|
|
31
|
+
part="tab"
|
|
32
|
+
:id="${() => `tab-${t.value.value}`}"
|
|
33
|
+
:aria-selected=${a(() => String(i.value))}
|
|
34
|
+
:tabindex=${a(() => i.value ? "0" : "-1")}
|
|
35
|
+
:aria-disabled=${a(() => String(t.disabled.value))}
|
|
36
|
+
:aria-controls="${() => `tabpanel-${t.value.value}`}"
|
|
37
|
+
@click=${() => {
|
|
38
|
+
t.disabled.value || c.custom(e, "click", { detail: { value: t.value.value } });
|
|
39
|
+
}}>
|
|
40
|
+
<slot name="prefix"></slot>
|
|
41
|
+
<slot></slot>
|
|
42
|
+
<slot name="suffix"></slot>
|
|
43
|
+
</button>
|
|
44
|
+
`;
|
|
45
|
+
},
|
|
46
|
+
styles: [
|
|
47
|
+
t,
|
|
48
|
+
n("button"),
|
|
49
|
+
e,
|
|
50
|
+
i
|
|
51
|
+
],
|
|
52
|
+
tag: "bit-tab-item"
|
|
53
|
+
});
|
|
54
|
+
//#endregion
|
|
55
|
+
export { p as TAB_ITEM_TAG };
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=tab-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-item.js","names":[],"sources":["../src/disclosure/tab-item/tab-item.ts"],"sourcesContent":["import { computed, defineComponent, effect, fire, html, typed, inject, syncContextProps } from '@vielzeug/craftit';\n\nimport type { ComponentSize, ThemeColor, VisualVariant } from '../../types';\n\nimport { coarsePointerMixin, colorThemeMixin, forcedColorsFocusMixin } from '../../styles';\nimport { TABS_CTX } from '../tabs/tabs';\nimport styles from './tab-item.css?inline';\n\nexport type BitTabItemProps = {\n /** Whether this tab is currently selected (set by bit-tabs) */\n active?: boolean;\n /** Theme color (inherited from bit-tabs) */\n color?: ThemeColor;\n /** Disable this tab */\n disabled?: boolean;\n /** Size (inherited from bit-tabs) */\n size?: ComponentSize;\n /** Unique value identifier — must match a bit-tab-panel value */\n value: string;\n /** Visual variant (inherited from bit-tabs) */\n variant?: VisualVariant;\n};\n\n/**\n * Individual tab trigger. Must be placed in the `tabs` slot of `bit-tabs`.\n *\n * @element bit-tab-item\n *\n * @attr {string} value - Unique identifier, matches the corresponding bit-tab-panel value\n * @attr {boolean} active - Set by the parent bit-tabs when this tab is selected\n * @attr {boolean} disabled - Prevents selection\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} variant - Inherited from bit-tabs\n * @attr {string} color - Inherited from bit-tabs: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n *\n * @slot prefix - Icon or content before the label\n * @slot - Tab label\n * @slot suffix - Badge or count after the label\n *\n * @example\n * ```html\n * <bit-tab-item slot=\"tabs\" value=\"overview\">Overview</bit-tab-item>\n * <bit-tab-item slot=\"tabs\" value=\"settings\" disabled>Settings</bit-tab-item>\n * ```\n */\nexport const TAB_ITEM_TAG = defineComponent<BitTabItemProps>({\n props: {\n active: typed<boolean>(false),\n color: typed<BitTabItemProps['color']>(undefined),\n disabled: typed<boolean>(false),\n size: typed<BitTabItemProps['size']>(undefined),\n value: typed<string>(''),\n variant: typed<BitTabItemProps['variant']>(undefined),\n },\n setup({ host, props }) {\n const tabsCtx = inject(TABS_CTX, undefined);\n\n syncContextProps(tabsCtx, props, ['color', 'size', 'variant']);\n\n const isActive = tabsCtx\n ? computed(() => !!tabsCtx.value.value && tabsCtx.value.value === props.value.value)\n : props.active;\n\n effect(() => {\n host.toggleAttribute('active', isActive.value);\n });\n\n const ariaSelected = computed(() => String(isActive.value));\n const tabIndex = computed(() => (isActive.value ? '0' : '-1'));\n const handleClick = () => {\n if (props.disabled.value) return;\n\n fire.custom(host, 'click', {\n detail: { value: props.value.value },\n });\n };\n\n return html`\n <button\n role=\"tab\"\n type=\"button\"\n part=\"tab\"\n :id=\"${() => `tab-${props.value.value}`}\"\n :aria-selected=${ariaSelected}\n :tabindex=${tabIndex}\n :aria-disabled=${computed(() => String(props.disabled.value))}\n :aria-controls=\"${() => `tabpanel-${props.value.value}`}\"\n @click=${handleClick}>\n <slot name=\"prefix\"></slot>\n <slot></slot>\n <slot name=\"suffix\"></slot>\n </button>\n `;\n },\n styles: [colorThemeMixin, forcedColorsFocusMixin('button'), coarsePointerMixin, styles],\n tag: 'bit-tab-item',\n});\n"],"mappings":";;;;;;;AA6CA,IAAa,IAAe,EAAiC;CAC3D,OAAO;EACL,QAAQ,EAAe,GAAM;EAC7B,OAAO,EAAgC,KAAA,EAAU;EACjD,UAAU,EAAe,GAAM;EAC/B,MAAM,EAA+B,KAAA,EAAU;EAC/C,OAAO,EAAc,GAAG;EACxB,SAAS,EAAkC,KAAA,EAAU;EACtD;CACD,MAAM,EAAE,SAAM,YAAS;EACrB,IAAM,IAAU,EAAO,GAAU,KAAA,EAAU;AAE3C,IAAiB,GAAS,GAAO;GAAC;GAAS;GAAQ;GAAU,CAAC;EAE9D,IAAM,IAAW,IACb,QAAe,CAAC,CAAC,EAAQ,MAAM,SAAS,EAAQ,MAAM,UAAU,EAAM,MAAM,MAAM,GAClF,EAAM;AAgBV,SAdA,QAAa;AACX,KAAK,gBAAgB,UAAU,EAAS,MAAM;IAC9C,EAYK,CAAI;;;;;qBAKM,OAAO,EAAM,MAAM,QAAQ;yBAfvB,QAAe,OAAO,EAAS,MAAM,CAAC,CAgBzB;oBAfjB,QAAgB,EAAS,QAAQ,MAAM,KAAM,CAgBrC;yBACJ,QAAe,OAAO,EAAM,SAAS,MAAM,CAAC,CAAC;gCACtC,YAAY,EAAM,MAAM,QAAQ;uBAjBlC;AACpB,KAAM,SAAS,SAEnB,EAAK,OAAO,GAAM,SAAS,EACzB,QAAQ,EAAE,OAAO,EAAM,MAAM,OAAO,EACrC,CAAC;IAaqB;;;;;;;CAO3B,QAAQ;EAAC;EAAiB,EAAuB,SAAS;EAAE;EAAoB;EAAO;CACvF,KAAK;CACN,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./styles/mixins/accessibility.css.cjs`);require(`./styles/index.cjs`);const t=require(`./tabs.cjs`),n=require(`./disclosure/tab-panel/tab-panel.css?inline.cjs`);let r=require(`@vielzeug/craftit`);var i=(0,r.defineComponent)({props:{active:(0,r.typed)(!1),lazy:(0,r.typed)(!1),padding:(0,r.typed)(`md`),value:(0,r.typed)(``)},setup({host:e,props:n}){let i=(0,r.inject)(t.TABS_CTX,void 0),a=i?(0,r.computed)(()=>!!i.value.value&&i.value.value===n.value.value):n.active,o=(0,r.computed)(()=>{let e={"2xl":`var(--size-12)`,lg:`var(--size-6)`,md:`var(--size-4)`,none:`0`,sm:`var(--size-2)`,xl:`var(--size-8)`,xs:`var(--size-1)`};return e[n.padding.value??`md`]??e.md}),s=(0,r.signal)(!1);(0,r.effect)(()=>{e.toggleAttribute(`active`,a.value),a.value&&(s.value=!0)});let c=(0,r.computed)(()=>!n.lazy.value||s.value);return r.html`
|
|
2
|
+
<div
|
|
3
|
+
class="panel"
|
|
4
|
+
part="panel"
|
|
5
|
+
role="tabpanel"
|
|
6
|
+
:id="${()=>`tabpanel-${n.value.value}`}"
|
|
7
|
+
:aria-labelledby="${()=>`tab-${n.value.value}`}"
|
|
8
|
+
:aria-hidden=${()=>String(!a.value)}
|
|
9
|
+
:style="${()=>`--tab-panel-padding: ${o.value}`}"
|
|
10
|
+
tabindex="0">
|
|
11
|
+
${()=>c.value?r.html`<slot></slot>`:``}
|
|
12
|
+
</div>
|
|
13
|
+
`},styles:[e.reducedMotionMixin,n.default],tag:`bit-tab-panel`});exports.TAB_PANEL_TAG=i;
|
|
14
|
+
//# sourceMappingURL=tab-panel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-panel.cjs","names":[],"sources":["../src/disclosure/tab-panel/tab-panel.ts"],"sourcesContent":["import { computed, defineComponent, effect, html, typed, inject, signal } from '@vielzeug/craftit';\n\nimport { reducedMotionMixin } from '../../styles';\nimport { TABS_CTX } from '../tabs/tabs';\nimport styles from './tab-panel.css?inline';\n\nexport type BitTabPanelProps = {\n /** Active state (managed by bit-tabs) */\n active?: boolean;\n /** When true, the panel content is not rendered until first activation (preserves resources) */\n lazy?: boolean;\n /** Panel padding size: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' (default: 'md' = var(--size-4)) */\n padding?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Must match the `value` of its corresponding bit-tab-item */\n value: string;\n};\n\n/**\n * Content panel for a tab. Shown when its `value` matches the selected tab.\n *\n * @element bit-tab-panel\n *\n * @attr {string} value - Must match the corresponding bit-tab-item value\n * @attr {boolean} active - Toggled by the parent bit-tabs\n * @attr {string} padding - Panel padding: 'none' | 'xs' | 'sm' | 'md' (default) | 'lg' | 'xl' | '2xl'\n *\n * @slot - Panel content\n *\n * @example\n * ```html\n * <bit-tab-panel value=\"overview\"><p>Overview content here</p></bit-tab-panel>\n * <bit-tab-panel value=\"settings\" padding=\"lg\"><p>Large padding</p></bit-tab-panel>\n * <bit-tab-panel value=\"code\" padding=\"none\"><pre>No padding for code</pre></bit-tab-panel>\n * ```\n */\nexport const TAB_PANEL_TAG = defineComponent<BitTabPanelProps>({\n props: {\n active: typed<boolean>(false),\n lazy: typed<boolean>(false),\n padding: typed<BitTabPanelProps['padding']>('md'),\n value: typed<string>(''),\n },\n setup({ host, props }) {\n const tabsCtx = inject(TABS_CTX, undefined);\n const isActive = tabsCtx\n ? computed(() => !!tabsCtx.value.value && tabsCtx.value.value === props.value.value)\n : props.active;\n // Map padding prop to CSS variable\n const paddingValue = computed(() => {\n const paddingMap: Record<string, string> = {\n '2xl': 'var(--size-12)',\n lg: 'var(--size-6)',\n md: 'var(--size-4)',\n none: '0',\n sm: 'var(--size-2)',\n xl: 'var(--size-8)',\n xs: 'var(--size-1)',\n };\n const key = props.padding.value ?? 'md';\n\n return paddingMap[key] ?? paddingMap.md;\n });\n // Track whether the panel has ever been active (for lazy rendering)\n const hasBeenActive = signal(false);\n\n effect(() => {\n host.toggleAttribute('active', isActive.value);\n\n if (isActive.value) hasBeenActive.value = true;\n });\n\n // shouldRender: true if not lazy OR has been active at least once\n const shouldRender = computed(() => !props.lazy.value || hasBeenActive.value);\n\n return html`\n <div\n class=\"panel\"\n part=\"panel\"\n role=\"tabpanel\"\n :id=\"${() => `tabpanel-${props.value.value}`}\"\n :aria-labelledby=\"${() => `tab-${props.value.value}`}\"\n :aria-hidden=${() => String(!isActive.value)}\n :style=\"${() => `--tab-panel-padding: ${paddingValue.value}`}\"\n tabindex=\"0\">\n ${() => (shouldRender.value ? html`<slot></slot>` : '')}\n </div>\n `;\n },\n styles: [reducedMotionMixin, styles],\n tag: 'bit-tab-panel',\n});\n"],"mappings":"wRAmCA,IAAa,GAAA,EAAA,EAAA,iBAAkD,CAC7D,MAAO,CACL,QAAA,EAAA,EAAA,OAAuB,GAAM,CAC7B,MAAA,EAAA,EAAA,OAAqB,GAAM,CAC3B,SAAA,EAAA,EAAA,OAA4C,KAAK,CACjD,OAAA,EAAA,EAAA,OAAqB,GAAG,CACzB,CACD,MAAM,CAAE,OAAM,SAAS,CACrB,IAAM,GAAA,EAAA,EAAA,QAAiB,EAAA,SAAU,IAAA,GAAU,CACrC,EAAW,GAAA,EAAA,EAAA,cACE,CAAC,CAAC,EAAQ,MAAM,OAAS,EAAQ,MAAM,QAAU,EAAM,MAAM,MAAM,CAClF,EAAM,OAEJ,GAAA,EAAA,EAAA,cAA8B,CAClC,IAAM,EAAqC,CACzC,MAAO,iBACP,GAAI,gBACJ,GAAI,gBACJ,KAAM,IACN,GAAI,gBACJ,GAAI,gBACJ,GAAI,gBACL,CAGD,OAAO,EAFK,EAAM,QAAQ,OAAS,OAET,EAAW,IACrC,CAEI,GAAA,EAAA,EAAA,QAAuB,GAAM,EAEnC,EAAA,EAAA,YAAa,CACX,EAAK,gBAAgB,SAAU,EAAS,MAAM,CAE1C,EAAS,QAAO,EAAc,MAAQ,KAC1C,CAGF,IAAM,GAAA,EAAA,EAAA,cAA8B,CAAC,EAAM,KAAK,OAAS,EAAc,MAAM,CAE7E,MAAO,GAAA,IAAI;;;;;mBAKM,YAAY,EAAM,MAAM,QAAQ;gCACnB,OAAO,EAAM,MAAM,QAAQ;2BAChC,OAAO,CAAC,EAAS,MAAM,CAAC;sBAC7B,wBAAwB,EAAa,QAAQ;;cAEpD,EAAa,MAAQ,EAAA,IAAI,gBAAkB,GAAI;;OAI9D,OAAQ,CAAC,EAAA,mBAAoB,EAAA,QAAO,CACpC,IAAK,gBACN,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { reducedMotionMixin as e } from "./styles/mixins/accessibility.css.js";
|
|
2
|
+
import "./styles/index.js";
|
|
3
|
+
import { TABS_CTX as t } from "./tabs.js";
|
|
4
|
+
import n from "./disclosure/tab-panel/tab-panel.css?inline.js";
|
|
5
|
+
import { computed as r, defineComponent as i, effect as a, html as o, inject as s, signal as c, typed as l } from "@vielzeug/craftit";
|
|
6
|
+
//#region src/disclosure/tab-panel/tab-panel.ts
|
|
7
|
+
var u = i({
|
|
8
|
+
props: {
|
|
9
|
+
active: l(!1),
|
|
10
|
+
lazy: l(!1),
|
|
11
|
+
padding: l("md"),
|
|
12
|
+
value: l("")
|
|
13
|
+
},
|
|
14
|
+
setup({ host: e, props: n }) {
|
|
15
|
+
let i = s(t, void 0), l = i ? r(() => !!i.value.value && i.value.value === n.value.value) : n.active, u = r(() => {
|
|
16
|
+
let e = {
|
|
17
|
+
"2xl": "var(--size-12)",
|
|
18
|
+
lg: "var(--size-6)",
|
|
19
|
+
md: "var(--size-4)",
|
|
20
|
+
none: "0",
|
|
21
|
+
sm: "var(--size-2)",
|
|
22
|
+
xl: "var(--size-8)",
|
|
23
|
+
xs: "var(--size-1)"
|
|
24
|
+
};
|
|
25
|
+
return e[n.padding.value ?? "md"] ?? e.md;
|
|
26
|
+
}), d = c(!1);
|
|
27
|
+
a(() => {
|
|
28
|
+
e.toggleAttribute("active", l.value), l.value && (d.value = !0);
|
|
29
|
+
});
|
|
30
|
+
let f = r(() => !n.lazy.value || d.value);
|
|
31
|
+
return o`
|
|
32
|
+
<div
|
|
33
|
+
class="panel"
|
|
34
|
+
part="panel"
|
|
35
|
+
role="tabpanel"
|
|
36
|
+
:id="${() => `tabpanel-${n.value.value}`}"
|
|
37
|
+
:aria-labelledby="${() => `tab-${n.value.value}`}"
|
|
38
|
+
:aria-hidden=${() => String(!l.value)}
|
|
39
|
+
:style="${() => `--tab-panel-padding: ${u.value}`}"
|
|
40
|
+
tabindex="0">
|
|
41
|
+
${() => f.value ? o`<slot></slot>` : ""}
|
|
42
|
+
</div>
|
|
43
|
+
`;
|
|
44
|
+
},
|
|
45
|
+
styles: [e, n],
|
|
46
|
+
tag: "bit-tab-panel"
|
|
47
|
+
});
|
|
48
|
+
//#endregion
|
|
49
|
+
export { u as TAB_PANEL_TAG };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=tab-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-panel.js","names":[],"sources":["../src/disclosure/tab-panel/tab-panel.ts"],"sourcesContent":["import { computed, defineComponent, effect, html, typed, inject, signal } from '@vielzeug/craftit';\n\nimport { reducedMotionMixin } from '../../styles';\nimport { TABS_CTX } from '../tabs/tabs';\nimport styles from './tab-panel.css?inline';\n\nexport type BitTabPanelProps = {\n /** Active state (managed by bit-tabs) */\n active?: boolean;\n /** When true, the panel content is not rendered until first activation (preserves resources) */\n lazy?: boolean;\n /** Panel padding size: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' (default: 'md' = var(--size-4)) */\n padding?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Must match the `value` of its corresponding bit-tab-item */\n value: string;\n};\n\n/**\n * Content panel for a tab. Shown when its `value` matches the selected tab.\n *\n * @element bit-tab-panel\n *\n * @attr {string} value - Must match the corresponding bit-tab-item value\n * @attr {boolean} active - Toggled by the parent bit-tabs\n * @attr {string} padding - Panel padding: 'none' | 'xs' | 'sm' | 'md' (default) | 'lg' | 'xl' | '2xl'\n *\n * @slot - Panel content\n *\n * @example\n * ```html\n * <bit-tab-panel value=\"overview\"><p>Overview content here</p></bit-tab-panel>\n * <bit-tab-panel value=\"settings\" padding=\"lg\"><p>Large padding</p></bit-tab-panel>\n * <bit-tab-panel value=\"code\" padding=\"none\"><pre>No padding for code</pre></bit-tab-panel>\n * ```\n */\nexport const TAB_PANEL_TAG = defineComponent<BitTabPanelProps>({\n props: {\n active: typed<boolean>(false),\n lazy: typed<boolean>(false),\n padding: typed<BitTabPanelProps['padding']>('md'),\n value: typed<string>(''),\n },\n setup({ host, props }) {\n const tabsCtx = inject(TABS_CTX, undefined);\n const isActive = tabsCtx\n ? computed(() => !!tabsCtx.value.value && tabsCtx.value.value === props.value.value)\n : props.active;\n // Map padding prop to CSS variable\n const paddingValue = computed(() => {\n const paddingMap: Record<string, string> = {\n '2xl': 'var(--size-12)',\n lg: 'var(--size-6)',\n md: 'var(--size-4)',\n none: '0',\n sm: 'var(--size-2)',\n xl: 'var(--size-8)',\n xs: 'var(--size-1)',\n };\n const key = props.padding.value ?? 'md';\n\n return paddingMap[key] ?? paddingMap.md;\n });\n // Track whether the panel has ever been active (for lazy rendering)\n const hasBeenActive = signal(false);\n\n effect(() => {\n host.toggleAttribute('active', isActive.value);\n\n if (isActive.value) hasBeenActive.value = true;\n });\n\n // shouldRender: true if not lazy OR has been active at least once\n const shouldRender = computed(() => !props.lazy.value || hasBeenActive.value);\n\n return html`\n <div\n class=\"panel\"\n part=\"panel\"\n role=\"tabpanel\"\n :id=\"${() => `tabpanel-${props.value.value}`}\"\n :aria-labelledby=\"${() => `tab-${props.value.value}`}\"\n :aria-hidden=${() => String(!isActive.value)}\n :style=\"${() => `--tab-panel-padding: ${paddingValue.value}`}\"\n tabindex=\"0\">\n ${() => (shouldRender.value ? html`<slot></slot>` : '')}\n </div>\n `;\n },\n styles: [reducedMotionMixin, styles],\n tag: 'bit-tab-panel',\n});\n"],"mappings":";;;;;;AAmCA,IAAa,IAAgB,EAAkC;CAC7D,OAAO;EACL,QAAQ,EAAe,GAAM;EAC7B,MAAM,EAAe,GAAM;EAC3B,SAAS,EAAmC,KAAK;EACjD,OAAO,EAAc,GAAG;EACzB;CACD,MAAM,EAAE,SAAM,YAAS;EACrB,IAAM,IAAU,EAAO,GAAU,KAAA,EAAU,EACrC,IAAW,IACb,QAAe,CAAC,CAAC,EAAQ,MAAM,SAAS,EAAQ,MAAM,UAAU,EAAM,MAAM,MAAM,GAClF,EAAM,QAEJ,IAAe,QAAe;GAClC,IAAM,IAAqC;IACzC,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,IAAI;IACL;AAGD,UAAO,EAFK,EAAM,QAAQ,SAAS,SAET,EAAW;IACrC,EAEI,IAAgB,EAAO,GAAM;AAEnC,UAAa;AAGX,GAFA,EAAK,gBAAgB,UAAU,EAAS,MAAM,EAE1C,EAAS,UAAO,EAAc,QAAQ;IAC1C;EAGF,IAAM,IAAe,QAAe,CAAC,EAAM,KAAK,SAAS,EAAc,MAAM;AAE7E,SAAO,CAAI;;;;;qBAKM,YAAY,EAAM,MAAM,QAAQ;kCACnB,OAAO,EAAM,MAAM,QAAQ;6BAChC,OAAO,CAAC,EAAS,MAAM,CAAC;wBAC7B,wBAAwB,EAAa,QAAQ;;gBAEpD,EAAa,QAAQ,CAAI,kBAAkB,GAAI;;;;CAI9D,QAAQ,CAAC,GAAoB,EAAO;CACpC,KAAK;CACN,CAAC"}
|
package/dist/table.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./styles/mixins/accessibility.css.cjs`),t=require(`./styles/mixins/theme.css.cjs`);require(`./styles/index.cjs`);const n=require(`./content/table/table.css?inline.cjs`);let r=require(`@vielzeug/craftit`);customElements.get(`bit-tr`)||customElements.define(`bit-tr`,class extends HTMLElement{}),customElements.get(`bit-th`)||customElements.define(`bit-th`,class extends HTMLElement{}),customElements.get(`bit-td`)||customElements.define(`bit-td`,class extends HTMLElement{});var i=`bit-tr`,a=`bit-th`,o=`bit-td`,s=[`colspan`,`rowspan`,`scope`,`headers`,`abbr`,`axis`,`align`,`valign`,`width`];function c(e,t,n,r){let i=[];t.textContent=``,n.textContent=``,r.textContent=``;function a(e,t){let n=e.localName===`bit-th`,r=document.createElement(n?`th`:`td`);for(let t of s){let n=e.getAttribute(t);n!==null&&r.setAttribute(t,n)}r.textContent=e.textContent??``;let a=new MutationObserver(()=>{r.textContent=e.textContent??``;for(let t of s){let n=e.getAttribute(t);n===null?r.removeAttribute(t):r.setAttribute(t,n)}});return a.observe(e,{attributes:!0,characterData:!0,childList:!0,subtree:!0}),i.push(a),t.appendChild(r),r}function o(e,t){let n=document.createElement(`tr`);for(let t of e.children)(t.localName===`bit-th`||t.localName===`bit-td`)&&a(t,n);t.appendChild(n)}for(let i of e.children)i.localName===`bit-tr`&&(i.hasAttribute(`head`)?o(i,t):i.hasAttribute(`foot`)?o(i,r):o(i,n));return()=>{for(let e of i)e.disconnect()}}var l=(0,r.defineComponent)({props:{bordered:{default:!1,type:Boolean},caption:{default:void 0},color:{default:void 0},loading:{default:!1,type:Boolean},size:{default:void 0},sticky:{default:!1,type:Boolean},striped:{default:!1,type:Boolean}},setup({host:e,props:t}){return(0,r.aria)({busy:()=>t.loading.value,label:()=>t.caption.value??null}),(0,r.onMount)(()=>{let n=e.shadowRoot.querySelector(`.scroll-container`),i=document.createElement(`table`),a=document.createElement(`caption`),o=document.createElement(`thead`),s=document.createElement(`tbody`),l=document.createElement(`tfoot`);n.setAttribute(`part`,`scroll`),i.setAttribute(`part`,`table`),o.setAttribute(`part`,`head`),s.setAttribute(`part`,`body`),l.setAttribute(`part`,`foot`),i.append(a,o,s,l),n.appendChild(i),(0,r.effect)(()=>{a.hidden=!(a.textContent=t.caption.value??``)});let u=c(e,o,s,l),d=new MutationObserver(()=>{u(),u=c(e,o,s,l)});return d.observe(e,{childList:!0}),()=>{d.disconnect(),u()}}),r.html`<div class="scroll-container"></div>`},styles:[t.colorThemeMixin,e.reducedMotionMixin,n.default],tag:`bit-table`});exports.TABLE_TAG=l,exports.TD_TAG=o,exports.TH_TAG=a,exports.TR_TAG=i;
|
|
2
|
+
//# sourceMappingURL=table.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.cjs","names":[],"sources":["../src/content/table/table.ts"],"sourcesContent":["import { aria, defineComponent, effect, html, onMount } from '@vielzeug/craftit';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { colorThemeMixin, reducedMotionMixin } from '../../styles';\nimport componentStyles from './table.css?inline';\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\n/** Table component properties */\nexport type BitTableProps = {\n /** Show borders between rows and around the table */\n bordered?: boolean;\n /** Visible caption text — also used as accessible label for the table group */\n caption?: string;\n /** Theme color applied to the header row background */\n color?: ThemeColor;\n /** Show a loading / busy state */\n loading?: boolean;\n /** Component size: 'sm' | 'md' | 'lg' */\n size?: ComponentSize;\n /** Stick the header row to the top while the body scrolls */\n sticky?: boolean;\n /** Alternating row stripe background */\n striped?: boolean;\n};\n\n/* ── Sub-components (no shadow DOM) ─────────────────────────────────────── */\n\n// bit-tr, bit-th, bit-td are lightweight markers in the light DOM.\n// bit-table reads them and builds a fully-native shadow <table> so that\n// browser features that only work on real table elements (colspan/rowspan,\n// position:sticky on <th>, table layout algorithm) all work correctly.\n\nif (!customElements.get('bit-tr')) customElements.define('bit-tr', class extends HTMLElement {});\n\nif (!customElements.get('bit-th')) customElements.define('bit-th', class extends HTMLElement {});\n\nif (!customElements.get('bit-td')) customElements.define('bit-td', class extends HTMLElement {});\n\nexport const TR_TAG = 'bit-tr';\nexport const TH_TAG = 'bit-th';\nexport const TD_TAG = 'bit-td';\n\n/* ── Table proxy helpers ─────────────────────────────────────────────────── */\n\n// Attributes on bit-th / bit-td that should be forwarded to the native cell.\nconst CELL_ATTRS = ['colspan', 'rowspan', 'scope', 'headers', 'abbr', 'axis', 'align', 'valign', 'width'];\n\n/**\n * Build (or rebuild) the entire native shadow table from the current light-DOM\n * bit-tr / bit-th / bit-td structure. Returns a cleanup function that\n * disconnects all MutationObservers created during the build.\n */\nfunction buildTable(\n host: HTMLElement,\n thead: HTMLTableSectionElement,\n tbody: HTMLTableSectionElement,\n tfoot: HTMLTableSectionElement,\n): () => void {\n const observers: MutationObserver[] = [];\n\n // Clear all sections first\n thead.textContent = '';\n tbody.textContent = '';\n tfoot.textContent = '';\n\n /**\n * Mirror one bit-td / bit-th → native td / th, keeping text content and\n * relevant attributes in sync via a MutationObserver.\n */\n function mirrorCell(source: Element, into: HTMLTableSectionElement | HTMLTableRowElement): HTMLTableCellElement {\n const isHeader = source.localName === 'bit-th';\n const cell = document.createElement(isHeader ? 'th' : 'td');\n\n // Forward allowed attributes\n for (const attr of CELL_ATTRS) {\n const val = source.getAttribute(attr);\n\n if (val !== null) cell.setAttribute(attr, val);\n }\n\n cell.textContent = source.textContent ?? '';\n\n // Keep text + attrs in sync\n const obs = new MutationObserver(() => {\n cell.textContent = source.textContent ?? '';\n for (const attr of CELL_ATTRS) {\n const val = source.getAttribute(attr);\n\n if (val !== null) cell.setAttribute(attr, val);\n else cell.removeAttribute(attr);\n }\n });\n\n obs.observe(source, { attributes: true, characterData: true, childList: true, subtree: true });\n observers.push(obs);\n\n into.appendChild(cell);\n\n return cell;\n }\n\n /**\n * Mirror one bit-tr → native tr with all its cells.\n */\n function mirrorRow(source: Element, section: HTMLTableSectionElement): void {\n const tr = document.createElement('tr');\n\n for (const child of source.children) {\n if (child.localName === 'bit-th' || child.localName === 'bit-td') {\n mirrorCell(child, tr);\n }\n }\n section.appendChild(tr);\n }\n\n // Walk all direct children of bit-table\n for (const child of host.children) {\n if (child.localName !== 'bit-tr') continue;\n\n if (child.hasAttribute('head')) {\n mirrorRow(child, thead);\n } else if (child.hasAttribute('foot')) {\n mirrorRow(child, tfoot);\n } else {\n mirrorRow(child, tbody);\n }\n }\n\n return () => {\n for (const obs of observers) obs.disconnect();\n };\n}\n\n/**\n * Accessible data table. Compose with `<bit-tr>`, `<bit-th>`, and `<bit-td>`.\n * Add `head` to header rows and `foot` to footer rows.\n *\n * @element bit-table\n *\n * @attr {string} caption - Visible caption and accessible label\n * @attr {string} color - Header theme: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {boolean} bordered - Outer border and radius\n * @attr {boolean} loading - Busy / loading state\n * @attr {string} size - Size variant: 'sm' | 'md' | 'lg'\n * @attr {boolean} sticky - Stick header cells during vertical scroll\n * @attr {boolean} striped - Alternating row backgrounds\n *\n * @part scroll - Horizontally-scrollable container\n * @part table - The native `<table>` element\n * @part head - The native `<thead>` element\n * @part body - The native `<tbody>` element\n * @part foot - The native `<tfoot>` element\n *\n * @cssprop --table-bg - Table background\n * @cssprop --table-border - Full border shorthand for row separators (e.g. `2px solid red`)\n * @cssprop --table-header-bg - Header row background\n * @cssprop --table-header-color - Header cell text color\n * @cssprop --table-cell-padding - Cell padding (e.g. `0.75rem 1rem`)\n * @cssprop --table-cell-font-size - Cell font size\n * @cssprop --table-cell-color - Body cell text color\n * @cssprop --table-stripe-bg - Stripe row background\n * @cssprop --table-row-hover-bg - Row hover background\n * @cssprop --table-radius - Outer corner radius\n * @cssprop --table-shadow - Outer box shadow\n * @cssprop --table-sticky-max-height - Max height when `sticky` is active (default `24rem`)\n *\n * @example\n * ```html\n * <bit-table caption=\"Members\" striped bordered color=\"primary\">\n * <bit-tr head>\n * <bit-th scope=\"col\">Name</bit-th>\n * <bit-th scope=\"col\">Role</bit-th>\n * </bit-tr>\n * <bit-tr><bit-td>Alice</bit-td><bit-td>Admin</bit-td></bit-tr>\n * <bit-tr><bit-td>Bob</bit-td><bit-td>Editor</bit-td></bit-tr>\n * <bit-tr foot><bit-td colspan=\"2\">2 members</bit-td></bit-tr>\n * </bit-table>\n * ```\n */\nexport const TABLE_TAG = defineComponent<BitTableProps>({\n props: {\n bordered: { default: false, type: Boolean },\n caption: { default: undefined },\n color: { default: undefined },\n loading: { default: false, type: Boolean },\n size: { default: undefined },\n sticky: { default: false, type: Boolean },\n striped: { default: false, type: Boolean },\n },\n setup({ host, props }) {\n aria({\n busy: () => props.loading.value,\n label: () => props.caption.value ?? null,\n });\n // Build the fully-native shadow table via DOM APIs (not innerHTML) to avoid\n // HTML-parser foster-parenting which would eject <slot> elements from table\n // contexts. All three issues — color themes, sticky headers, colspan —\n // require real <thead>/<tbody>/<tfoot>/<tr>/<th>/<td> in the shadow tree.\n onMount(() => {\n const scrollContainer = host.shadowRoot!.querySelector('.scroll-container')!;\n\n const table = document.createElement('table');\n const captionEl = document.createElement('caption');\n const thead = document.createElement('thead');\n const tbody = document.createElement('tbody');\n const tfoot = document.createElement('tfoot');\n\n // Keep part assignment imperative so template typing stays strict.\n scrollContainer.setAttribute('part', 'scroll');\n\n table.setAttribute('part', 'table');\n thead.setAttribute('part', 'head');\n tbody.setAttribute('part', 'body');\n tfoot.setAttribute('part', 'foot');\n table.append(captionEl, thead, tbody, tfoot);\n scrollContainer.appendChild(table);\n // Sync caption text from prop\n effect(() => {\n captionEl.hidden = !(captionEl.textContent = props.caption.value ?? '');\n });\n\n // Initial build\n let cleanupCellObservers = buildTable(host, thead, tbody, tfoot);\n // Rebuild whenever direct children change (rows added / removed / reordered)\n const structureObserver = new MutationObserver(() => {\n cleanupCellObservers();\n cleanupCellObservers = buildTable(host, thead, tbody, tfoot);\n });\n\n structureObserver.observe(host, { childList: true });\n\n return () => {\n structureObserver.disconnect();\n cleanupCellObservers();\n };\n });\n\n return html`<div class=\"scroll-container\"></div>`;\n },\n styles: [colorThemeMixin, reducedMotionMixin, componentStyles],\n tag: 'bit-table',\n});\n"],"mappings":"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"}
|
package/dist/table.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { reducedMotionMixin as e } from "./styles/mixins/accessibility.css.js";
|
|
2
|
+
import { colorThemeMixin as t } from "./styles/mixins/theme.css.js";
|
|
3
|
+
import "./styles/index.js";
|
|
4
|
+
import n from "./content/table/table.css?inline.js";
|
|
5
|
+
import { aria as r, defineComponent as i, effect as a, html as o, onMount as s } from "@vielzeug/craftit";
|
|
6
|
+
customElements.get("bit-tr") || customElements.define("bit-tr", class extends HTMLElement {}), customElements.get("bit-th") || customElements.define("bit-th", class extends HTMLElement {}), customElements.get("bit-td") || customElements.define("bit-td", class extends HTMLElement {});
|
|
7
|
+
var c = "bit-tr", l = "bit-th", u = "bit-td", d = [
|
|
8
|
+
"colspan",
|
|
9
|
+
"rowspan",
|
|
10
|
+
"scope",
|
|
11
|
+
"headers",
|
|
12
|
+
"abbr",
|
|
13
|
+
"axis",
|
|
14
|
+
"align",
|
|
15
|
+
"valign",
|
|
16
|
+
"width"
|
|
17
|
+
];
|
|
18
|
+
function f(e, t, n, r) {
|
|
19
|
+
let i = [];
|
|
20
|
+
t.textContent = "", n.textContent = "", r.textContent = "";
|
|
21
|
+
function a(e, t) {
|
|
22
|
+
let n = e.localName === "bit-th", r = document.createElement(n ? "th" : "td");
|
|
23
|
+
for (let t of d) {
|
|
24
|
+
let n = e.getAttribute(t);
|
|
25
|
+
n !== null && r.setAttribute(t, n);
|
|
26
|
+
}
|
|
27
|
+
r.textContent = e.textContent ?? "";
|
|
28
|
+
let a = new MutationObserver(() => {
|
|
29
|
+
r.textContent = e.textContent ?? "";
|
|
30
|
+
for (let t of d) {
|
|
31
|
+
let n = e.getAttribute(t);
|
|
32
|
+
n === null ? r.removeAttribute(t) : r.setAttribute(t, n);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return a.observe(e, {
|
|
36
|
+
attributes: !0,
|
|
37
|
+
characterData: !0,
|
|
38
|
+
childList: !0,
|
|
39
|
+
subtree: !0
|
|
40
|
+
}), i.push(a), t.appendChild(r), r;
|
|
41
|
+
}
|
|
42
|
+
function o(e, t) {
|
|
43
|
+
let n = document.createElement("tr");
|
|
44
|
+
for (let t of e.children) (t.localName === "bit-th" || t.localName === "bit-td") && a(t, n);
|
|
45
|
+
t.appendChild(n);
|
|
46
|
+
}
|
|
47
|
+
for (let i of e.children) i.localName === "bit-tr" && (i.hasAttribute("head") ? o(i, t) : i.hasAttribute("foot") ? o(i, r) : o(i, n));
|
|
48
|
+
return () => {
|
|
49
|
+
for (let e of i) e.disconnect();
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
var p = i({
|
|
53
|
+
props: {
|
|
54
|
+
bordered: {
|
|
55
|
+
default: !1,
|
|
56
|
+
type: Boolean
|
|
57
|
+
},
|
|
58
|
+
caption: { default: void 0 },
|
|
59
|
+
color: { default: void 0 },
|
|
60
|
+
loading: {
|
|
61
|
+
default: !1,
|
|
62
|
+
type: Boolean
|
|
63
|
+
},
|
|
64
|
+
size: { default: void 0 },
|
|
65
|
+
sticky: {
|
|
66
|
+
default: !1,
|
|
67
|
+
type: Boolean
|
|
68
|
+
},
|
|
69
|
+
striped: {
|
|
70
|
+
default: !1,
|
|
71
|
+
type: Boolean
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
setup({ host: e, props: t }) {
|
|
75
|
+
return r({
|
|
76
|
+
busy: () => t.loading.value,
|
|
77
|
+
label: () => t.caption.value ?? null
|
|
78
|
+
}), s(() => {
|
|
79
|
+
let n = e.shadowRoot.querySelector(".scroll-container"), r = document.createElement("table"), i = document.createElement("caption"), o = document.createElement("thead"), s = document.createElement("tbody"), c = document.createElement("tfoot");
|
|
80
|
+
n.setAttribute("part", "scroll"), r.setAttribute("part", "table"), o.setAttribute("part", "head"), s.setAttribute("part", "body"), c.setAttribute("part", "foot"), r.append(i, o, s, c), n.appendChild(r), a(() => {
|
|
81
|
+
i.hidden = !(i.textContent = t.caption.value ?? "");
|
|
82
|
+
});
|
|
83
|
+
let l = f(e, o, s, c), u = new MutationObserver(() => {
|
|
84
|
+
l(), l = f(e, o, s, c);
|
|
85
|
+
});
|
|
86
|
+
return u.observe(e, { childList: !0 }), () => {
|
|
87
|
+
u.disconnect(), l();
|
|
88
|
+
};
|
|
89
|
+
}), o`<div class="scroll-container"></div>`;
|
|
90
|
+
},
|
|
91
|
+
styles: [
|
|
92
|
+
t,
|
|
93
|
+
e,
|
|
94
|
+
n
|
|
95
|
+
],
|
|
96
|
+
tag: "bit-table"
|
|
97
|
+
});
|
|
98
|
+
//#endregion
|
|
99
|
+
export { p as TABLE_TAG, u as TD_TAG, l as TH_TAG, c as TR_TAG };
|
|
100
|
+
|
|
101
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","names":[],"sources":["../src/content/table/table.ts"],"sourcesContent":["import { aria, defineComponent, effect, html, onMount } from '@vielzeug/craftit';\n\nimport type { ComponentSize, ThemeColor } from '../../types';\n\nimport { colorThemeMixin, reducedMotionMixin } from '../../styles';\nimport componentStyles from './table.css?inline';\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\n/** Table component properties */\nexport type BitTableProps = {\n /** Show borders between rows and around the table */\n bordered?: boolean;\n /** Visible caption text — also used as accessible label for the table group */\n caption?: string;\n /** Theme color applied to the header row background */\n color?: ThemeColor;\n /** Show a loading / busy state */\n loading?: boolean;\n /** Component size: 'sm' | 'md' | 'lg' */\n size?: ComponentSize;\n /** Stick the header row to the top while the body scrolls */\n sticky?: boolean;\n /** Alternating row stripe background */\n striped?: boolean;\n};\n\n/* ── Sub-components (no shadow DOM) ─────────────────────────────────────── */\n\n// bit-tr, bit-th, bit-td are lightweight markers in the light DOM.\n// bit-table reads them and builds a fully-native shadow <table> so that\n// browser features that only work on real table elements (colspan/rowspan,\n// position:sticky on <th>, table layout algorithm) all work correctly.\n\nif (!customElements.get('bit-tr')) customElements.define('bit-tr', class extends HTMLElement {});\n\nif (!customElements.get('bit-th')) customElements.define('bit-th', class extends HTMLElement {});\n\nif (!customElements.get('bit-td')) customElements.define('bit-td', class extends HTMLElement {});\n\nexport const TR_TAG = 'bit-tr';\nexport const TH_TAG = 'bit-th';\nexport const TD_TAG = 'bit-td';\n\n/* ── Table proxy helpers ─────────────────────────────────────────────────── */\n\n// Attributes on bit-th / bit-td that should be forwarded to the native cell.\nconst CELL_ATTRS = ['colspan', 'rowspan', 'scope', 'headers', 'abbr', 'axis', 'align', 'valign', 'width'];\n\n/**\n * Build (or rebuild) the entire native shadow table from the current light-DOM\n * bit-tr / bit-th / bit-td structure. Returns a cleanup function that\n * disconnects all MutationObservers created during the build.\n */\nfunction buildTable(\n host: HTMLElement,\n thead: HTMLTableSectionElement,\n tbody: HTMLTableSectionElement,\n tfoot: HTMLTableSectionElement,\n): () => void {\n const observers: MutationObserver[] = [];\n\n // Clear all sections first\n thead.textContent = '';\n tbody.textContent = '';\n tfoot.textContent = '';\n\n /**\n * Mirror one bit-td / bit-th → native td / th, keeping text content and\n * relevant attributes in sync via a MutationObserver.\n */\n function mirrorCell(source: Element, into: HTMLTableSectionElement | HTMLTableRowElement): HTMLTableCellElement {\n const isHeader = source.localName === 'bit-th';\n const cell = document.createElement(isHeader ? 'th' : 'td');\n\n // Forward allowed attributes\n for (const attr of CELL_ATTRS) {\n const val = source.getAttribute(attr);\n\n if (val !== null) cell.setAttribute(attr, val);\n }\n\n cell.textContent = source.textContent ?? '';\n\n // Keep text + attrs in sync\n const obs = new MutationObserver(() => {\n cell.textContent = source.textContent ?? '';\n for (const attr of CELL_ATTRS) {\n const val = source.getAttribute(attr);\n\n if (val !== null) cell.setAttribute(attr, val);\n else cell.removeAttribute(attr);\n }\n });\n\n obs.observe(source, { attributes: true, characterData: true, childList: true, subtree: true });\n observers.push(obs);\n\n into.appendChild(cell);\n\n return cell;\n }\n\n /**\n * Mirror one bit-tr → native tr with all its cells.\n */\n function mirrorRow(source: Element, section: HTMLTableSectionElement): void {\n const tr = document.createElement('tr');\n\n for (const child of source.children) {\n if (child.localName === 'bit-th' || child.localName === 'bit-td') {\n mirrorCell(child, tr);\n }\n }\n section.appendChild(tr);\n }\n\n // Walk all direct children of bit-table\n for (const child of host.children) {\n if (child.localName !== 'bit-tr') continue;\n\n if (child.hasAttribute('head')) {\n mirrorRow(child, thead);\n } else if (child.hasAttribute('foot')) {\n mirrorRow(child, tfoot);\n } else {\n mirrorRow(child, tbody);\n }\n }\n\n return () => {\n for (const obs of observers) obs.disconnect();\n };\n}\n\n/**\n * Accessible data table. Compose with `<bit-tr>`, `<bit-th>`, and `<bit-td>`.\n * Add `head` to header rows and `foot` to footer rows.\n *\n * @element bit-table\n *\n * @attr {string} caption - Visible caption and accessible label\n * @attr {string} color - Header theme: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {boolean} bordered - Outer border and radius\n * @attr {boolean} loading - Busy / loading state\n * @attr {string} size - Size variant: 'sm' | 'md' | 'lg'\n * @attr {boolean} sticky - Stick header cells during vertical scroll\n * @attr {boolean} striped - Alternating row backgrounds\n *\n * @part scroll - Horizontally-scrollable container\n * @part table - The native `<table>` element\n * @part head - The native `<thead>` element\n * @part body - The native `<tbody>` element\n * @part foot - The native `<tfoot>` element\n *\n * @cssprop --table-bg - Table background\n * @cssprop --table-border - Full border shorthand for row separators (e.g. `2px solid red`)\n * @cssprop --table-header-bg - Header row background\n * @cssprop --table-header-color - Header cell text color\n * @cssprop --table-cell-padding - Cell padding (e.g. `0.75rem 1rem`)\n * @cssprop --table-cell-font-size - Cell font size\n * @cssprop --table-cell-color - Body cell text color\n * @cssprop --table-stripe-bg - Stripe row background\n * @cssprop --table-row-hover-bg - Row hover background\n * @cssprop --table-radius - Outer corner radius\n * @cssprop --table-shadow - Outer box shadow\n * @cssprop --table-sticky-max-height - Max height when `sticky` is active (default `24rem`)\n *\n * @example\n * ```html\n * <bit-table caption=\"Members\" striped bordered color=\"primary\">\n * <bit-tr head>\n * <bit-th scope=\"col\">Name</bit-th>\n * <bit-th scope=\"col\">Role</bit-th>\n * </bit-tr>\n * <bit-tr><bit-td>Alice</bit-td><bit-td>Admin</bit-td></bit-tr>\n * <bit-tr><bit-td>Bob</bit-td><bit-td>Editor</bit-td></bit-tr>\n * <bit-tr foot><bit-td colspan=\"2\">2 members</bit-td></bit-tr>\n * </bit-table>\n * ```\n */\nexport const TABLE_TAG = defineComponent<BitTableProps>({\n props: {\n bordered: { default: false, type: Boolean },\n caption: { default: undefined },\n color: { default: undefined },\n loading: { default: false, type: Boolean },\n size: { default: undefined },\n sticky: { default: false, type: Boolean },\n striped: { default: false, type: Boolean },\n },\n setup({ host, props }) {\n aria({\n busy: () => props.loading.value,\n label: () => props.caption.value ?? null,\n });\n // Build the fully-native shadow table via DOM APIs (not innerHTML) to avoid\n // HTML-parser foster-parenting which would eject <slot> elements from table\n // contexts. All three issues — color themes, sticky headers, colspan —\n // require real <thead>/<tbody>/<tfoot>/<tr>/<th>/<td> in the shadow tree.\n onMount(() => {\n const scrollContainer = host.shadowRoot!.querySelector('.scroll-container')!;\n\n const table = document.createElement('table');\n const captionEl = document.createElement('caption');\n const thead = document.createElement('thead');\n const tbody = document.createElement('tbody');\n const tfoot = document.createElement('tfoot');\n\n // Keep part assignment imperative so template typing stays strict.\n scrollContainer.setAttribute('part', 'scroll');\n\n table.setAttribute('part', 'table');\n thead.setAttribute('part', 'head');\n tbody.setAttribute('part', 'body');\n tfoot.setAttribute('part', 'foot');\n table.append(captionEl, thead, tbody, tfoot);\n scrollContainer.appendChild(table);\n // Sync caption text from prop\n effect(() => {\n captionEl.hidden = !(captionEl.textContent = props.caption.value ?? '');\n });\n\n // Initial build\n let cleanupCellObservers = buildTable(host, thead, tbody, tfoot);\n // Rebuild whenever direct children change (rows added / removed / reordered)\n const structureObserver = new MutationObserver(() => {\n cleanupCellObservers();\n cleanupCellObservers = buildTable(host, thead, tbody, tfoot);\n });\n\n structureObserver.observe(host, { childList: true });\n\n return () => {\n structureObserver.disconnect();\n cleanupCellObservers();\n };\n });\n\n return html`<div class=\"scroll-container\"></div>`;\n },\n styles: [colorThemeMixin, reducedMotionMixin, componentStyles],\n tag: 'bit-table',\n});\n"],"mappings":"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"}
|
package/dist/tabs.cjs
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./styles/mixins/theme.css.cjs`);require(`./styles/index.cjs`);const t=require(`./disclosure/tabs/tabs.css?inline.cjs`);let n=require(`@vielzeug/craftit`);var r=(0,n.createContext)(`TabsContext`),i=(0,n.defineComponent)({props:{activation:{default:`auto`},color:{default:void 0},label:{default:void 0},orientation:{default:`horizontal`},size:{default:void 0},value:{default:void 0},variant:{default:void 0}},setup({emit:e,host:t,props:i}){let a=(0,n.ref)(),o=(0,n.ref)(),s=(0,n.signal)(i.value.value),c=()=>[...t.querySelectorAll(`bit-tab-item`)],l=(n,r=!1)=>{s.value=n,n==null?t.removeAttribute(`value`):t.getAttribute(`value`)!==n&&t.setAttribute(`value`,n),r&&n&&e(`change`,{value:n})},u=()=>{let e=c();if(e.length===0)return;let t=s.value;t&&e.some(e=>e.getAttribute(`value`)===t&&!e.hasAttribute(`disabled`))||l(e.find(e=>!e.hasAttribute(`disabled`))?.getAttribute(`value`)??void 0,!1)};(0,n.watch)(i.value,e=>{s.value=e,u()}),(0,n.provide)(r,{color:i.color,orientation:(0,n.computed)(()=>i.orientation.value??`horizontal`),size:i.size,value:s,variant:i.variant});let d=e=>{let t=o.value,n=a.value;if(!(!t||!n||!e))if(i.orientation.value===`vertical`){let r=e.getBoundingClientRect(),i=n.getBoundingClientRect();t.style.top=`${r.top-i.top+n.scrollTop}px`,t.style.height=`${r.height}px`,t.style.left=`0`,t.style.width=``}else{let r=e.getBoundingClientRect(),i=n.getBoundingClientRect();t.style.left=`${r.left-i.left+n.scrollLeft}px`,t.style.width=`${r.width}px`,t.style.top=``,t.style.height=``}},f=()=>{let e=s.value;e&&d(c().find(t=>t.getAttribute(`value`)===e))};return(0,n.watch)(s,()=>requestAnimationFrame(f)),(0,n.handle)(t,`click`,e=>{let n=e.target.closest(`bit-tab-item`);if(!n||n.hasAttribute(`disabled`)||n.closest(`bit-tabs`)!==t)return;let r=n.getAttribute(`value`);!r||r===s.value||l(r,!0)}),(0,n.handle)(t,`keydown`,e=>{let t=c().filter(e=>!e.hasAttribute(`disabled`)),n=t.findIndex(e=>e.getAttribute(`value`)===s.value),r=i.orientation.value===`vertical`,a=n;if(e.key===(r?`ArrowDown`:`ArrowRight`))a=(n+1)%t.length;else if(e.key===(r?`ArrowUp`:`ArrowLeft`))a=(n-1+t.length)%t.length;else if(!r&&e.key===`ArrowDown`)a=(n+1)%t.length;else if(!r&&e.key===`ArrowUp`)a=(n-1+t.length)%t.length;else if(e.key===`Home`)a=0;else if(e.key===`End`)a=t.length-1;else if(i.activation.value===`manual`&&(e.key===`Enter`||e.key===` `)){let e=t.find(e=>e===document.activeElement||e.shadowRoot?.activeElement===document.activeElement)?.getAttribute(`value`);e&&e!==s.value&&l(e,!0);return}else return;e.preventDefault();let o=t[a]?.getAttribute(`value`);o&&(t[a]?.focus(),i.activation.value!==`manual`&&l(o,!0))}),(0,n.onMount)(()=>{let e=()=>{u(),f()},n=t.shadowRoot?.querySelector(`slot[name="tabs"]`);return n&&n.addEventListener(`slotchange`,e),e(),requestAnimationFrame(e),()=>{n&&n.removeEventListener(`slotchange`,e)}}),n.html`
|
|
2
|
+
<div class="tablist-wrapper">
|
|
3
|
+
<div
|
|
4
|
+
role="tablist"
|
|
5
|
+
ref=${a}
|
|
6
|
+
part="tablist"
|
|
7
|
+
:aria-orientation="${()=>i.orientation.value}"
|
|
8
|
+
:aria-label="${()=>i.label.value??null}">
|
|
9
|
+
<slot name="tabs"></slot>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="indicator" ref=${o} part="indicator"></div>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="panels" part="panels">
|
|
14
|
+
<slot></slot>
|
|
15
|
+
</div>
|
|
16
|
+
`},styles:[e.colorThemeMixin,t.default],tag:`bit-tabs`});exports.TABS_CTX=r,exports.TABS_TAG=i;
|
|
17
|
+
//# sourceMappingURL=tabs.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.cjs","names":[],"sources":["../src/disclosure/tabs/tabs.ts"],"sourcesContent":["import {\n computed,\n createContext,\n defineComponent,\n handle,\n html,\n onMount,\n provide,\n type ReadonlySignal,\n ref,\n signal,\n watch,\n} from '@vielzeug/craftit';\n\nimport type { ComponentSize, ThemeColor, VisualVariant } from '../../types';\n\nimport { colorThemeMixin } from '../../styles';\n\n/** Context provided by bit-tabs to its bit-tab-item and bit-tab-panel children. */\nexport type TabsContext = {\n color: ReadonlySignal<ThemeColor | undefined>;\n orientation: ReadonlySignal<'horizontal' | 'vertical'>;\n size: ReadonlySignal<ComponentSize | undefined>;\n value: ReadonlySignal<string | undefined>;\n variant: ReadonlySignal<VisualVariant | undefined>;\n};\n/** Injection key for the tabs context. */\nexport const TABS_CTX = createContext<TabsContext>('TabsContext');\n\nimport styles from './tabs.css?inline';\n\nexport type BitTabsEvents = {\n change: { value: string };\n};\n\nexport type BitTabsProps = {\n /**\n * Keyboard activation mode.\n * - `'auto'` (default): Selecting a tab on arrow-key focus immediately activates it (ARIA recommendation for most cases).\n * - `'manual'`: Arrow keys only move focus; the user must press Enter or Space to activate the focused tab.\n */\n activation?: 'auto' | 'manual';\n /** Theme color */\n color?: ThemeColor;\n /** Accessible label for the tablist (passed as aria-label). Use when there is no visible heading labelling the tabs. */\n label?: string;\n /** Tab list orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Component size */\n size?: ComponentSize;\n /** Currently selected tab value */\n value?: string;\n /** Visual style variant */\n variant?: VisualVariant;\n};\n\n/**\n * Tabs container. Manages tab selection and syncs state to child tab items and panels.\n *\n * @element bit-tabs\n *\n * @attr {string} value - The value of the currently selected tab\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'ghost' | 'glass' | 'frost'\n * @attr {string} size - Size: 'sm' | 'md' | 'lg'\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n *\n * @fires change - Emitted when the active tab changes, detail: { value: string }\n *\n * @slot tabs - Place `bit-tab-item` elements here\n * @slot - Place `bit-tab-panel` elements here\n *\n * @example\n * ```html\n * <bit-tabs value=\"tab1\" variant=\"underline\">\n * <bit-tab-item slot=\"tabs\" value=\"tab1\">Overview</bit-tab-item>\n * <bit-tab-item slot=\"tabs\" value=\"tab2\">Settings</bit-tab-item>\n * <bit-tab-panel value=\"tab1\"><p>Overview content</p></bit-tab-panel>\n * <bit-tab-panel value=\"tab2\"><p>Settings content</p></bit-tab-panel>\n * </bit-tabs>\n * ```\n */\nexport const TABS_TAG = defineComponent<BitTabsProps, BitTabsEvents>({\n props: {\n activation: { default: 'auto' },\n color: { default: undefined },\n label: { default: undefined },\n orientation: { default: 'horizontal' },\n size: { default: undefined },\n value: { default: undefined },\n variant: { default: undefined },\n },\n setup({ emit, host, props }) {\n const tablistRef = ref<HTMLElement>();\n const indicatorRef = ref<HTMLElement>();\n const selectedValue = signal<string | undefined>(props.value.value);\n const getTabs = () => [...host.querySelectorAll<HTMLElement>('bit-tab-item')];\n\n const setSelection = (value: string | undefined, shouldEmit = false) => {\n selectedValue.value = value;\n\n if (value == null) host.removeAttribute('value');\n else if (host.getAttribute('value') !== value) host.setAttribute('value', value);\n\n if (shouldEmit && value) emit('change', { value });\n };\n\n const ensureSelection = () => {\n const tabs = getTabs();\n\n // During initial connection, slotted tab items may not be assigned yet.\n // Keep current selection until tabs exist instead of falling back to undefined.\n if (tabs.length === 0) return;\n\n const current = selectedValue.value;\n const hasCurrent = current\n ? tabs.some((tab) => tab.getAttribute('value') === current && !tab.hasAttribute('disabled'))\n : false;\n\n if (hasCurrent) return;\n\n const firstEnabled = tabs.find((tab) => !tab.hasAttribute('disabled'))?.getAttribute('value') ?? undefined;\n\n setSelection(firstEnabled, false);\n };\n\n watch(props.value, (value) => {\n selectedValue.value = value;\n ensureSelection();\n });\n\n provide(TABS_CTX, {\n color: props.color,\n orientation: computed(() => props.orientation.value ?? 'horizontal'),\n size: props.size,\n value: selectedValue,\n variant: props.variant,\n });\n\n const moveIndicator = (activeTab: HTMLElement | undefined) => {\n const indicator = indicatorRef.value;\n const tablist = tablistRef.value;\n\n if (!indicator || !tablist || !activeTab) return;\n\n if (props.orientation.value === 'vertical') {\n const tabRect = activeTab.getBoundingClientRect();\n const listRect = tablist.getBoundingClientRect();\n\n indicator.style.top = `${tabRect.top - listRect.top + tablist.scrollTop}px`;\n indicator.style.height = `${tabRect.height}px`;\n indicator.style.left = '0';\n indicator.style.width = '';\n } else {\n const tabRect = activeTab.getBoundingClientRect();\n const listRect = tablist.getBoundingClientRect();\n\n indicator.style.left = `${tabRect.left - listRect.left + tablist.scrollLeft}px`;\n indicator.style.width = `${tabRect.width}px`;\n indicator.style.top = '';\n indicator.style.height = '';\n }\n };\n const triggerIndicator = () => {\n const value = selectedValue.value;\n\n if (!value) return;\n\n const activeTab = getTabs().find((t) => t.getAttribute('value') === value);\n\n moveIndicator(activeTab);\n };\n\n watch(selectedValue, () => requestAnimationFrame(triggerIndicator));\n\n const handleTabClick = (e: Event) => {\n const tab = (e.target as HTMLElement).closest('bit-tab-item') as HTMLElement | null;\n\n if (!tab || tab.hasAttribute('disabled')) return;\n\n // Guard: only respond to tab-items that belong to THIS tabs instance, not nested ones.\n if (tab.closest('bit-tabs') !== host) return;\n\n const value = tab.getAttribute('value');\n\n if (!value || value === selectedValue.value) return;\n\n setSelection(value, true);\n };\n const handleKeydown = (e: KeyboardEvent) => {\n const tabs = getTabs().filter((t) => !t.hasAttribute('disabled'));\n const current = tabs.findIndex((t) => t.getAttribute('value') === selectedValue.value);\n const isVertical = props.orientation.value === 'vertical';\n // eslint-disable-next-line no-useless-assignment\n let next = current;\n\n if (e.key === (isVertical ? 'ArrowDown' : 'ArrowRight')) next = (current + 1) % tabs.length;\n else if (e.key === (isVertical ? 'ArrowUp' : 'ArrowLeft')) next = (current - 1 + tabs.length) % tabs.length;\n else if (!isVertical && e.key === 'ArrowDown') next = (current + 1) % tabs.length;\n else if (!isVertical && e.key === 'ArrowUp') next = (current - 1 + tabs.length) % tabs.length;\n else if (e.key === 'Home') next = 0;\n else if (e.key === 'End') next = tabs.length - 1;\n else if (props.activation.value === 'manual' && (e.key === 'Enter' || e.key === ' ')) {\n // Manual mode: activate the currently focused tab\n const focused = tabs.find(\n (t) => t === document.activeElement || t.shadowRoot?.activeElement === document.activeElement,\n );\n const focusedValue = focused?.getAttribute('value');\n\n if (focusedValue && focusedValue !== selectedValue.value) {\n setSelection(focusedValue, true);\n }\n\n return;\n } else return;\n\n e.preventDefault();\n\n const value = tabs[next]?.getAttribute('value');\n\n if (value) {\n (tabs[next] as HTMLElement)?.focus();\n\n if (props.activation.value !== 'manual') {\n // Auto mode: activate on focus\n setSelection(value, true);\n }\n }\n };\n\n handle(host, 'click', handleTabClick);\n handle(host, 'keydown', handleKeydown);\n onMount(() => {\n const syncSelection = () => {\n ensureSelection();\n triggerIndicator();\n };\n const tabsSlot = host.shadowRoot?.querySelector<HTMLSlotElement>('slot[name=\"tabs\"]');\n\n if (tabsSlot) {\n tabsSlot.addEventListener('slotchange', syncSelection);\n }\n\n syncSelection();\n requestAnimationFrame(syncSelection);\n\n return () => {\n if (tabsSlot) {\n tabsSlot.removeEventListener('slotchange', syncSelection);\n }\n };\n });\n\n return html`\n <div class=\"tablist-wrapper\">\n <div\n role=\"tablist\"\n ref=${tablistRef}\n part=\"tablist\"\n :aria-orientation=\"${() => props.orientation.value}\"\n :aria-label=\"${() => props.label.value ?? null}\">\n <slot name=\"tabs\"></slot>\n </div>\n <div class=\"indicator\" ref=${indicatorRef} part=\"indicator\"></div>\n </div>\n <div class=\"panels\" part=\"panels\">\n <slot></slot>\n </div>\n `;\n },\n styles: [colorThemeMixin, styles],\n tag: 'bit-tabs',\n});\n"],"mappings":"8OA2BA,IAAa,GAAA,EAAA,EAAA,eAAsC,cAAc,CAsDpD,GAAA,EAAA,EAAA,iBAAwD,CACnE,MAAO,CACL,WAAY,CAAE,QAAS,OAAQ,CAC/B,MAAO,CAAE,QAAS,IAAA,GAAW,CAC7B,MAAO,CAAE,QAAS,IAAA,GAAW,CAC7B,YAAa,CAAE,QAAS,aAAc,CACtC,KAAM,CAAE,QAAS,IAAA,GAAW,CAC5B,MAAO,CAAE,QAAS,IAAA,GAAW,CAC7B,QAAS,CAAE,QAAS,IAAA,GAAW,CAChC,CACD,MAAM,CAAE,OAAM,OAAM,SAAS,CAC3B,IAAM,GAAA,EAAA,EAAA,MAA+B,CAC/B,GAAA,EAAA,EAAA,MAAiC,CACjC,GAAA,EAAA,EAAA,QAA2C,EAAM,MAAM,MAAM,CAC7D,MAAgB,CAAC,GAAG,EAAK,iBAA8B,eAAe,CAAC,CAEvE,GAAgB,EAA2B,EAAa,KAAU,CACtE,EAAc,MAAQ,EAElB,GAAS,KAAM,EAAK,gBAAgB,QAAQ,CACvC,EAAK,aAAa,QAAQ,GAAK,GAAO,EAAK,aAAa,QAAS,EAAM,CAE5E,GAAc,GAAO,EAAK,SAAU,CAAE,QAAO,CAAC,EAG9C,MAAwB,CAC5B,IAAM,EAAO,GAAS,CAItB,GAAI,EAAK,SAAW,EAAG,OAEvB,IAAM,EAAU,EAAc,MACX,GACf,EAAK,KAAM,GAAQ,EAAI,aAAa,QAAQ,GAAK,GAAW,CAAC,EAAI,aAAa,WAAW,CAAC,EAO9F,EAFqB,EAAK,KAAM,GAAQ,CAAC,EAAI,aAAa,WAAW,CAAC,EAAE,aAAa,QAAQ,EAAI,IAAA,GAEtE,GAAM,GAGnC,EAAA,EAAA,OAAM,EAAM,MAAQ,GAAU,CAC5B,EAAc,MAAQ,EACtB,GAAiB,EACjB,EAEF,EAAA,EAAA,SAAQ,EAAU,CAChB,MAAO,EAAM,MACb,aAAA,EAAA,EAAA,cAA4B,EAAM,YAAY,OAAS,aAAa,CACpE,KAAM,EAAM,KACZ,MAAO,EACP,QAAS,EAAM,QAChB,CAAC,CAEF,IAAM,EAAiB,GAAuC,CAC5D,IAAM,EAAY,EAAa,MACzB,EAAU,EAAW,MAEvB,MAAC,GAAa,CAAC,GAAW,CAAC,GAE/B,GAAI,EAAM,YAAY,QAAU,WAAY,CAC1C,IAAM,EAAU,EAAU,uBAAuB,CAC3C,EAAW,EAAQ,uBAAuB,CAEhD,EAAU,MAAM,IAAM,GAAG,EAAQ,IAAM,EAAS,IAAM,EAAQ,UAAU,IACxE,EAAU,MAAM,OAAS,GAAG,EAAQ,OAAO,IAC3C,EAAU,MAAM,KAAO,IACvB,EAAU,MAAM,MAAQ,OACnB,CACL,IAAM,EAAU,EAAU,uBAAuB,CAC3C,EAAW,EAAQ,uBAAuB,CAEhD,EAAU,MAAM,KAAO,GAAG,EAAQ,KAAO,EAAS,KAAO,EAAQ,WAAW,IAC5E,EAAU,MAAM,MAAQ,GAAG,EAAQ,MAAM,IACzC,EAAU,MAAM,IAAM,GACtB,EAAU,MAAM,OAAS,KAGvB,MAAyB,CAC7B,IAAM,EAAQ,EAAc,MAEvB,GAIL,EAFkB,GAAS,CAAC,KAAM,GAAM,EAAE,aAAa,QAAQ,GAAK,EAAM,CAElD,EAmF1B,OAhFA,EAAA,EAAA,OAAM,MAAqB,sBAAsB,EAAiB,CAAC,EAyDnE,EAAA,EAAA,QAAO,EAAM,QAvDW,GAAa,CACnC,IAAM,EAAO,EAAE,OAAuB,QAAQ,eAAe,CAK7D,GAHI,CAAC,GAAO,EAAI,aAAa,WAAW,EAGpC,EAAI,QAAQ,WAAW,GAAK,EAAM,OAEtC,IAAM,EAAQ,EAAI,aAAa,QAAQ,CAEnC,CAAC,GAAS,IAAU,EAAc,OAEtC,EAAa,EAAO,GAAK,EA2CU,EACrC,EAAA,EAAA,QAAO,EAAM,UA1CU,GAAqB,CAC1C,IAAM,EAAO,GAAS,CAAC,OAAQ,GAAM,CAAC,EAAE,aAAa,WAAW,CAAC,CAC3D,EAAU,EAAK,UAAW,GAAM,EAAE,aAAa,QAAQ,GAAK,EAAc,MAAM,CAChF,EAAa,EAAM,YAAY,QAAU,WAE3C,EAAO,EAEX,GAAI,EAAE,OAAS,EAAa,YAAc,cAAe,GAAQ,EAAU,GAAK,EAAK,eAC5E,EAAE,OAAS,EAAa,UAAY,aAAc,GAAQ,EAAU,EAAI,EAAK,QAAU,EAAK,eAC5F,CAAC,GAAc,EAAE,MAAQ,YAAa,GAAQ,EAAU,GAAK,EAAK,eAClE,CAAC,GAAc,EAAE,MAAQ,UAAW,GAAQ,EAAU,EAAI,EAAK,QAAU,EAAK,eAC9E,EAAE,MAAQ,OAAQ,EAAO,UACzB,EAAE,MAAQ,MAAO,EAAO,EAAK,OAAS,UACtC,EAAM,WAAW,QAAU,WAAa,EAAE,MAAQ,SAAW,EAAE,MAAQ,KAAM,CAKpF,IAAM,EAHU,EAAK,KAClB,GAAM,IAAM,SAAS,eAAiB,EAAE,YAAY,gBAAkB,SAAS,cACjF,EAC6B,aAAa,QAAQ,CAE/C,GAAgB,IAAiB,EAAc,OACjD,EAAa,EAAc,GAAK,CAGlC,YACK,OAEP,EAAE,gBAAgB,CAElB,IAAM,EAAQ,EAAK,IAAO,aAAa,QAAQ,CAE3C,IACD,EAAK,IAAuB,OAAO,CAEhC,EAAM,WAAW,QAAU,UAE7B,EAAa,EAAO,GAAK,GAMO,EACtC,EAAA,EAAA,aAAc,CACZ,IAAM,MAAsB,CAC1B,GAAiB,CACjB,GAAkB,EAEd,EAAW,EAAK,YAAY,cAA+B,oBAAoB,CASrF,OAPI,GACF,EAAS,iBAAiB,aAAc,EAAc,CAGxD,GAAe,CACf,sBAAsB,EAAc,KAEvB,CACP,GACF,EAAS,oBAAoB,aAAc,EAAc,GAG7D,CAEK,EAAA,IAAI;;;;gBAIC,EAAW;;mCAEU,EAAM,YAAY,MAAM;6BAC9B,EAAM,MAAM,OAAS,KAAK;;;qCAGpB,EAAa;;;;;OAOhD,OAAQ,CAAC,EAAA,gBAAiB,EAAA,QAAO,CACjC,IAAK,WACN,CAAC"}
|
package/dist/tabs.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { colorThemeMixin as e } from "./styles/mixins/theme.css.js";
|
|
2
|
+
import "./styles/index.js";
|
|
3
|
+
import t from "./disclosure/tabs/tabs.css?inline.js";
|
|
4
|
+
import { computed as n, createContext as r, defineComponent as i, handle as a, html as o, onMount as s, provide as c, ref as l, signal as u, watch as d } from "@vielzeug/craftit";
|
|
5
|
+
//#region src/disclosure/tabs/tabs.ts
|
|
6
|
+
var f = r("TabsContext"), p = i({
|
|
7
|
+
props: {
|
|
8
|
+
activation: { default: "auto" },
|
|
9
|
+
color: { default: void 0 },
|
|
10
|
+
label: { default: void 0 },
|
|
11
|
+
orientation: { default: "horizontal" },
|
|
12
|
+
size: { default: void 0 },
|
|
13
|
+
value: { default: void 0 },
|
|
14
|
+
variant: { default: void 0 }
|
|
15
|
+
},
|
|
16
|
+
setup({ emit: e, host: t, props: r }) {
|
|
17
|
+
let i = l(), p = l(), m = u(r.value.value), h = () => [...t.querySelectorAll("bit-tab-item")], g = (n, r = !1) => {
|
|
18
|
+
m.value = n, n == null ? t.removeAttribute("value") : t.getAttribute("value") !== n && t.setAttribute("value", n), r && n && e("change", { value: n });
|
|
19
|
+
}, _ = () => {
|
|
20
|
+
let e = h();
|
|
21
|
+
if (e.length === 0) return;
|
|
22
|
+
let t = m.value;
|
|
23
|
+
t && e.some((e) => e.getAttribute("value") === t && !e.hasAttribute("disabled")) || g(e.find((e) => !e.hasAttribute("disabled"))?.getAttribute("value") ?? void 0, !1);
|
|
24
|
+
};
|
|
25
|
+
d(r.value, (e) => {
|
|
26
|
+
m.value = e, _();
|
|
27
|
+
}), c(f, {
|
|
28
|
+
color: r.color,
|
|
29
|
+
orientation: n(() => r.orientation.value ?? "horizontal"),
|
|
30
|
+
size: r.size,
|
|
31
|
+
value: m,
|
|
32
|
+
variant: r.variant
|
|
33
|
+
});
|
|
34
|
+
let v = (e) => {
|
|
35
|
+
let t = p.value, n = i.value;
|
|
36
|
+
if (!(!t || !n || !e)) if (r.orientation.value === "vertical") {
|
|
37
|
+
let r = e.getBoundingClientRect(), i = n.getBoundingClientRect();
|
|
38
|
+
t.style.top = `${r.top - i.top + n.scrollTop}px`, t.style.height = `${r.height}px`, t.style.left = "0", t.style.width = "";
|
|
39
|
+
} else {
|
|
40
|
+
let r = e.getBoundingClientRect(), i = n.getBoundingClientRect();
|
|
41
|
+
t.style.left = `${r.left - i.left + n.scrollLeft}px`, t.style.width = `${r.width}px`, t.style.top = "", t.style.height = "";
|
|
42
|
+
}
|
|
43
|
+
}, y = () => {
|
|
44
|
+
let e = m.value;
|
|
45
|
+
e && v(h().find((t) => t.getAttribute("value") === e));
|
|
46
|
+
};
|
|
47
|
+
return d(m, () => requestAnimationFrame(y)), a(t, "click", (e) => {
|
|
48
|
+
let n = e.target.closest("bit-tab-item");
|
|
49
|
+
if (!n || n.hasAttribute("disabled") || n.closest("bit-tabs") !== t) return;
|
|
50
|
+
let r = n.getAttribute("value");
|
|
51
|
+
!r || r === m.value || g(r, !0);
|
|
52
|
+
}), a(t, "keydown", (e) => {
|
|
53
|
+
let t = h().filter((e) => !e.hasAttribute("disabled")), n = t.findIndex((e) => e.getAttribute("value") === m.value), i = r.orientation.value === "vertical", a = n;
|
|
54
|
+
if (e.key === (i ? "ArrowDown" : "ArrowRight")) a = (n + 1) % t.length;
|
|
55
|
+
else if (e.key === (i ? "ArrowUp" : "ArrowLeft")) a = (n - 1 + t.length) % t.length;
|
|
56
|
+
else if (!i && e.key === "ArrowDown") a = (n + 1) % t.length;
|
|
57
|
+
else if (!i && e.key === "ArrowUp") a = (n - 1 + t.length) % t.length;
|
|
58
|
+
else if (e.key === "Home") a = 0;
|
|
59
|
+
else if (e.key === "End") a = t.length - 1;
|
|
60
|
+
else if (r.activation.value === "manual" && (e.key === "Enter" || e.key === " ")) {
|
|
61
|
+
let e = t.find((e) => e === document.activeElement || e.shadowRoot?.activeElement === document.activeElement)?.getAttribute("value");
|
|
62
|
+
e && e !== m.value && g(e, !0);
|
|
63
|
+
return;
|
|
64
|
+
} else return;
|
|
65
|
+
e.preventDefault();
|
|
66
|
+
let o = t[a]?.getAttribute("value");
|
|
67
|
+
o && (t[a]?.focus(), r.activation.value !== "manual" && g(o, !0));
|
|
68
|
+
}), s(() => {
|
|
69
|
+
let e = () => {
|
|
70
|
+
_(), y();
|
|
71
|
+
}, n = t.shadowRoot?.querySelector("slot[name=\"tabs\"]");
|
|
72
|
+
return n && n.addEventListener("slotchange", e), e(), requestAnimationFrame(e), () => {
|
|
73
|
+
n && n.removeEventListener("slotchange", e);
|
|
74
|
+
};
|
|
75
|
+
}), o`
|
|
76
|
+
<div class="tablist-wrapper">
|
|
77
|
+
<div
|
|
78
|
+
role="tablist"
|
|
79
|
+
ref=${i}
|
|
80
|
+
part="tablist"
|
|
81
|
+
:aria-orientation="${() => r.orientation.value}"
|
|
82
|
+
:aria-label="${() => r.label.value ?? null}">
|
|
83
|
+
<slot name="tabs"></slot>
|
|
84
|
+
</div>
|
|
85
|
+
<div class="indicator" ref=${p} part="indicator"></div>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="panels" part="panels">
|
|
88
|
+
<slot></slot>
|
|
89
|
+
</div>
|
|
90
|
+
`;
|
|
91
|
+
},
|
|
92
|
+
styles: [e, t],
|
|
93
|
+
tag: "bit-tabs"
|
|
94
|
+
});
|
|
95
|
+
//#endregion
|
|
96
|
+
export { f as TABS_CTX, p as TABS_TAG };
|
|
97
|
+
|
|
98
|
+
//# sourceMappingURL=tabs.js.map
|
package/dist/tabs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","names":[],"sources":["../src/disclosure/tabs/tabs.ts"],"sourcesContent":["import {\n computed,\n createContext,\n defineComponent,\n handle,\n html,\n onMount,\n provide,\n type ReadonlySignal,\n ref,\n signal,\n watch,\n} from '@vielzeug/craftit';\n\nimport type { ComponentSize, ThemeColor, VisualVariant } from '../../types';\n\nimport { colorThemeMixin } from '../../styles';\n\n/** Context provided by bit-tabs to its bit-tab-item and bit-tab-panel children. */\nexport type TabsContext = {\n color: ReadonlySignal<ThemeColor | undefined>;\n orientation: ReadonlySignal<'horizontal' | 'vertical'>;\n size: ReadonlySignal<ComponentSize | undefined>;\n value: ReadonlySignal<string | undefined>;\n variant: ReadonlySignal<VisualVariant | undefined>;\n};\n/** Injection key for the tabs context. */\nexport const TABS_CTX = createContext<TabsContext>('TabsContext');\n\nimport styles from './tabs.css?inline';\n\nexport type BitTabsEvents = {\n change: { value: string };\n};\n\nexport type BitTabsProps = {\n /**\n * Keyboard activation mode.\n * - `'auto'` (default): Selecting a tab on arrow-key focus immediately activates it (ARIA recommendation for most cases).\n * - `'manual'`: Arrow keys only move focus; the user must press Enter or Space to activate the focused tab.\n */\n activation?: 'auto' | 'manual';\n /** Theme color */\n color?: ThemeColor;\n /** Accessible label for the tablist (passed as aria-label). Use when there is no visible heading labelling the tabs. */\n label?: string;\n /** Tab list orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Component size */\n size?: ComponentSize;\n /** Currently selected tab value */\n value?: string;\n /** Visual style variant */\n variant?: VisualVariant;\n};\n\n/**\n * Tabs container. Manages tab selection and syncs state to child tab items and panels.\n *\n * @element bit-tabs\n *\n * @attr {string} value - The value of the currently selected tab\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'ghost' | 'glass' | 'frost'\n * @attr {string} size - Size: 'sm' | 'md' | 'lg'\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n *\n * @fires change - Emitted when the active tab changes, detail: { value: string }\n *\n * @slot tabs - Place `bit-tab-item` elements here\n * @slot - Place `bit-tab-panel` elements here\n *\n * @example\n * ```html\n * <bit-tabs value=\"tab1\" variant=\"underline\">\n * <bit-tab-item slot=\"tabs\" value=\"tab1\">Overview</bit-tab-item>\n * <bit-tab-item slot=\"tabs\" value=\"tab2\">Settings</bit-tab-item>\n * <bit-tab-panel value=\"tab1\"><p>Overview content</p></bit-tab-panel>\n * <bit-tab-panel value=\"tab2\"><p>Settings content</p></bit-tab-panel>\n * </bit-tabs>\n * ```\n */\nexport const TABS_TAG = defineComponent<BitTabsProps, BitTabsEvents>({\n props: {\n activation: { default: 'auto' },\n color: { default: undefined },\n label: { default: undefined },\n orientation: { default: 'horizontal' },\n size: { default: undefined },\n value: { default: undefined },\n variant: { default: undefined },\n },\n setup({ emit, host, props }) {\n const tablistRef = ref<HTMLElement>();\n const indicatorRef = ref<HTMLElement>();\n const selectedValue = signal<string | undefined>(props.value.value);\n const getTabs = () => [...host.querySelectorAll<HTMLElement>('bit-tab-item')];\n\n const setSelection = (value: string | undefined, shouldEmit = false) => {\n selectedValue.value = value;\n\n if (value == null) host.removeAttribute('value');\n else if (host.getAttribute('value') !== value) host.setAttribute('value', value);\n\n if (shouldEmit && value) emit('change', { value });\n };\n\n const ensureSelection = () => {\n const tabs = getTabs();\n\n // During initial connection, slotted tab items may not be assigned yet.\n // Keep current selection until tabs exist instead of falling back to undefined.\n if (tabs.length === 0) return;\n\n const current = selectedValue.value;\n const hasCurrent = current\n ? tabs.some((tab) => tab.getAttribute('value') === current && !tab.hasAttribute('disabled'))\n : false;\n\n if (hasCurrent) return;\n\n const firstEnabled = tabs.find((tab) => !tab.hasAttribute('disabled'))?.getAttribute('value') ?? undefined;\n\n setSelection(firstEnabled, false);\n };\n\n watch(props.value, (value) => {\n selectedValue.value = value;\n ensureSelection();\n });\n\n provide(TABS_CTX, {\n color: props.color,\n orientation: computed(() => props.orientation.value ?? 'horizontal'),\n size: props.size,\n value: selectedValue,\n variant: props.variant,\n });\n\n const moveIndicator = (activeTab: HTMLElement | undefined) => {\n const indicator = indicatorRef.value;\n const tablist = tablistRef.value;\n\n if (!indicator || !tablist || !activeTab) return;\n\n if (props.orientation.value === 'vertical') {\n const tabRect = activeTab.getBoundingClientRect();\n const listRect = tablist.getBoundingClientRect();\n\n indicator.style.top = `${tabRect.top - listRect.top + tablist.scrollTop}px`;\n indicator.style.height = `${tabRect.height}px`;\n indicator.style.left = '0';\n indicator.style.width = '';\n } else {\n const tabRect = activeTab.getBoundingClientRect();\n const listRect = tablist.getBoundingClientRect();\n\n indicator.style.left = `${tabRect.left - listRect.left + tablist.scrollLeft}px`;\n indicator.style.width = `${tabRect.width}px`;\n indicator.style.top = '';\n indicator.style.height = '';\n }\n };\n const triggerIndicator = () => {\n const value = selectedValue.value;\n\n if (!value) return;\n\n const activeTab = getTabs().find((t) => t.getAttribute('value') === value);\n\n moveIndicator(activeTab);\n };\n\n watch(selectedValue, () => requestAnimationFrame(triggerIndicator));\n\n const handleTabClick = (e: Event) => {\n const tab = (e.target as HTMLElement).closest('bit-tab-item') as HTMLElement | null;\n\n if (!tab || tab.hasAttribute('disabled')) return;\n\n // Guard: only respond to tab-items that belong to THIS tabs instance, not nested ones.\n if (tab.closest('bit-tabs') !== host) return;\n\n const value = tab.getAttribute('value');\n\n if (!value || value === selectedValue.value) return;\n\n setSelection(value, true);\n };\n const handleKeydown = (e: KeyboardEvent) => {\n const tabs = getTabs().filter((t) => !t.hasAttribute('disabled'));\n const current = tabs.findIndex((t) => t.getAttribute('value') === selectedValue.value);\n const isVertical = props.orientation.value === 'vertical';\n // eslint-disable-next-line no-useless-assignment\n let next = current;\n\n if (e.key === (isVertical ? 'ArrowDown' : 'ArrowRight')) next = (current + 1) % tabs.length;\n else if (e.key === (isVertical ? 'ArrowUp' : 'ArrowLeft')) next = (current - 1 + tabs.length) % tabs.length;\n else if (!isVertical && e.key === 'ArrowDown') next = (current + 1) % tabs.length;\n else if (!isVertical && e.key === 'ArrowUp') next = (current - 1 + tabs.length) % tabs.length;\n else if (e.key === 'Home') next = 0;\n else if (e.key === 'End') next = tabs.length - 1;\n else if (props.activation.value === 'manual' && (e.key === 'Enter' || e.key === ' ')) {\n // Manual mode: activate the currently focused tab\n const focused = tabs.find(\n (t) => t === document.activeElement || t.shadowRoot?.activeElement === document.activeElement,\n );\n const focusedValue = focused?.getAttribute('value');\n\n if (focusedValue && focusedValue !== selectedValue.value) {\n setSelection(focusedValue, true);\n }\n\n return;\n } else return;\n\n e.preventDefault();\n\n const value = tabs[next]?.getAttribute('value');\n\n if (value) {\n (tabs[next] as HTMLElement)?.focus();\n\n if (props.activation.value !== 'manual') {\n // Auto mode: activate on focus\n setSelection(value, true);\n }\n }\n };\n\n handle(host, 'click', handleTabClick);\n handle(host, 'keydown', handleKeydown);\n onMount(() => {\n const syncSelection = () => {\n ensureSelection();\n triggerIndicator();\n };\n const tabsSlot = host.shadowRoot?.querySelector<HTMLSlotElement>('slot[name=\"tabs\"]');\n\n if (tabsSlot) {\n tabsSlot.addEventListener('slotchange', syncSelection);\n }\n\n syncSelection();\n requestAnimationFrame(syncSelection);\n\n return () => {\n if (tabsSlot) {\n tabsSlot.removeEventListener('slotchange', syncSelection);\n }\n };\n });\n\n return html`\n <div class=\"tablist-wrapper\">\n <div\n role=\"tablist\"\n ref=${tablistRef}\n part=\"tablist\"\n :aria-orientation=\"${() => props.orientation.value}\"\n :aria-label=\"${() => props.label.value ?? null}\">\n <slot name=\"tabs\"></slot>\n </div>\n <div class=\"indicator\" ref=${indicatorRef} part=\"indicator\"></div>\n </div>\n <div class=\"panels\" part=\"panels\">\n <slot></slot>\n </div>\n `;\n },\n styles: [colorThemeMixin, styles],\n tag: 'bit-tabs',\n});\n"],"mappings":"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"}
|
package/dist/text.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./content/text/text.css?inline.cjs`);let t=require(`@vielzeug/craftit`);var n=(0,t.defineComponent)({props:{align:(0,t.typed)(void 0),as:(0,t.typed)(void 0),color:(0,t.typed)(void 0),italic:(0,t.typed)(!1),lines:(0,t.typed)(void 0,{type:Number}),size:(0,t.typed)(void 0),truncate:(0,t.typed)(!1),variant:(0,t.typed)(void 0),weight:(0,t.typed)(void 0)},setup({host:e,props:n}){return(0,t.watch)(n.as,t=>{let n=/^h([1-6])$/.exec(t??``);n?(e.setAttribute(`role`,`heading`),e.setAttribute(`aria-level`,n[1])):(e.removeAttribute(`role`),e.removeAttribute(`aria-level`))},{immediate:!0}),(0,t.watch)(n.lines,t=>{t==null?e.style.removeProperty(`--_lines`):e.style.setProperty(`--_lines`,String(t))},{immediate:!0}),t.html`<slot></slot>`},styles:[e.default],tag:`bit-text`});exports.TEXT_TAG=n;
|
|
2
|
+
//# sourceMappingURL=text.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.cjs","names":[],"sources":["../src/content/text/text.ts"],"sourcesContent":["import { defineComponent, html, typed, watch } from '@vielzeug/craftit';\n\nimport styles from './text.css?inline';\n\n/** Text component properties */\nexport type BitTextProps = {\n /** Text alignment */\n align?: 'left' | 'center' | 'right' | 'justify';\n /** Semantic HTML element to render as — sets the correct ARIA role/level on the host */\n as?: 'span' | 'p' | 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'label' | 'code';\n /** Text color (semantic + theme colors) */\n color?:\n | 'primary'\n | 'secondary'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\n | 'heading'\n | 'body'\n | 'muted'\n | 'tertiary'\n | 'disabled'\n | 'contrast';\n /** Italic text style */\n italic?: boolean;\n /** Clamp text to N lines with an ellipsis (multi-line truncation) */\n lines?: number;\n /** Text size — maps to --text-* tokens for body variants and --heading-* tokens for the heading variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Enable single-line text truncation with ellipsis */\n truncate?: boolean;\n /** Text semantic variant */\n variant?: 'body' | 'heading' | 'label' | 'caption' | 'overline' | 'code';\n /** Font weight */\n weight?: 'normal' | 'medium' | 'semibold' | 'bold';\n};\n\n/**\n * A typography component with semantic variants and responsive sizing.\n *\n * @element bit-text\n *\n * @attr {string} variant - Text variant: 'body' | 'heading' | 'label' | 'caption' | 'overline' | 'code'\n * @attr {string} size - Font size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'. Maps to --text-* tokens for body variants and --heading-* tokens for the heading variant.\n * @attr {string} weight - Font weight: 'normal' | 'medium' | 'semibold' | 'bold'\n * @attr {string} color - Text color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error' | 'heading' | 'body' | 'muted' | 'tertiary' | 'disabled' | 'contrast'\n * @attr {string} align - Text alignment: 'left' | 'center' | 'right' | 'justify'\n * @attr {boolean} truncate - Truncate text with ellipsis when it overflows (single-line)\n * @attr {number} lines - Clamp to N lines with ellipsis (multi-line truncation)\n * @attr {boolean} italic - Italic text style\n * @attr {string} as - Semantic HTML element: 'span' | 'p' | 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'label' | 'code'\n *\n * @slot - Text content\n *\n * @cssprop --text-size - Font size\n * @cssprop --text-weight - Font weight\n * @cssprop --text-color - Text color\n * @cssprop --text-line-height - Line height\n * @cssprop --text-letter-spacing - Letter spacing\n *\n * @example\n * ```html\n * <bit-text variant=\"heading\" size=\"3xl\" weight=\"bold\">Welcome</bit-text>\n * <bit-text as=\"h2\" variant=\"heading\" size=\"xl\">Section title</bit-text>\n * <bit-text color=\"primary\" weight=\"semibold\">Important notice</bit-text>\n * <bit-text variant=\"code\">npm install</bit-text>\n * <bit-text lines=\"2\">Long paragraph that clamps at two lines…</bit-text>\n * ```\n */\n\nexport const TEXT_TAG = defineComponent<BitTextProps>({\n props: {\n align: typed<BitTextProps['align']>(undefined),\n as: typed<BitTextProps['as']>(undefined),\n color: typed<BitTextProps['color']>(undefined),\n italic: typed<boolean>(false),\n lines: typed<number | undefined>(undefined, { type: Number }),\n size: typed<BitTextProps['size']>(undefined),\n truncate: typed<boolean>(false),\n variant: typed<BitTextProps['variant']>(undefined),\n weight: typed<BitTextProps['weight']>(undefined),\n },\n setup({ host, props }) {\n // Single watcher drives both role + aria-level from `as`.\n // h1–h6 → role=\"heading\" + aria-level; everything else → remove both.\n watch(\n props.as,\n (tag) => {\n const match = /^h([1-6])$/.exec((tag as string | undefined) ?? '');\n\n if (match) {\n host.setAttribute('role', 'heading');\n host.setAttribute('aria-level', match[1]);\n } else {\n host.removeAttribute('role');\n host.removeAttribute('aria-level');\n }\n },\n { immediate: true },\n );\n // Drive --_lines on the host so the CSS line-clamp rule works.\n watch(\n props.lines,\n (n) => {\n if (n != null) host.style.setProperty('--_lines', String(n));\n else host.style.removeProperty('--_lines');\n },\n { immediate: true },\n );\n\n return html`<slot></slot>`;\n },\n styles: [styles],\n tag: 'bit-text',\n});\n"],"mappings":"4JAuEA,IAAa,GAAA,EAAA,EAAA,iBAAyC,CACpD,MAAO,CACL,OAAA,EAAA,EAAA,OAAoC,IAAA,GAAU,CAC9C,IAAA,EAAA,EAAA,OAA8B,IAAA,GAAU,CACxC,OAAA,EAAA,EAAA,OAAoC,IAAA,GAAU,CAC9C,QAAA,EAAA,EAAA,OAAuB,GAAM,CAC7B,OAAA,EAAA,EAAA,OAAiC,IAAA,GAAW,CAAE,KAAM,OAAQ,CAAC,CAC7D,MAAA,EAAA,EAAA,OAAkC,IAAA,GAAU,CAC5C,UAAA,EAAA,EAAA,OAAyB,GAAM,CAC/B,SAAA,EAAA,EAAA,OAAwC,IAAA,GAAU,CAClD,QAAA,EAAA,EAAA,OAAsC,IAAA,GAAU,CACjD,CACD,MAAM,CAAE,OAAM,SAAS,CA4BrB,OAzBA,EAAA,EAAA,OACE,EAAM,GACL,GAAQ,CACP,IAAM,EAAQ,aAAa,KAAM,GAA8B,GAAG,CAE9D,GACF,EAAK,aAAa,OAAQ,UAAU,CACpC,EAAK,aAAa,aAAc,EAAM,GAAG,GAEzC,EAAK,gBAAgB,OAAO,CAC5B,EAAK,gBAAgB,aAAa,GAGtC,CAAE,UAAW,GAAM,CACpB,EAED,EAAA,EAAA,OACE,EAAM,MACL,GAAM,CACD,GAAK,KACJ,EAAK,MAAM,eAAe,WAAW,CAD3B,EAAK,MAAM,YAAY,WAAY,OAAO,EAAE,CAAC,EAG9D,CAAE,UAAW,GAAM,CACpB,CAEM,EAAA,IAAI,iBAEb,OAAQ,CAAC,EAAA,QAAO,CAChB,IAAK,WACN,CAAC"}
|
package/dist/text.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import e from "./content/text/text.css?inline.js";
|
|
2
|
+
import { defineComponent as t, html as n, typed as r, watch as i } from "@vielzeug/craftit";
|
|
3
|
+
//#region src/content/text/text.ts
|
|
4
|
+
var a = t({
|
|
5
|
+
props: {
|
|
6
|
+
align: r(void 0),
|
|
7
|
+
as: r(void 0),
|
|
8
|
+
color: r(void 0),
|
|
9
|
+
italic: r(!1),
|
|
10
|
+
lines: r(void 0, { type: Number }),
|
|
11
|
+
size: r(void 0),
|
|
12
|
+
truncate: r(!1),
|
|
13
|
+
variant: r(void 0),
|
|
14
|
+
weight: r(void 0)
|
|
15
|
+
},
|
|
16
|
+
setup({ host: e, props: t }) {
|
|
17
|
+
return i(t.as, (t) => {
|
|
18
|
+
let n = /^h([1-6])$/.exec(t ?? "");
|
|
19
|
+
n ? (e.setAttribute("role", "heading"), e.setAttribute("aria-level", n[1])) : (e.removeAttribute("role"), e.removeAttribute("aria-level"));
|
|
20
|
+
}, { immediate: !0 }), i(t.lines, (t) => {
|
|
21
|
+
t == null ? e.style.removeProperty("--_lines") : e.style.setProperty("--_lines", String(t));
|
|
22
|
+
}, { immediate: !0 }), n`<slot></slot>`;
|
|
23
|
+
},
|
|
24
|
+
styles: [e],
|
|
25
|
+
tag: "bit-text"
|
|
26
|
+
});
|
|
27
|
+
//#endregion
|
|
28
|
+
export { a as TEXT_TAG };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=text.js.map
|
package/dist/text.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","names":[],"sources":["../src/content/text/text.ts"],"sourcesContent":["import { defineComponent, html, typed, watch } from '@vielzeug/craftit';\n\nimport styles from './text.css?inline';\n\n/** Text component properties */\nexport type BitTextProps = {\n /** Text alignment */\n align?: 'left' | 'center' | 'right' | 'justify';\n /** Semantic HTML element to render as — sets the correct ARIA role/level on the host */\n as?: 'span' | 'p' | 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'label' | 'code';\n /** Text color (semantic + theme colors) */\n color?:\n | 'primary'\n | 'secondary'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\n | 'heading'\n | 'body'\n | 'muted'\n | 'tertiary'\n | 'disabled'\n | 'contrast';\n /** Italic text style */\n italic?: boolean;\n /** Clamp text to N lines with an ellipsis (multi-line truncation) */\n lines?: number;\n /** Text size — maps to --text-* tokens for body variants and --heading-* tokens for the heading variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** Enable single-line text truncation with ellipsis */\n truncate?: boolean;\n /** Text semantic variant */\n variant?: 'body' | 'heading' | 'label' | 'caption' | 'overline' | 'code';\n /** Font weight */\n weight?: 'normal' | 'medium' | 'semibold' | 'bold';\n};\n\n/**\n * A typography component with semantic variants and responsive sizing.\n *\n * @element bit-text\n *\n * @attr {string} variant - Text variant: 'body' | 'heading' | 'label' | 'caption' | 'overline' | 'code'\n * @attr {string} size - Font size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'. Maps to --text-* tokens for body variants and --heading-* tokens for the heading variant.\n * @attr {string} weight - Font weight: 'normal' | 'medium' | 'semibold' | 'bold'\n * @attr {string} color - Text color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error' | 'heading' | 'body' | 'muted' | 'tertiary' | 'disabled' | 'contrast'\n * @attr {string} align - Text alignment: 'left' | 'center' | 'right' | 'justify'\n * @attr {boolean} truncate - Truncate text with ellipsis when it overflows (single-line)\n * @attr {number} lines - Clamp to N lines with ellipsis (multi-line truncation)\n * @attr {boolean} italic - Italic text style\n * @attr {string} as - Semantic HTML element: 'span' | 'p' | 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'label' | 'code'\n *\n * @slot - Text content\n *\n * @cssprop --text-size - Font size\n * @cssprop --text-weight - Font weight\n * @cssprop --text-color - Text color\n * @cssprop --text-line-height - Line height\n * @cssprop --text-letter-spacing - Letter spacing\n *\n * @example\n * ```html\n * <bit-text variant=\"heading\" size=\"3xl\" weight=\"bold\">Welcome</bit-text>\n * <bit-text as=\"h2\" variant=\"heading\" size=\"xl\">Section title</bit-text>\n * <bit-text color=\"primary\" weight=\"semibold\">Important notice</bit-text>\n * <bit-text variant=\"code\">npm install</bit-text>\n * <bit-text lines=\"2\">Long paragraph that clamps at two lines…</bit-text>\n * ```\n */\n\nexport const TEXT_TAG = defineComponent<BitTextProps>({\n props: {\n align: typed<BitTextProps['align']>(undefined),\n as: typed<BitTextProps['as']>(undefined),\n color: typed<BitTextProps['color']>(undefined),\n italic: typed<boolean>(false),\n lines: typed<number | undefined>(undefined, { type: Number }),\n size: typed<BitTextProps['size']>(undefined),\n truncate: typed<boolean>(false),\n variant: typed<BitTextProps['variant']>(undefined),\n weight: typed<BitTextProps['weight']>(undefined),\n },\n setup({ host, props }) {\n // Single watcher drives both role + aria-level from `as`.\n // h1–h6 → role=\"heading\" + aria-level; everything else → remove both.\n watch(\n props.as,\n (tag) => {\n const match = /^h([1-6])$/.exec((tag as string | undefined) ?? '');\n\n if (match) {\n host.setAttribute('role', 'heading');\n host.setAttribute('aria-level', match[1]);\n } else {\n host.removeAttribute('role');\n host.removeAttribute('aria-level');\n }\n },\n { immediate: true },\n );\n // Drive --_lines on the host so the CSS line-clamp rule works.\n watch(\n props.lines,\n (n) => {\n if (n != null) host.style.setProperty('--_lines', String(n));\n else host.style.removeProperty('--_lines');\n },\n { immediate: true },\n );\n\n return html`<slot></slot>`;\n },\n styles: [styles],\n tag: 'bit-text',\n});\n"],"mappings":";;;AAuEA,IAAa,IAAW,EAA8B;CACpD,OAAO;EACL,OAAO,EAA6B,KAAA,EAAU;EAC9C,IAAI,EAA0B,KAAA,EAAU;EACxC,OAAO,EAA6B,KAAA,EAAU;EAC9C,QAAQ,EAAe,GAAM;EAC7B,OAAO,EAA0B,KAAA,GAAW,EAAE,MAAM,QAAQ,CAAC;EAC7D,MAAM,EAA4B,KAAA,EAAU;EAC5C,UAAU,EAAe,GAAM;EAC/B,SAAS,EAA+B,KAAA,EAAU;EAClD,QAAQ,EAA8B,KAAA,EAAU;EACjD;CACD,MAAM,EAAE,SAAM,YAAS;AA4BrB,SAzBA,EACE,EAAM,KACL,MAAQ;GACP,IAAM,IAAQ,aAAa,KAAM,KAA8B,GAAG;AAElE,GAAI,KACF,EAAK,aAAa,QAAQ,UAAU,EACpC,EAAK,aAAa,cAAc,EAAM,GAAG,KAEzC,EAAK,gBAAgB,OAAO,EAC5B,EAAK,gBAAgB,aAAa;KAGtC,EAAE,WAAW,IAAM,CACpB,EAED,EACE,EAAM,QACL,MAAM;AACL,GAAI,KAAK,OACJ,EAAK,MAAM,eAAe,WAAW,GAD3B,EAAK,MAAM,YAAY,YAAY,OAAO,EAAE,CAAC;KAG9D,EAAE,WAAW,IAAM,CACpB,EAEM,CAAI;;CAEb,QAAQ,CAAC,EAAO;CAChB,KAAK;CACN,CAAC"}
|