@vielzeug/refine 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -0
- package/dist/_dev.cjs +2 -0
- package/dist/_dev.cjs.map +1 -0
- package/dist/_dev.d.ts +2 -0
- package/dist/_dev.d.ts.map +1 -0
- package/dist/_dev.js +9 -0
- package/dist/_dev.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/accordion-item.cjs +26 -0
- package/dist/accordion-item.cjs.map +1 -0
- package/dist/accordion-item.js +124 -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 +47 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert.cjs +36 -0
- package/dist/alert.cjs.map +1 -0
- package/dist/alert.js +93 -0
- package/dist/alert.js.map +1 -0
- package/dist/async.cjs +55 -0
- package/dist/async.cjs.map +1 -0
- package/dist/async.js +99 -0
- package/dist/async.js.map +1 -0
- package/dist/avatar.cjs +18 -0
- package/dist/avatar.cjs.map +1 -0
- package/dist/avatar.js +108 -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 +65 -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 +31 -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 +57 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/button-group.cjs +6 -0
- package/dist/button-group.cjs.map +1 -0
- package/dist/button-group.js +33 -0
- package/dist/button-group.js.map +1 -0
- package/dist/button.cjs +18 -0
- package/dist/button.cjs.map +1 -0
- package/dist/button.js +124 -0
- package/dist/button.js.map +1 -0
- package/dist/calendar.cjs +126 -0
- package/dist/calendar.cjs.map +1 -0
- package/dist/calendar.js +300 -0
- package/dist/calendar.js.map +1 -0
- package/dist/card.cjs +23 -0
- package/dist/card.cjs.map +1 -0
- package/dist/card.js +87 -0
- package/dist/card.js.map +1 -0
- package/dist/carousel.cjs +61 -0
- package/dist/carousel.cjs.map +1 -0
- package/dist/carousel.js +280 -0
- package/dist/carousel.js.map +1 -0
- package/dist/checkbox-group.cjs +18 -0
- package/dist/checkbox-group.cjs.map +1 -0
- package/dist/checkbox-group.js +118 -0
- package/dist/checkbox-group.js.map +1 -0
- package/dist/checkbox.cjs +11 -0
- package/dist/checkbox.cjs.map +1 -0
- package/dist/checkbox.js +88 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chip.cjs +42 -0
- package/dist/chip.cjs.map +1 -0
- package/dist/chip.js +133 -0
- package/dist/chip.js.map +1 -0
- package/dist/code-window.cjs +19 -0
- package/dist/code-window.cjs.map +1 -0
- package/dist/code-window.js +41 -0
- package/dist/code-window.js.map +1 -0
- package/dist/combobox.cjs +103 -0
- package/dist/combobox.cjs.map +1 -0
- package/dist/combobox.js +444 -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 +88 -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 +57 -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 +74 -0
- package/dist/content/card/card.d.ts.map +1 -0
- package/dist/content/carousel/carousel-slide.cjs +2 -0
- package/dist/content/carousel/carousel-slide.cjs.map +1 -0
- package/dist/content/carousel/carousel-slide.css?inline.cjs +2 -0
- package/dist/content/carousel/carousel-slide.css?inline.cjs.map +1 -0
- package/dist/content/carousel/carousel-slide.css?inline.js +6 -0
- package/dist/content/carousel/carousel-slide.css?inline.js.map +1 -0
- package/dist/content/carousel/carousel-slide.d.ts +2 -0
- package/dist/content/carousel/carousel-slide.d.ts.map +1 -0
- package/dist/content/carousel/carousel-slide.js +18 -0
- package/dist/content/carousel/carousel-slide.js.map +1 -0
- package/dist/content/carousel/carousel.css?inline.cjs +2 -0
- package/dist/content/carousel/carousel.css?inline.cjs.map +1 -0
- package/dist/content/carousel/carousel.css?inline.js +6 -0
- package/dist/content/carousel/carousel.css?inline.js.map +1 -0
- package/dist/content/carousel/carousel.d.ts +110 -0
- package/dist/content/carousel/carousel.d.ts.map +1 -0
- package/dist/content/carousel/index.d.ts +3 -0
- package/dist/content/carousel/index.d.ts.map +1 -0
- package/dist/content/code-window/code-window.css?inline.cjs +2 -0
- package/dist/content/code-window/code-window.css?inline.cjs.map +1 -0
- package/dist/content/code-window/code-window.css?inline.js +6 -0
- package/dist/content/code-window/code-window.css?inline.js.map +1 -0
- package/dist/content/code-window/code-window.d.ts +61 -0
- package/dist/content/code-window/code-window.d.ts.map +1 -0
- package/dist/content/copy-command/copy-command.css?inline.cjs +2 -0
- package/dist/content/copy-command/copy-command.css?inline.cjs.map +1 -0
- package/dist/content/copy-command/copy-command.css?inline.js +6 -0
- package/dist/content/copy-command/copy-command.css?inline.js.map +1 -0
- package/dist/content/copy-command/copy-command.d.ts +66 -0
- package/dist/content/copy-command/copy-command.d.ts.map +1 -0
- package/dist/content/icon/icon.css?inline.cjs +2 -0
- package/dist/content/icon/icon.css?inline.cjs.map +1 -0
- package/dist/content/icon/icon.css?inline.js +6 -0
- package/dist/content/icon/icon.css?inline.js.map +1 -0
- package/dist/content/icon/icon.d.ts +45 -0
- package/dist/content/icon/icon.d.ts.map +1 -0
- package/dist/content/index.d.ts +23 -0
- package/dist/content/index.d.ts.map +1 -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 +61 -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 +38 -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 +76 -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/copy-command.cjs +17 -0
- package/dist/copy-command.cjs.map +1 -0
- package/dist/copy-command.js +55 -0
- package/dist/copy-command.js.map +1 -0
- package/dist/custom-elements.json +12641 -0
- package/dist/datagrid.cjs +435 -0
- package/dist/datagrid.cjs.map +1 -0
- package/dist/datagrid.js +764 -0
- package/dist/datagrid.js.map +1 -0
- package/dist/date-picker.cjs +133 -0
- package/dist/date-picker.cjs.map +1 -0
- package/dist/date-picker.js +315 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/dialog.cjs +28 -0
- package/dist/dialog.cjs.map +1 -0
- package/dist/dialog.js +88 -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 +62 -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 +70 -0
- package/dist/disclosure/accordion-item/accordion-item.d.ts.map +1 -0
- package/dist/disclosure/index.d.ts +11 -0
- package/dist/disclosure/index.d.ts.map +1 -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 +49 -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 +33 -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 +75 -0
- package/dist/disclosure/tabs/tabs.d.ts.map +1 -0
- package/dist/drawer.cjs +32 -0
- package/dist/drawer.cjs.map +1 -0
- package/dist/drawer.js +199 -0
- package/dist/drawer.js.map +1 -0
- package/dist/errors.cjs +2 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +13 -0
- package/dist/errors.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 +74 -0
- package/dist/feedback/alert/alert.d.ts.map +1 -0
- package/dist/feedback/async/async.css?inline.cjs +2 -0
- package/dist/feedback/async/async.css?inline.cjs.map +1 -0
- package/dist/feedback/async/async.css?inline.js +6 -0
- package/dist/feedback/async/async.css?inline.js.map +1 -0
- package/dist/feedback/async/async.d.ts +54 -0
- package/dist/feedback/async/async.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 +69 -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 +136 -0
- package/dist/feedback/chip/chip.d.ts.map +1 -0
- package/dist/feedback/index.d.ts +17 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/password-strength/password-strength.css?inline.cjs +2 -0
- package/dist/feedback/password-strength/password-strength.css?inline.cjs.map +1 -0
- package/dist/feedback/password-strength/password-strength.css?inline.js +6 -0
- package/dist/feedback/password-strength/password-strength.css?inline.js.map +1 -0
- package/dist/feedback/password-strength/password-strength.d.ts +66 -0
- package/dist/feedback/password-strength/password-strength.d.ts.map +1 -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 +68 -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 +63 -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 +127 -0
- package/dist/feedback/toast/toast.d.ts.map +1 -0
- package/dist/file-input.cjs +70 -0
- package/dist/file-input.cjs.map +1 -0
- package/dist/file-input.js +209 -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 +56 -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 +35 -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/headless/_internal.d.ts +17 -0
- package/dist/headless/_internal.d.ts.map +1 -0
- package/dist/headless/announcer.cjs +2 -0
- package/dist/headless/announcer.cjs.map +1 -0
- package/dist/headless/announcer.d.ts +25 -0
- package/dist/headless/announcer.d.ts.map +1 -0
- package/dist/headless/announcer.js +24 -0
- package/dist/headless/announcer.js.map +1 -0
- package/dist/headless/checkable.cjs +2 -0
- package/dist/headless/checkable.cjs.map +1 -0
- package/dist/headless/checkable.d.ts +42 -0
- package/dist/headless/checkable.d.ts.map +1 -0
- package/dist/headless/checkable.js +36 -0
- package/dist/headless/checkable.js.map +1 -0
- package/dist/headless/choice-field.cjs +2 -0
- package/dist/headless/choice-field.cjs.map +1 -0
- package/dist/headless/choice-field.d.ts +36 -0
- package/dist/headless/choice-field.d.ts.map +1 -0
- package/dist/headless/choice-field.js +42 -0
- package/dist/headless/choice-field.js.map +1 -0
- package/dist/headless/datagrid.cjs +2 -0
- package/dist/headless/datagrid.cjs.map +1 -0
- package/dist/headless/datagrid.d.ts +158 -0
- package/dist/headless/datagrid.d.ts.map +1 -0
- package/dist/headless/datagrid.js +55 -0
- package/dist/headless/datagrid.js.map +1 -0
- package/dist/headless/date-picker.cjs +2 -0
- package/dist/headless/date-picker.cjs.map +1 -0
- package/dist/headless/date-picker.d.ts +114 -0
- package/dist/headless/date-picker.d.ts.map +1 -0
- package/dist/headless/date-picker.js +184 -0
- package/dist/headless/date-picker.js.map +1 -0
- package/dist/headless/dialog-focus.cjs +2 -0
- package/dist/headless/dialog-focus.cjs.map +1 -0
- package/dist/headless/dialog-focus.d.ts +40 -0
- package/dist/headless/dialog-focus.d.ts.map +1 -0
- package/dist/headless/dialog-focus.js +22 -0
- package/dist/headless/dialog-focus.js.map +1 -0
- package/dist/headless/direction.cjs +2 -0
- package/dist/headless/direction.cjs.map +1 -0
- package/dist/headless/direction.d.ts +11 -0
- package/dist/headless/direction.d.ts.map +1 -0
- package/dist/headless/direction.js +14 -0
- package/dist/headless/direction.js.map +1 -0
- package/dist/headless/field-base.cjs +2 -0
- package/dist/headless/field-base.cjs.map +1 -0
- package/dist/headless/field-base.d.ts +148 -0
- package/dist/headless/field-base.d.ts.map +1 -0
- package/dist/headless/field-base.js +46 -0
- package/dist/headless/field-base.js.map +1 -0
- package/dist/headless/focus-trap.cjs +2 -0
- package/dist/headless/focus-trap.cjs.map +1 -0
- package/dist/headless/focus-trap.d.ts +45 -0
- package/dist/headless/focus-trap.d.ts.map +1 -0
- package/dist/headless/focus-trap.js +51 -0
- package/dist/headless/focus-trap.js.map +1 -0
- package/dist/headless/focus.cjs +2 -0
- package/dist/headless/focus.cjs.map +1 -0
- package/dist/headless/focus.d.ts +34 -0
- package/dist/headless/focus.d.ts.map +1 -0
- package/dist/headless/focus.js +34 -0
- package/dist/headless/focus.js.map +1 -0
- package/dist/headless/index.d.ts +28 -0
- package/dist/headless/index.d.ts.map +1 -0
- package/dist/headless/keyboard.cjs +2 -0
- package/dist/headless/keyboard.cjs.map +1 -0
- package/dist/headless/keyboard.d.ts +52 -0
- package/dist/headless/keyboard.d.ts.map +1 -0
- package/dist/headless/keyboard.js +29 -0
- package/dist/headless/keyboard.js.map +1 -0
- package/dist/headless/light-dom.cjs +2 -0
- package/dist/headless/light-dom.cjs.map +1 -0
- package/dist/headless/light-dom.d.ts +12 -0
- package/dist/headless/light-dom.d.ts.map +1 -0
- package/dist/headless/light-dom.js +6 -0
- package/dist/headless/light-dom.js.map +1 -0
- package/dist/headless/nav.cjs +2 -0
- package/dist/headless/nav.cjs.map +1 -0
- package/dist/headless/nav.d.ts +66 -0
- package/dist/headless/nav.d.ts.map +1 -0
- package/dist/headless/nav.js +115 -0
- package/dist/headless/nav.js.map +1 -0
- package/dist/headless/numbers.cjs +2 -0
- package/dist/headless/numbers.cjs.map +1 -0
- package/dist/headless/numbers.d.ts +14 -0
- package/dist/headless/numbers.d.ts.map +1 -0
- package/dist/headless/numbers.js +9 -0
- package/dist/headless/numbers.js.map +1 -0
- package/dist/headless/option-list.cjs +2 -0
- package/dist/headless/option-list.cjs.map +1 -0
- package/dist/headless/option-list.d.ts +107 -0
- package/dist/headless/option-list.d.ts.map +1 -0
- package/dist/headless/option-list.js +66 -0
- package/dist/headless/option-list.js.map +1 -0
- package/dist/headless/ore.cjs +2 -0
- package/dist/headless/ore.cjs.map +1 -0
- package/dist/headless/ore.d.ts +20 -0
- package/dist/headless/ore.d.ts.map +1 -0
- package/dist/headless/ore.js +9 -0
- package/dist/headless/ore.js.map +1 -0
- package/dist/headless/overlay.cjs +2 -0
- package/dist/headless/overlay.cjs.map +1 -0
- package/dist/headless/overlay.d.ts +62 -0
- package/dist/headless/overlay.d.ts.map +1 -0
- package/dist/headless/overlay.js +29 -0
- package/dist/headless/overlay.js.map +1 -0
- package/dist/headless/paginated-list.cjs +2 -0
- package/dist/headless/paginated-list.cjs.map +1 -0
- package/dist/headless/paginated-list.d.ts +42 -0
- package/dist/headless/paginated-list.d.ts.map +1 -0
- package/dist/headless/paginated-list.js +34 -0
- package/dist/headless/paginated-list.js.map +1 -0
- package/dist/headless/parse.cjs +2 -0
- package/dist/headless/parse.cjs.map +1 -0
- package/dist/headless/parse.d.ts +15 -0
- package/dist/headless/parse.d.ts.map +1 -0
- package/dist/headless/parse.js +9 -0
- package/dist/headless/parse.js.map +1 -0
- package/dist/headless/positioner.cjs +2 -0
- package/dist/headless/positioner.cjs.map +1 -0
- package/dist/headless/positioner.d.ts +40 -0
- package/dist/headless/positioner.d.ts.map +1 -0
- package/dist/headless/positioner.js +38 -0
- package/dist/headless/positioner.js.map +1 -0
- package/dist/headless/selection-control.cjs +2 -0
- package/dist/headless/selection-control.cjs.map +1 -0
- package/dist/headless/selection-control.d.ts +30 -0
- package/dist/headless/selection-control.d.ts.map +1 -0
- package/dist/headless/selection-control.js +44 -0
- package/dist/headless/selection-control.js.map +1 -0
- package/dist/headless/signals.cjs +2 -0
- package/dist/headless/signals.cjs.map +1 -0
- package/dist/headless/signals.d.ts +20 -0
- package/dist/headless/signals.d.ts.map +1 -0
- package/dist/headless/signals.js +12 -0
- package/dist/headless/signals.js.map +1 -0
- package/dist/headless/slider.cjs +2 -0
- package/dist/headless/slider.cjs.map +1 -0
- package/dist/headless/slider.d.ts +28 -0
- package/dist/headless/slider.d.ts.map +1 -0
- package/dist/headless/slider.js +40 -0
- package/dist/headless/slider.js.map +1 -0
- package/dist/headless/sort-control.cjs +2 -0
- package/dist/headless/sort-control.cjs.map +1 -0
- package/dist/headless/sort-control.d.ts +22 -0
- package/dist/headless/sort-control.d.ts.map +1 -0
- package/dist/headless/sort-control.js +36 -0
- package/dist/headless/sort-control.js.map +1 -0
- package/dist/headless/spinner.cjs +2 -0
- package/dist/headless/spinner.cjs.map +1 -0
- package/dist/headless/spinner.d.ts +19 -0
- package/dist/headless/spinner.d.ts.map +1 -0
- package/dist/headless/spinner.js +52 -0
- package/dist/headless/spinner.js.map +1 -0
- package/dist/headless/swipe.cjs +2 -0
- package/dist/headless/swipe.cjs.map +1 -0
- package/dist/headless/swipe.d.ts +38 -0
- package/dist/headless/swipe.d.ts.map +1 -0
- package/dist/headless/swipe.js +58 -0
- package/dist/headless/swipe.js.map +1 -0
- package/dist/headless/text-field.cjs +2 -0
- package/dist/headless/text-field.cjs.map +1 -0
- package/dist/headless/text-field.d.ts +45 -0
- package/dist/headless/text-field.d.ts.map +1 -0
- package/dist/headless/text-field.js +41 -0
- package/dist/headless/text-field.js.map +1 -0
- package/dist/headless/typeahead.cjs +2 -0
- package/dist/headless/typeahead.cjs.map +1 -0
- package/dist/headless/typeahead.d.ts +53 -0
- package/dist/headless/typeahead.d.ts.map +1 -0
- package/dist/headless/typeahead.js +23 -0
- package/dist/headless/typeahead.js.map +1 -0
- package/dist/headless.cjs +1 -0
- package/dist/headless.js +26 -0
- package/dist/icon.cjs +2 -0
- package/dist/icon.cjs.map +1 -0
- package/dist/icon.js +87 -0
- package/dist/icon.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 +61 -0
- package/dist/input.cjs +67 -0
- package/dist/input.cjs.map +1 -0
- package/dist/input.js +184 -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 +85 -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 +64 -0
- package/dist/inputs/button-group/button-group.d.ts.map +1 -0
- package/dist/inputs/calendar/calendar.css?inline.cjs +2 -0
- package/dist/inputs/calendar/calendar.css?inline.cjs.map +1 -0
- package/dist/inputs/calendar/calendar.css?inline.js +6 -0
- package/dist/inputs/calendar/calendar.css?inline.js.map +1 -0
- package/dist/inputs/calendar/calendar.d.ts +134 -0
- package/dist/inputs/calendar/calendar.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 +60 -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 +75 -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 +6 -0
- package/dist/inputs/combobox/combobox-options.d.ts.map +1 -0
- package/dist/inputs/combobox/combobox-options.js +26 -0
- package/dist/inputs/combobox/combobox-options.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 +45 -0
- package/dist/inputs/combobox/combobox.d.ts.map +1 -0
- package/dist/inputs/combobox/combobox.types.d.ts +45 -0
- package/dist/inputs/combobox/combobox.types.d.ts.map +1 -0
- package/dist/inputs/datagrid/datagrid-column.cjs +2 -0
- package/dist/inputs/datagrid/datagrid-column.cjs.map +1 -0
- package/dist/inputs/datagrid/datagrid-column.d.ts +7 -0
- package/dist/inputs/datagrid/datagrid-column.d.ts.map +1 -0
- package/dist/inputs/datagrid/datagrid-column.js +31 -0
- package/dist/inputs/datagrid/datagrid-column.js.map +1 -0
- package/dist/inputs/datagrid/datagrid-controls.cjs +2 -0
- package/dist/inputs/datagrid/datagrid-controls.cjs.map +1 -0
- package/dist/inputs/datagrid/datagrid-controls.d.ts +98 -0
- package/dist/inputs/datagrid/datagrid-controls.d.ts.map +1 -0
- package/dist/inputs/datagrid/datagrid-controls.js +147 -0
- package/dist/inputs/datagrid/datagrid-controls.js.map +1 -0
- package/dist/inputs/datagrid/datagrid-nav.cjs +2 -0
- package/dist/inputs/datagrid/datagrid-nav.cjs.map +1 -0
- package/dist/inputs/datagrid/datagrid-nav.d.ts +33 -0
- package/dist/inputs/datagrid/datagrid-nav.d.ts.map +1 -0
- package/dist/inputs/datagrid/datagrid-nav.js +51 -0
- package/dist/inputs/datagrid/datagrid-nav.js.map +1 -0
- package/dist/inputs/datagrid/datagrid.css?inline.cjs +2 -0
- package/dist/inputs/datagrid/datagrid.css?inline.cjs.map +1 -0
- package/dist/inputs/datagrid/datagrid.css?inline.js +6 -0
- package/dist/inputs/datagrid/datagrid.css?inline.js.map +1 -0
- package/dist/inputs/datagrid/datagrid.d.ts +302 -0
- package/dist/inputs/datagrid/datagrid.d.ts.map +1 -0
- package/dist/inputs/date-picker/date-picker.css?inline.cjs +2 -0
- package/dist/inputs/date-picker/date-picker.css?inline.cjs.map +1 -0
- package/dist/inputs/date-picker/date-picker.css?inline.js +6 -0
- package/dist/inputs/date-picker/date-picker.css?inline.js.map +1 -0
- package/dist/inputs/date-picker/date-picker.d.ts +112 -0
- package/dist/inputs/date-picker/date-picker.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 +90 -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 +59 -0
- package/dist/inputs/form/form.d.ts.map +1 -0
- package/dist/inputs/index.d.ts +47 -0
- package/dist/inputs/index.d.ts.map +1 -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 +96 -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 +102 -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 +82 -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 +56 -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 +74 -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 +68 -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 +89 -0
- package/dist/inputs/select/select.d.ts.map +1 -0
- package/dist/inputs/shared/field-binding.cjs +2 -0
- package/dist/inputs/shared/field-binding.cjs.map +1 -0
- package/dist/inputs/shared/field-binding.d.ts +31 -0
- package/dist/inputs/shared/field-binding.d.ts.map +1 -0
- package/dist/inputs/shared/field-binding.js +31 -0
- package/dist/inputs/shared/field-binding.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 +49 -0
- package/dist/inputs/shared/form-context.d.ts.map +1 -0
- package/dist/inputs/shared/form-context.js +15 -0
- package/dist/inputs/shared/form-context.js.map +1 -0
- package/dist/inputs/shared/index.d.ts +5 -0
- package/dist/inputs/shared/index.d.ts.map +1 -0
- package/dist/inputs/shared/templates.cjs +11 -0
- package/dist/inputs/shared/templates.cjs.map +1 -0
- package/dist/inputs/shared/templates.d.ts +13 -0
- package/dist/inputs/shared/templates.d.ts.map +1 -0
- package/dist/inputs/shared/templates.js +18 -0
- package/dist/inputs/shared/templates.js.map +1 -0
- package/dist/inputs/shared/use-form-action.cjs +2 -0
- package/dist/inputs/shared/use-form-action.cjs.map +1 -0
- package/dist/inputs/shared/use-form-action.d.ts +17 -0
- package/dist/inputs/shared/use-form-action.d.ts.map +1 -0
- package/dist/inputs/shared/use-form-action.js +19 -0
- package/dist/inputs/shared/use-form-action.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 +95 -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 +56 -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 +91 -0
- package/dist/inputs/textarea/textarea.d.ts.map +1 -0
- package/dist/inputs/time-picker/time-picker.css?inline.cjs +2 -0
- package/dist/inputs/time-picker/time-picker.css?inline.cjs.map +1 -0
- package/dist/inputs/time-picker/time-picker.css?inline.js +6 -0
- package/dist/inputs/time-picker/time-picker.css?inline.js.map +1 -0
- package/dist/inputs/time-picker/time-picker.d.ts +103 -0
- package/dist/inputs/time-picker/time-picker.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 +54 -0
- package/dist/layout/grid-item/grid-item.d.ts.map +1 -0
- package/dist/layout/index.d.ts +11 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/navbar/navbar.css?inline.cjs +2 -0
- package/dist/layout/navbar/navbar.css?inline.cjs.map +1 -0
- package/dist/layout/navbar/navbar.css?inline.js +6 -0
- package/dist/layout/navbar/navbar.css?inline.js.map +1 -0
- package/dist/layout/navbar/navbar.d.ts +153 -0
- package/dist/layout/navbar/navbar.d.ts.map +1 -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 +226 -0
- package/dist/layout/sidebar/sidebar.d.ts.map +1 -0
- package/dist/menu.cjs +30 -0
- package/dist/menu.cjs.map +1 -0
- package/dist/menu.js +197 -0
- package/dist/menu.js.map +1 -0
- package/dist/navbar.cjs +68 -0
- package/dist/navbar.cjs.map +1 -0
- package/dist/navbar.js +283 -0
- package/dist/navbar.js.map +1 -0
- package/dist/number-input.cjs +40 -0
- package/dist/number-input.cjs.map +1 -0
- package/dist/number-input.js +141 -0
- package/dist/number-input.js.map +1 -0
- package/dist/ore/dist/_dev.cjs +2 -0
- package/dist/ore/dist/_dev.cjs.map +1 -0
- package/dist/ore/dist/_dev.js +12 -0
- package/dist/ore/dist/_dev.js.map +1 -0
- package/dist/ore/dist/aria.cjs +2 -0
- package/dist/ore/dist/aria.cjs.map +1 -0
- package/dist/ore/dist/aria.js +37 -0
- package/dist/ore/dist/aria.js.map +1 -0
- package/dist/ore/dist/base-element.cjs +2 -0
- package/dist/ore/dist/base-element.cjs.map +1 -0
- package/dist/ore/dist/base-element.js +146 -0
- package/dist/ore/dist/base-element.js.map +1 -0
- package/dist/ore/dist/context-bag.cjs +2 -0
- package/dist/ore/dist/context-bag.cjs.map +1 -0
- package/dist/ore/dist/context-bag.js +28 -0
- package/dist/ore/dist/context-bag.js.map +1 -0
- package/dist/ore/dist/context.cjs +2 -0
- package/dist/ore/dist/context.cjs.map +1 -0
- package/dist/ore/dist/context.js +38 -0
- package/dist/ore/dist/context.js.map +1 -0
- package/dist/ore/dist/define.cjs +2 -0
- package/dist/ore/dist/define.cjs.map +1 -0
- package/dist/ore/dist/define.js +27 -0
- package/dist/ore/dist/define.js.map +1 -0
- package/dist/ore/dist/directives/classMap.cjs +1 -0
- package/dist/ore/dist/directives/classMap.js +1 -0
- package/dist/ore/dist/directives/each.cjs +1 -0
- package/dist/ore/dist/directives/each.js +5 -0
- package/dist/ore/dist/directives/live.cjs +2 -0
- package/dist/ore/dist/directives/live.cjs.map +1 -0
- package/dist/ore/dist/directives/live.js +6 -0
- package/dist/ore/dist/directives/live.js.map +1 -0
- package/dist/ore/dist/directives/model.cjs +1 -0
- package/dist/ore/dist/directives/model.js +3 -0
- package/dist/ore/dist/directives/raw.cjs +2 -0
- package/dist/ore/dist/directives/raw.cjs.map +1 -0
- package/dist/ore/dist/directives/raw.js +35 -0
- package/dist/ore/dist/directives/raw.js.map +1 -0
- package/dist/ore/dist/directives/styleMap.cjs +2 -0
- package/dist/ore/dist/directives/styleMap.cjs.map +1 -0
- package/dist/ore/dist/directives/styleMap.js +20 -0
- package/dist/ore/dist/directives/styleMap.js.map +1 -0
- package/dist/ore/dist/directives/when.cjs +2 -0
- package/dist/ore/dist/directives/when.cjs.map +1 -0
- package/dist/ore/dist/directives/when.js +33 -0
- package/dist/ore/dist/directives/when.js.map +1 -0
- package/dist/ore/dist/directives.cjs +1 -0
- package/dist/ore/dist/directives.js +8 -0
- package/dist/ore/dist/errors.cjs +3 -0
- package/dist/ore/dist/errors.cjs.map +1 -0
- package/dist/ore/dist/errors.js +41 -0
- package/dist/ore/dist/errors.js.map +1 -0
- package/dist/ore/dist/host-bind.cjs +2 -0
- package/dist/ore/dist/host-bind.cjs.map +1 -0
- package/dist/ore/dist/host-bind.js +60 -0
- package/dist/ore/dist/host-bind.js.map +1 -0
- package/dist/ore/dist/observers/intersection-observe.cjs +2 -0
- package/dist/ore/dist/observers/intersection-observe.cjs.map +1 -0
- package/dist/ore/dist/observers/intersection-observe.js +12 -0
- package/dist/ore/dist/observers/intersection-observe.js.map +1 -0
- package/dist/ore/dist/observers/media-observe.cjs +1 -0
- package/dist/ore/dist/observers/media-observe.js +1 -0
- package/dist/ore/dist/observers/mutation-observe.cjs +1 -0
- package/dist/ore/dist/observers/mutation-observe.js +1 -0
- package/dist/ore/dist/observers/resize-observe.cjs +2 -0
- package/dist/ore/dist/observers/resize-observe.cjs.map +1 -0
- package/dist/ore/dist/observers/resize-observe.js +20 -0
- package/dist/ore/dist/observers/resize-observe.js.map +1 -0
- package/dist/ore/dist/observers.cjs +1 -0
- package/dist/ore/dist/observers.js +5 -0
- package/dist/ore/dist/props.cjs +2 -0
- package/dist/ore/dist/props.cjs.map +1 -0
- package/dist/ore/dist/props.js +54 -0
- package/dist/ore/dist/props.js.map +1 -0
- package/dist/ore/dist/runtime.cjs +2 -0
- package/dist/ore/dist/runtime.cjs.map +1 -0
- package/dist/ore/dist/runtime.js +33 -0
- package/dist/ore/dist/runtime.js.map +1 -0
- package/dist/ore/dist/slots.cjs +2 -0
- package/dist/ore/dist/slots.cjs.map +1 -0
- package/dist/ore/dist/slots.js +61 -0
- package/dist/ore/dist/slots.js.map +1 -0
- package/dist/ore/dist/testing/flush.cjs +2 -0
- package/dist/ore/dist/testing/flush.cjs.map +1 -0
- package/dist/ore/dist/testing/flush.js +11 -0
- package/dist/ore/dist/testing/flush.js.map +1 -0
- package/dist/ore/dist/testing/mount.cjs +2 -0
- package/dist/ore/dist/testing/mount.cjs.map +1 -0
- package/dist/ore/dist/testing/mount.js +94 -0
- package/dist/ore/dist/testing/mount.js.map +1 -0
- package/dist/ore/dist/testing/query.cjs +2 -0
- package/dist/ore/dist/testing/query.cjs.map +1 -0
- package/dist/ore/dist/testing/query.js +12 -0
- package/dist/ore/dist/testing/query.js.map +1 -0
- package/dist/ore/dist/testing/render-hook.cjs +1 -0
- package/dist/ore/dist/testing/render-hook.js +4 -0
- package/dist/ore/dist/testing/testing.cjs +1 -0
- package/dist/ore/dist/testing/testing.js +4 -0
- package/dist/ore/dist/testing/wait.cjs +1 -0
- package/dist/ore/dist/testing/wait.js +1 -0
- package/dist/ore/dist/testing.cjs +1 -0
- package/dist/ore/dist/testing.js +6 -0
- package/dist/ore/dist/types/bindings.cjs +2 -0
- package/dist/ore/dist/types/bindings.cjs.map +1 -0
- package/dist/ore/dist/types/bindings.js +15 -0
- package/dist/ore/dist/types/bindings.js.map +1 -0
- package/dist/ore/dist/types.cjs +2 -0
- package/dist/ore/dist/types.cjs.map +1 -0
- package/dist/ore/dist/types.js +15 -0
- package/dist/ore/dist/types.js.map +1 -0
- package/dist/ore/dist/utils/aria.cjs +2 -0
- package/dist/ore/dist/utils/aria.cjs.map +1 -0
- package/dist/ore/dist/utils/aria.js +6 -0
- package/dist/ore/dist/utils/aria.js.map +1 -0
- package/dist/ore/dist/utils/css.cjs +2 -0
- package/dist/ore/dist/utils/css.cjs.map +1 -0
- package/dist/ore/dist/utils/css.js +18 -0
- package/dist/ore/dist/utils/css.js.map +1 -0
- package/dist/ore/dist/utils/dom.cjs +2 -0
- package/dist/ore/dist/utils/dom.cjs.map +1 -0
- package/dist/ore/dist/utils/dom.js +47 -0
- package/dist/ore/dist/utils/dom.js.map +1 -0
- package/dist/ore/dist/utils/emit.cjs +2 -0
- package/dist/ore/dist/utils/emit.cjs.map +1 -0
- package/dist/ore/dist/utils/emit.js +16 -0
- package/dist/ore/dist/utils/emit.js.map +1 -0
- package/dist/ore/dist/utils/id.cjs +2 -0
- package/dist/ore/dist/utils/id.cjs.map +1 -0
- package/dist/ore/dist/utils/id.js +4 -0
- package/dist/ore/dist/utils/id.js.map +1 -0
- package/dist/otp-input.cjs +21 -0
- package/dist/otp-input.cjs.map +1 -0
- package/dist/otp-input.js +145 -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 +108 -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 +111 -0
- package/dist/overlay/drawer/drawer.d.ts.map +1 -0
- package/dist/overlay/index.d.ts +11 -0
- package/dist/overlay/index.d.ts.map +1 -0
- package/dist/overlay/menu/menu-item.css?inline.cjs +2 -0
- package/dist/overlay/menu/menu-item.css?inline.cjs.map +1 -0
- package/dist/overlay/menu/menu-item.css?inline.js +6 -0
- package/dist/overlay/menu/menu-item.css?inline.js.map +1 -0
- package/dist/overlay/menu/menu-separator.css?inline.cjs +2 -0
- package/dist/overlay/menu/menu-separator.css?inline.cjs.map +1 -0
- package/dist/overlay/menu/menu-separator.css?inline.js +6 -0
- package/dist/overlay/menu/menu-separator.css?inline.js.map +1 -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 +110 -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/shared/await-exit.cjs +2 -0
- package/dist/overlay/shared/await-exit.cjs.map +1 -0
- package/dist/overlay/shared/await-exit.d.ts +14 -0
- package/dist/overlay/shared/await-exit.d.ts.map +1 -0
- package/dist/overlay/shared/await-exit.js +18 -0
- package/dist/overlay/shared/await-exit.js.map +1 -0
- package/dist/overlay/shared/background-lock.cjs +2 -0
- package/dist/overlay/shared/background-lock.cjs.map +1 -0
- package/dist/overlay/shared/background-lock.d.ts +22 -0
- package/dist/overlay/shared/background-lock.d.ts.map +1 -0
- package/dist/overlay/shared/background-lock.js +25 -0
- package/dist/overlay/shared/background-lock.js.map +1 -0
- package/dist/overlay/shared/use-dialog.cjs +2 -0
- package/dist/overlay/shared/use-dialog.cjs.map +1 -0
- package/dist/overlay/shared/use-dialog.d.ts +76 -0
- package/dist/overlay/shared/use-dialog.d.ts.map +1 -0
- package/dist/overlay/shared/use-dialog.js +92 -0
- package/dist/overlay/shared/use-dialog.js.map +1 -0
- package/dist/overlay/shared/use-floating-trigger.cjs +2 -0
- package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -0
- package/dist/overlay/shared/use-floating-trigger.d.ts +67 -0
- package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -0
- package/dist/overlay/shared/use-floating-trigger.js +128 -0
- package/dist/overlay/shared/use-floating-trigger.js.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 +72 -0
- package/dist/overlay/tooltip/tooltip.d.ts.map +1 -0
- package/dist/pagination.cjs +63 -0
- package/dist/pagination.cjs.map +1 -0
- package/dist/pagination.js +113 -0
- package/dist/pagination.js.map +1 -0
- package/dist/password-strength.cjs +19 -0
- package/dist/password-strength.cjs.map +1 -0
- package/dist/password-strength.js +69 -0
- package/dist/password-strength.js.map +1 -0
- package/dist/popover.cjs +16 -0
- package/dist/popover.cjs.map +1 -0
- package/dist/popover.js +81 -0
- package/dist/popover.js.map +1 -0
- package/dist/progress.cjs +46 -0
- package/dist/progress.cjs.map +1 -0
- package/dist/progress.js +96 -0
- package/dist/progress.js.map +1 -0
- package/dist/radio-group.cjs +25 -0
- package/dist/radio-group.cjs.map +1 -0
- package/dist/radio-group.js +145 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/radio.cjs +10 -0
- package/dist/radio.cjs.map +1 -0
- package/dist/radio.js +146 -0
- package/dist/radio.js.map +1 -0
- package/dist/rating.cjs +28 -0
- package/dist/rating.cjs.map +1 -0
- package/dist/rating.js +123 -0
- package/dist/rating.js.map +1 -0
- package/dist/refine.cjs +2705 -0
- package/dist/refine.cjs.map +1 -0
- package/dist/refine.iife.js +2705 -0
- package/dist/refine.iife.js.map +1 -0
- package/dist/refine.js +2705 -0
- package/dist/refine.js.map +1 -0
- package/dist/select.cjs +79 -0
- package/dist/select.cjs.map +1 -0
- package/dist/select.js +289 -0
- package/dist/select.js.map +1 -0
- package/dist/separator.cjs +27 -0
- package/dist/separator.cjs.map +1 -0
- package/dist/separator.js +47 -0
- package/dist/separator.js.map +1 -0
- package/dist/shared/index.d.ts +14 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/prop-bundles.cjs +2 -0
- package/dist/shared/prop-bundles.cjs.map +1 -0
- package/dist/shared/prop-bundles.d.ts +45 -0
- package/dist/shared/prop-bundles.d.ts.map +1 -0
- package/dist/shared/prop-bundles.js +13 -0
- package/dist/shared/prop-bundles.js.map +1 -0
- package/dist/shared/size-presets.cjs +2 -0
- package/dist/shared/size-presets.cjs.map +1 -0
- package/dist/shared/size-presets.d.ts +101 -0
- package/dist/shared/size-presets.d.ts.map +1 -0
- package/dist/shared/size-presets.js +96 -0
- package/dist/shared/size-presets.js.map +1 -0
- package/dist/shared/types.d.ts +76 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/sidebar.cjs +123 -0
- package/dist/sidebar.cjs.map +1 -0
- package/dist/sidebar.js +344 -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 +59 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/slider.cjs +27 -0
- package/dist/slider.cjs.map +1 -0
- package/dist/slider.js +219 -0
- package/dist/slider.js.map +1 -0
- package/dist/styles/animation.css +94 -0
- package/dist/styles/index.cjs +2 -0
- package/dist/styles/index.cjs.map +1 -0
- package/dist/styles/index.d.ts +41 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/index.js +24 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/styles/layer.css +19 -0
- package/dist/styles/mixins/accessibility.css.cjs +51 -0
- package/dist/styles/mixins/accessibility.css.cjs.map +1 -0
- package/dist/styles/mixins/accessibility.css.d.ts +80 -0
- package/dist/styles/mixins/accessibility.css.d.ts.map +1 -0
- package/dist/styles/mixins/accessibility.css.js +56 -0
- package/dist/styles/mixins/accessibility.css.js.map +1 -0
- package/dist/styles/mixins/animation.css.cjs +133 -0
- package/dist/styles/mixins/animation.css.cjs.map +1 -0
- package/dist/styles/mixins/animation.css.d.ts +43 -0
- package/dist/styles/mixins/animation.css.d.ts.map +1 -0
- package/dist/styles/mixins/animation.css.js +166 -0
- package/dist/styles/mixins/animation.css.js.map +1 -0
- package/dist/styles/mixins/shape.css.cjs +66 -0
- package/dist/styles/mixins/shape.css.cjs.map +1 -0
- package/dist/styles/mixins/shape.css.d.ts +96 -0
- package/dist/styles/mixins/shape.css.d.ts.map +1 -0
- package/dist/styles/mixins/shape.css.js +98 -0
- package/dist/styles/mixins/shape.css.js.map +1 -0
- package/dist/styles/mixins/states.css.cjs +37 -0
- package/dist/styles/mixins/states.css.cjs.map +1 -0
- package/dist/styles/mixins/states.css.d.ts +27 -0
- package/dist/styles/mixins/states.css.d.ts.map +1 -0
- package/dist/styles/mixins/states.css.js +44 -0
- package/dist/styles/mixins/states.css.js.map +1 -0
- package/dist/styles/mixins/table-base.css.cjs +94 -0
- package/dist/styles/mixins/table-base.css.cjs.map +1 -0
- package/dist/styles/mixins/table-base.css.d.ts +24 -0
- package/dist/styles/mixins/table-base.css.d.ts.map +1 -0
- package/dist/styles/mixins/table-base.css.js +99 -0
- package/dist/styles/mixins/table-base.css.js.map +1 -0
- package/dist/styles/mixins/theme.css.cjs +80 -0
- package/dist/styles/mixins/theme.css.cjs.map +1 -0
- package/dist/styles/mixins/theme.css.d.ts +77 -0
- package/dist/styles/mixins/theme.css.d.ts.map +1 -0
- package/dist/styles/mixins/theme.css.js +98 -0
- package/dist/styles/mixins/theme.css.js.map +1 -0
- package/dist/styles/mixins/variants.css.cjs +55 -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 +60 -0
- package/dist/styles/mixins/variants.css.js.map +1 -0
- package/dist/styles/preflight.css +239 -0
- package/dist/styles/styles.css +5 -0
- package/dist/styles/theme.css +553 -0
- package/dist/switch.cjs +10 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.js +79 -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 +62 -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 +61 -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 +126 -0
- package/dist/tabs.js.map +1 -0
- package/dist/testing/index.d.ts +233 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing.cjs +2 -0
- package/dist/testing.cjs.map +1 -0
- package/dist/testing.js +44 -0
- package/dist/testing.js.map +1 -0
- package/dist/text.cjs +2 -0
- package/dist/text.cjs.map +1 -0
- package/dist/text.js +34 -0
- package/dist/text.js.map +1 -0
- package/dist/textarea.cjs +33 -0
- package/dist/textarea.cjs.map +1 -0
- package/dist/textarea.js +137 -0
- package/dist/textarea.js.map +1 -0
- package/dist/time-picker.cjs +98 -0
- package/dist/time-picker.cjs.map +1 -0
- package/dist/time-picker.js +261 -0
- package/dist/time-picker.js.map +1 -0
- package/dist/toast.cjs +69 -0
- package/dist/toast.cjs.map +1 -0
- package/dist/toast.js +316 -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 +121 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/css.cjs +2 -0
- package/dist/utils/css.cjs.map +1 -0
- package/dist/utils/css.d.ts +10 -0
- package/dist/utils/css.d.ts.map +1 -0
- package/dist/utils/css.js +10 -0
- package/dist/utils/css.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/link.cjs +2 -0
- package/dist/utils/link.cjs.map +1 -0
- package/dist/utils/link.d.ts +44 -0
- package/dist/utils/link.d.ts.map +1 -0
- package/dist/utils/link.js +19 -0
- package/dist/utils/link.js.map +1 -0
- package/package.json +464 -0
package/dist/async.cjs
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./ore/dist/directives/when.cjs");require("./ore/dist/directives.cjs");const t=require("./styles/mixins/accessibility.css.cjs"),n=require("./feedback/async/async.css?inline.cjs");let r=require("@vielzeug/ore"),i=require("@vielzeug/ripple");var a=`ore-async`;(0,r.define)(a,{props:{"empty-description":r.prop.string(),"empty-label":r.prop.string(`No content yet`),"error-description":r.prop.string(),"error-label":r.prop.string(`Something went wrong`),retryable:r.prop.bool(!1),status:r.prop.oneOf([`idle`,`loading`,`empty`,`error`,`success`],`success`)},setup(t,{bind:n,emit:a}){let o=(0,i.signal)(!1),s=(0,i.signal)(!1),c=(0,i.signal)(!1);n({attr:{ariaBusy:()=>t.status.value===`loading`?`true`:`false`,ariaLabel:()=>t.status.value===`loading`?`Loading…`:null,ariaLive:()=>t.status.value===`error`?`assertive`:`polite`,status:t.status}});let l=(e,t)=>()=>t?.value?r.html`<p class="${e}">${t}</p>`:``;return r.html`
|
|
2
|
+
<div class="region region-idle" role="presentation"></div>
|
|
3
|
+
|
|
4
|
+
<div class="region region-loading" role="status">
|
|
5
|
+
<slot
|
|
6
|
+
name="loading"
|
|
7
|
+
@slotchange=${e=>{o.value=e.target.assignedNodes().length>0}}></slot>
|
|
8
|
+
${e.when(o,()=>r.html``,()=>r.html`
|
|
9
|
+
<div class="loading-default" aria-hidden="true">
|
|
10
|
+
<ore-skeleton variant="text" lines="1" width="40%"></ore-skeleton>
|
|
11
|
+
<ore-skeleton variant="text" lines="3" width="100%"></ore-skeleton>
|
|
12
|
+
<ore-skeleton variant="text" lines="1" width="60%"></ore-skeleton>
|
|
13
|
+
</div>
|
|
14
|
+
`)}
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<div class="region region-empty">
|
|
18
|
+
<slot
|
|
19
|
+
name="empty"
|
|
20
|
+
@slotchange=${e=>{s.value=e.target.assignedNodes().length>0}}></slot>
|
|
21
|
+
${e.when(s,()=>r.html``,()=>r.html`
|
|
22
|
+
<div class="empty-state" role="status">
|
|
23
|
+
<div class="icon">
|
|
24
|
+
<ore-icon name="inbox" size="100%" stroke-width="1.75" aria-hidden="true"></ore-icon>
|
|
25
|
+
</div>
|
|
26
|
+
${l(`title`,t[`empty-label`])} ${l(`description`,t[`empty-description`])}
|
|
27
|
+
</div>
|
|
28
|
+
`)}
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<div class="region region-error">
|
|
32
|
+
<slot
|
|
33
|
+
name="error"
|
|
34
|
+
@slotchange=${e=>{c.value=e.target.assignedNodes().length>0}}></slot>
|
|
35
|
+
${e.when(c,()=>r.html``,()=>r.html`
|
|
36
|
+
<div class="error-state" role="alert">
|
|
37
|
+
<div class="icon">
|
|
38
|
+
<ore-icon name="triangle-alert" size="100%" stroke-width="1.75" aria-hidden="true"></ore-icon>
|
|
39
|
+
</div>
|
|
40
|
+
${l(`title`,t[`error-label`])} ${l(`description`,t[`error-description`])}
|
|
41
|
+
${e.when(()=>!!t.retryable.value,()=>r.html`
|
|
42
|
+
<button class="retry-btn" type="button" @click=${()=>a(`retry`)}>
|
|
43
|
+
<ore-icon name="refresh-cw" size="1em" stroke-width="2" aria-hidden="true"></ore-icon>
|
|
44
|
+
Try again
|
|
45
|
+
</button>
|
|
46
|
+
`)}
|
|
47
|
+
</div>
|
|
48
|
+
`)}
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<div class="region region-success" role="presentation">
|
|
52
|
+
<slot></slot>
|
|
53
|
+
</div>
|
|
54
|
+
`},styles:[t.reducedMotionMixin,n.default]}),exports.ASYNC_TAG=a;
|
|
55
|
+
//# sourceMappingURL=async.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.cjs","names":[],"sources":["../src/feedback/async/async.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { when } from '@vielzeug/ore/directives';\nimport { type Readable, signal } from '@vielzeug/ripple';\n\nimport { reducedMotionMixin } from '../../styles';\nimport componentStyles from './async.css?inline';\n\nexport type AsyncStatus = 'idle' | 'loading' | 'empty' | 'error' | 'success';\n\nexport type OreAsyncEvents = {\n retry: void;\n};\n\nexport type OreAsyncProps = {\n 'empty-description'?: string;\n 'empty-label'?: string;\n 'error-description'?: string;\n 'error-label'?: string;\n retryable?: boolean;\n status?: AsyncStatus;\n};\n\n/**\n * A container for handling asynchronous states (loading, empty, error, success).\n * Simplifies data fetching UI by providing consistent fallbacks.\n *\n * @element ore-async\n *\n * @attr {string} status - current state: 'idle' | 'loading' | 'empty' | 'error' | 'success' (default: 'success')\n * @attr {boolean} retryable - show retry button in error state (default: false)\n * @attr {string} empty-label - title for empty state (default: 'No content yet')\n * @attr {string} empty-description - optional text for empty state\n * @attr {string} error-label - title for error state (default: 'Something went wrong')\n * @attr {string} error-description - optional text for error state\n *\n * @fires retry - Emitted when the retry button is clicked (no detail payload)\n *\n * @slot - default content shown in 'success' state\n * @slot loading - custom loading UI (overrides default skeletons)\n * @slot empty - custom empty UI (overrides default icon/label)\n * @slot error - custom error UI (overrides default icon/label)\n *\n * @cssprop --async-color - Text/icon color used by default async state content\n * @cssprop --async-gap - Vertical spacing between icon, title, description, and actions\n * @cssprop --async-icon-size - Icon size for built-in loading/empty/error visuals\n * @example\n * ```html\n * <!-- Success state: default slot is shown -->\n * <ore-async status=\"success\">\n * <ul><li>Item one</li><li>Item two</li></ul>\n * </ore-async>\n *\n * <!-- Loading state: shows skeleton placeholders -->\n * <ore-async status=\"loading\"></ore-async>\n *\n * <!-- Empty state with custom message -->\n * <ore-async status=\"empty\" empty-label=\"No results\" empty-description=\"Try adjusting your filters.\"></ore-async>\n *\n * <!-- Error state with retry button -->\n * <ore-async status=\"error\" retryable error-label=\"Failed to load\" error-description=\"Check your connection.\"></ore-async>\n * ```\n */\nexport const ASYNC_TAG = 'ore-async' as const;\ndefine<OreAsyncProps, OreAsyncEvents>(ASYNC_TAG, {\n props: {\n 'empty-description': prop.string(),\n 'empty-label': prop.string('No content yet'),\n 'error-description': prop.string(),\n 'error-label': prop.string('Something went wrong'),\n retryable: prop.bool(false),\n status: prop.oneOf(['idle', 'loading', 'empty', 'error', 'success'] as const, 'success'),\n },\n setup(props, { bind, emit }) {\n const hasLoadingSlot = signal(false);\n const hasEmptySlot = signal(false);\n const hasErrorSlot = signal(false);\n\n // Reflect status onto the host so CSS can show/hide each region.\n // ARIA attributes are driven reactively by bind().\n bind({\n attr: {\n ariaBusy: () => (props.status.value === 'loading' ? 'true' : 'false'),\n ariaLabel: () => (props.status.value === 'loading' ? 'Loading…' : null),\n ariaLive: () => (props.status.value === 'error' ? 'assertive' : 'polite'),\n status: props.status,\n },\n });\n\n const renderText = (className: 'title' | 'description', text: Readable<string | undefined> | undefined) => () =>\n text?.value ? html`<p class=\"${className}\">${text}</p>` : '';\n\n // All four regions are always in the shadow DOM — CSS on :host([status=\"…\"])\n // toggles their visibility. This means:\n // - No DOM churn on status transitions (no teardown/rebuild of slot elements).\n // - Live regions are always present, so screen readers announce correctly.\n // - focus is never lost across status changes.\n return html`\n <div class=\"region region-idle\" role=\"presentation\"></div>\n\n <div class=\"region region-loading\" role=\"status\">\n <slot\n name=\"loading\"\n @slotchange=${(e: Event) => {\n hasLoadingSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasLoadingSlot,\n () => html``,\n () => html`\n <div class=\"loading-default\" aria-hidden=\"true\">\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"40%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"3\" width=\"100%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"60%\"></ore-skeleton>\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-empty\">\n <slot\n name=\"empty\"\n @slotchange=${(e: Event) => {\n hasEmptySlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasEmptySlot,\n () => html``,\n () => html`\n <div class=\"empty-state\" role=\"status\">\n <div class=\"icon\">\n <ore-icon name=\"inbox\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['empty-label'])} ${renderText('description', props['empty-description'])}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-error\">\n <slot\n name=\"error\"\n @slotchange=${(e: Event) => {\n hasErrorSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasErrorSlot,\n () => html``,\n () => html`\n <div class=\"error-state\" role=\"alert\">\n <div class=\"icon\">\n <ore-icon name=\"triangle-alert\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['error-label'])} ${renderText('description', props['error-description'])}\n ${when(\n () => Boolean(props.retryable.value),\n () => html`\n <button class=\"retry-btn\" type=\"button\" @click=${() => emit('retry')}>\n <ore-icon name=\"refresh-cw\" size=\"1em\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n Try again\n </button>\n `,\n )}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-success\" role=\"presentation\">\n <slot></slot>\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n"],"mappings":"mUA8DA,IAAa,EAAY,yBACa,EAAW,CAC/C,MAAO,CACL,oBAAqB,EAAA,KAAK,OAAO,EACjC,cAAe,EAAA,KAAK,OAAO,gBAAgB,EAC3C,oBAAqB,EAAA,KAAK,OAAO,EACjC,cAAe,EAAA,KAAK,OAAO,sBAAsB,EACjD,UAAW,EAAA,KAAK,KAAK,EAAK,EAC1B,OAAQ,EAAA,KAAK,MAAM,CAAC,OAAQ,UAAW,QAAS,QAAS,SAAS,EAAY,SAAS,CACzF,EACA,MAAM,EAAO,CAAE,OAAM,QAAQ,CAC3B,IAAM,GAAA,EAAA,EAAA,OAAA,CAAwB,EAAK,EAC7B,GAAA,EAAA,EAAA,OAAA,CAAsB,EAAK,EAC3B,GAAA,EAAA,EAAA,OAAA,CAAsB,EAAK,EAIjC,EAAK,CACH,KAAM,CACJ,aAAiB,EAAM,OAAO,QAAU,UAAY,OAAS,QAC7D,cAAkB,EAAM,OAAO,QAAU,UAAY,WAAa,KAClE,aAAiB,EAAM,OAAO,QAAU,QAAU,YAAc,SAChE,OAAQ,EAAM,MAChB,CACF,CAAC,EAED,IAAM,GAAc,EAAoC,QACtD,GAAM,MAAQ,EAAA,IAAI,aAAa,EAAU,IAAI,EAAK,MAAQ,GAO5D,MAAO,GAAA,IAAI;;;;;;wBAMU,GAAa,CAC1B,EAAe,MAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,OAAS,CAChF,EAAE;UACF,EAAA,KACA,MACM,EAAA,IAAI,OACJ,EAAA,IAAI;;;;;;WAOZ,EAAE;;;;;;wBAMe,GAAa,CAC1B,EAAa,MAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,OAAS,CAC9E,EAAE;UACF,EAAA,KACA,MACM,EAAA,IAAI,OACJ,EAAA,IAAI;;;;;gBAKJ,EAAW,QAAS,EAAM,cAAc,EAAE,GAAG,EAAW,cAAe,EAAM,oBAAoB,EAAE;;WAG3G,EAAE;;;;;;wBAMe,GAAa,CAC1B,EAAa,MAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,OAAS,CAC9E,EAAE;UACF,EAAA,KACA,MACM,EAAA,IAAI,OACJ,EAAA,IAAI;;;;;gBAKJ,EAAW,QAAS,EAAM,cAAc,EAAE,GAAG,EAAW,cAAe,EAAM,oBAAoB,EAAE;gBACnG,EAAA,SACM,EAAQ,EAAM,UAAU,UACxB,EAAA,IAAI;uEAC+C,EAAK,OAAO,EAAE;;;;iBAKzE,EAAE;;WAGR,EAAE;;;;;;KAOR,EACA,OAAQ,CAAC,EAAA,mBAAoB,EAAA,OAAe,CAC9C,CAAC"}
|
package/dist/async.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { when as e } from "./ore/dist/directives/when.js";
|
|
2
|
+
import "./ore/dist/directives.js";
|
|
3
|
+
import { reducedMotionMixin as t } from "./styles/mixins/accessibility.css.js";
|
|
4
|
+
import n from "./feedback/async/async.css?inline.js";
|
|
5
|
+
import { define as r, html as i, prop as a } from "@vielzeug/ore";
|
|
6
|
+
import { signal as o } from "@vielzeug/ripple";
|
|
7
|
+
//#region src/feedback/async/async.ts
|
|
8
|
+
var s = "ore-async";
|
|
9
|
+
r(s, {
|
|
10
|
+
props: {
|
|
11
|
+
"empty-description": a.string(),
|
|
12
|
+
"empty-label": a.string("No content yet"),
|
|
13
|
+
"error-description": a.string(),
|
|
14
|
+
"error-label": a.string("Something went wrong"),
|
|
15
|
+
retryable: a.bool(!1),
|
|
16
|
+
status: a.oneOf([
|
|
17
|
+
"idle",
|
|
18
|
+
"loading",
|
|
19
|
+
"empty",
|
|
20
|
+
"error",
|
|
21
|
+
"success"
|
|
22
|
+
], "success")
|
|
23
|
+
},
|
|
24
|
+
setup(t, { bind: n, emit: r }) {
|
|
25
|
+
let a = o(!1), s = o(!1), c = o(!1);
|
|
26
|
+
n({ attr: {
|
|
27
|
+
ariaBusy: () => t.status.value === "loading" ? "true" : "false",
|
|
28
|
+
ariaLabel: () => t.status.value === "loading" ? "Loading…" : null,
|
|
29
|
+
ariaLive: () => t.status.value === "error" ? "assertive" : "polite",
|
|
30
|
+
status: t.status
|
|
31
|
+
} });
|
|
32
|
+
let l = (e, t) => () => t?.value ? i`<p class="${e}">${t}</p>` : "";
|
|
33
|
+
return i`
|
|
34
|
+
<div class="region region-idle" role="presentation"></div>
|
|
35
|
+
|
|
36
|
+
<div class="region region-loading" role="status">
|
|
37
|
+
<slot
|
|
38
|
+
name="loading"
|
|
39
|
+
@slotchange=${(e) => {
|
|
40
|
+
a.value = e.target.assignedNodes().length > 0;
|
|
41
|
+
}}></slot>
|
|
42
|
+
${e(a, () => i``, () => i`
|
|
43
|
+
<div class="loading-default" aria-hidden="true">
|
|
44
|
+
<ore-skeleton variant="text" lines="1" width="40%"></ore-skeleton>
|
|
45
|
+
<ore-skeleton variant="text" lines="3" width="100%"></ore-skeleton>
|
|
46
|
+
<ore-skeleton variant="text" lines="1" width="60%"></ore-skeleton>
|
|
47
|
+
</div>
|
|
48
|
+
`)}
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<div class="region region-empty">
|
|
52
|
+
<slot
|
|
53
|
+
name="empty"
|
|
54
|
+
@slotchange=${(e) => {
|
|
55
|
+
s.value = e.target.assignedNodes().length > 0;
|
|
56
|
+
}}></slot>
|
|
57
|
+
${e(s, () => i``, () => i`
|
|
58
|
+
<div class="empty-state" role="status">
|
|
59
|
+
<div class="icon">
|
|
60
|
+
<ore-icon name="inbox" size="100%" stroke-width="1.75" aria-hidden="true"></ore-icon>
|
|
61
|
+
</div>
|
|
62
|
+
${l("title", t["empty-label"])} ${l("description", t["empty-description"])}
|
|
63
|
+
</div>
|
|
64
|
+
`)}
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<div class="region region-error">
|
|
68
|
+
<slot
|
|
69
|
+
name="error"
|
|
70
|
+
@slotchange=${(e) => {
|
|
71
|
+
c.value = e.target.assignedNodes().length > 0;
|
|
72
|
+
}}></slot>
|
|
73
|
+
${e(c, () => i``, () => i`
|
|
74
|
+
<div class="error-state" role="alert">
|
|
75
|
+
<div class="icon">
|
|
76
|
+
<ore-icon name="triangle-alert" size="100%" stroke-width="1.75" aria-hidden="true"></ore-icon>
|
|
77
|
+
</div>
|
|
78
|
+
${l("title", t["error-label"])} ${l("description", t["error-description"])}
|
|
79
|
+
${e(() => !!t.retryable.value, () => i`
|
|
80
|
+
<button class="retry-btn" type="button" @click=${() => r("retry")}>
|
|
81
|
+
<ore-icon name="refresh-cw" size="1em" stroke-width="2" aria-hidden="true"></ore-icon>
|
|
82
|
+
Try again
|
|
83
|
+
</button>
|
|
84
|
+
`)}
|
|
85
|
+
</div>
|
|
86
|
+
`)}
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<div class="region region-success" role="presentation">
|
|
90
|
+
<slot></slot>
|
|
91
|
+
</div>
|
|
92
|
+
`;
|
|
93
|
+
},
|
|
94
|
+
styles: [t, n]
|
|
95
|
+
});
|
|
96
|
+
//#endregion
|
|
97
|
+
export { s as ASYNC_TAG };
|
|
98
|
+
|
|
99
|
+
//# sourceMappingURL=async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.js","names":[],"sources":["../src/feedback/async/async.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { when } from '@vielzeug/ore/directives';\nimport { type Readable, signal } from '@vielzeug/ripple';\n\nimport { reducedMotionMixin } from '../../styles';\nimport componentStyles from './async.css?inline';\n\nexport type AsyncStatus = 'idle' | 'loading' | 'empty' | 'error' | 'success';\n\nexport type OreAsyncEvents = {\n retry: void;\n};\n\nexport type OreAsyncProps = {\n 'empty-description'?: string;\n 'empty-label'?: string;\n 'error-description'?: string;\n 'error-label'?: string;\n retryable?: boolean;\n status?: AsyncStatus;\n};\n\n/**\n * A container for handling asynchronous states (loading, empty, error, success).\n * Simplifies data fetching UI by providing consistent fallbacks.\n *\n * @element ore-async\n *\n * @attr {string} status - current state: 'idle' | 'loading' | 'empty' | 'error' | 'success' (default: 'success')\n * @attr {boolean} retryable - show retry button in error state (default: false)\n * @attr {string} empty-label - title for empty state (default: 'No content yet')\n * @attr {string} empty-description - optional text for empty state\n * @attr {string} error-label - title for error state (default: 'Something went wrong')\n * @attr {string} error-description - optional text for error state\n *\n * @fires retry - Emitted when the retry button is clicked (no detail payload)\n *\n * @slot - default content shown in 'success' state\n * @slot loading - custom loading UI (overrides default skeletons)\n * @slot empty - custom empty UI (overrides default icon/label)\n * @slot error - custom error UI (overrides default icon/label)\n *\n * @cssprop --async-color - Text/icon color used by default async state content\n * @cssprop --async-gap - Vertical spacing between icon, title, description, and actions\n * @cssprop --async-icon-size - Icon size for built-in loading/empty/error visuals\n * @example\n * ```html\n * <!-- Success state: default slot is shown -->\n * <ore-async status=\"success\">\n * <ul><li>Item one</li><li>Item two</li></ul>\n * </ore-async>\n *\n * <!-- Loading state: shows skeleton placeholders -->\n * <ore-async status=\"loading\"></ore-async>\n *\n * <!-- Empty state with custom message -->\n * <ore-async status=\"empty\" empty-label=\"No results\" empty-description=\"Try adjusting your filters.\"></ore-async>\n *\n * <!-- Error state with retry button -->\n * <ore-async status=\"error\" retryable error-label=\"Failed to load\" error-description=\"Check your connection.\"></ore-async>\n * ```\n */\nexport const ASYNC_TAG = 'ore-async' as const;\ndefine<OreAsyncProps, OreAsyncEvents>(ASYNC_TAG, {\n props: {\n 'empty-description': prop.string(),\n 'empty-label': prop.string('No content yet'),\n 'error-description': prop.string(),\n 'error-label': prop.string('Something went wrong'),\n retryable: prop.bool(false),\n status: prop.oneOf(['idle', 'loading', 'empty', 'error', 'success'] as const, 'success'),\n },\n setup(props, { bind, emit }) {\n const hasLoadingSlot = signal(false);\n const hasEmptySlot = signal(false);\n const hasErrorSlot = signal(false);\n\n // Reflect status onto the host so CSS can show/hide each region.\n // ARIA attributes are driven reactively by bind().\n bind({\n attr: {\n ariaBusy: () => (props.status.value === 'loading' ? 'true' : 'false'),\n ariaLabel: () => (props.status.value === 'loading' ? 'Loading…' : null),\n ariaLive: () => (props.status.value === 'error' ? 'assertive' : 'polite'),\n status: props.status,\n },\n });\n\n const renderText = (className: 'title' | 'description', text: Readable<string | undefined> | undefined) => () =>\n text?.value ? html`<p class=\"${className}\">${text}</p>` : '';\n\n // All four regions are always in the shadow DOM — CSS on :host([status=\"…\"])\n // toggles their visibility. This means:\n // - No DOM churn on status transitions (no teardown/rebuild of slot elements).\n // - Live regions are always present, so screen readers announce correctly.\n // - focus is never lost across status changes.\n return html`\n <div class=\"region region-idle\" role=\"presentation\"></div>\n\n <div class=\"region region-loading\" role=\"status\">\n <slot\n name=\"loading\"\n @slotchange=${(e: Event) => {\n hasLoadingSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasLoadingSlot,\n () => html``,\n () => html`\n <div class=\"loading-default\" aria-hidden=\"true\">\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"40%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"3\" width=\"100%\"></ore-skeleton>\n <ore-skeleton variant=\"text\" lines=\"1\" width=\"60%\"></ore-skeleton>\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-empty\">\n <slot\n name=\"empty\"\n @slotchange=${(e: Event) => {\n hasEmptySlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasEmptySlot,\n () => html``,\n () => html`\n <div class=\"empty-state\" role=\"status\">\n <div class=\"icon\">\n <ore-icon name=\"inbox\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['empty-label'])} ${renderText('description', props['empty-description'])}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-error\">\n <slot\n name=\"error\"\n @slotchange=${(e: Event) => {\n hasErrorSlot.value = (e.target as HTMLSlotElement).assignedNodes().length > 0;\n }}></slot>\n ${when(\n hasErrorSlot,\n () => html``,\n () => html`\n <div class=\"error-state\" role=\"alert\">\n <div class=\"icon\">\n <ore-icon name=\"triangle-alert\" size=\"100%\" stroke-width=\"1.75\" aria-hidden=\"true\"></ore-icon>\n </div>\n ${renderText('title', props['error-label'])} ${renderText('description', props['error-description'])}\n ${when(\n () => Boolean(props.retryable.value),\n () => html`\n <button class=\"retry-btn\" type=\"button\" @click=${() => emit('retry')}>\n <ore-icon name=\"refresh-cw\" size=\"1em\" stroke-width=\"2\" aria-hidden=\"true\"></ore-icon>\n Try again\n </button>\n `,\n )}\n </div>\n `,\n )}\n </div>\n\n <div class=\"region region-success\" role=\"presentation\">\n <slot></slot>\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n"],"mappings":";;;;;;;AA8DA,IAAa,IAAY;AACzB,EAAsC,GAAW;CAC/C,OAAO;EACL,qBAAqB,EAAK,OAAO;EACjC,eAAe,EAAK,OAAO,gBAAgB;EAC3C,qBAAqB,EAAK,OAAO;EACjC,eAAe,EAAK,OAAO,sBAAsB;EACjD,WAAW,EAAK,KAAK,EAAK;EAC1B,QAAQ,EAAK,MAAM;GAAC;GAAQ;GAAW;GAAS;GAAS;EAAS,GAAY,SAAS;CACzF;CACA,MAAM,GAAO,EAAE,SAAM,WAAQ;EAC3B,IAAM,IAAiB,EAAO,EAAK,GAC7B,IAAe,EAAO,EAAK,GAC3B,IAAe,EAAO,EAAK;EAIjC,EAAK,EACH,MAAM;GACJ,gBAAiB,EAAM,OAAO,UAAU,YAAY,SAAS;GAC7D,iBAAkB,EAAM,OAAO,UAAU,YAAY,aAAa;GAClE,gBAAiB,EAAM,OAAO,UAAU,UAAU,cAAc;GAChE,QAAQ,EAAM;EAChB,EACF,CAAC;EAED,IAAM,KAAc,GAAoC,YACtD,GAAM,QAAQ,CAAI,aAAa,EAAU,IAAI,EAAK,QAAQ;EAO5D,OAAO,CAAI;;;;;;yBAMU,MAAa;GAC1B,EAAe,QAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,SAAS;EAChF,EAAE;UACF,EACA,SACM,CAAI,UACJ,CAAI;;;;;;WAOZ,EAAE;;;;;;yBAMe,MAAa;GAC1B,EAAa,QAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,SAAS;EAC9E,EAAE;UACF,EACA,SACM,CAAI,UACJ,CAAI;;;;;gBAKJ,EAAW,SAAS,EAAM,cAAc,EAAE,GAAG,EAAW,eAAe,EAAM,oBAAoB,EAAE;;WAG3G,EAAE;;;;;;yBAMe,MAAa;GAC1B,EAAa,QAAS,EAAE,OAA2B,cAAc,CAAC,CAAC,SAAS;EAC9E,EAAE;UACF,EACA,SACM,CAAI,UACJ,CAAI;;;;;gBAKJ,EAAW,SAAS,EAAM,cAAc,EAAE,GAAG,EAAW,eAAe,EAAM,oBAAoB,EAAE;gBACnG,QACM,EAAQ,EAAM,UAAU,aACxB,CAAI;yEAC+C,EAAK,OAAO,EAAE;;;;iBAKzE,EAAE;;WAGR,EAAE;;;;;;;CAOR;CACA,QAAQ,CAAC,GAAoB,CAAe;AAC9C,CAAC"}
|
package/dist/avatar.cjs
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/shape.css.cjs"),t=require("./styles/mixins/theme.css.cjs"),n=require("./shared/prop-bundles.cjs"),r=require("./content/avatar/avatar-group.css?inline.cjs"),i=require("./content/avatar/avatar.css?inline.cjs");let a=require("@vielzeug/ore"),o=require("@vielzeug/ripple");var s={away:`Away`,busy:`Busy`,offline:`Offline`,online:`Online`},c=`ore-avatar`;(0,a.define)(c,{props:{...n.themableBundle,...n.sizableBundle,...n.roundableBundle,alt:a.prop.string(),initials:a.prop.string(),src:a.prop.string(),status:a.prop.string()},setup(e){let t=(0,o.signal)(!1);(0,o.watch)(e.src,()=>{t.value=!1});let n=e=>{e&&(e.addEventListener(`error`,()=>{t.value=!0}),e.addEventListener(`load`,()=>{t.value=!1}))},r=(0,o.computed)(()=>{if(e.initials.value)return e.initials.value.slice(0,2);let t=e.alt.value;if(!t)return``;let n=t.trim().split(/\s+/);return n.length>=2?(n[0][0]+n[n.length-1][0]).toUpperCase():n[0].slice(0,2).toUpperCase()}),i=(0,o.computed)(()=>!!e.src.value&&!t.value),c=(0,o.computed)(()=>!i.value&&!!r.value),l=(0,o.computed)(()=>!i.value&&!c.value),u=()=>{let t=e.alt.value||null,n=e.status.value,r=n?s[n]:null;return!t&&!r?null:t?r?`${t}, ${r}`:t:`Status: ${r}`};return a.html`
|
|
2
|
+
<span class="avatar" part="avatar" :aria-label="${u}" :role="${()=>u()?`img`:null}">
|
|
3
|
+
${()=>e.src.value?a.html`<img
|
|
4
|
+
ref="${n}"
|
|
5
|
+
part="img"
|
|
6
|
+
:src="${e.src}"
|
|
7
|
+
:alt="${e.alt}"
|
|
8
|
+
?hidden="${()=>!i.value}"
|
|
9
|
+
aria-hidden="true" />`:``}
|
|
10
|
+
${()=>c.value?a.html`<span class="initials" part="initials" aria-hidden="true">${r}</span>`:``}
|
|
11
|
+
${()=>l.value?a.html`<ore-icon class="icon-fallback" part="fallback" name="user" size="50%"></ore-icon>`:``}
|
|
12
|
+
</span>
|
|
13
|
+
${()=>e.status.value?a.html`<span class="status" part="status" :data-status="${e.status}" aria-hidden="true"></span>`:``}
|
|
14
|
+
`},styles:[t.colorThemeMixin,e.roundedVariantMixin,e.sizeVariantMixin({lg:{fontSize:`var(--avatar-font-size, var(--text-base))`,size:`var(--avatar-size, var(--size-14))`},md:{fontSize:`var(--avatar-font-size, var(--text-sm))`,size:`var(--avatar-size, var(--size-10))`},sm:{fontSize:`var(--avatar-font-size, var(--text-xs))`,size:`var(--avatar-size, var(--size-7))`}}),i.default]});var l=`ore-avatar-group`;(0,a.define)(l,{props:{max:a.prop.number(5),total:a.prop.number()},setup(e,{el:t,slots:n,watch:r}){let i=(0,o.signal)(0),s=()=>{let n=[...t.querySelectorAll(`ore-avatar`)],r=Number(e.max.value)||5,a=Math.max(0,n.length-r);i.value=e.total.value==null?a:Number(e.total.value)-r,n.forEach((e,t)=>{t>=r?e.setAttribute(`data-avatar-group-hidden`,``):e.removeAttribute(`data-avatar-group-hidden`)})};r(()=>{n.elements().value,s()});let c=()=>`+${i.value} more`,l=()=>`+${i.value}`;return a.html`
|
|
15
|
+
<slot></slot>
|
|
16
|
+
${()=>i.value>0?a.html`<span class="overflow-badge" part="overflow" aria-label="${c}"> ${l} </span>`:``}
|
|
17
|
+
`},styles:[r.default]}),exports.AVATAR_GROUP_TAG=l,exports.AVATAR_TAG=c;
|
|
18
|
+
//# sourceMappingURL=avatar.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.cjs","names":[],"sources":["../src/content/avatar/avatar.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, RoundedSize, ThemeColor } from '../../types';\n\nimport '../icon/icon';\nimport { roundableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, roundedVariantMixin, sizeVariantMixin } from '../../styles';\nimport groupStyles from './avatar-group.css?inline';\nimport componentStyles from './avatar.css?inline';\n\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\nconst STATUS_LABELS: Record<AvatarStatus, string> = {\n away: 'Away',\n busy: 'Busy',\n offline: 'Offline',\n online: 'Online',\n};\n\n/** Avatar component properties */\nexport type OreAvatarProps = {\n /** Alt text for the image; also used to derive initials when no `initials` prop is given */\n alt?: string;\n /** Theme color (used for initials background) */\n color?: ThemeColor;\n /** Explicit initials to display when no image is available (e.g. \"JD\") */\n initials?: string;\n /** Border radius */\n rounded?: RoundedSize | '';\n /** Component size */\n size?: ComponentSize;\n /** Image source URL */\n src?: string;\n /** Online presence indicator */\n status?: AvatarStatus;\n};\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Displays a user avatar: image → initials → generic fallback icon, in that priority order.\n *\n * @element ore-avatar\n *\n * @attr {string} src - Image source URL\n * @attr {string} alt - Image alt text (also used to derive initials)\n * @attr {string} initials - Explicit initials (up to 2 chars)\n * @attr {string} color - Theme color for initials background: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {string} status - 'online' | 'offline' | 'busy' | 'away'\n *\n * @slot - Fallback content shown when image and initials are unavailable.\n * @cssprop --avatar-size - Diameter of the avatar\n * @cssprop --avatar-bg - Background color\n * @cssprop --avatar-color - Text/icon color\n * @cssprop --avatar-radius - Border radius\n * @cssprop --avatar-border - Border shorthand\n * @cssprop --avatar-border-color - Border color (also controls status dot border)\n *\n * @part avatar - Avatar root container.\n * @part img - Image element.\n * @part initials - Initials fallback element.\n * @part fallback - Shadow part for the `fallback` element.\n * @part status - Status indicator element.\n * @part overflow - Overflow indicator element.\n * @example\n * ```html\n * <ore-avatar src=\"/jane.jpg\" alt=\"Jane Doe\"></ore-avatar>\n * <ore-avatar initials=\"JD\" color=\"primary\"></ore-avatar>\n * <ore-avatar alt=\"John Smith\" status=\"online\"></ore-avatar>\n * ```\n */\nexport const AVATAR_TAG = 'ore-avatar' as const;\ndefine<OreAvatarProps>(AVATAR_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...roundableBundle,\n alt: prop.string(),\n initials: prop.string(),\n src: prop.string(),\n status: prop.string<AvatarStatus>(),\n },\n setup(props) {\n const imgFailed = signal(false);\n\n // Reset stale error state whenever src changes\n watch(props.src, () => {\n imgFailed.value = false;\n });\n\n // Attach load/error listeners reactively when the img element mounts\n const attachImgListeners = (el: HTMLImageElement | null) => {\n if (!el) return;\n\n el.addEventListener('error', () => {\n imgFailed.value = true;\n });\n el.addEventListener('load', () => {\n imgFailed.value = false;\n });\n };\n const derivedInitials = computed(() => {\n if (props.initials.value) return props.initials.value.slice(0, 2);\n\n const alt = props.alt.value;\n\n if (!alt) return '';\n\n const parts = alt.trim().split(/\\s+/);\n\n if (parts.length >= 2) return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n\n return parts[0].slice(0, 2).toUpperCase();\n });\n const showImage = computed(() => !!props.src.value && !imgFailed.value);\n const showInitials = computed(() => !showImage.value && !!derivedInitials.value);\n const showFallback = computed(() => !showImage.value && !showInitials.value);\n const avatarLabel = () => {\n const name = (props.alt.value as string | undefined) || null;\n const statusKey = props.status.value as AvatarStatus | undefined;\n const status = statusKey ? STATUS_LABELS[statusKey] : null;\n\n if (!name && !status) return null;\n\n if (!name) return `Status: ${status}`;\n\n if (!status) return name;\n\n return `${name}, ${status}`;\n };\n const avatarRole = () => (avatarLabel() ? 'img' : null);\n\n return html`\n <span class=\"avatar\" part=\"avatar\" :aria-label=\"${avatarLabel}\" :role=\"${avatarRole}\">\n ${() =>\n props.src.value\n ? html`<img\n ref=\"${attachImgListeners}\"\n part=\"img\"\n :src=\"${props.src}\"\n :alt=\"${props.alt}\"\n ?hidden=\"${() => !showImage.value}\"\n aria-hidden=\"true\" />`\n : ''}\n ${() =>\n showInitials.value\n ? html`<span class=\"initials\" part=\"initials\" aria-hidden=\"true\">${derivedInitials}</span>`\n : ''}\n ${() =>\n showFallback.value\n ? html`<ore-icon class=\"icon-fallback\" part=\"fallback\" name=\"user\" size=\"50%\"></ore-icon>`\n : ''}\n </span>\n ${() =>\n props.status.value\n ? html`<span class=\"status\" part=\"status\" :data-status=\"${props.status}\" aria-hidden=\"true\"></span>`\n : ''}\n `;\n },\n styles: [\n colorThemeMixin,\n roundedVariantMixin,\n sizeVariantMixin({\n lg: { fontSize: 'var(--avatar-font-size, var(--text-base))', size: 'var(--avatar-size, var(--size-14))' },\n md: { fontSize: 'var(--avatar-font-size, var(--text-sm))', size: 'var(--avatar-size, var(--size-10))' },\n sm: { fontSize: 'var(--avatar-font-size, var(--text-xs))', size: 'var(--avatar-size, var(--size-7))' },\n }),\n componentStyles,\n ],\n});\n\n// ============================================\n// AvatarGroup\n// ============================================\n\n/** AvatarGroup component properties */\nexport type OreAvatarGroupProps = {\n /** Maximum number of avatars to show before showing a +N badge */\n max?: number;\n /** Total count shown in the overflow badge (defaults to the actual hidden count) */\n total?: number;\n};\n\n/**\n * Groups multiple `ore-avatar` elements in a stacked, overlapping row.\n *\n * @element ore-avatar-group\n *\n * @attr {number} max - Max visible avatars before overflow badge (default: 5)\n * @attr {number} total - Override the total count displayed in the badge\n *\n * @slot - `ore-avatar` elements\n *\n * @cssprop --avatar-group-overlap - Negative margin creating the overlap (default: -0.75rem)\n *\n * @part overflow - Overflow count badge shown when avatars exceed `max`.\n *\n * @example\n * ```html\n * <ore-avatar-group max=\"3\">\n * <ore-avatar src=\"/a.jpg\" alt=\"Alice\"></ore-avatar>\n * <ore-avatar src=\"/b.jpg\" alt=\"Bob\"></ore-avatar>\n * <ore-avatar src=\"/c.jpg\" alt=\"Carol\"></ore-avatar>\n * <ore-avatar src=\"/d.jpg\" alt=\"Dave\"></ore-avatar>\n * </ore-avatar-group>\n * ```\n */\nexport const AVATAR_GROUP_TAG = 'ore-avatar-group' as const;\ndefine<OreAvatarGroupProps>(AVATAR_GROUP_TAG, {\n props: {\n max: prop.number(5),\n total: prop.number(),\n },\n setup(props, { el, slots, watch }) {\n const overflowCount = signal(0);\n\n const updateVisibility = () => {\n const avatars = [...el.querySelectorAll('ore-avatar')];\n const max = Number(props.max.value) || 5;\n const hidden = Math.max(0, avatars.length - max);\n\n overflowCount.value = props.total.value != null ? Number(props.total.value) - max : hidden;\n avatars.forEach((a, i) => {\n if (i >= max) a.setAttribute('data-avatar-group-hidden', '');\n else a.removeAttribute('data-avatar-group-hidden');\n });\n };\n\n watch(() => {\n void slots.elements().value;\n updateVisibility();\n });\n\n const overflowLabel = () => `+${overflowCount.value} more`;\n const overflowText = () => `+${overflowCount.value}`;\n\n return html`\n <slot></slot>\n ${() =>\n overflowCount.value > 0\n ? html`<span class=\"overflow-badge\" part=\"overflow\" aria-label=\"${overflowLabel}\"> ${overflowText} </span>`\n : ''}\n `;\n },\n styles: [groupStyles],\n});\n"],"mappings":"iXAaA,IAAM,EAA8C,CAClD,KAAM,OACN,KAAM,OACN,QAAS,UACT,OAAQ,QACV,EA0Da,EAAa,0BACH,EAAY,CACjC,MAAO,CACL,GAAG,EAAA,eACH,GAAG,EAAA,cACH,GAAG,EAAA,gBACH,IAAK,EAAA,KAAK,OAAO,EACjB,SAAU,EAAA,KAAK,OAAO,EACtB,IAAK,EAAA,KAAK,OAAO,EACjB,OAAQ,EAAA,KAAK,OAAqB,CACpC,EACA,MAAM,EAAO,CACX,IAAM,GAAA,EAAA,EAAA,OAAA,CAAmB,EAAK,GAG9B,EAAA,EAAA,MAAA,CAAM,EAAM,QAAW,CACrB,EAAU,MAAQ,EACpB,CAAC,EAGD,IAAM,EAAsB,GAAgC,CACrD,IAEL,EAAG,iBAAiB,YAAe,CACjC,EAAU,MAAQ,EACpB,CAAC,EACD,EAAG,iBAAiB,WAAc,CAChC,EAAU,MAAQ,EACpB,CAAC,EACH,EACM,GAAA,EAAA,EAAA,SAAA,KAAiC,CACrC,GAAI,EAAM,SAAS,MAAO,OAAO,EAAM,SAAS,MAAM,MAAM,EAAG,CAAC,EAEhE,IAAM,EAAM,EAAM,IAAI,MAEtB,GAAI,CAAC,EAAK,MAAO,GAEjB,IAAM,EAAQ,EAAI,KAAK,CAAC,CAAC,MAAM,KAAK,EAIpC,OAFI,EAAM,QAAU,GAAW,EAAM,EAAE,CAAC,GAAK,EAAM,EAAM,OAAS,EAAE,CAAC,GAAA,CAAI,YAAY,EAE9E,EAAM,EAAE,CAAC,MAAM,EAAG,CAAC,CAAC,CAAC,YAAY,CAC1C,CAAC,EACK,GAAA,EAAA,EAAA,SAAA,KAA2B,CAAC,CAAC,EAAM,IAAI,OAAS,CAAC,EAAU,KAAK,EAChE,GAAA,EAAA,EAAA,SAAA,KAA8B,CAAC,EAAU,OAAS,CAAC,CAAC,EAAgB,KAAK,EACzE,GAAA,EAAA,EAAA,SAAA,KAA8B,CAAC,EAAU,OAAS,CAAC,EAAa,KAAK,EACrE,MAAoB,CACxB,IAAM,EAAQ,EAAM,IAAI,OAAgC,KAClD,EAAY,EAAM,OAAO,MACzB,EAAS,EAAY,EAAc,GAAa,KAQtD,MANI,CAAC,GAAQ,CAAC,EAAe,KAExB,EAEA,EAEE,GAAG,EAAK,IAAI,IAFC,EAFF,WAAW,GAK/B,EAGA,MAAO,GAAA,IAAI;wDACyC,EAAY,eAHtC,EAAY,EAAI,MAAQ,KAGoC;cAEhF,EAAM,IAAI,MACN,EAAA,IAAI;uBACK,EAAmB;;wBAElB,EAAM,IAAI;wBACV,EAAM,IAAI;+BACD,CAAC,EAAU,MAAM;uCAEpC,GAAG;cAEP,EAAa,MACT,EAAA,IAAI,6DAA6D,EAAgB,SACjF,GAAG;cAEP,EAAa,MACT,EAAA,IAAI,qFACJ,GAAG;;YAGT,EAAM,OAAO,MACT,EAAA,IAAI,oDAAoD,EAAM,OAAO,8BACrE,GAAG;KAEb,EACA,OAAQ,CACN,EAAA,gBACA,EAAA,oBACA,EAAA,iBAAiB,CACf,GAAI,CAAE,SAAU,4CAA6C,KAAM,oCAAqC,EACxG,GAAI,CAAE,SAAU,0CAA2C,KAAM,oCAAqC,EACtG,GAAI,CAAE,SAAU,0CAA2C,KAAM,mCAAoC,CACvG,CAAC,EACD,EAAA,OACF,CACF,CAAC,EAsCD,IAAa,EAAmB,gCACJ,EAAkB,CAC5C,MAAO,CACL,IAAK,EAAA,KAAK,OAAO,CAAC,EAClB,MAAO,EAAA,KAAK,OAAO,CACrB,EACA,MAAM,EAAO,CAAE,KAAI,QAAO,SAAS,CACjC,IAAM,GAAA,EAAA,EAAA,OAAA,CAAuB,CAAC,EAExB,MAAyB,CAC7B,IAAM,EAAU,CAAC,GAAG,EAAG,iBAAiB,YAAY,CAAC,EAC/C,EAAM,OAAO,EAAM,IAAI,KAAK,GAAK,EACjC,EAAS,KAAK,IAAI,EAAG,EAAQ,OAAS,CAAG,EAE/C,EAAc,MAAQ,EAAM,MAAM,OAAS,KAAyC,EAAlC,OAAO,EAAM,MAAM,KAAK,EAAI,EAC9E,EAAQ,SAAS,EAAG,IAAM,CACpB,GAAK,EAAK,EAAE,aAAa,2BAA4B,EAAE,EACtD,EAAE,gBAAgB,0BAA0B,CACnD,CAAC,CACH,EAEA,MAAY,CACV,EAAW,SAAS,CAAC,CAAC,MACtB,EAAiB,CACnB,CAAC,EAED,IAAM,MAAsB,IAAI,EAAc,MAAM,OAC9C,MAAqB,IAAI,EAAc,QAE7C,MAAO,GAAA,IAAI;;YAGP,EAAc,MAAQ,EAClB,EAAA,IAAI,4DAA4D,EAAc,KAAK,EAAa,UAChG,GAAG;KAEb,EACA,OAAQ,CAAC,EAAA,OAAW,CACtB,CAAC"}
|
package/dist/avatar.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { roundedVariantMixin as e, sizeVariantMixin as t } from "./styles/mixins/shape.css.js";
|
|
2
|
+
import { colorThemeMixin as n } from "./styles/mixins/theme.css.js";
|
|
3
|
+
import { roundableBundle as r, sizableBundle as i, themableBundle as a } from "./shared/prop-bundles.js";
|
|
4
|
+
import o from "./content/avatar/avatar-group.css?inline.js";
|
|
5
|
+
import s from "./content/avatar/avatar.css?inline.js";
|
|
6
|
+
import { define as c, html as l, prop as u } from "@vielzeug/ore";
|
|
7
|
+
import { computed as d, signal as f, watch as p } from "@vielzeug/ripple";
|
|
8
|
+
//#region src/content/avatar/avatar.ts
|
|
9
|
+
var m = {
|
|
10
|
+
away: "Away",
|
|
11
|
+
busy: "Busy",
|
|
12
|
+
offline: "Offline",
|
|
13
|
+
online: "Online"
|
|
14
|
+
}, h = "ore-avatar";
|
|
15
|
+
c(h, {
|
|
16
|
+
props: {
|
|
17
|
+
...a,
|
|
18
|
+
...i,
|
|
19
|
+
...r,
|
|
20
|
+
alt: u.string(),
|
|
21
|
+
initials: u.string(),
|
|
22
|
+
src: u.string(),
|
|
23
|
+
status: u.string()
|
|
24
|
+
},
|
|
25
|
+
setup(e) {
|
|
26
|
+
let t = f(!1);
|
|
27
|
+
p(e.src, () => {
|
|
28
|
+
t.value = !1;
|
|
29
|
+
});
|
|
30
|
+
let n = (e) => {
|
|
31
|
+
e && (e.addEventListener("error", () => {
|
|
32
|
+
t.value = !0;
|
|
33
|
+
}), e.addEventListener("load", () => {
|
|
34
|
+
t.value = !1;
|
|
35
|
+
}));
|
|
36
|
+
}, r = d(() => {
|
|
37
|
+
if (e.initials.value) return e.initials.value.slice(0, 2);
|
|
38
|
+
let t = e.alt.value;
|
|
39
|
+
if (!t) return "";
|
|
40
|
+
let n = t.trim().split(/\s+/);
|
|
41
|
+
return n.length >= 2 ? (n[0][0] + n[n.length - 1][0]).toUpperCase() : n[0].slice(0, 2).toUpperCase();
|
|
42
|
+
}), i = d(() => !!e.src.value && !t.value), a = d(() => !i.value && !!r.value), o = d(() => !i.value && !a.value), s = () => {
|
|
43
|
+
let t = e.alt.value || null, n = e.status.value, r = n ? m[n] : null;
|
|
44
|
+
return !t && !r ? null : t ? r ? `${t}, ${r}` : t : `Status: ${r}`;
|
|
45
|
+
};
|
|
46
|
+
return l`
|
|
47
|
+
<span class="avatar" part="avatar" :aria-label="${s}" :role="${() => s() ? "img" : null}">
|
|
48
|
+
${() => e.src.value ? l`<img
|
|
49
|
+
ref="${n}"
|
|
50
|
+
part="img"
|
|
51
|
+
:src="${e.src}"
|
|
52
|
+
:alt="${e.alt}"
|
|
53
|
+
?hidden="${() => !i.value}"
|
|
54
|
+
aria-hidden="true" />` : ""}
|
|
55
|
+
${() => a.value ? l`<span class="initials" part="initials" aria-hidden="true">${r}</span>` : ""}
|
|
56
|
+
${() => o.value ? l`<ore-icon class="icon-fallback" part="fallback" name="user" size="50%"></ore-icon>` : ""}
|
|
57
|
+
</span>
|
|
58
|
+
${() => e.status.value ? l`<span class="status" part="status" :data-status="${e.status}" aria-hidden="true"></span>` : ""}
|
|
59
|
+
`;
|
|
60
|
+
},
|
|
61
|
+
styles: [
|
|
62
|
+
n,
|
|
63
|
+
e,
|
|
64
|
+
t({
|
|
65
|
+
lg: {
|
|
66
|
+
fontSize: "var(--avatar-font-size, var(--text-base))",
|
|
67
|
+
size: "var(--avatar-size, var(--size-14))"
|
|
68
|
+
},
|
|
69
|
+
md: {
|
|
70
|
+
fontSize: "var(--avatar-font-size, var(--text-sm))",
|
|
71
|
+
size: "var(--avatar-size, var(--size-10))"
|
|
72
|
+
},
|
|
73
|
+
sm: {
|
|
74
|
+
fontSize: "var(--avatar-font-size, var(--text-xs))",
|
|
75
|
+
size: "var(--avatar-size, var(--size-7))"
|
|
76
|
+
}
|
|
77
|
+
}),
|
|
78
|
+
s
|
|
79
|
+
]
|
|
80
|
+
});
|
|
81
|
+
var g = "ore-avatar-group";
|
|
82
|
+
c(g, {
|
|
83
|
+
props: {
|
|
84
|
+
max: u.number(5),
|
|
85
|
+
total: u.number()
|
|
86
|
+
},
|
|
87
|
+
setup(e, { el: t, slots: n, watch: r }) {
|
|
88
|
+
let i = f(0), a = () => {
|
|
89
|
+
let n = [...t.querySelectorAll("ore-avatar")], r = Number(e.max.value) || 5, a = Math.max(0, n.length - r);
|
|
90
|
+
i.value = e.total.value == null ? a : Number(e.total.value) - r, n.forEach((e, t) => {
|
|
91
|
+
t >= r ? e.setAttribute("data-avatar-group-hidden", "") : e.removeAttribute("data-avatar-group-hidden");
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
r(() => {
|
|
95
|
+
n.elements().value, a();
|
|
96
|
+
});
|
|
97
|
+
let o = () => `+${i.value} more`, s = () => `+${i.value}`;
|
|
98
|
+
return l`
|
|
99
|
+
<slot></slot>
|
|
100
|
+
${() => i.value > 0 ? l`<span class="overflow-badge" part="overflow" aria-label="${o}"> ${s} </span>` : ""}
|
|
101
|
+
`;
|
|
102
|
+
},
|
|
103
|
+
styles: [o]
|
|
104
|
+
});
|
|
105
|
+
//#endregion
|
|
106
|
+
export { g as AVATAR_GROUP_TAG, h as AVATAR_TAG };
|
|
107
|
+
|
|
108
|
+
//# sourceMappingURL=avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.js","names":[],"sources":["../src/content/avatar/avatar.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { computed, signal, watch } from '@vielzeug/ripple';\n\nimport type { ComponentSize, RoundedSize, ThemeColor } from '../../types';\n\nimport '../icon/icon';\nimport { roundableBundle, sizableBundle, themableBundle } from '../../shared';\nimport { colorThemeMixin, roundedVariantMixin, sizeVariantMixin } from '../../styles';\nimport groupStyles from './avatar-group.css?inline';\nimport componentStyles from './avatar.css?inline';\n\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\nconst STATUS_LABELS: Record<AvatarStatus, string> = {\n away: 'Away',\n busy: 'Busy',\n offline: 'Offline',\n online: 'Online',\n};\n\n/** Avatar component properties */\nexport type OreAvatarProps = {\n /** Alt text for the image; also used to derive initials when no `initials` prop is given */\n alt?: string;\n /** Theme color (used for initials background) */\n color?: ThemeColor;\n /** Explicit initials to display when no image is available (e.g. \"JD\") */\n initials?: string;\n /** Border radius */\n rounded?: RoundedSize | '';\n /** Component size */\n size?: ComponentSize;\n /** Image source URL */\n src?: string;\n /** Online presence indicator */\n status?: AvatarStatus;\n};\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Displays a user avatar: image → initials → generic fallback icon, in that priority order.\n *\n * @element ore-avatar\n *\n * @attr {string} src - Image source URL\n * @attr {string} alt - Image alt text (also used to derive initials)\n * @attr {string} initials - Explicit initials (up to 2 chars)\n * @attr {string} color - Theme color for initials background: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} size - 'sm' | 'md' | 'lg'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {string} status - 'online' | 'offline' | 'busy' | 'away'\n *\n * @slot - Fallback content shown when image and initials are unavailable.\n * @cssprop --avatar-size - Diameter of the avatar\n * @cssprop --avatar-bg - Background color\n * @cssprop --avatar-color - Text/icon color\n * @cssprop --avatar-radius - Border radius\n * @cssprop --avatar-border - Border shorthand\n * @cssprop --avatar-border-color - Border color (also controls status dot border)\n *\n * @part avatar - Avatar root container.\n * @part img - Image element.\n * @part initials - Initials fallback element.\n * @part fallback - Shadow part for the `fallback` element.\n * @part status - Status indicator element.\n * @part overflow - Overflow indicator element.\n * @example\n * ```html\n * <ore-avatar src=\"/jane.jpg\" alt=\"Jane Doe\"></ore-avatar>\n * <ore-avatar initials=\"JD\" color=\"primary\"></ore-avatar>\n * <ore-avatar alt=\"John Smith\" status=\"online\"></ore-avatar>\n * ```\n */\nexport const AVATAR_TAG = 'ore-avatar' as const;\ndefine<OreAvatarProps>(AVATAR_TAG, {\n props: {\n ...themableBundle,\n ...sizableBundle,\n ...roundableBundle,\n alt: prop.string(),\n initials: prop.string(),\n src: prop.string(),\n status: prop.string<AvatarStatus>(),\n },\n setup(props) {\n const imgFailed = signal(false);\n\n // Reset stale error state whenever src changes\n watch(props.src, () => {\n imgFailed.value = false;\n });\n\n // Attach load/error listeners reactively when the img element mounts\n const attachImgListeners = (el: HTMLImageElement | null) => {\n if (!el) return;\n\n el.addEventListener('error', () => {\n imgFailed.value = true;\n });\n el.addEventListener('load', () => {\n imgFailed.value = false;\n });\n };\n const derivedInitials = computed(() => {\n if (props.initials.value) return props.initials.value.slice(0, 2);\n\n const alt = props.alt.value;\n\n if (!alt) return '';\n\n const parts = alt.trim().split(/\\s+/);\n\n if (parts.length >= 2) return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n\n return parts[0].slice(0, 2).toUpperCase();\n });\n const showImage = computed(() => !!props.src.value && !imgFailed.value);\n const showInitials = computed(() => !showImage.value && !!derivedInitials.value);\n const showFallback = computed(() => !showImage.value && !showInitials.value);\n const avatarLabel = () => {\n const name = (props.alt.value as string | undefined) || null;\n const statusKey = props.status.value as AvatarStatus | undefined;\n const status = statusKey ? STATUS_LABELS[statusKey] : null;\n\n if (!name && !status) return null;\n\n if (!name) return `Status: ${status}`;\n\n if (!status) return name;\n\n return `${name}, ${status}`;\n };\n const avatarRole = () => (avatarLabel() ? 'img' : null);\n\n return html`\n <span class=\"avatar\" part=\"avatar\" :aria-label=\"${avatarLabel}\" :role=\"${avatarRole}\">\n ${() =>\n props.src.value\n ? html`<img\n ref=\"${attachImgListeners}\"\n part=\"img\"\n :src=\"${props.src}\"\n :alt=\"${props.alt}\"\n ?hidden=\"${() => !showImage.value}\"\n aria-hidden=\"true\" />`\n : ''}\n ${() =>\n showInitials.value\n ? html`<span class=\"initials\" part=\"initials\" aria-hidden=\"true\">${derivedInitials}</span>`\n : ''}\n ${() =>\n showFallback.value\n ? html`<ore-icon class=\"icon-fallback\" part=\"fallback\" name=\"user\" size=\"50%\"></ore-icon>`\n : ''}\n </span>\n ${() =>\n props.status.value\n ? html`<span class=\"status\" part=\"status\" :data-status=\"${props.status}\" aria-hidden=\"true\"></span>`\n : ''}\n `;\n },\n styles: [\n colorThemeMixin,\n roundedVariantMixin,\n sizeVariantMixin({\n lg: { fontSize: 'var(--avatar-font-size, var(--text-base))', size: 'var(--avatar-size, var(--size-14))' },\n md: { fontSize: 'var(--avatar-font-size, var(--text-sm))', size: 'var(--avatar-size, var(--size-10))' },\n sm: { fontSize: 'var(--avatar-font-size, var(--text-xs))', size: 'var(--avatar-size, var(--size-7))' },\n }),\n componentStyles,\n ],\n});\n\n// ============================================\n// AvatarGroup\n// ============================================\n\n/** AvatarGroup component properties */\nexport type OreAvatarGroupProps = {\n /** Maximum number of avatars to show before showing a +N badge */\n max?: number;\n /** Total count shown in the overflow badge (defaults to the actual hidden count) */\n total?: number;\n};\n\n/**\n * Groups multiple `ore-avatar` elements in a stacked, overlapping row.\n *\n * @element ore-avatar-group\n *\n * @attr {number} max - Max visible avatars before overflow badge (default: 5)\n * @attr {number} total - Override the total count displayed in the badge\n *\n * @slot - `ore-avatar` elements\n *\n * @cssprop --avatar-group-overlap - Negative margin creating the overlap (default: -0.75rem)\n *\n * @part overflow - Overflow count badge shown when avatars exceed `max`.\n *\n * @example\n * ```html\n * <ore-avatar-group max=\"3\">\n * <ore-avatar src=\"/a.jpg\" alt=\"Alice\"></ore-avatar>\n * <ore-avatar src=\"/b.jpg\" alt=\"Bob\"></ore-avatar>\n * <ore-avatar src=\"/c.jpg\" alt=\"Carol\"></ore-avatar>\n * <ore-avatar src=\"/d.jpg\" alt=\"Dave\"></ore-avatar>\n * </ore-avatar-group>\n * ```\n */\nexport const AVATAR_GROUP_TAG = 'ore-avatar-group' as const;\ndefine<OreAvatarGroupProps>(AVATAR_GROUP_TAG, {\n props: {\n max: prop.number(5),\n total: prop.number(),\n },\n setup(props, { el, slots, watch }) {\n const overflowCount = signal(0);\n\n const updateVisibility = () => {\n const avatars = [...el.querySelectorAll('ore-avatar')];\n const max = Number(props.max.value) || 5;\n const hidden = Math.max(0, avatars.length - max);\n\n overflowCount.value = props.total.value != null ? Number(props.total.value) - max : hidden;\n avatars.forEach((a, i) => {\n if (i >= max) a.setAttribute('data-avatar-group-hidden', '');\n else a.removeAttribute('data-avatar-group-hidden');\n });\n };\n\n watch(() => {\n void slots.elements().value;\n updateVisibility();\n });\n\n const overflowLabel = () => `+${overflowCount.value} more`;\n const overflowText = () => `+${overflowCount.value}`;\n\n return html`\n <slot></slot>\n ${() =>\n overflowCount.value > 0\n ? html`<span class=\"overflow-badge\" part=\"overflow\" aria-label=\"${overflowLabel}\"> ${overflowText} </span>`\n : ''}\n `;\n },\n styles: [groupStyles],\n});\n"],"mappings":";;;;;;;;AAaA,IAAM,IAA8C;CAClD,MAAM;CACN,MAAM;CACN,SAAS;CACT,QAAQ;AACV,GA0Da,IAAa;AAC1B,EAAuB,GAAY;CACjC,OAAO;EACL,GAAG;EACH,GAAG;EACH,GAAG;EACH,KAAK,EAAK,OAAO;EACjB,UAAU,EAAK,OAAO;EACtB,KAAK,EAAK,OAAO;EACjB,QAAQ,EAAK,OAAqB;CACpC;CACA,MAAM,GAAO;EACX,IAAM,IAAY,EAAO,EAAK;EAG9B,EAAM,EAAM,WAAW;GACrB,EAAU,QAAQ;EACpB,CAAC;EAGD,IAAM,KAAsB,MAAgC;GACrD,MAEL,EAAG,iBAAiB,eAAe;IACjC,EAAU,QAAQ;GACpB,CAAC,GACD,EAAG,iBAAiB,cAAc;IAChC,EAAU,QAAQ;GACpB,CAAC;EACH,GACM,IAAkB,QAAe;GACrC,IAAI,EAAM,SAAS,OAAO,OAAO,EAAM,SAAS,MAAM,MAAM,GAAG,CAAC;GAEhE,IAAM,IAAM,EAAM,IAAI;GAEtB,IAAI,CAAC,GAAK,OAAO;GAEjB,IAAM,IAAQ,EAAI,KAAK,CAAC,CAAC,MAAM,KAAK;GAIpC,OAFI,EAAM,UAAU,KAAW,EAAM,EAAE,CAAC,KAAK,EAAM,EAAM,SAAS,EAAE,CAAC,GAAA,CAAI,YAAY,IAE9E,EAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,YAAY;EAC1C,CAAC,GACK,IAAY,QAAe,CAAC,CAAC,EAAM,IAAI,SAAS,CAAC,EAAU,KAAK,GAChE,IAAe,QAAe,CAAC,EAAU,SAAS,CAAC,CAAC,EAAgB,KAAK,GACzE,IAAe,QAAe,CAAC,EAAU,SAAS,CAAC,EAAa,KAAK,GACrE,UAAoB;GACxB,IAAM,IAAQ,EAAM,IAAI,SAAgC,MAClD,IAAY,EAAM,OAAO,OACzB,IAAS,IAAY,EAAc,KAAa;GAQtD,OANI,CAAC,KAAQ,CAAC,IAAe,OAExB,IAEA,IAEE,GAAG,EAAK,IAAI,MAFC,IAFF,WAAW;EAK/B;EAGA,OAAO,CAAI;wDACyC,EAAY,iBAHtC,EAAY,IAAI,QAAQ,KAGoC;gBAEhF,EAAM,IAAI,QACN,CAAI;uBACK,EAAmB;;wBAElB,EAAM,IAAI;wBACV,EAAM,IAAI;iCACD,CAAC,EAAU,MAAM;yCAEpC,GAAG;gBAEP,EAAa,QACT,CAAI,6DAA6D,EAAgB,WACjF,GAAG;gBAEP,EAAa,QACT,CAAI,uFACJ,GAAG;;cAGT,EAAM,OAAO,QACT,CAAI,oDAAoD,EAAM,OAAO,gCACrE,GAAG;;CAEb;CACA,QAAQ;EACN;EACA;EACA,EAAiB;GACf,IAAI;IAAE,UAAU;IAA6C,MAAM;GAAqC;GACxG,IAAI;IAAE,UAAU;IAA2C,MAAM;GAAqC;GACtG,IAAI;IAAE,UAAU;IAA2C,MAAM;GAAoC;EACvG,CAAC;EACD;CACF;AACF,CAAC;AAsCD,IAAa,IAAmB;AAChC,EAA4B,GAAkB;CAC5C,OAAO;EACL,KAAK,EAAK,OAAO,CAAC;EAClB,OAAO,EAAK,OAAO;CACrB;CACA,MAAM,GAAO,EAAE,OAAI,UAAO,YAAS;EACjC,IAAM,IAAgB,EAAO,CAAC,GAExB,UAAyB;GAC7B,IAAM,IAAU,CAAC,GAAG,EAAG,iBAAiB,YAAY,CAAC,GAC/C,IAAM,OAAO,EAAM,IAAI,KAAK,KAAK,GACjC,IAAS,KAAK,IAAI,GAAG,EAAQ,SAAS,CAAG;GAG/C,AADA,EAAc,QAAQ,EAAM,MAAM,SAAS,OAAyC,IAAlC,OAAO,EAAM,MAAM,KAAK,IAAI,GAC9E,EAAQ,SAAS,GAAG,MAAM;IACxB,AAAI,KAAK,IAAK,EAAE,aAAa,4BAA4B,EAAE,IACtD,EAAE,gBAAgB,0BAA0B;GACnD,CAAC;EACH;EAEA,QAAY;GAEV,AADA,EAAW,SAAS,CAAC,CAAC,OACtB,EAAiB;EACnB,CAAC;EAED,IAAM,UAAsB,IAAI,EAAc,MAAM,QAC9C,UAAqB,IAAI,EAAc;EAE7C,OAAO,CAAI;;cAGP,EAAc,QAAQ,IAClB,CAAI,4DAA4D,EAAc,KAAK,EAAa,YAChG,GAAG;;CAEb;CACA,QAAQ,CAAC,CAAW;AACtB,CAAC"}
|
package/dist/badge.cjs
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/shape.css.cjs"),t=require("./styles/mixins/theme.css.cjs"),n=require("./styles/mixins/variants.css.cjs"),r=require("./shared/prop-bundles.cjs"),i=require("./feedback/badge/badge.css?inline.cjs");let a=require("@vielzeug/ore"),o=require("@vielzeug/ripple");var s=`ore-badge`;(0,a.define)(s,{props:{...r.themableBundle,size:a.prop.string(),...r.roundableBundle,anchor:a.prop.string(),count:a.prop.number(),dot:a.prop.bool(!1),label:a.prop.string(),max:a.prop.number(),variant:a.prop.string()},setup(e){let t=(0,o.computed)(()=>{let t=e.count.value==null?void 0:Number(e.count.value),n=e.max.value==null?void 0:Number(e.max.value);if(!(t===void 0||Number.isNaN(t)))return n!==void 0&&!Number.isNaN(n)&&t>n?`${n}+`:String(t)});return a.html`<span class="badge" part="badge" :aria-label="${(0,o.computed)(()=>{if(e.label.value)return e.label.value;if(!e.dot.value&&t.value!=null)return`${t.value} notifications`})}">
|
|
2
|
+
<slot name="icon"></slot>
|
|
3
|
+
<span ?hidden="${()=>t.value==null}">${t}</span>
|
|
4
|
+
<span class="badge-label" ?hidden="${()=>t.value!=null}"><slot></slot></span>
|
|
5
|
+
</span>
|
|
6
|
+
<slot name="target"></slot>`},styles:[t.colorThemeMixin,t.forcedColorsMixin,e.roundedVariantMixin,n.frostVariantMixin(`.badge`),e.sizeVariantMixin({lg:{"--_padding-x":`var(--size-2-5)`,"--_padding-y":`var(--size-1)`,fontSize:`var(--text-sm)`},md:{"--_padding-x":`var(--size-2)`,"--_padding-y":`var(--size-0-5)`,fontSize:`var(--text-xs)`},sm:{"--_padding-x":`var(--size-1-5)`,"--_padding-y":`var(--size-px)`,fontSize:`var(--text-xs)`}}),i.default]}),exports.BADGE_TAG=s;
|
|
7
|
+
//# sourceMappingURL=badge.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.cjs","names":[],"sources":["../src/feedback/badge/badge.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { computed } from '@vielzeug/ripple';\n\nimport type { RoundedSize, ThemeColor, VisualVariant } from '../../types';\n\nimport { roundableBundle, themableBundle } from '../../shared';\nimport {\n colorThemeMixin,\n forcedColorsMixin,\n frostVariantMixin,\n roundedVariantMixin,\n sizeVariantMixin,\n} from '../../styles';\nimport componentStyles from './badge.css?inline';\n\ntype BadgeVariant = Extract<VisualVariant, 'solid' | 'flat' | 'bordered' | 'outline' | 'frost'>;\ntype BadgeSize = 'xs' | 'sm' | 'md' | 'lg';\n\n/** Badge component properties */\nexport type OreBadgeProps = {\n /**\n * When set, switches to overlay mode: the host becomes `position:relative`\n * and the badge pins to a corner over the slotted content.\n * Value controls which corner: 'top-end' (default) | 'top-start' | 'bottom-end' | 'bottom-start'\n */\n anchor?: 'top-end' | 'top-start' | 'bottom-end' | 'bottom-start';\n /** Theme color */\n color?: ThemeColor;\n /** Numeric count to display */\n count?: number;\n /** Render as a small dot with no label */\n dot?: boolean;\n /** Accessible label for assistive technology. Recommended for count-only and dot mode. */\n label?: string;\n /** Max count — displays \"<max>+\" when count exceeds this value */\n max?: number;\n /** Border radius override */\n rounded?: RoundedSize;\n /** Badge size */\n size?: BadgeSize;\n /** Visual style variant */\n variant?: BadgeVariant;\n};\n\n/**\n * A compact badge/chip for counts, statuses, and labels.\n * Supports numeric counts with overflow, dot mode, and icon slots.\n *\n * @element ore-badge\n *\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'outline' | 'frost'\n * @attr {string} size - Component size: 'xs' | 'sm' | 'md' | 'lg'\n * @attr {number} count - Numeric count to display\n * @attr {number} max - Max count before showing \"<max>+\"\n * @attr {boolean} dot - Render as a dot indicator (no text)\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'full' etc.\n *\n * @slot - Badge label text\n * @slot icon - Icon displayed before the label\n * @slot target - Element the badge is anchored to (used with the anchor attribute)\n *\n * @cssprop --badge-bg - Badge background color\n * @cssprop --badge-color - Badge text color\n * @cssprop --badge-border-color - Badge border color\n * @cssprop --badge-radius - Border radius\n * @cssprop --badge-font-size - Font size\n * @cssprop --badge-font-weight - Font weight\n * @cssprop --badge-padding-x - Horizontal padding\n * @cssprop --badge-padding-y - Vertical padding\n * @cssprop --badge-gap - Gap between icon and label\n *\n * @part badge - Shadow part for the `badge` element.\n * @example\n * ```html\n * <ore-badge color=\"primary\">New</ore-badge>\n * <ore-badge color=\"error\" count=\"5\"></ore-badge>\n * <ore-badge color=\"error\" count=\"120\" max=\"99\"></ore-badge>\n * <ore-badge color=\"success\" dot></ore-badge>\n * <ore-badge color=\"warning\" variant=\"flat\">Beta</ore-badge>\n * ```\n */\nexport const BADGE_TAG = 'ore-badge' as const;\ndefine<OreBadgeProps>(BADGE_TAG, {\n props: {\n ...themableBundle,\n size: prop.string<BadgeSize>(),\n ...roundableBundle,\n anchor: prop.string<'top-end' | 'top-start' | 'bottom-end' | 'bottom-start'>(),\n count: prop.number(),\n dot: prop.bool(false),\n label: prop.string(),\n max: prop.number(),\n variant: prop.string<BadgeVariant>(),\n },\n setup(props) {\n const label = computed(() => {\n const count = props.count.value != null ? Number(props.count.value) : undefined;\n const max = props.max.value != null ? Number(props.max.value) : undefined;\n\n if (count === undefined || Number.isNaN(count)) return undefined;\n\n if (max !== undefined && !Number.isNaN(max) && count > max) return `${max}+`;\n\n return String(count);\n });\n\n const ariaLabel = computed(() => {\n if (props.label.value) return props.label.value;\n\n if (props.dot.value) return undefined;\n\n if (label.value != null) return `${label.value} notifications`;\n\n return undefined;\n });\n\n return html`<span class=\"badge\" part=\"badge\" :aria-label=\"${ariaLabel}\">\n <slot name=\"icon\"></slot>\n <span ?hidden=\"${() => label.value == null}\">${label}</span>\n <span class=\"badge-label\" ?hidden=\"${() => label.value != null}\"><slot></slot></span>\n </span>\n <slot name=\"target\"></slot>`;\n },\n styles: [\n colorThemeMixin,\n forcedColorsMixin,\n roundedVariantMixin,\n frostVariantMixin('.badge'),\n sizeVariantMixin({\n lg: { '--_padding-x': 'var(--size-2-5)', '--_padding-y': 'var(--size-1)', fontSize: 'var(--text-sm)' },\n md: { '--_padding-x': 'var(--size-2)', '--_padding-y': 'var(--size-0-5)', fontSize: 'var(--text-xs)' },\n sm: { '--_padding-x': 'var(--size-1-5)', '--_padding-y': 'var(--size-px)', fontSize: 'var(--text-xs)' },\n }),\n componentStyles,\n ],\n});\n"],"mappings":"oWAkFA,IAAa,EAAY,yBACH,EAAW,CAC/B,MAAO,CACL,GAAG,EAAA,eACH,KAAM,EAAA,KAAK,OAAkB,EAC7B,GAAG,EAAA,gBACH,OAAQ,EAAA,KAAK,OAAgE,EAC7E,MAAO,EAAA,KAAK,OAAO,EACnB,IAAK,EAAA,KAAK,KAAK,EAAK,EACpB,MAAO,EAAA,KAAK,OAAO,EACnB,IAAK,EAAA,KAAK,OAAO,EACjB,QAAS,EAAA,KAAK,OAAqB,CACrC,EACA,MAAM,EAAO,CACX,IAAM,GAAA,EAAA,EAAA,SAAA,KAAuB,CAC3B,IAAM,EAAQ,EAAM,MAAM,OAAS,KAAmC,IAAA,GAA5B,OAAO,EAAM,MAAM,KAAK,EAC5D,EAAM,EAAM,IAAI,OAAS,KAAiC,IAAA,GAA1B,OAAO,EAAM,IAAI,KAAK,EAExD,SAAU,IAAA,IAAa,OAAO,MAAM,CAAK,GAI7C,OAFI,IAAQ,IAAA,IAAa,CAAC,OAAO,MAAM,CAAG,GAAK,EAAQ,EAAY,GAAG,EAAI,GAEnE,OAAO,CAAK,CACrB,CAAC,EAYD,MAAO,GAAA,IAAI,kDAAA,EAAA,EAAA,SAAA,KAVsB,CAC/B,GAAI,EAAM,MAAM,MAAO,OAAO,EAAM,MAAM,MAEtC,MAAM,IAAI,OAEV,EAAM,OAAS,KAAM,MAAO,GAAG,EAAM,MAAM,eAGjD,CAE4D,EAAU;;6BAE3C,EAAM,OAAS,KAAK,IAAI,EAAM;iDACV,EAAM,OAAS,KAAK;;kCAGrE,EACA,OAAQ,CACN,EAAA,gBACA,EAAA,kBACA,EAAA,oBACA,EAAA,kBAAkB,QAAQ,EAC1B,EAAA,iBAAiB,CACf,GAAI,CAAE,eAAgB,kBAAmB,eAAgB,gBAAiB,SAAU,gBAAiB,EACrG,GAAI,CAAE,eAAgB,gBAAiB,eAAgB,kBAAmB,SAAU,gBAAiB,EACrG,GAAI,CAAE,eAAgB,kBAAmB,eAAgB,iBAAkB,SAAU,gBAAiB,CACxG,CAAC,EACD,EAAA,OACF,CACF,CAAC"}
|
package/dist/badge.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { roundedVariantMixin as e, sizeVariantMixin as t } from "./styles/mixins/shape.css.js";
|
|
2
|
+
import { colorThemeMixin as n, forcedColorsMixin as r } from "./styles/mixins/theme.css.js";
|
|
3
|
+
import { frostVariantMixin as i } from "./styles/mixins/variants.css.js";
|
|
4
|
+
import { roundableBundle as a, themableBundle as o } from "./shared/prop-bundles.js";
|
|
5
|
+
import s from "./feedback/badge/badge.css?inline.js";
|
|
6
|
+
import { define as c, html as l, prop as u } from "@vielzeug/ore";
|
|
7
|
+
import { computed as d } from "@vielzeug/ripple";
|
|
8
|
+
//#region src/feedback/badge/badge.ts
|
|
9
|
+
var f = "ore-badge";
|
|
10
|
+
c(f, {
|
|
11
|
+
props: {
|
|
12
|
+
...o,
|
|
13
|
+
size: u.string(),
|
|
14
|
+
...a,
|
|
15
|
+
anchor: u.string(),
|
|
16
|
+
count: u.number(),
|
|
17
|
+
dot: u.bool(!1),
|
|
18
|
+
label: u.string(),
|
|
19
|
+
max: u.number(),
|
|
20
|
+
variant: u.string()
|
|
21
|
+
},
|
|
22
|
+
setup(e) {
|
|
23
|
+
let t = d(() => {
|
|
24
|
+
let t = e.count.value == null ? void 0 : Number(e.count.value), n = e.max.value == null ? void 0 : Number(e.max.value);
|
|
25
|
+
if (!(t === void 0 || Number.isNaN(t))) return n !== void 0 && !Number.isNaN(n) && t > n ? `${n}+` : String(t);
|
|
26
|
+
});
|
|
27
|
+
return l`<span class="badge" part="badge" :aria-label="${d(() => {
|
|
28
|
+
if (e.label.value) return e.label.value;
|
|
29
|
+
if (!e.dot.value && t.value != null) return `${t.value} notifications`;
|
|
30
|
+
})}">
|
|
31
|
+
<slot name="icon"></slot>
|
|
32
|
+
<span ?hidden="${() => t.value == null}">${t}</span>
|
|
33
|
+
<span class="badge-label" ?hidden="${() => t.value != null}"><slot></slot></span>
|
|
34
|
+
</span>
|
|
35
|
+
<slot name="target"></slot>`;
|
|
36
|
+
},
|
|
37
|
+
styles: [
|
|
38
|
+
n,
|
|
39
|
+
r,
|
|
40
|
+
e,
|
|
41
|
+
i(".badge"),
|
|
42
|
+
t({
|
|
43
|
+
lg: {
|
|
44
|
+
"--_padding-x": "var(--size-2-5)",
|
|
45
|
+
"--_padding-y": "var(--size-1)",
|
|
46
|
+
fontSize: "var(--text-sm)"
|
|
47
|
+
},
|
|
48
|
+
md: {
|
|
49
|
+
"--_padding-x": "var(--size-2)",
|
|
50
|
+
"--_padding-y": "var(--size-0-5)",
|
|
51
|
+
fontSize: "var(--text-xs)"
|
|
52
|
+
},
|
|
53
|
+
sm: {
|
|
54
|
+
"--_padding-x": "var(--size-1-5)",
|
|
55
|
+
"--_padding-y": "var(--size-px)",
|
|
56
|
+
fontSize: "var(--text-xs)"
|
|
57
|
+
}
|
|
58
|
+
}),
|
|
59
|
+
s
|
|
60
|
+
]
|
|
61
|
+
});
|
|
62
|
+
//#endregion
|
|
63
|
+
export { f as BADGE_TAG };
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.js","names":[],"sources":["../src/feedback/badge/badge.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\nimport { computed } from '@vielzeug/ripple';\n\nimport type { RoundedSize, ThemeColor, VisualVariant } from '../../types';\n\nimport { roundableBundle, themableBundle } from '../../shared';\nimport {\n colorThemeMixin,\n forcedColorsMixin,\n frostVariantMixin,\n roundedVariantMixin,\n sizeVariantMixin,\n} from '../../styles';\nimport componentStyles from './badge.css?inline';\n\ntype BadgeVariant = Extract<VisualVariant, 'solid' | 'flat' | 'bordered' | 'outline' | 'frost'>;\ntype BadgeSize = 'xs' | 'sm' | 'md' | 'lg';\n\n/** Badge component properties */\nexport type OreBadgeProps = {\n /**\n * When set, switches to overlay mode: the host becomes `position:relative`\n * and the badge pins to a corner over the slotted content.\n * Value controls which corner: 'top-end' (default) | 'top-start' | 'bottom-end' | 'bottom-start'\n */\n anchor?: 'top-end' | 'top-start' | 'bottom-end' | 'bottom-start';\n /** Theme color */\n color?: ThemeColor;\n /** Numeric count to display */\n count?: number;\n /** Render as a small dot with no label */\n dot?: boolean;\n /** Accessible label for assistive technology. Recommended for count-only and dot mode. */\n label?: string;\n /** Max count — displays \"<max>+\" when count exceeds this value */\n max?: number;\n /** Border radius override */\n rounded?: RoundedSize;\n /** Badge size */\n size?: BadgeSize;\n /** Visual style variant */\n variant?: BadgeVariant;\n};\n\n/**\n * A compact badge/chip for counts, statuses, and labels.\n * Supports numeric counts with overflow, dot mode, and icon slots.\n *\n * @element ore-badge\n *\n * @attr {string} color - Theme color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} variant - Visual variant: 'solid' | 'flat' | 'bordered' | 'outline' | 'frost'\n * @attr {string} size - Component size: 'xs' | 'sm' | 'md' | 'lg'\n * @attr {number} count - Numeric count to display\n * @attr {number} max - Max count before showing \"<max>+\"\n * @attr {boolean} dot - Render as a dot indicator (no text)\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'full' etc.\n *\n * @slot - Badge label text\n * @slot icon - Icon displayed before the label\n * @slot target - Element the badge is anchored to (used with the anchor attribute)\n *\n * @cssprop --badge-bg - Badge background color\n * @cssprop --badge-color - Badge text color\n * @cssprop --badge-border-color - Badge border color\n * @cssprop --badge-radius - Border radius\n * @cssprop --badge-font-size - Font size\n * @cssprop --badge-font-weight - Font weight\n * @cssprop --badge-padding-x - Horizontal padding\n * @cssprop --badge-padding-y - Vertical padding\n * @cssprop --badge-gap - Gap between icon and label\n *\n * @part badge - Shadow part for the `badge` element.\n * @example\n * ```html\n * <ore-badge color=\"primary\">New</ore-badge>\n * <ore-badge color=\"error\" count=\"5\"></ore-badge>\n * <ore-badge color=\"error\" count=\"120\" max=\"99\"></ore-badge>\n * <ore-badge color=\"success\" dot></ore-badge>\n * <ore-badge color=\"warning\" variant=\"flat\">Beta</ore-badge>\n * ```\n */\nexport const BADGE_TAG = 'ore-badge' as const;\ndefine<OreBadgeProps>(BADGE_TAG, {\n props: {\n ...themableBundle,\n size: prop.string<BadgeSize>(),\n ...roundableBundle,\n anchor: prop.string<'top-end' | 'top-start' | 'bottom-end' | 'bottom-start'>(),\n count: prop.number(),\n dot: prop.bool(false),\n label: prop.string(),\n max: prop.number(),\n variant: prop.string<BadgeVariant>(),\n },\n setup(props) {\n const label = computed(() => {\n const count = props.count.value != null ? Number(props.count.value) : undefined;\n const max = props.max.value != null ? Number(props.max.value) : undefined;\n\n if (count === undefined || Number.isNaN(count)) return undefined;\n\n if (max !== undefined && !Number.isNaN(max) && count > max) return `${max}+`;\n\n return String(count);\n });\n\n const ariaLabel = computed(() => {\n if (props.label.value) return props.label.value;\n\n if (props.dot.value) return undefined;\n\n if (label.value != null) return `${label.value} notifications`;\n\n return undefined;\n });\n\n return html`<span class=\"badge\" part=\"badge\" :aria-label=\"${ariaLabel}\">\n <slot name=\"icon\"></slot>\n <span ?hidden=\"${() => label.value == null}\">${label}</span>\n <span class=\"badge-label\" ?hidden=\"${() => label.value != null}\"><slot></slot></span>\n </span>\n <slot name=\"target\"></slot>`;\n },\n styles: [\n colorThemeMixin,\n forcedColorsMixin,\n roundedVariantMixin,\n frostVariantMixin('.badge'),\n sizeVariantMixin({\n lg: { '--_padding-x': 'var(--size-2-5)', '--_padding-y': 'var(--size-1)', fontSize: 'var(--text-sm)' },\n md: { '--_padding-x': 'var(--size-2)', '--_padding-y': 'var(--size-0-5)', fontSize: 'var(--text-xs)' },\n sm: { '--_padding-x': 'var(--size-1-5)', '--_padding-y': 'var(--size-px)', fontSize: 'var(--text-xs)' },\n }),\n componentStyles,\n ],\n});\n"],"mappings":";;;;;;;;AAkFA,IAAa,IAAY;AACzB,EAAsB,GAAW;CAC/B,OAAO;EACL,GAAG;EACH,MAAM,EAAK,OAAkB;EAC7B,GAAG;EACH,QAAQ,EAAK,OAAgE;EAC7E,OAAO,EAAK,OAAO;EACnB,KAAK,EAAK,KAAK,EAAK;EACpB,OAAO,EAAK,OAAO;EACnB,KAAK,EAAK,OAAO;EACjB,SAAS,EAAK,OAAqB;CACrC;CACA,MAAM,GAAO;EACX,IAAM,IAAQ,QAAe;GAC3B,IAAM,IAAQ,EAAM,MAAM,SAAS,OAAmC,KAAA,IAA5B,OAAO,EAAM,MAAM,KAAK,GAC5D,IAAM,EAAM,IAAI,SAAS,OAAiC,KAAA,IAA1B,OAAO,EAAM,IAAI,KAAK;GAExD,YAAU,KAAA,KAAa,OAAO,MAAM,CAAK,IAI7C,OAFI,MAAQ,KAAA,KAAa,CAAC,OAAO,MAAM,CAAG,KAAK,IAAQ,IAAY,GAAG,EAAI,KAEnE,OAAO,CAAK;EACrB,CAAC;EAYD,OAAO,CAAI,iDAVO,QAAe;GAC/B,IAAI,EAAM,MAAM,OAAO,OAAO,EAAM,MAAM;GAEtC,OAAM,IAAI,SAEV,EAAM,SAAS,MAAM,OAAO,GAAG,EAAM,MAAM;EAGjD,CAE4D,EAAU;;+BAE3C,EAAM,SAAS,KAAK,IAAI,EAAM;mDACV,EAAM,SAAS,KAAK;;;CAGrE;CACA,QAAQ;EACN;EACA;EACA;EACA,EAAkB,QAAQ;EAC1B,EAAiB;GACf,IAAI;IAAE,gBAAgB;IAAmB,gBAAgB;IAAiB,UAAU;GAAiB;GACrG,IAAI;IAAE,gBAAgB;IAAiB,gBAAgB;IAAmB,UAAU;GAAiB;GACrG,IAAI;IAAE,gBAAgB;IAAmB,gBAAgB;IAAkB,UAAU;GAAiB;EACxG,CAAC;EACD;CACF;AACF,CAAC"}
|
package/dist/box.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./styles/mixins/animation.css.cjs"),t=require("./styles/mixins/variants.css.cjs"),n=require("./styles/index.cjs"),r=require("./layout/box/box.css?inline.cjs");let i=require("@vielzeug/ore");var a=`ore-box`;(0,i.define)(a,{props:{color:i.prop.string(),effect:i.prop.string(),elevation:i.prop.number(),fullwidth:i.prop.bool(),padding:i.prop.string(),rounded:i.prop.string(),variant:i.prop.string()},setup(){return i.html`<div class="box" part="box"><slot></slot></div>`},styles:[...n.surfaceMixins,t.frostVariantMixin(`.box`),e.rainbowEffectMixin(`.box`),r.default]}),exports.BOX_TAG=a;
|
|
2
|
+
//# sourceMappingURL=box.cjs.map
|
package/dist/box.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"box.cjs","names":[],"sources":["../src/layout/box/box.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\n\nimport type { ElevationLevel, PaddingSize, RoundedSize, ThemeColor } from '../../types';\n\nimport { frostVariantMixin, rainbowEffectMixin, surfaceMixins } from '../../styles';\nimport componentStyles from './box.css?inline';\n\n/** Box component properties */\nexport type OreBoxProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Animated border effect */\n effect?: 'rainbow';\n /** Shadow elevation level (0–5) */\n elevation?: ElevationLevel;\n /** Full width mode (100% of container) */\n fullwidth?: boolean;\n /** Internal padding size */\n padding?: PaddingSize;\n /** Border radius size */\n rounded?: RoundedSize;\n /** Visual style variant */\n variant?: 'solid' | 'flat' | 'glass' | 'frost';\n};\n\n/**\n * ore-box — A foundational layout primitive with theming support.\n *\n * @element ore-box\n *\n * @attr {string} variant - Style variant: 'solid' | 'flat' | 'glass' | 'frost'\n * @attr {string} color - Color theme: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} padding - Padding size: 'none' | 'sm' | 'md' | 'lg' | 'xl'\n * @attr {string} elevation - Shadow elevation: '0' | '1' | '2' | '3' | '4' | '5'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {string} effect - Animated border effect: 'rainbow'\n * @attr {boolean} fullwidth - Expand to full width\n *\n * @slot - Default slot for content\n *\n * @part box - The inner box element\n *\n * @cssprop --box-bg - Background color\n * @cssprop --box-color - Text color\n * @cssprop --box-border - Border width\n * @cssprop --box-border-color - Border color\n * @cssprop --box-radius - Border radius\n * @cssprop --box-padding - Inner padding\n * @cssprop --box-shadow - Box shadow\n *\n * @example\n * ```html\n * <ore-box padding=\"lg\" elevation=\"2\">Simple content</ore-box>\n * <ore-box variant=\"glass\" color=\"primary\">Glass effect</ore-box>\n * <ore-box variant=\"frost\" effect=\"rainbow\">Frosted glass</ore-box>\n * ```\n */\nexport const BOX_TAG = 'ore-box' as const;\ndefine<OreBoxProps>(BOX_TAG, {\n props: {\n color: prop.string<ThemeColor>(),\n effect: prop.string<'rainbow'>(),\n elevation: prop.number<ElevationLevel>(),\n fullwidth: prop.bool(),\n padding: prop.string<PaddingSize>(),\n rounded: prop.string<RoundedSize>(),\n variant: prop.string<'flat' | 'solid' | 'frost' | 'glass'>(),\n },\n setup() {\n return html`<div class=\"box\" part=\"box\"><slot></slot></div>`;\n },\n\n styles: [...surfaceMixins, frostVariantMixin('.box'), rainbowEffectMixin('.box'), componentStyles],\n});\n"],"mappings":"kRAyDA,IAAa,EAAU,uBACH,EAAS,CAC3B,MAAO,CACL,MAAO,EAAA,KAAK,OAAmB,EAC/B,OAAQ,EAAA,KAAK,OAAkB,EAC/B,UAAW,EAAA,KAAK,OAAuB,EACvC,UAAW,EAAA,KAAK,KAAK,EACrB,QAAS,EAAA,KAAK,OAAoB,EAClC,QAAS,EAAA,KAAK,OAAoB,EAClC,QAAS,EAAA,KAAK,OAA6C,CAC7D,EACA,OAAQ,CACN,MAAO,GAAA,IAAI,iDACb,EAEA,OAAQ,CAAC,GAAG,EAAA,cAAe,EAAA,kBAAkB,MAAM,EAAG,EAAA,mBAAmB,MAAM,EAAG,EAAA,OAAe,CACnG,CAAC"}
|
package/dist/box.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { rainbowEffectMixin as e } from "./styles/mixins/animation.css.js";
|
|
2
|
+
import { frostVariantMixin as t } from "./styles/mixins/variants.css.js";
|
|
3
|
+
import { surfaceMixins as n } from "./styles/index.js";
|
|
4
|
+
import r from "./layout/box/box.css?inline.js";
|
|
5
|
+
import { define as i, html as a, prop as o } from "@vielzeug/ore";
|
|
6
|
+
//#region src/layout/box/box.ts
|
|
7
|
+
var s = "ore-box";
|
|
8
|
+
i(s, {
|
|
9
|
+
props: {
|
|
10
|
+
color: o.string(),
|
|
11
|
+
effect: o.string(),
|
|
12
|
+
elevation: o.number(),
|
|
13
|
+
fullwidth: o.bool(),
|
|
14
|
+
padding: o.string(),
|
|
15
|
+
rounded: o.string(),
|
|
16
|
+
variant: o.string()
|
|
17
|
+
},
|
|
18
|
+
setup() {
|
|
19
|
+
return a`<div class="box" part="box"><slot></slot></div>`;
|
|
20
|
+
},
|
|
21
|
+
styles: [
|
|
22
|
+
...n,
|
|
23
|
+
t(".box"),
|
|
24
|
+
e(".box"),
|
|
25
|
+
r
|
|
26
|
+
]
|
|
27
|
+
});
|
|
28
|
+
//#endregion
|
|
29
|
+
export { s as BOX_TAG };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=box.js.map
|
package/dist/box.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"box.js","names":[],"sources":["../src/layout/box/box.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\n\nimport type { ElevationLevel, PaddingSize, RoundedSize, ThemeColor } from '../../types';\n\nimport { frostVariantMixin, rainbowEffectMixin, surfaceMixins } from '../../styles';\nimport componentStyles from './box.css?inline';\n\n/** Box component properties */\nexport type OreBoxProps = {\n /** Theme color */\n color?: ThemeColor;\n /** Animated border effect */\n effect?: 'rainbow';\n /** Shadow elevation level (0–5) */\n elevation?: ElevationLevel;\n /** Full width mode (100% of container) */\n fullwidth?: boolean;\n /** Internal padding size */\n padding?: PaddingSize;\n /** Border radius size */\n rounded?: RoundedSize;\n /** Visual style variant */\n variant?: 'solid' | 'flat' | 'glass' | 'frost';\n};\n\n/**\n * ore-box — A foundational layout primitive with theming support.\n *\n * @element ore-box\n *\n * @attr {string} variant - Style variant: 'solid' | 'flat' | 'glass' | 'frost'\n * @attr {string} color - Color theme: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n * @attr {string} padding - Padding size: 'none' | 'sm' | 'md' | 'lg' | 'xl'\n * @attr {string} elevation - Shadow elevation: '0' | '1' | '2' | '3' | '4' | '5'\n * @attr {string} rounded - Border radius: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full'\n * @attr {string} effect - Animated border effect: 'rainbow'\n * @attr {boolean} fullwidth - Expand to full width\n *\n * @slot - Default slot for content\n *\n * @part box - The inner box element\n *\n * @cssprop --box-bg - Background color\n * @cssprop --box-color - Text color\n * @cssprop --box-border - Border width\n * @cssprop --box-border-color - Border color\n * @cssprop --box-radius - Border radius\n * @cssprop --box-padding - Inner padding\n * @cssprop --box-shadow - Box shadow\n *\n * @example\n * ```html\n * <ore-box padding=\"lg\" elevation=\"2\">Simple content</ore-box>\n * <ore-box variant=\"glass\" color=\"primary\">Glass effect</ore-box>\n * <ore-box variant=\"frost\" effect=\"rainbow\">Frosted glass</ore-box>\n * ```\n */\nexport const BOX_TAG = 'ore-box' as const;\ndefine<OreBoxProps>(BOX_TAG, {\n props: {\n color: prop.string<ThemeColor>(),\n effect: prop.string<'rainbow'>(),\n elevation: prop.number<ElevationLevel>(),\n fullwidth: prop.bool(),\n padding: prop.string<PaddingSize>(),\n rounded: prop.string<RoundedSize>(),\n variant: prop.string<'flat' | 'solid' | 'frost' | 'glass'>(),\n },\n setup() {\n return html`<div class=\"box\" part=\"box\"><slot></slot></div>`;\n },\n\n styles: [...surfaceMixins, frostVariantMixin('.box'), rainbowEffectMixin('.box'), componentStyles],\n});\n"],"mappings":";;;;;;AAyDA,IAAa,IAAU;AACvB,EAAoB,GAAS;CAC3B,OAAO;EACL,OAAO,EAAK,OAAmB;EAC/B,QAAQ,EAAK,OAAkB;EAC/B,WAAW,EAAK,OAAuB;EACvC,WAAW,EAAK,KAAK;EACrB,SAAS,EAAK,OAAoB;EAClC,SAAS,EAAK,OAAoB;EAClC,SAAS,EAAK,OAA6C;CAC7D;CACA,QAAQ;EACN,OAAO,CAAI;CACb;CAEA,QAAQ;EAAC,GAAG;EAAe,EAAkB,MAAM;EAAG,EAAmB,MAAM;EAAG;CAAe;AACnG,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./content/breadcrumb/breadcrumb-item.css?inline.cjs"),t=require("./content/breadcrumb/breadcrumb.css?inline.cjs");let n=require("@vielzeug/ore");var r=`ore-breadcrumb-item`;(0,n.define)(r,{props:{active:n.prop.bool(),href:n.prop.string(),separator:n.prop.string(`/`)},setup(e){return n.html`
|
|
2
|
+
<li class="item" role="listitem">
|
|
3
|
+
<span class="separator" part="separator" aria-hidden="true">${e.separator}</span>
|
|
4
|
+
<a
|
|
5
|
+
class="link"
|
|
6
|
+
:href="${e.href}"
|
|
7
|
+
:aria-current="${()=>e.active.value?`page`:null}"
|
|
8
|
+
:tabindex="${()=>e.active.value?`-1`:null}"
|
|
9
|
+
part="link">
|
|
10
|
+
<span class="icon"><slot name="icon"></slot></span>
|
|
11
|
+
<span class="label"><slot></slot></span>
|
|
12
|
+
</a>
|
|
13
|
+
</li>
|
|
14
|
+
`},styles:[e.default]});var i=`ore-breadcrumb`;(0,n.define)(i,{props:{label:n.prop.string(`Breadcrumb`),separator:n.prop.string()},setup(e,{el:t,slots:r,watch:i}){let a=()=>Array.from(t.getElementsByTagName(`ore-breadcrumb-item`)),o=()=>{let n=e.separator.value||`/`,r=a();for(let e=0;e<r.length;e++)r[e].setAttribute(`separator`,n),r[e].toggleAttribute(`data-show-separator`,e>0);n?t.style.setProperty(`--breadcrumb-separator`,`'${n}'`):t.style.removeProperty(`--breadcrumb-separator`)};return i(()=>{r.elements().value,o()}),n.html`
|
|
15
|
+
<nav part="nav" :aria-label="${e.label}">
|
|
16
|
+
<ol role="list" part="list">
|
|
17
|
+
<slot></slot>
|
|
18
|
+
</ol>
|
|
19
|
+
</nav>
|
|
20
|
+
`},styles:[t.default]}),exports.BREADCRUMB_ITEM_TAG=r,exports.BREADCRUMB_TAG=i;
|
|
21
|
+
//# sourceMappingURL=breadcrumb.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumb.cjs","names":[],"sources":["../src/content/breadcrumb/breadcrumb.ts"],"sourcesContent":["import { define, html, prop } from '@vielzeug/ore';\n\nimport itemStyles from './breadcrumb-item.css?inline';\nimport componentStyles from './breadcrumb.css?inline';\n\nexport type OreBreadcrumbProps = {\n label?: string;\n separator?: string;\n};\n\nexport type OreBreadcrumbItemProps = {\n active?: boolean;\n href?: string;\n separator?: string;\n};\n\n/**\n * A single breadcrumb entry rendered inside `<ore-breadcrumb>`.\n *\n * @element ore-breadcrumb-item\n *\n * @attr {boolean} active - Marks this item as the current page (`aria-current=\"page\"`)\n * @attr {string} href - Link target for this breadcrumb item\n * @attr {string} separator - Separator text shown before the item (except first item)\n *\n * @slot - Item label/content\n * @slot icon - Optional leading icon for the crumb\n *\n * @part separator - Separator element before the item label\n * @part link - The interactive anchor element\n *\n * @example\n * ```html\n * <ore-breadcrumb-item href=\"/\">Home</ore-breadcrumb-item>\n * <ore-breadcrumb-item active>Current Page</ore-breadcrumb-item>\n * ```\n */\nexport const BREADCRUMB_ITEM_TAG = 'ore-breadcrumb-item' as const;\ndefine<OreBreadcrumbItemProps>(BREADCRUMB_ITEM_TAG, {\n props: {\n active: prop.bool(),\n href: prop.string(),\n separator: prop.string('/'),\n },\n setup(props) {\n return html`\n <li class=\"item\" role=\"listitem\">\n <span class=\"separator\" part=\"separator\" aria-hidden=\"true\">${props.separator}</span>\n <a\n class=\"link\"\n :href=\"${props.href}\"\n :aria-current=\"${() => (props.active.value ? 'page' : null)}\"\n :tabindex=\"${() => (props.active.value ? '-1' : null)}\"\n part=\"link\">\n <span class=\"icon\"><slot name=\"icon\"></slot></span>\n <span class=\"label\"><slot></slot></span>\n </a>\n </li>\n `;\n },\n styles: [itemStyles],\n});\n\n// ============================================\n// Breadcrumb Component\n// ============================================\n\n/**\n * Accessible breadcrumb navigation container.\n *\n * @element ore-breadcrumb\n *\n * @attr {string} label - Accessible label for the internal `<nav>` landmark\n * @attr {string} separator - Separator text propagated to child `<ore-breadcrumb-item>` elements\n *\n * @slot - One or more `<ore-breadcrumb-item>` children\n *\n * @part nav - Internal navigation landmark element\n * @part list - Internal ordered list container\n *\n * @cssprop --breadcrumb-separator - Optional custom separator text synced to child items\n *\n * @example\n * ```html\n * <ore-breadcrumb label=\"Page breadcrumb\">\n * <ore-breadcrumb-item href=\"/\">Home</ore-breadcrumb-item>\n * <ore-breadcrumb-item href=\"/blog\">Blog</ore-breadcrumb-item>\n * <ore-breadcrumb-item active>My Post</ore-breadcrumb-item>\n * </ore-breadcrumb>\n * ```\n */\nexport const BREADCRUMB_TAG = 'ore-breadcrumb' as const;\ndefine<OreBreadcrumbProps>(BREADCRUMB_TAG, {\n props: {\n label: prop.string('Breadcrumb'),\n separator: prop.string(),\n },\n setup(props, { el, slots, watch }) {\n // ────────────────────────────────────────────────────────────────\n // Item & Separator Synchronization\n // ────────────────────────────────────────────────────────────────\n\n const getItems = (): HTMLElement[] => Array.from(el.getElementsByTagName('ore-breadcrumb-item'));\n\n const syncItems = () => {\n const sep = props.separator.value || '/';\n const items = getItems();\n\n for (let i = 0; i < items.length; i++) {\n items[i].setAttribute('separator', sep);\n items[i].toggleAttribute('data-show-separator', i > 0);\n }\n\n // Sync CSS variable for CSS-based separator (if used)\n if (sep) el.style.setProperty('--breadcrumb-separator', `'${sep}'`);\n else el.style.removeProperty('--breadcrumb-separator');\n };\n\n // ────────────────────────────────────────────────────────────────\n // Lifecycle\n // ────────────────────────────────────────────────────────────────\n\n watch(() => {\n void slots.elements().value;\n syncItems();\n });\n\n return html`\n <nav part=\"nav\" :aria-label=\"${props.label}\">\n <ol role=\"list\" part=\"list\">\n <slot></slot>\n </ol>\n </nav>\n `;\n },\n styles: [componentStyles],\n});\n"],"mappings":"qOAqCA,IAAa,EAAsB,mCACJ,EAAqB,CAClD,MAAO,CACL,OAAQ,EAAA,KAAK,KAAK,EAClB,KAAM,EAAA,KAAK,OAAO,EAClB,UAAW,EAAA,KAAK,OAAO,GAAG,CAC5B,EACA,MAAM,EAAO,CACX,MAAO,GAAA,IAAI;;sEAEuD,EAAM,UAAU;;;mBAGnE,EAAM,KAAK;+BACI,EAAM,OAAO,MAAQ,OAAS,KAAM;2BACxC,EAAM,OAAO,MAAQ,KAAO,KAAM;;;;;;KAO9D,EACA,OAAQ,CAAC,EAAA,OAAU,CACrB,CAAC,EA8BD,IAAa,EAAiB,8BACH,EAAgB,CACzC,MAAO,CACL,MAAO,EAAA,KAAK,OAAO,YAAY,EAC/B,UAAW,EAAA,KAAK,OAAO,CACzB,EACA,MAAM,EAAO,CAAE,KAAI,QAAO,SAAS,CAKjC,IAAM,MAAgC,MAAM,KAAK,EAAG,qBAAqB,qBAAqB,CAAC,EAEzF,MAAkB,CACtB,IAAM,EAAM,EAAM,UAAU,OAAS,IAC/B,EAAQ,EAAS,EAEvB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,EAAM,EAAE,CAAC,aAAa,YAAa,CAAG,EACtC,EAAM,EAAE,CAAC,gBAAgB,sBAAuB,EAAI,CAAC,EAInD,EAAK,EAAG,MAAM,YAAY,yBAA0B,IAAI,EAAI,EAAE,EAC7D,EAAG,MAAM,eAAe,wBAAwB,CACvD,EAWA,OALA,MAAY,CACV,EAAW,SAAS,CAAC,CAAC,MACtB,EAAU,CACZ,CAAC,EAEM,EAAA,IAAI;qCACsB,EAAM,MAAM;;;;;KAM/C,EACA,OAAQ,CAAC,EAAA,OAAe,CAC1B,CAAC"}
|