@stridge/noctis 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -0
- package/dist/_virtual/_rolldown/runtime.js +27 -0
- package/dist/components/accordion/accordion.context.js +15 -0
- package/dist/components/accordion/accordion.d.ts +136 -0
- package/dist/components/accordion/accordion.js +132 -0
- package/dist/components/accordion/accordion.props.d.ts +45 -0
- package/dist/components/accordion/accordion.props.js +53 -0
- package/dist/components/accordion/accordion.slots.d.ts +24 -0
- package/dist/components/accordion/accordion.slots.js +39 -0
- package/dist/components/accordion/accordion.types.d.ts +11 -0
- package/dist/components/accordion/index.d.ts +3 -0
- package/dist/components/alert-dialog/alert-dialog.context.js +16 -0
- package/dist/components/alert-dialog/alert-dialog.d.ts +324 -0
- package/dist/components/alert-dialog/alert-dialog.js +279 -0
- package/dist/components/alert-dialog/alert-dialog.props.d.ts +85 -0
- package/dist/components/alert-dialog/alert-dialog.props.js +84 -0
- package/dist/components/alert-dialog/alert-dialog.slots.d.ts +29 -0
- package/dist/components/alert-dialog/alert-dialog.slots.js +52 -0
- package/dist/components/alert-dialog/alert-dialog.types.d.ts +22 -0
- package/dist/components/alert-dialog/index.d.ts +3 -0
- package/dist/components/autocomplete/autocomplete.context.d.ts +5 -0
- package/dist/components/autocomplete/autocomplete.context.js +13 -0
- package/dist/components/autocomplete/autocomplete.d.ts +364 -0
- package/dist/components/autocomplete/autocomplete.js +373 -0
- package/dist/components/autocomplete/autocomplete.props.d.ts +83 -0
- package/dist/components/autocomplete/autocomplete.props.js +63 -0
- package/dist/components/autocomplete/autocomplete.slots.d.ts +32 -0
- package/dist/components/autocomplete/autocomplete.slots.js +61 -0
- package/dist/components/autocomplete/index.d.ts +3 -0
- package/dist/components/avatar/avatar.context.js +21 -0
- package/dist/components/avatar/avatar.d.ts +235 -0
- package/dist/components/avatar/avatar.js +208 -0
- package/dist/components/avatar/avatar.props.d.ts +86 -0
- package/dist/components/avatar/avatar.props.js +78 -0
- package/dist/components/avatar/avatar.slots.d.ts +35 -0
- package/dist/components/avatar/avatar.slots.js +49 -0
- package/dist/components/avatar/avatar.types.d.ts +28 -0
- package/dist/components/avatar/index.d.ts +2 -0
- package/dist/components/button/button.d.ts +91 -0
- package/dist/components/button/button.js +82 -0
- package/dist/components/button/button.props.d.ts +48 -0
- package/dist/components/button/button.props.js +25 -0
- package/dist/components/button/button.slots.d.ts +30 -0
- package/dist/components/button/button.slots.js +40 -0
- package/dist/components/button/button.types.d.ts +12 -0
- package/dist/components/button/index.d.ts +2 -0
- package/dist/components/button-group/button-group.context.js +15 -0
- package/dist/components/button-group/button-group.d.ts +60 -0
- package/dist/components/button-group/button-group.js +50 -0
- package/dist/components/button-group/button-group.props.d.ts +22 -0
- package/dist/components/button-group/button-group.props.js +33 -0
- package/dist/components/button-group/button-group.slots.d.ts +12 -0
- package/dist/components/button-group/button-group.slots.js +18 -0
- package/dist/components/button-group/index.d.ts +2 -0
- package/dist/components/checkbox/checkbox-group.d.ts +46 -0
- package/dist/components/checkbox/checkbox-group.js +31 -0
- package/dist/components/checkbox/checkbox.context.js +15 -0
- package/dist/components/checkbox/checkbox.d.ts +130 -0
- package/dist/components/checkbox/checkbox.js +117 -0
- package/dist/components/checkbox/checkbox.props.d.ts +84 -0
- package/dist/components/checkbox/checkbox.props.js +49 -0
- package/dist/components/checkbox/checkbox.slots.d.ts +27 -0
- package/dist/components/checkbox/checkbox.slots.js +40 -0
- package/dist/components/checkbox/index.d.ts +3 -0
- package/dist/components/code-block/brand-logo.d.ts +37 -0
- package/dist/components/code-block/brand-logo.js +212 -0
- package/dist/components/code-block/code-block.context.js +13 -0
- package/dist/components/code-block/code-block.d.ts +190 -0
- package/dist/components/code-block/code-block.js +267 -0
- package/dist/components/code-block/code-block.props.d.ts +42 -0
- package/dist/components/code-block/code-block.props.js +51 -0
- package/dist/components/code-block/code-block.slots.d.ts +16 -0
- package/dist/components/code-block/code-block.slots.js +31 -0
- package/dist/components/code-block/index.d.ts +3 -0
- package/dist/components/code-block/language-label.js +43 -0
- package/dist/components/collapsible/collapsible.context.js +18 -0
- package/dist/components/collapsible/collapsible.d.ts +167 -0
- package/dist/components/collapsible/collapsible.js +182 -0
- package/dist/components/collapsible/collapsible.props.d.ts +33 -0
- package/dist/components/collapsible/collapsible.props.js +44 -0
- package/dist/components/collapsible/collapsible.slots.d.ts +25 -0
- package/dist/components/collapsible/collapsible.slots.js +40 -0
- package/dist/components/collapsible/collapsible.types.d.ts +23 -0
- package/dist/components/collapsible/index.d.ts +2 -0
- package/dist/components/color-picker/area.d.ts +11 -0
- package/dist/components/color-picker/area.js +148 -0
- package/dist/components/color-picker/color-picker.d.ts +110 -0
- package/dist/components/color-picker/color-picker.js +149 -0
- package/dist/components/color-picker/color-picker.props.d.ts +69 -0
- package/dist/components/color-picker/color-picker.props.js +74 -0
- package/dist/components/color-picker/color-picker.slots.js +21 -0
- package/dist/components/color-picker/color.d.ts +18 -0
- package/dist/components/color-picker/color.js +224 -0
- package/dist/components/color-picker/context.d.ts +25 -0
- package/dist/components/color-picker/context.js +23 -0
- package/dist/components/color-picker/eyedropper.d.ts +14 -0
- package/dist/components/color-picker/eyedropper.js +50 -0
- package/dist/components/color-picker/format-tabs.d.ts +11 -0
- package/dist/components/color-picker/format-tabs.js +35 -0
- package/dist/components/color-picker/index.d.ts +3 -0
- package/dist/components/color-picker/inputs.d.ts +16 -0
- package/dist/components/color-picker/inputs.js +61 -0
- package/dist/components/color-picker/sliders.d.ts +17 -0
- package/dist/components/color-picker/sliders.js +94 -0
- package/dist/components/color-picker/store.js +48 -0
- package/dist/components/color-picker/swatch.d.ts +15 -0
- package/dist/components/color-picker/swatch.js +25 -0
- package/dist/components/color-swatch/color-swatch-picker.d.ts +87 -0
- package/dist/components/color-swatch/color-swatch-picker.js +73 -0
- package/dist/components/color-swatch/color-swatch.context.js +8 -0
- package/dist/components/color-swatch/color-swatch.d.ts +55 -0
- package/dist/components/color-swatch/color-swatch.js +48 -0
- package/dist/components/color-swatch/color-swatch.props.d.ts +54 -0
- package/dist/components/color-swatch/color-swatch.props.js +32 -0
- package/dist/components/color-swatch/color-swatch.slots.js +13 -0
- package/dist/components/color-swatch/index.d.ts +2 -0
- package/dist/components/combobox/combobox.context.js +13 -0
- package/dist/components/combobox/combobox.d.ts +328 -0
- package/dist/components/combobox/combobox.js +315 -0
- package/dist/components/combobox/combobox.props.d.ts +85 -0
- package/dist/components/combobox/combobox.props.js +79 -0
- package/dist/components/combobox/combobox.slots.d.ts +28 -0
- package/dist/components/combobox/combobox.slots.js +63 -0
- package/dist/components/combobox/index.d.ts +2 -0
- package/dist/components/context-menu/context-menu.d.ts +254 -0
- package/dist/components/context-menu/context-menu.js +150 -0
- package/dist/components/context-menu/context-menu.props.d.ts +22 -0
- package/dist/components/context-menu/context-menu.props.js +32 -0
- package/dist/components/context-menu/context-menu.slots.d.ts +24 -0
- package/dist/components/context-menu/context-menu.slots.js +42 -0
- package/dist/components/context-menu/index.d.ts +2 -0
- package/dist/components/copy-button/copy-button.d.ts +56 -0
- package/dist/components/copy-button/copy-button.js +88 -0
- package/dist/components/copy-button/copy-button.props.d.ts +27 -0
- package/dist/components/copy-button/copy-button.props.js +51 -0
- package/dist/components/copy-button/copy-button.slots.d.ts +20 -0
- package/dist/components/copy-button/copy-button.slots.js +36 -0
- package/dist/components/copy-button/index.d.ts +2 -0
- package/dist/components/dialog/dialog.context.js +15 -0
- package/dist/components/dialog/dialog.d.ts +299 -0
- package/dist/components/dialog/dialog.js +263 -0
- package/dist/components/dialog/dialog.props.d.ts +71 -0
- package/dist/components/dialog/dialog.props.js +75 -0
- package/dist/components/dialog/dialog.slots.d.ts +26 -0
- package/dist/components/dialog/dialog.slots.js +46 -0
- package/dist/components/dialog/dialog.types.d.ts +16 -0
- package/dist/components/dialog/index.d.ts +3 -0
- package/dist/components/field/field.d.ts +221 -0
- package/dist/components/field/field.js +192 -0
- package/dist/components/field/field.props.d.ts +66 -0
- package/dist/components/field/field.props.js +65 -0
- package/dist/components/field/field.slots.d.ts +35 -0
- package/dist/components/field/field.slots.js +54 -0
- package/dist/components/field/field.types.d.ts +5 -0
- package/dist/components/field/index.d.ts +4 -0
- package/dist/components/inline-code/index.d.ts +1 -0
- package/dist/components/inline-code/inline-code.d.ts +46 -0
- package/dist/components/inline-code/inline-code.js +36 -0
- package/dist/components/inline-code/inline-code.props.d.ts +17 -0
- package/dist/components/inline-code/inline-code.props.js +27 -0
- package/dist/components/inline-code/inline-code.slots.js +8 -0
- package/dist/components/input/index.d.ts +3 -0
- package/dist/components/input/input.context.js +13 -0
- package/dist/components/input/input.d.ts +161 -0
- package/dist/components/input/input.js +117 -0
- package/dist/components/input/input.props.d.ts +51 -0
- package/dist/components/input/input.props.js +50 -0
- package/dist/components/input/input.slots.d.ts +35 -0
- package/dist/components/input/input.slots.js +46 -0
- package/dist/components/input/input.types.d.ts +12 -0
- package/dist/components/kbd/glyphs.js +45 -0
- package/dist/components/kbd/index.d.ts +1 -0
- package/dist/components/kbd/kbd.d.ts +61 -0
- package/dist/components/kbd/kbd.js +233 -0
- package/dist/components/kbd/kbd.props.d.ts +30 -0
- package/dist/components/kbd/kbd.props.js +39 -0
- package/dist/components/kbd/kbd.slots.js +14 -0
- package/dist/components/kbd/use-apple-platform.js +25 -0
- package/dist/components/menu/index.d.ts +2 -0
- package/dist/components/menu/menu.d.ts +355 -0
- package/dist/components/menu/menu.js +263 -0
- package/dist/components/menu/menu.props.d.ts +92 -0
- package/dist/components/menu/menu.props.js +97 -0
- package/dist/components/menu/menu.slots.d.ts +32 -0
- package/dist/components/menu/menu.slots.js +60 -0
- package/dist/components/menubar/index.d.ts +2 -0
- package/dist/components/menubar/menubar.context.js +13 -0
- package/dist/components/menubar/menubar.d.ts +162 -0
- package/dist/components/menubar/menubar.js +122 -0
- package/dist/components/menubar/menubar.props.d.ts +41 -0
- package/dist/components/menubar/menubar.props.js +45 -0
- package/dist/components/menubar/menubar.slots.d.ts +26 -0
- package/dist/components/menubar/menubar.slots.js +40 -0
- package/dist/components/meter/index.d.ts +2 -0
- package/dist/components/meter/meter.context.d.ts +9 -0
- package/dist/components/meter/meter.context.js +13 -0
- package/dist/components/meter/meter.d.ts +163 -0
- package/dist/components/meter/meter.js +121 -0
- package/dist/components/meter/meter.props.d.ts +50 -0
- package/dist/components/meter/meter.props.js +33 -0
- package/dist/components/meter/meter.slots.d.ts +18 -0
- package/dist/components/meter/meter.slots.js +31 -0
- package/dist/components/navigation-menu/index.d.ts +2 -0
- package/dist/components/navigation-menu/navigation-menu.d.ts +328 -0
- package/dist/components/navigation-menu/navigation-menu.js +274 -0
- package/dist/components/navigation-menu/navigation-menu.props.d.ts +98 -0
- package/dist/components/navigation-menu/navigation-menu.props.js +90 -0
- package/dist/components/navigation-menu/navigation-menu.slots.d.ts +34 -0
- package/dist/components/navigation-menu/navigation-menu.slots.js +60 -0
- package/dist/components/number-field/index.d.ts +2 -0
- package/dist/components/number-field/number-field.context.d.ts +13 -0
- package/dist/components/number-field/number-field.context.js +13 -0
- package/dist/components/number-field/number-field.d.ts +197 -0
- package/dist/components/number-field/number-field.js +187 -0
- package/dist/components/number-field/number-field.props.d.ts +66 -0
- package/dist/components/number-field/number-field.props.js +50 -0
- package/dist/components/number-field/number-field.slots.d.ts +31 -0
- package/dist/components/number-field/number-field.slots.js +48 -0
- package/dist/components/otp-field/index.d.ts +3 -0
- package/dist/components/otp-field/otp-field.context.js +13 -0
- package/dist/components/otp-field/otp-field.d.ts +99 -0
- package/dist/components/otp-field/otp-field.js +76 -0
- package/dist/components/otp-field/otp-field.props.d.ts +48 -0
- package/dist/components/otp-field/otp-field.props.js +43 -0
- package/dist/components/otp-field/otp-field.slots.d.ts +28 -0
- package/dist/components/otp-field/otp-field.slots.js +39 -0
- package/dist/components/popover/index.d.ts +2 -0
- package/dist/components/popover/popover.d.ts +192 -0
- package/dist/components/popover/popover.js +152 -0
- package/dist/components/popover/popover.props.d.ts +34 -0
- package/dist/components/popover/popover.props.js +44 -0
- package/dist/components/popover/popover.slots.d.ts +22 -0
- package/dist/components/popover/popover.slots.js +42 -0
- package/dist/components/preview-card/index.d.ts +2 -0
- package/dist/components/preview-card/preview-card.d.ts +182 -0
- package/dist/components/preview-card/preview-card.js +146 -0
- package/dist/components/preview-card/preview-card.props.d.ts +37 -0
- package/dist/components/preview-card/preview-card.props.js +48 -0
- package/dist/components/preview-card/preview-card.slots.d.ts +22 -0
- package/dist/components/preview-card/preview-card.slots.js +39 -0
- package/dist/components/progress/index.d.ts +3 -0
- package/dist/components/progress/progress.context.d.ts +9 -0
- package/dist/components/progress/progress.context.js +13 -0
- package/dist/components/progress/progress.d.ts +139 -0
- package/dist/components/progress/progress.js +92 -0
- package/dist/components/progress/progress.props.d.ts +56 -0
- package/dist/components/progress/progress.props.js +38 -0
- package/dist/components/progress/progress.slots.d.ts +24 -0
- package/dist/components/progress/progress.slots.js +37 -0
- package/dist/components/radio/index.d.ts +2 -0
- package/dist/components/radio/radio.context.js +5 -0
- package/dist/components/radio/radio.d.ts +205 -0
- package/dist/components/radio/radio.js +168 -0
- package/dist/components/radio/radio.props.d.ts +106 -0
- package/dist/components/radio/radio.props.js +65 -0
- package/dist/components/radio/radio.slots.d.ts +29 -0
- package/dist/components/radio/radio.slots.js +44 -0
- package/dist/components/rail/index.d.ts +3 -0
- package/dist/components/rail/rail.context.d.ts +17 -0
- package/dist/components/rail/rail.context.js +23 -0
- package/dist/components/rail/rail.d.ts +232 -0
- package/dist/components/rail/rail.js +254 -0
- package/dist/components/rail/rail.props.d.ts +98 -0
- package/dist/components/rail/rail.props.js +64 -0
- package/dist/components/rail/rail.slots.d.ts +20 -0
- package/dist/components/rail/rail.slots.js +40 -0
- package/dist/components/scroll-area/index.d.ts +2 -0
- package/dist/components/scroll-area/scroll-area.context.js +15 -0
- package/dist/components/scroll-area/scroll-area.d.ts +217 -0
- package/dist/components/scroll-area/scroll-area.js +153 -0
- package/dist/components/scroll-area/scroll-area.props.d.ts +73 -0
- package/dist/components/scroll-area/scroll-area.props.js +64 -0
- package/dist/components/scroll-area/scroll-area.slots.d.ts +40 -0
- package/dist/components/scroll-area/scroll-area.slots.js +54 -0
- package/dist/components/scroll-area/scroll-area.types.d.ts +24 -0
- package/dist/components/search-dialog/index.d.ts +3 -0
- package/dist/components/search-dialog/parts/input.d.ts +24 -0
- package/dist/components/search-dialog/parts/input.js +53 -0
- package/dist/components/search-dialog/parts/messages.d.ts +80 -0
- package/dist/components/search-dialog/parts/messages.js +75 -0
- package/dist/components/search-dialog/parts/results.d.ts +43 -0
- package/dist/components/search-dialog/parts/results.js +63 -0
- package/dist/components/search-dialog/parts/root.d.ts +54 -0
- package/dist/components/search-dialog/parts/root.js +99 -0
- package/dist/components/search-dialog/search-dialog.context.d.ts +15 -0
- package/dist/components/search-dialog/search-dialog.context.js +20 -0
- package/dist/components/search-dialog/search-dialog.d.ts +84 -0
- package/dist/components/search-dialog/search-dialog.js +43 -0
- package/dist/components/search-dialog/search-dialog.props.d.ts +45 -0
- package/dist/components/search-dialog/search-dialog.props.js +49 -0
- package/dist/components/search-dialog/search-dialog.slots.d.ts +16 -0
- package/dist/components/search-dialog/search-dialog.slots.js +32 -0
- package/dist/components/select/index.d.ts +2 -0
- package/dist/components/select/select.context.js +17 -0
- package/dist/components/select/select.d.ts +356 -0
- package/dist/components/select/select.js +314 -0
- package/dist/components/select/select.props.d.ts +110 -0
- package/dist/components/select/select.props.js +103 -0
- package/dist/components/select/select.slots.d.ts +38 -0
- package/dist/components/select/select.slots.js +67 -0
- package/dist/components/separator/index.d.ts +2 -0
- package/dist/components/separator/separator.d.ts +69 -0
- package/dist/components/separator/separator.js +44 -0
- package/dist/components/separator/separator.props.d.ts +30 -0
- package/dist/components/separator/separator.props.js +30 -0
- package/dist/components/separator/separator.slots.d.ts +22 -0
- package/dist/components/separator/separator.slots.js +21 -0
- package/dist/components/separator/separator.types.d.ts +5 -0
- package/dist/components/sheet/index.d.ts +3 -0
- package/dist/components/sheet/sheet-stack.d.ts +106 -0
- package/dist/components/sheet/sheet-stack.js +146 -0
- package/dist/components/sheet/sheet.d.ts +279 -0
- package/dist/components/sheet/sheet.js +264 -0
- package/dist/components/sheet/sheet.props.d.ts +74 -0
- package/dist/components/sheet/sheet.props.js +77 -0
- package/dist/components/sheet/sheet.slots.js +22 -0
- package/dist/components/sheet/sheet.types.d.ts +12 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/dist/components/slider/slider.context.d.ts +5 -0
- package/dist/components/slider/slider.context.js +29 -0
- package/dist/components/slider/slider.d.ts +230 -0
- package/dist/components/slider/slider.js +274 -0
- package/dist/components/slider/slider.props.d.ts +72 -0
- package/dist/components/slider/slider.props.js +59 -0
- package/dist/components/slider/slider.slots.d.ts +30 -0
- package/dist/components/slider/slider.slots.js +50 -0
- package/dist/components/surface/index.d.ts +1 -0
- package/dist/components/surface/surface.d.ts +84 -0
- package/dist/components/surface/surface.js +48 -0
- package/dist/components/surface/surface.props.d.ts +35 -0
- package/dist/components/surface/surface.props.js +26 -0
- package/dist/components/surface/surface.slots.js +9 -0
- package/dist/components/surface/surface.types.d.ts +14 -0
- package/dist/components/switch/index.d.ts +2 -0
- package/dist/components/switch/switch.context.js +14 -0
- package/dist/components/switch/switch.d.ts +110 -0
- package/dist/components/switch/switch.js +92 -0
- package/dist/components/switch/switch.props.d.ts +68 -0
- package/dist/components/switch/switch.props.js +41 -0
- package/dist/components/switch/switch.slots.d.ts +23 -0
- package/dist/components/switch/switch.slots.js +35 -0
- package/dist/components/table/index.d.ts +1 -0
- package/dist/components/table/table.d.ts +104 -0
- package/dist/components/table/table.js +92 -0
- package/dist/components/table/table.props.d.ts +38 -0
- package/dist/components/table/table.props.js +49 -0
- package/dist/components/table/table.slots.js +17 -0
- package/dist/components/tabs/index.d.ts +2 -0
- package/dist/components/tabs/tabs.context.d.ts +9 -0
- package/dist/components/tabs/tabs.context.js +13 -0
- package/dist/components/tabs/tabs.d.ts +139 -0
- package/dist/components/tabs/tabs.js +118 -0
- package/dist/components/tabs/tabs.props.d.ts +59 -0
- package/dist/components/tabs/tabs.props.js +39 -0
- package/dist/components/tabs/tabs.slots.d.ts +20 -0
- package/dist/components/tabs/tabs.slots.js +33 -0
- package/dist/components/textarea/index.d.ts +3 -0
- package/dist/components/textarea/textarea.context.js +13 -0
- package/dist/components/textarea/textarea.d.ts +142 -0
- package/dist/components/textarea/textarea.js +129 -0
- package/dist/components/textarea/textarea.props.d.ts +44 -0
- package/dist/components/textarea/textarea.props.js +32 -0
- package/dist/components/textarea/textarea.slots.d.ts +23 -0
- package/dist/components/textarea/textarea.slots.js +33 -0
- package/dist/components/textarea/textarea.types.d.ts +5 -0
- package/dist/components/toast/index.d.ts +4 -0
- package/dist/components/toast/toast.d.ts +241 -0
- package/dist/components/toast/toast.js +193 -0
- package/dist/components/toast/toast.manager.d.ts +76 -0
- package/dist/components/toast/toast.manager.js +71 -0
- package/dist/components/toast/toast.props.d.ts +66 -0
- package/dist/components/toast/toast.props.js +74 -0
- package/dist/components/toast/toast.slots.d.ts +30 -0
- package/dist/components/toast/toast.slots.js +49 -0
- package/dist/components/toast/toast.types.d.ts +19 -0
- package/dist/components/toggle/index.d.ts +2 -0
- package/dist/components/toggle/toggle.context.d.ts +11 -0
- package/dist/components/toggle/toggle.context.js +14 -0
- package/dist/components/toggle/toggle.d.ts +136 -0
- package/dist/components/toggle/toggle.js +101 -0
- package/dist/components/toggle/toggle.props.d.ts +51 -0
- package/dist/components/toggle/toggle.props.js +29 -0
- package/dist/components/toggle/toggle.slots.d.ts +26 -0
- package/dist/components/toggle/toggle.slots.js +36 -0
- package/dist/components/toolbar/index.d.ts +3 -0
- package/dist/components/toolbar/toolbar.context.js +23 -0
- package/dist/components/toolbar/toolbar.d.ts +218 -0
- package/dist/components/toolbar/toolbar.js +197 -0
- package/dist/components/toolbar/toolbar.props.d.ts +54 -0
- package/dist/components/toolbar/toolbar.props.js +55 -0
- package/dist/components/toolbar/toolbar.slots.d.ts +24 -0
- package/dist/components/toolbar/toolbar.slots.js +37 -0
- package/dist/components/toolbar/toolbar.types.d.ts +15 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/tooltip/tooltip.d.ts +170 -0
- package/dist/components/tooltip/tooltip.js +143 -0
- package/dist/components/tooltip/tooltip.props.d.ts +36 -0
- package/dist/components/tooltip/tooltip.props.js +42 -0
- package/dist/components/tooltip/tooltip.slots.d.ts +26 -0
- package/dist/components/tooltip/tooltip.slots.js +42 -0
- package/dist/core/derive-threshold-tone.js +35 -0
- package/dist/core/merge-class-name.d.ts +17 -0
- package/dist/core/merge-class-name.js +16 -0
- package/dist/core/noctis-provider.d.ts +38 -0
- package/dist/core/noctis-provider.js +44 -0
- package/dist/core/primitive/index.d.ts +1 -0
- package/dist/core/primitive/primitive.d.ts +44 -0
- package/dist/core/primitive/primitive.js +27 -0
- package/dist/core/radius-scope/index.d.ts +2 -0
- package/dist/core/radius-scope/radius-scope.d.ts +43 -0
- package/dist/core/radius-scope/radius-scope.js +36 -0
- package/dist/core/radius-scope/radius-scope.styles.d.ts +13 -0
- package/dist/core/radius-scope/radius-scope.styles.js +11 -0
- package/dist/core/render.d.ts +24 -0
- package/dist/core/render.js +12 -0
- package/dist/core/use-copy.d.ts +13 -0
- package/dist/core/use-copy.js +30 -0
- package/dist/core/use-injected-labels.js +55 -0
- package/dist/core/use-reduced-motion.d.ts +9 -0
- package/dist/core/use-reduced-motion.js +26 -0
- package/dist/core/visually-hidden/index.d.ts +1 -0
- package/dist/core/visually-hidden/visually-hidden.d.ts +24 -0
- package/dist/core/visually-hidden/visually-hidden.js +19 -0
- package/dist/i18n/default-messages.d.ts +12 -0
- package/dist/i18n/default-messages.js +10 -0
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/index.js +2 -0
- package/dist/i18n/messages/index.d.ts +2 -0
- package/dist/i18n/messages/index.js +2 -0
- package/dist/icons/glyphs.d.ts +2 -0
- package/dist/icons/glyphs.js +2 -0
- package/dist/icons/icon.d.ts +40 -0
- package/dist/icons/icon.js +26 -0
- package/dist/icons/icon.styles.d.ts +9 -0
- package/dist/icons/index.d.ts +3 -0
- package/dist/index.d.ts +126 -0
- package/dist/index.js +112 -0
- package/dist/primitives/accordion.d.ts +7 -0
- package/dist/primitives/accordion.js +8 -0
- package/dist/primitives/alert-dialog.d.ts +7 -0
- package/dist/primitives/alert-dialog.js +8 -0
- package/dist/primitives/autocomplete/autocomplete.d.ts +58 -0
- package/dist/primitives/autocomplete/autocomplete.js +58 -0
- package/dist/primitives/autocomplete/index.d.ts +1 -0
- package/dist/primitives/autocomplete.d.ts +2 -0
- package/dist/primitives/autocomplete.js +2 -0
- package/dist/primitives/avatar.d.ts +7 -0
- package/dist/primitives/avatar.js +8 -0
- package/dist/primitives/button.d.ts +7 -0
- package/dist/primitives/button.js +8 -0
- package/dist/primitives/checkbox-group.d.ts +7 -0
- package/dist/primitives/checkbox-group.js +8 -0
- package/dist/primitives/checkbox.d.ts +7 -0
- package/dist/primitives/checkbox.js +8 -0
- package/dist/primitives/collapsible.d.ts +7 -0
- package/dist/primitives/collapsible.js +8 -0
- package/dist/primitives/combobox/combobox.d.ts +71 -0
- package/dist/primitives/combobox/combobox.js +66 -0
- package/dist/primitives/combobox/index.d.ts +1 -0
- package/dist/primitives/combobox.d.ts +2 -0
- package/dist/primitives/combobox.js +2 -0
- package/dist/primitives/context-menu.d.ts +7 -0
- package/dist/primitives/context-menu.js +8 -0
- package/dist/primitives/csp-provider.d.ts +1 -0
- package/dist/primitives/csp-provider.js +2 -0
- package/dist/primitives/dialog.d.ts +7 -0
- package/dist/primitives/dialog.js +8 -0
- package/dist/primitives/direction-provider.d.ts +1 -0
- package/dist/primitives/direction-provider.js +8 -0
- package/dist/primitives/drawer.d.ts +1 -0
- package/dist/primitives/drawer.js +2 -0
- package/dist/primitives/field.d.ts +7 -0
- package/dist/primitives/field.js +8 -0
- package/dist/primitives/fieldset.d.ts +7 -0
- package/dist/primitives/fieldset.js +8 -0
- package/dist/primitives/form.d.ts +7 -0
- package/dist/primitives/form.js +8 -0
- package/dist/primitives/index.d.ts +79 -0
- package/dist/primitives/index.js +113 -0
- package/dist/primitives/input.d.ts +7 -0
- package/dist/primitives/input.js +8 -0
- package/dist/primitives/menu.d.ts +7 -0
- package/dist/primitives/menu.js +8 -0
- package/dist/primitives/menubar.d.ts +7 -0
- package/dist/primitives/menubar.js +8 -0
- package/dist/primitives/meter/index.d.ts +1 -0
- package/dist/primitives/meter/meter.d.ts +56 -0
- package/dist/primitives/meter/meter.js +59 -0
- package/dist/primitives/meter.d.ts +2 -0
- package/dist/primitives/meter.js +2 -0
- package/dist/primitives/navigation-menu.d.ts +7 -0
- package/dist/primitives/navigation-menu.js +8 -0
- package/dist/primitives/number-field/context.d.ts +13 -0
- package/dist/primitives/number-field/context.js +36 -0
- package/dist/primitives/number-field/index.d.ts +2 -0
- package/dist/primitives/number-field/number-field.d.ts +90 -0
- package/dist/primitives/number-field/number-field.js +107 -0
- package/dist/primitives/number-field.d.ts +3 -0
- package/dist/primitives/number-field.js +2 -0
- package/dist/primitives/otp-field.d.ts +7 -0
- package/dist/primitives/otp-field.js +8 -0
- package/dist/primitives/popover.d.ts +7 -0
- package/dist/primitives/popover.js +8 -0
- package/dist/primitives/preview-card.d.ts +7 -0
- package/dist/primitives/preview-card.js +8 -0
- package/dist/primitives/progress/index.d.ts +1 -0
- package/dist/primitives/progress/progress.d.ts +56 -0
- package/dist/primitives/progress/progress.js +59 -0
- package/dist/primitives/progress.d.ts +2 -0
- package/dist/primitives/progress.js +2 -0
- package/dist/primitives/radio-group.d.ts +7 -0
- package/dist/primitives/radio-group.js +8 -0
- package/dist/primitives/radio.d.ts +7 -0
- package/dist/primitives/radio.js +8 -0
- package/dist/primitives/scroll-area.d.ts +7 -0
- package/dist/primitives/scroll-area.js +8 -0
- package/dist/primitives/select.d.ts +7 -0
- package/dist/primitives/select.js +8 -0
- package/dist/primitives/separator.d.ts +7 -0
- package/dist/primitives/separator.js +8 -0
- package/dist/primitives/slider/context.d.ts +12 -0
- package/dist/primitives/slider/context.js +18 -0
- package/dist/primitives/slider/index.d.ts +2 -0
- package/dist/primitives/slider/slider.d.ts +83 -0
- package/dist/primitives/slider/slider.js +99 -0
- package/dist/primitives/slider.d.ts +3 -0
- package/dist/primitives/slider.js +2 -0
- package/dist/primitives/switch.d.ts +1 -0
- package/dist/primitives/switch.js +2 -0
- package/dist/primitives/tabs.d.ts +7 -0
- package/dist/primitives/tabs.js +8 -0
- package/dist/primitives/toast/context.d.ts +11 -0
- package/dist/primitives/toast/context.js +18 -0
- package/dist/primitives/toast/index.d.ts +2 -0
- package/dist/primitives/toast/toast.d.ts +122 -0
- package/dist/primitives/toast/toast.js +133 -0
- package/dist/primitives/toast.d.ts +3 -0
- package/dist/primitives/toast.js +2 -0
- package/dist/primitives/toggle-group.d.ts +7 -0
- package/dist/primitives/toggle-group.js +8 -0
- package/dist/primitives/toggle.d.ts +7 -0
- package/dist/primitives/toggle.js +8 -0
- package/dist/primitives/toolbar.d.ts +7 -0
- package/dist/primitives/toolbar.js +8 -0
- package/dist/primitives/tooltip.d.ts +7 -0
- package/dist/primitives/tooltip.js +8 -0
- package/dist/props.d.ts +46 -0
- package/dist/props.js +46 -0
- package/dist/styles.css +11513 -0
- package/dist/tailwind/cn.d.ts +33 -0
- package/dist/tailwind/cn.js +42 -0
- package/dist/tailwind/index.d.ts +3 -0
- package/dist/tailwind/index.js +3 -0
- package/dist/tailwind/tv.d.ts +20 -0
- package/dist/tailwind/tv.js +11 -0
- package/dist/tailwind.css +485 -0
- package/dist/theme/react.d.ts +1 -0
- package/dist/theme/react.js +1 -0
- package/dist/theme.d.ts +1 -0
- package/dist/theme.js +1 -0
- package/dist/tokens/react.d.ts +1 -0
- package/dist/tokens/react.js +1 -0
- package/dist/tokens.d.ts +1 -0
- package/dist/tokens.js +1 -0
- package/package.json +121 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { AvatarIndicatorPlacement, AvatarIndicatorPreset, AvatarShape, AvatarSize, AvatarSpacing } from "./avatar.types.js";
|
|
2
|
+
import { AvatarFallbackPropsArgs, AvatarGroupPropsArgs, AvatarIndicatorPropsArgs, AvatarPartProps, AvatarRootPropsArgs, fallbackProps, groupOverflowProps, groupProps, imageProps, indicatorProps, rootProps } from "./avatar.props.js";
|
|
3
|
+
import { avatar_d_exports } from "../../primitives/avatar.js";
|
|
4
|
+
import * as _$react from "react";
|
|
5
|
+
import { ReactElement } from "react";
|
|
6
|
+
|
|
7
|
+
//#region src/components/avatar/avatar.d.ts
|
|
8
|
+
/**
|
|
9
|
+
* Owns the box footprint and shape, sharing them with the strip via the rendered `data-size`/`data-shape`
|
|
10
|
+
* the `avatar.css` keys its metrics off, and inheriting both from an enclosing `Avatar.Group`. Compose
|
|
11
|
+
* `Avatar.Image` (the photo) with `Avatar.Fallback` (initials or a glyph), which Base UI shows whenever
|
|
12
|
+
* the image is absent or fails to load; add an `Avatar.Indicator` for a presence/status dot.
|
|
13
|
+
*
|
|
14
|
+
* a11y is two-mode: by default the avatar is **decorative** (no role; pair it with a visible name and
|
|
15
|
+
* give `Avatar.Image` an empty `alt`). Pass `aria-label` to make it **informative** — a standalone
|
|
16
|
+
* avatar then announces itself once as an image (`role="img"`).
|
|
17
|
+
*/
|
|
18
|
+
declare function AvatarRoot({
|
|
19
|
+
size,
|
|
20
|
+
shape,
|
|
21
|
+
disabled,
|
|
22
|
+
ring,
|
|
23
|
+
role,
|
|
24
|
+
"aria-label": ariaLabel,
|
|
25
|
+
className,
|
|
26
|
+
children,
|
|
27
|
+
...props
|
|
28
|
+
}: Avatar.Root.Props): ReactElement;
|
|
29
|
+
/**
|
|
30
|
+
* The profile image. Crops to cover the box and follows its shape; Base UI swaps it out for the
|
|
31
|
+
* `Avatar.Fallback` when `src` is missing or the load errors, and cross-fades it in on load. Keep `alt`
|
|
32
|
+
* empty (`""`) in the decorative case — the surrounding name is the accessible label.
|
|
33
|
+
*/
|
|
34
|
+
declare function AvatarImage({
|
|
35
|
+
onLoadingStatusChange,
|
|
36
|
+
className,
|
|
37
|
+
...props
|
|
38
|
+
}: Avatar.Image.Props): ReactElement;
|
|
39
|
+
/**
|
|
40
|
+
* Shown when no image loads — initials or a glyph on a static, accent-independent swatch. Pass `seed`
|
|
41
|
+
* (a user id, name, or email) to hash a stable `bg-avatar-N` colour, so the same person always gets the
|
|
42
|
+
* same hue; omit it for the neutral muted fill. Base UI handles the `delay` before it appears.
|
|
43
|
+
*/
|
|
44
|
+
declare function AvatarFallback({
|
|
45
|
+
seed,
|
|
46
|
+
className,
|
|
47
|
+
children,
|
|
48
|
+
...props
|
|
49
|
+
}: Avatar.Fallback.Props): ReactElement;
|
|
50
|
+
/**
|
|
51
|
+
* A corner presence/status dot. The `preset` picks both the fill — a `--noctis-color-presence-*` role
|
|
52
|
+
* (online/busy/focus/away/offline) or a status role (approved/declined/locked) — and a default
|
|
53
|
+
* localized screen-reader label, so the dot is never a colour-only signal. Override the announced text
|
|
54
|
+
* with `aria-label`. Carries a canvas-coloured ring so it reads against the photo.
|
|
55
|
+
*/
|
|
56
|
+
declare function AvatarIndicator({
|
|
57
|
+
preset,
|
|
58
|
+
placement,
|
|
59
|
+
"aria-label": ariaLabel,
|
|
60
|
+
className,
|
|
61
|
+
children,
|
|
62
|
+
...props
|
|
63
|
+
}: Avatar.Indicator.Props): ReactElement;
|
|
64
|
+
/**
|
|
65
|
+
* An opt-in loading placeholder shown only while an `Avatar.Image` is actively loading — distinct from
|
|
66
|
+
* the permanent `Avatar.Fallback` (shown on error or when there's no image). A muted fill that pulses
|
|
67
|
+
* gently, falling back to a static fill under reduced motion. Renders nothing once the image has loaded.
|
|
68
|
+
*/
|
|
69
|
+
declare function AvatarSkeleton({
|
|
70
|
+
className,
|
|
71
|
+
...props
|
|
72
|
+
}: Avatar.Skeleton.Props): ReactElement | null;
|
|
73
|
+
/**
|
|
74
|
+
* A facepile — a row of avatars overlapped with a canvas-coloured separating ring so each reads against
|
|
75
|
+
* the next. Set `size`/`shape` on the group and every child inherits them (an explicit prop on a child
|
|
76
|
+
* still wins). Beyond `max` avatars, the rest collapse into a non-interactive `+N` overflow chip.
|
|
77
|
+
*/
|
|
78
|
+
declare function AvatarGroup({
|
|
79
|
+
max,
|
|
80
|
+
size,
|
|
81
|
+
shape,
|
|
82
|
+
spacing,
|
|
83
|
+
role,
|
|
84
|
+
className,
|
|
85
|
+
children,
|
|
86
|
+
...props
|
|
87
|
+
}: Avatar.Group.Props): ReactElement;
|
|
88
|
+
/**
|
|
89
|
+
* The `+N` overflow chip an `Avatar.Group` renders for the members past `max`. A non-interactive,
|
|
90
|
+
* avatar-shaped count (so it overlaps and rings like the rest of the stack) — Avatar represents avatars,
|
|
91
|
+
* not controls, so it is plain markup, not a button. The visible `+N` is decorative; a visually-hidden
|
|
92
|
+
* "N more members" carries the count to assistive tech. To make the overflow actionable (reveal the
|
|
93
|
+
* hidden members), a consumer wraps the group/chip in their own trigger.
|
|
94
|
+
*/
|
|
95
|
+
declare function AvatarGroupOverflow({
|
|
96
|
+
count,
|
|
97
|
+
size,
|
|
98
|
+
shape,
|
|
99
|
+
"aria-label": label,
|
|
100
|
+
className,
|
|
101
|
+
children,
|
|
102
|
+
...props
|
|
103
|
+
}: Avatar.GroupOverflow.Props): ReactElement;
|
|
104
|
+
/**
|
|
105
|
+
* A user's profile picture, with a graceful fallback. `Avatar.Root` sets the footprint (`size`) and
|
|
106
|
+
* `shape` (a round `circle` or a rounded-corner box); `Avatar.Image` loads the photo and crops it to
|
|
107
|
+
* the box; `Avatar.Fallback` shows initials or a glyph on a stable, accent-independent swatch when no
|
|
108
|
+
* image loads. Built on Base UI's Avatar, so the image→fallback swap happens automatically on a load
|
|
109
|
+
* error, with no layout shift, and the image cross-fades in.
|
|
110
|
+
*
|
|
111
|
+
* Compose from parts: `Avatar.Root` owns the box, `Avatar.Image` the photo, `Avatar.Fallback` the
|
|
112
|
+
* initials behind it, `Avatar.Indicator` a presence/status dot, and `Avatar.Skeleton` a loading
|
|
113
|
+
* placeholder. Stack many with `Avatar.Group` (which renders an `Avatar.GroupOverflow` `+N` chip past
|
|
114
|
+
* its `max`).
|
|
115
|
+
*
|
|
116
|
+
* The runtime compound is a plain object (kept tree-shakeable); per-part prop and state types are
|
|
117
|
+
* exposed through the matching `Avatar` namespace — e.g. `Avatar.Fallback.Props`.
|
|
118
|
+
*/
|
|
119
|
+
declare const Avatar: {
|
|
120
|
+
/** Owns the footprint + shape. `Avatar.Root.props({ size, shape, ring, disabled })` → its spreadable prop bag. */Root: typeof AvatarRoot & {
|
|
121
|
+
props: typeof rootProps;
|
|
122
|
+
}; /** The profile image. `Avatar.Image.props()` → its spreadable prop bag. */
|
|
123
|
+
Image: typeof AvatarImage & {
|
|
124
|
+
props: typeof imageProps;
|
|
125
|
+
}; /** The fallback. `Avatar.Fallback.props({ seed })` → its spreadable prop bag for a foreign element. */
|
|
126
|
+
Fallback: typeof AvatarFallback & {
|
|
127
|
+
props: typeof fallbackProps;
|
|
128
|
+
}; /** The presence/status corner dot. `Avatar.Indicator.props({ preset, placement })` → its prop bag. */
|
|
129
|
+
Indicator: typeof AvatarIndicator & {
|
|
130
|
+
props: typeof indicatorProps;
|
|
131
|
+
}; /** The opt-in loading placeholder, shown only while an image loads. */
|
|
132
|
+
Skeleton: typeof AvatarSkeleton; /** A facepile of overlapped avatars. `Avatar.Group.props({ spacing })` → its prop bag. */
|
|
133
|
+
Group: typeof AvatarGroup & {
|
|
134
|
+
props: typeof groupProps;
|
|
135
|
+
}; /** The `+N` overflow chip. `Avatar.GroupOverflow.props({ size, shape })` → its prop bag. */
|
|
136
|
+
GroupOverflow: typeof AvatarGroupOverflow & {
|
|
137
|
+
props: typeof groupOverflowProps;
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* Per-part prop and state types, mirroring Base UI's `Component.Part.Props` convention. Types-only — it
|
|
142
|
+
* emits no runtime code and merges with the `Avatar` object above, so `Avatar.Fallback` is the component
|
|
143
|
+
* value while `Avatar.Fallback.Props` is its prop type.
|
|
144
|
+
*/
|
|
145
|
+
declare namespace Avatar {
|
|
146
|
+
/** Footprint scale — `2xs` … `xl`. */
|
|
147
|
+
type Size = AvatarSize;
|
|
148
|
+
/** Shape — `circle` or `rounded`. */
|
|
149
|
+
type Shape = AvatarShape;
|
|
150
|
+
/** The spreadable data-attribute prop bag every `Avatar.*.props()` returns (D12). */
|
|
151
|
+
type PartProps = AvatarPartProps;
|
|
152
|
+
namespace Root {
|
|
153
|
+
type Props = avatar_d_exports.Avatar.Root.Props & {
|
|
154
|
+
/**
|
|
155
|
+
* Footprint scale — height and width. Inherited from an enclosing `Avatar.Group` when unset.
|
|
156
|
+
* @default "md"
|
|
157
|
+
*/
|
|
158
|
+
size?: AvatarSize;
|
|
159
|
+
/**
|
|
160
|
+
* Shape — a round `circle` or a rounded-corner box. Inherited from an `Avatar.Group` when unset.
|
|
161
|
+
* @default "circle"
|
|
162
|
+
*/
|
|
163
|
+
shape?: AvatarShape;
|
|
164
|
+
/**
|
|
165
|
+
* Dim the avatar and gate its interactive states — an inactive or deactivated user.
|
|
166
|
+
* @default false
|
|
167
|
+
*/
|
|
168
|
+
disabled?: boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Draw a hairline ring separating the avatar from a same-toned surface.
|
|
171
|
+
* @default false
|
|
172
|
+
*/
|
|
173
|
+
ring?: boolean;
|
|
174
|
+
};
|
|
175
|
+
type State = avatar_d_exports.Avatar.Root.State;
|
|
176
|
+
/** Argument to the `Avatar.Root.props(...)` escape-hatch helper. */
|
|
177
|
+
type PropsArgs = AvatarRootPropsArgs;
|
|
178
|
+
}
|
|
179
|
+
namespace Image {
|
|
180
|
+
type Props = avatar_d_exports.Avatar.Image.Props;
|
|
181
|
+
type State = avatar_d_exports.Avatar.Image.State;
|
|
182
|
+
}
|
|
183
|
+
namespace Fallback {
|
|
184
|
+
type Props = avatar_d_exports.Avatar.Fallback.Props & {
|
|
185
|
+
/** A stable identifier hashed to one of ten `bg-avatar-N` swatches; omit for the neutral muted fill. */seed?: string;
|
|
186
|
+
};
|
|
187
|
+
type State = avatar_d_exports.Avatar.Fallback.State;
|
|
188
|
+
/** Argument to the `Avatar.Fallback.props(...)` escape-hatch helper. */
|
|
189
|
+
type PropsArgs = AvatarFallbackPropsArgs;
|
|
190
|
+
}
|
|
191
|
+
namespace Indicator {
|
|
192
|
+
type Props = Omit<_$react.ComponentPropsWithoutRef<"span">, "color"> & {
|
|
193
|
+
/** The presence (online/busy/focus/away/offline) or status (approved/declined/locked) preset. */preset: AvatarIndicatorPreset;
|
|
194
|
+
/**
|
|
195
|
+
* Which logical corner the dot sits in.
|
|
196
|
+
* @default "bottom"
|
|
197
|
+
*/
|
|
198
|
+
placement?: AvatarIndicatorPlacement;
|
|
199
|
+
};
|
|
200
|
+
/** Argument to the `Avatar.Indicator.props(...)` escape-hatch helper. */
|
|
201
|
+
type PropsArgs = AvatarIndicatorPropsArgs;
|
|
202
|
+
}
|
|
203
|
+
namespace Skeleton {
|
|
204
|
+
type Props = _$react.ComponentPropsWithoutRef<"span">;
|
|
205
|
+
}
|
|
206
|
+
namespace Group {
|
|
207
|
+
type Props = Omit<_$react.ComponentPropsWithoutRef<"div">, "color"> & {
|
|
208
|
+
/**
|
|
209
|
+
* The maximum number of avatars shown before the rest collapse into a `+N` overflow chip.
|
|
210
|
+
* @default 5
|
|
211
|
+
*/
|
|
212
|
+
max?: number; /** Footprint scale shared with every child avatar that doesn't set its own. */
|
|
213
|
+
size?: AvatarSize; /** Shape shared with every child avatar that doesn't set its own. */
|
|
214
|
+
shape?: AvatarShape;
|
|
215
|
+
/**
|
|
216
|
+
* How tightly the avatars overlap.
|
|
217
|
+
* @default "cozy"
|
|
218
|
+
*/
|
|
219
|
+
spacing?: AvatarSpacing;
|
|
220
|
+
};
|
|
221
|
+
/** Argument to the `Avatar.Group.props(...)` escape-hatch helper. */
|
|
222
|
+
type PropsArgs = AvatarGroupPropsArgs;
|
|
223
|
+
}
|
|
224
|
+
namespace GroupOverflow {
|
|
225
|
+
type Props = _$react.ComponentPropsWithoutRef<"span"> & {
|
|
226
|
+
/** The number of hidden members — rendered as `+{count}`. Supplied by `Avatar.Group`. */count: number; /** Footprint scale; inherited from the group when unset. */
|
|
227
|
+
size?: AvatarSize; /** Shape; inherited from the group when unset. */
|
|
228
|
+
shape?: AvatarShape;
|
|
229
|
+
};
|
|
230
|
+
/** Argument to the `Avatar.GroupOverflow.props(...)` escape-hatch helper. */
|
|
231
|
+
type PropsArgs = AvatarRootPropsArgs;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//#endregion
|
|
235
|
+
export { Avatar };
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useNoctisStringFormatter } from "../../core/use-injected-labels.js";
|
|
3
|
+
import { VisuallyHidden } from "../../core/visually-hidden/visually-hidden.js";
|
|
4
|
+
import { avatar_exports } from "../../primitives/avatar.js";
|
|
5
|
+
import { AvatarGroupProvider, AvatarImageStatusProvider, useAvatarGroup, useAvatarImageStatus } from "./avatar.context.js";
|
|
6
|
+
import { AVATAR_SLOTS } from "./avatar.slots.js";
|
|
7
|
+
import { fallbackProps, groupOverflowProps, groupProps, imageProps, indicatorProps, rootProps } from "./avatar.props.js";
|
|
8
|
+
import { Children, isValidElement, useMemo, useState } from "react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { avatarIndex } from "@stridge/noctis-design-tokens";
|
|
11
|
+
//#region src/components/avatar/avatar.tsx
|
|
12
|
+
/** The presence presets, separated from status so the indicator picks the right localized SR key + role. */
|
|
13
|
+
const PRESENCE_PRESETS = new Set([
|
|
14
|
+
"online",
|
|
15
|
+
"busy",
|
|
16
|
+
"focus",
|
|
17
|
+
"away",
|
|
18
|
+
"offline"
|
|
19
|
+
]);
|
|
20
|
+
/**
|
|
21
|
+
* Owns the box footprint and shape, sharing them with the strip via the rendered `data-size`/`data-shape`
|
|
22
|
+
* the `avatar.css` keys its metrics off, and inheriting both from an enclosing `Avatar.Group`. Compose
|
|
23
|
+
* `Avatar.Image` (the photo) with `Avatar.Fallback` (initials or a glyph), which Base UI shows whenever
|
|
24
|
+
* the image is absent or fails to load; add an `Avatar.Indicator` for a presence/status dot.
|
|
25
|
+
*
|
|
26
|
+
* a11y is two-mode: by default the avatar is **decorative** (no role; pair it with a visible name and
|
|
27
|
+
* give `Avatar.Image` an empty `alt`). Pass `aria-label` to make it **informative** — a standalone
|
|
28
|
+
* avatar then announces itself once as an image (`role="img"`).
|
|
29
|
+
*/
|
|
30
|
+
function AvatarRoot({ size, shape, disabled, ring, role, "aria-label": ariaLabel, className, children, ...props }) {
|
|
31
|
+
const group = useAvatarGroup();
|
|
32
|
+
const resolvedSize = size ?? group?.size ?? "md";
|
|
33
|
+
const resolvedShape = shape ?? group?.shape ?? "circle";
|
|
34
|
+
const [status, setStatus] = useState("idle");
|
|
35
|
+
const statusValue = useMemo(() => ({
|
|
36
|
+
status,
|
|
37
|
+
setStatus
|
|
38
|
+
}), [status]);
|
|
39
|
+
return /* @__PURE__ */ jsx(avatar_exports.Avatar.Root, {
|
|
40
|
+
"data-slot": AVATAR_SLOTS.root,
|
|
41
|
+
"data-size": resolvedSize,
|
|
42
|
+
"data-shape": resolvedShape,
|
|
43
|
+
"data-disabled": disabled ? "" : void 0,
|
|
44
|
+
"data-ring": ring ? "" : void 0,
|
|
45
|
+
role: role ?? (ariaLabel ? "img" : void 0),
|
|
46
|
+
"aria-label": ariaLabel,
|
|
47
|
+
className,
|
|
48
|
+
...props,
|
|
49
|
+
children: /* @__PURE__ */ jsx(AvatarImageStatusProvider, {
|
|
50
|
+
value: statusValue,
|
|
51
|
+
children
|
|
52
|
+
})
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The profile image. Crops to cover the box and follows its shape; Base UI swaps it out for the
|
|
57
|
+
* `Avatar.Fallback` when `src` is missing or the load errors, and cross-fades it in on load. Keep `alt`
|
|
58
|
+
* empty (`""`) in the decorative case — the surrounding name is the accessible label.
|
|
59
|
+
*/
|
|
60
|
+
function AvatarImage({ onLoadingStatusChange, className, ...props }) {
|
|
61
|
+
const imageStatus = useAvatarImageStatus();
|
|
62
|
+
const handleLoadingStatusChange = (next) => {
|
|
63
|
+
imageStatus?.setStatus(next);
|
|
64
|
+
onLoadingStatusChange?.(next);
|
|
65
|
+
};
|
|
66
|
+
return /* @__PURE__ */ jsx(avatar_exports.Avatar.Image, {
|
|
67
|
+
"data-slot": AVATAR_SLOTS.image,
|
|
68
|
+
onLoadingStatusChange: handleLoadingStatusChange,
|
|
69
|
+
className,
|
|
70
|
+
...props
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Shown when no image loads — initials or a glyph on a static, accent-independent swatch. Pass `seed`
|
|
75
|
+
* (a user id, name, or email) to hash a stable `bg-avatar-N` colour, so the same person always gets the
|
|
76
|
+
* same hue; omit it for the neutral muted fill. Base UI handles the `delay` before it appears.
|
|
77
|
+
*/
|
|
78
|
+
function AvatarFallback({ seed, className, children, ...props }) {
|
|
79
|
+
const dataIndex = seed === void 0 ? void 0 : String(avatarIndex(seed));
|
|
80
|
+
return /* @__PURE__ */ jsx(avatar_exports.Avatar.Fallback, {
|
|
81
|
+
"data-slot": AVATAR_SLOTS.fallback,
|
|
82
|
+
"data-avatar-index": dataIndex,
|
|
83
|
+
className,
|
|
84
|
+
...props,
|
|
85
|
+
children
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* A corner presence/status dot. The `preset` picks both the fill — a `--noctis-color-presence-*` role
|
|
90
|
+
* (online/busy/focus/away/offline) or a status role (approved/declined/locked) — and a default
|
|
91
|
+
* localized screen-reader label, so the dot is never a colour-only signal. Override the announced text
|
|
92
|
+
* with `aria-label`. Carries a canvas-coloured ring so it reads against the photo.
|
|
93
|
+
*/
|
|
94
|
+
function AvatarIndicator({ preset, placement = "bottom", "aria-label": ariaLabel, className, children, ...props }) {
|
|
95
|
+
const formatter = useNoctisStringFormatter();
|
|
96
|
+
const family = PRESENCE_PRESETS.has(preset) ? "presence" : "status";
|
|
97
|
+
const label = ariaLabel ?? formatter.format(`avatar.${family}.${preset}`);
|
|
98
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
99
|
+
"data-slot": AVATAR_SLOTS.indicator,
|
|
100
|
+
"data-preset": preset,
|
|
101
|
+
"data-placement": placement,
|
|
102
|
+
className,
|
|
103
|
+
...props,
|
|
104
|
+
children: [/* @__PURE__ */ jsx(VisuallyHidden, { children: label }), children]
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* An opt-in loading placeholder shown only while an `Avatar.Image` is actively loading — distinct from
|
|
109
|
+
* the permanent `Avatar.Fallback` (shown on error or when there's no image). A muted fill that pulses
|
|
110
|
+
* gently, falling back to a static fill under reduced motion. Renders nothing once the image has loaded.
|
|
111
|
+
*/
|
|
112
|
+
function AvatarSkeleton({ className, ...props }) {
|
|
113
|
+
if (useAvatarImageStatus()?.status !== "loading") return null;
|
|
114
|
+
return /* @__PURE__ */ jsx("span", {
|
|
115
|
+
"data-slot": AVATAR_SLOTS.skeleton,
|
|
116
|
+
"aria-hidden": true,
|
|
117
|
+
className,
|
|
118
|
+
...props
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* A facepile — a row of avatars overlapped with a canvas-coloured separating ring so each reads against
|
|
123
|
+
* the next. Set `size`/`shape` on the group and every child inherits them (an explicit prop on a child
|
|
124
|
+
* still wins). Beyond `max` avatars, the rest collapse into a non-interactive `+N` overflow chip.
|
|
125
|
+
*/
|
|
126
|
+
function AvatarGroup({ max = 5, size, shape, spacing = "cozy", role = "group", className, children, ...props }) {
|
|
127
|
+
const items = Children.toArray(children).filter(isValidElement);
|
|
128
|
+
const visible = items.slice(0, max);
|
|
129
|
+
const overflow = items.length - visible.length;
|
|
130
|
+
return /* @__PURE__ */ jsx("div", {
|
|
131
|
+
"data-slot": AVATAR_SLOTS.group,
|
|
132
|
+
"data-spacing": spacing,
|
|
133
|
+
role,
|
|
134
|
+
className,
|
|
135
|
+
...props,
|
|
136
|
+
children: /* @__PURE__ */ jsxs(AvatarGroupProvider, {
|
|
137
|
+
value: {
|
|
138
|
+
size,
|
|
139
|
+
shape
|
|
140
|
+
},
|
|
141
|
+
children: [visible, overflow > 0 ? /* @__PURE__ */ jsx(AvatarGroupOverflow, {
|
|
142
|
+
count: overflow,
|
|
143
|
+
size,
|
|
144
|
+
shape
|
|
145
|
+
}) : null]
|
|
146
|
+
})
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* The `+N` overflow chip an `Avatar.Group` renders for the members past `max`. A non-interactive,
|
|
151
|
+
* avatar-shaped count (so it overlaps and rings like the rest of the stack) — Avatar represents avatars,
|
|
152
|
+
* not controls, so it is plain markup, not a button. The visible `+N` is decorative; a visually-hidden
|
|
153
|
+
* "N more members" carries the count to assistive tech. To make the overflow actionable (reveal the
|
|
154
|
+
* hidden members), a consumer wraps the group/chip in their own trigger.
|
|
155
|
+
*/
|
|
156
|
+
function AvatarGroupOverflow({ count, size, shape, "aria-label": label, className, children, ...props }) {
|
|
157
|
+
const group = useAvatarGroup();
|
|
158
|
+
const resolvedSize = size ?? group?.size ?? "md";
|
|
159
|
+
const resolvedShape = shape ?? group?.shape ?? "circle";
|
|
160
|
+
const formatter = useNoctisStringFormatter();
|
|
161
|
+
const announced = label ?? formatter.format("avatar.overflowLabel", { count });
|
|
162
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
163
|
+
"data-slot": AVATAR_SLOTS.root,
|
|
164
|
+
"data-size": resolvedSize,
|
|
165
|
+
"data-shape": resolvedShape,
|
|
166
|
+
"data-avatar-overflow": "",
|
|
167
|
+
className,
|
|
168
|
+
...props,
|
|
169
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
170
|
+
"data-slot": AVATAR_SLOTS.fallback,
|
|
171
|
+
"aria-hidden": true,
|
|
172
|
+
children: children ?? `+${count}`
|
|
173
|
+
}), /* @__PURE__ */ jsx(VisuallyHidden, { children: announced })]
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* A user's profile picture, with a graceful fallback. `Avatar.Root` sets the footprint (`size`) and
|
|
178
|
+
* `shape` (a round `circle` or a rounded-corner box); `Avatar.Image` loads the photo and crops it to
|
|
179
|
+
* the box; `Avatar.Fallback` shows initials or a glyph on a stable, accent-independent swatch when no
|
|
180
|
+
* image loads. Built on Base UI's Avatar, so the image→fallback swap happens automatically on a load
|
|
181
|
+
* error, with no layout shift, and the image cross-fades in.
|
|
182
|
+
*
|
|
183
|
+
* Compose from parts: `Avatar.Root` owns the box, `Avatar.Image` the photo, `Avatar.Fallback` the
|
|
184
|
+
* initials behind it, `Avatar.Indicator` a presence/status dot, and `Avatar.Skeleton` a loading
|
|
185
|
+
* placeholder. Stack many with `Avatar.Group` (which renders an `Avatar.GroupOverflow` `+N` chip past
|
|
186
|
+
* its `max`).
|
|
187
|
+
*
|
|
188
|
+
* The runtime compound is a plain object (kept tree-shakeable); per-part prop and state types are
|
|
189
|
+
* exposed through the matching `Avatar` namespace — e.g. `Avatar.Fallback.Props`.
|
|
190
|
+
*/
|
|
191
|
+
const Avatar = {
|
|
192
|
+
/** Owns the footprint + shape. `Avatar.Root.props({ size, shape, ring, disabled })` → its spreadable prop bag. */
|
|
193
|
+
Root: Object.assign(AvatarRoot, { props: rootProps }),
|
|
194
|
+
/** The profile image. `Avatar.Image.props()` → its spreadable prop bag. */
|
|
195
|
+
Image: Object.assign(AvatarImage, { props: imageProps }),
|
|
196
|
+
/** The fallback. `Avatar.Fallback.props({ seed })` → its spreadable prop bag for a foreign element. */
|
|
197
|
+
Fallback: Object.assign(AvatarFallback, { props: fallbackProps }),
|
|
198
|
+
/** The presence/status corner dot. `Avatar.Indicator.props({ preset, placement })` → its prop bag. */
|
|
199
|
+
Indicator: Object.assign(AvatarIndicator, { props: indicatorProps }),
|
|
200
|
+
/** The opt-in loading placeholder, shown only while an image loads. */
|
|
201
|
+
Skeleton: AvatarSkeleton,
|
|
202
|
+
/** A facepile of overlapped avatars. `Avatar.Group.props({ spacing })` → its prop bag. */
|
|
203
|
+
Group: Object.assign(AvatarGroup, { props: groupProps }),
|
|
204
|
+
/** The `+N` overflow chip. `Avatar.GroupOverflow.props({ size, shape })` → its prop bag. */
|
|
205
|
+
GroupOverflow: Object.assign(AvatarGroupOverflow, { props: groupOverflowProps })
|
|
206
|
+
};
|
|
207
|
+
//#endregion
|
|
208
|
+
export { Avatar };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { AvatarIndicatorPlacement, AvatarIndicatorPreset, AvatarShape, AvatarSize, AvatarSpacing } from "./avatar.types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/components/avatar/avatar.props.d.ts
|
|
4
|
+
/** A spreadable data-attribute prop bag — the shape every `Avatar.*.props()` returns. */
|
|
5
|
+
type AvatarPartProps = {
|
|
6
|
+
/** The slot value the matching `avatar.css` rules anchor on. */"data-slot": string; /** Forwarded verbatim — styling is attribute-driven, so this is an optional consumer passthrough. */
|
|
7
|
+
className?: string; /** A data-attribute present (string) or absent (`undefined`); never `false`. */
|
|
8
|
+
[attr: `data-${string}`]: string | undefined;
|
|
9
|
+
};
|
|
10
|
+
/** Common shape: every part's `.props()` accepts an optional `className` passthrough. */
|
|
11
|
+
interface BasePropsArgs {
|
|
12
|
+
/** Forwarded verbatim onto the returned prop bag. */
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Argument to `Avatar.Root.props(...)` — the box's size + shape and its ring/disabled flags. */
|
|
16
|
+
interface AvatarRootPropsArgs extends BasePropsArgs {
|
|
17
|
+
/** Footprint scale — `2xs` | `xs` | `sm` | `md` | `lg` | `xl`. @default "md" */
|
|
18
|
+
size?: AvatarSize;
|
|
19
|
+
/** Shape — `circle` (fully round) or `rounded` (rounded corners). @default "circle" */
|
|
20
|
+
shape?: AvatarShape;
|
|
21
|
+
/** Dim the avatar and gate its interactive states — an inactive/deactivated user. @default false */
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
/** Draw a hairline ring separating the avatar from a same-toned surface. @default false */
|
|
24
|
+
ring?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** Argument to a stateless part's `.props(...)` — no recipe of its own; metrics flow from the root. */
|
|
27
|
+
type AvatarStatelessPropsArgs = BasePropsArgs;
|
|
28
|
+
/** Argument to `Avatar.Fallback.props(...)` — the seed that selects the static swatch the fill reads. */
|
|
29
|
+
interface AvatarFallbackPropsArgs extends BasePropsArgs {
|
|
30
|
+
/**
|
|
31
|
+
* A stable identifier (a user id, name, or email) hashed to one of the ten `bg-avatar-N` swatches,
|
|
32
|
+
* so the same person always lands on the same colour. Omit to fall back to the neutral muted fill.
|
|
33
|
+
*/
|
|
34
|
+
seed?: string;
|
|
35
|
+
}
|
|
36
|
+
/** Argument to `Avatar.Indicator.props(...)` — the corner presence/status dot's preset and placement. */
|
|
37
|
+
interface AvatarIndicatorPropsArgs extends BasePropsArgs {
|
|
38
|
+
/** The presence (online/busy/focus/away/offline) or status (approved/declined/locked) preset. */
|
|
39
|
+
preset: AvatarIndicatorPreset;
|
|
40
|
+
/** Which logical corner the dot sits in. @default "bottom" */
|
|
41
|
+
placement?: AvatarIndicatorPlacement;
|
|
42
|
+
}
|
|
43
|
+
/** Argument to `Avatar.Group.props(...)` — the overlapped row's spacing tightness. */
|
|
44
|
+
interface AvatarGroupPropsArgs extends BasePropsArgs {
|
|
45
|
+
/** How tightly the avatars overlap. @default "cozy" */
|
|
46
|
+
spacing?: AvatarSpacing;
|
|
47
|
+
}
|
|
48
|
+
/** Root prop bag: `data-slot` plus the `data-size`/`data-shape` the descendant rules read, and the flags. */
|
|
49
|
+
declare function rootProps({
|
|
50
|
+
size,
|
|
51
|
+
shape,
|
|
52
|
+
disabled,
|
|
53
|
+
ring,
|
|
54
|
+
className
|
|
55
|
+
}?: AvatarRootPropsArgs): AvatarPartProps;
|
|
56
|
+
/** Image prop bag: just the slot anchor (the box metrics flow from the root). */
|
|
57
|
+
declare function imageProps({
|
|
58
|
+
className
|
|
59
|
+
}?: AvatarStatelessPropsArgs): AvatarPartProps;
|
|
60
|
+
/** Fallback prop bag: the slot anchor plus the hashed `data-avatar-index` that selects the swatch fill. */
|
|
61
|
+
declare function fallbackProps({
|
|
62
|
+
seed,
|
|
63
|
+
className
|
|
64
|
+
}?: AvatarFallbackPropsArgs): AvatarPartProps;
|
|
65
|
+
/** Indicator prop bag: the slot anchor plus the `data-preset`/`data-placement` the dot reads its fill + corner off. */
|
|
66
|
+
declare function indicatorProps({
|
|
67
|
+
preset,
|
|
68
|
+
placement,
|
|
69
|
+
className
|
|
70
|
+
}: AvatarIndicatorPropsArgs): AvatarPartProps;
|
|
71
|
+
/** Group prop bag: the slot anchor plus the `data-spacing` the overlap rules key off. */
|
|
72
|
+
declare function groupProps({
|
|
73
|
+
spacing,
|
|
74
|
+
className
|
|
75
|
+
}?: AvatarGroupPropsArgs): AvatarPartProps;
|
|
76
|
+
/**
|
|
77
|
+
* Overflow-chip prop bag: the `+N` chip reuses the `noctis-avatar` slot (so it inherits the box,
|
|
78
|
+
* overlap, and separating ring) marked with `data-avatar-overflow`. Spread onto the non-interactive chip.
|
|
79
|
+
*/
|
|
80
|
+
declare function groupOverflowProps({
|
|
81
|
+
size,
|
|
82
|
+
shape,
|
|
83
|
+
className
|
|
84
|
+
}?: AvatarRootPropsArgs): AvatarPartProps;
|
|
85
|
+
//#endregion
|
|
86
|
+
export { AvatarFallbackPropsArgs, AvatarGroupPropsArgs, AvatarIndicatorPropsArgs, AvatarPartProps, AvatarRootPropsArgs, fallbackProps, groupOverflowProps, groupProps, imageProps, indicatorProps, rootProps };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { AVATAR_SLOTS } from "./avatar.slots.js";
|
|
2
|
+
import { avatarIndex } from "@stridge/noctis-design-tokens";
|
|
3
|
+
//#region src/components/avatar/avatar.props.ts
|
|
4
|
+
/**
|
|
5
|
+
* The D12 unified variant contract for Avatar — the data-attribute-native styling helpers.
|
|
6
|
+
*
|
|
7
|
+
* Each compound part exposes a `props(...)` builder returning a **spreadable props object** of the form
|
|
8
|
+
* `{ "data-slot": "noctis-avatar-<part>", ...dataAttrs }`, derived from the part's size/shape/seed
|
|
9
|
+
* inputs. Under the single-`data-slot` anchor model the `data-slot` is the only styling hook needed —
|
|
10
|
+
* `avatar.css` keys every rule off it plus the `data-*` recipe — so spreading a part's `props()` onto a
|
|
11
|
+
* *foreign* element styles it as that part:
|
|
12
|
+
*
|
|
13
|
+
* <span {...Avatar.Root.props({ size: "lg" })}>
|
|
14
|
+
* <img {...Avatar.Image.props()} src="…" alt="Ada" />
|
|
15
|
+
* </span>
|
|
16
|
+
* // → <span data-slot="noctis-avatar" data-size="lg" data-shape="circle">
|
|
17
|
+
*
|
|
18
|
+
* The escape hatch carries no className (styling is attribute-driven); an optional `className`
|
|
19
|
+
* passthrough is accepted and forwarded verbatim. The same variant→data-attribute→values mapping is
|
|
20
|
+
* emitted as data from the token graph (`generated/declarations.json` → `variantSchema`) so non-React /
|
|
21
|
+
* agent consumers can hand-write the markup from the docs.
|
|
22
|
+
*/
|
|
23
|
+
const withClassName = (bag, className) => className === void 0 ? bag : {
|
|
24
|
+
...bag,
|
|
25
|
+
className
|
|
26
|
+
};
|
|
27
|
+
/** A boolean flag → a present (empty-string) or absent data-attribute; never `false`. */
|
|
28
|
+
const flag = (on) => on ? "" : void 0;
|
|
29
|
+
/** Root prop bag: `data-slot` plus the `data-size`/`data-shape` the descendant rules read, and the flags. */
|
|
30
|
+
function rootProps({ size = "md", shape = "circle", disabled, ring, className } = {}) {
|
|
31
|
+
return withClassName({
|
|
32
|
+
"data-slot": AVATAR_SLOTS.root,
|
|
33
|
+
"data-size": size,
|
|
34
|
+
"data-shape": shape,
|
|
35
|
+
"data-disabled": flag(disabled),
|
|
36
|
+
"data-ring": flag(ring)
|
|
37
|
+
}, className);
|
|
38
|
+
}
|
|
39
|
+
/** Image prop bag: just the slot anchor (the box metrics flow from the root). */
|
|
40
|
+
function imageProps({ className } = {}) {
|
|
41
|
+
return withClassName({ "data-slot": AVATAR_SLOTS.image }, className);
|
|
42
|
+
}
|
|
43
|
+
/** Fallback prop bag: the slot anchor plus the hashed `data-avatar-index` that selects the swatch fill. */
|
|
44
|
+
function fallbackProps({ seed, className } = {}) {
|
|
45
|
+
return withClassName({
|
|
46
|
+
"data-slot": AVATAR_SLOTS.fallback,
|
|
47
|
+
"data-avatar-index": seed === void 0 ? void 0 : String(avatarIndex(seed))
|
|
48
|
+
}, className);
|
|
49
|
+
}
|
|
50
|
+
/** Indicator prop bag: the slot anchor plus the `data-preset`/`data-placement` the dot reads its fill + corner off. */
|
|
51
|
+
function indicatorProps({ preset, placement = "bottom", className }) {
|
|
52
|
+
return withClassName({
|
|
53
|
+
"data-slot": AVATAR_SLOTS.indicator,
|
|
54
|
+
"data-preset": preset,
|
|
55
|
+
"data-placement": placement
|
|
56
|
+
}, className);
|
|
57
|
+
}
|
|
58
|
+
/** Group prop bag: the slot anchor plus the `data-spacing` the overlap rules key off. */
|
|
59
|
+
function groupProps({ spacing = "cozy", className } = {}) {
|
|
60
|
+
return withClassName({
|
|
61
|
+
"data-slot": AVATAR_SLOTS.group,
|
|
62
|
+
"data-spacing": spacing
|
|
63
|
+
}, className);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Overflow-chip prop bag: the `+N` chip reuses the `noctis-avatar` slot (so it inherits the box,
|
|
67
|
+
* overlap, and separating ring) marked with `data-avatar-overflow`. Spread onto the non-interactive chip.
|
|
68
|
+
*/
|
|
69
|
+
function groupOverflowProps({ size = "md", shape = "circle", className } = {}) {
|
|
70
|
+
return withClassName({
|
|
71
|
+
"data-slot": AVATAR_SLOTS.root,
|
|
72
|
+
"data-size": size,
|
|
73
|
+
"data-shape": shape,
|
|
74
|
+
"data-avatar-overflow": ""
|
|
75
|
+
}, className);
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
export { fallbackProps, groupOverflowProps, groupProps, imageProps, indicatorProps, rootProps };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//#region src/components/avatar/avatar.slots.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* The `data-*` hooks `Avatar` stamps on its parts, for host-side styling and tests. Slot values mark
|
|
4
|
+
* each rendered element; the `data-size`/`data-shape` axes carry the recipe the precompiled
|
|
5
|
+
* `avatar.css` keys its box metrics off, and `data-avatar-index` selects which static fallback swatch
|
|
6
|
+
* paints. The group lays out an overlapped row (`data-spacing`); its `+N` overflow chip is a
|
|
7
|
+
* non-interactive avatar-shaped count marked with `data-avatar-overflow` (it reuses the `noctis-avatar`
|
|
8
|
+
* slot so it inherits the box/overlap/ring). Base UI's Avatar drives the
|
|
9
|
+
* image-loading status the fallback shows behind, plus the `data-starting-style` enter transition the
|
|
10
|
+
* image cross-fades on.
|
|
11
|
+
*/
|
|
12
|
+
declare enum AvatarDataAttributes {
|
|
13
|
+
/** The root avatar element. */
|
|
14
|
+
slot = "data-slot",
|
|
15
|
+
/** The size scale — `2xs` | `xs` | `sm` | `md` | `lg` | `xl`; the generated layer keys the per-size internals off it. */
|
|
16
|
+
size = "data-size",
|
|
17
|
+
/** The shape — `circle` (default, fully round) | `rounded` (rounded corners). */
|
|
18
|
+
shape = "data-shape",
|
|
19
|
+
/** `1`–`10`, the stable hashed swatch index the fallback fill reads its `bg-avatar-N` role from. */
|
|
20
|
+
avatarIndex = "data-avatar-index",
|
|
21
|
+
/** Present when the avatar is dimmed/inactive — gates interactive states and applies the disabled opacity. */
|
|
22
|
+
disabled = "data-disabled",
|
|
23
|
+
/** Present when the avatar carries a hairline ring separating it from its surface. */
|
|
24
|
+
ring = "data-ring",
|
|
25
|
+
/** The indicator preset — a presence or status value; the dot reads its fill role from it. */
|
|
26
|
+
preset = "data-preset",
|
|
27
|
+
/** The indicator's logical corner — `top` | `bottom` (default). */
|
|
28
|
+
placement = "data-placement",
|
|
29
|
+
/** The group's overlap tightness — `tight` | `cozy` (default). */
|
|
30
|
+
spacing = "data-spacing",
|
|
31
|
+
/** Marks the group's `+N` overflow chip (a non-interactive avatar-shaped count). */
|
|
32
|
+
overflow = "data-avatar-overflow"
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { AvatarDataAttributes };
|