@work-rjkashyap/unified-ui 0.3.3 → 0.3.5
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/CHANGELOG.md +105 -0
- package/LICENSE +21 -0
- package/dist/components/accordion.cjs +225 -0
- package/dist/components/accordion.d.cts +157 -0
- package/dist/components/accordion.d.ts +157 -0
- package/dist/components/accordion.mjs +199 -0
- package/dist/components/alert-dialog.cjs +246 -0
- package/dist/components/alert-dialog.d.cts +61 -0
- package/dist/components/alert-dialog.d.ts +61 -0
- package/dist/components/alert-dialog.mjs +218 -0
- package/dist/components/alert.cjs +401 -0
- package/dist/components/alert.d.cts +217 -0
- package/dist/components/alert.d.ts +217 -0
- package/dist/components/alert.mjs +374 -0
- package/dist/components/aspect-ratio.cjs +45 -0
- package/dist/components/aspect-ratio.d.cts +10 -0
- package/dist/components/aspect-ratio.d.ts +10 -0
- package/dist/components/aspect-ratio.mjs +23 -0
- package/dist/components/avatar.cjs +348 -0
- package/dist/components/avatar.d.cts +198 -0
- package/dist/components/avatar.d.ts +198 -0
- package/dist/components/avatar.mjs +329 -0
- package/dist/components/badge.cjs +325 -0
- package/dist/components/badge.d.cts +259 -0
- package/dist/components/badge.d.ts +259 -0
- package/dist/components/badge.mjs +298 -0
- package/dist/components/banner.cjs +147 -0
- package/dist/components/banner.d.cts +31 -0
- package/dist/components/banner.d.ts +31 -0
- package/dist/components/banner.mjs +122 -0
- package/dist/components/breadcrumb.cjs +266 -0
- package/dist/components/breadcrumb.d.cts +159 -0
- package/dist/components/breadcrumb.d.ts +159 -0
- package/dist/components/breadcrumb.mjs +235 -0
- package/dist/components/button.cjs +254 -0
- package/dist/components/button.d.cts +126 -0
- package/dist/components/button.d.ts +126 -0
- package/dist/components/button.mjs +229 -0
- package/dist/components/calendar.cjs +511 -0
- package/dist/components/calendar.d.cts +94 -0
- package/dist/components/calendar.d.ts +94 -0
- package/dist/components/calendar.mjs +492 -0
- package/dist/components/card.cjs +234 -0
- package/dist/components/card.d.cts +190 -0
- package/dist/components/card.d.ts +190 -0
- package/dist/components/card.mjs +210 -0
- package/dist/components/carousel.cjs +234 -0
- package/dist/components/carousel.d.cts +30 -0
- package/dist/components/carousel.d.ts +30 -0
- package/dist/components/carousel.mjs +217 -0
- package/dist/components/chart.cjs +122 -0
- package/dist/components/chart.d.cts +103 -0
- package/dist/components/chart.d.ts +103 -0
- package/dist/components/chart.mjs +96 -0
- package/dist/components/checkbox.cjs +318 -0
- package/dist/components/checkbox.d.cts +182 -0
- package/dist/components/checkbox.d.ts +182 -0
- package/dist/components/checkbox.mjs +296 -0
- package/dist/components/code-highlight.cjs +335 -0
- package/dist/components/code-highlight.d.cts +18 -0
- package/dist/components/code-highlight.d.ts +18 -0
- package/dist/components/code-highlight.mjs +308 -0
- package/dist/components/code.cjs +265 -0
- package/dist/components/code.d.cts +40 -0
- package/dist/components/code.d.ts +40 -0
- package/dist/components/code.mjs +243 -0
- package/dist/components/collapsible.cjs +143 -0
- package/dist/components/collapsible.d.cts +159 -0
- package/dist/components/collapsible.d.ts +159 -0
- package/dist/components/collapsible.mjs +123 -0
- package/dist/components/color-picker.cjs +348 -0
- package/dist/components/color-picker.d.cts +35 -0
- package/dist/components/color-picker.d.ts +35 -0
- package/dist/components/color-picker.mjs +331 -0
- package/dist/components/combobox.cjs +584 -0
- package/dist/components/combobox.d.cts +183 -0
- package/dist/components/combobox.d.ts +183 -0
- package/dist/components/combobox.mjs +571 -0
- package/dist/components/command.cjs +329 -0
- package/dist/components/command.d.cts +97 -0
- package/dist/components/command.d.ts +97 -0
- package/dist/components/command.mjs +311 -0
- package/dist/components/confirm-dialog.cjs +100 -0
- package/dist/components/confirm-dialog.d.cts +25 -0
- package/dist/components/confirm-dialog.d.ts +25 -0
- package/dist/components/confirm-dialog.mjs +86 -0
- package/dist/components/context-menu.cjs +325 -0
- package/dist/components/context-menu.d.cts +259 -0
- package/dist/components/context-menu.d.ts +259 -0
- package/dist/components/context-menu.mjs +290 -0
- package/dist/components/copy-button.cjs +203 -0
- package/dist/components/copy-button.d.cts +22 -0
- package/dist/components/copy-button.d.ts +22 -0
- package/dist/components/copy-button.mjs +178 -0
- package/dist/components/data-list.cjs +140 -0
- package/dist/components/data-list.d.cts +36 -0
- package/dist/components/data-list.d.ts +36 -0
- package/dist/components/data-list.mjs +113 -0
- package/dist/components/data-table-toolbar.cjs +338 -0
- package/dist/components/data-table-toolbar.d.cts +84 -0
- package/dist/components/data-table-toolbar.d.ts +84 -0
- package/dist/components/data-table-toolbar.mjs +320 -0
- package/dist/components/data-table.cjs +1324 -0
- package/dist/components/data-table.d.cts +349 -0
- package/dist/components/data-table.d.ts +349 -0
- package/dist/components/data-table.mjs +1323 -0
- package/dist/components/date-picker.cjs +282 -0
- package/dist/components/date-picker.d.cts +97 -0
- package/dist/components/date-picker.d.ts +97 -0
- package/dist/components/date-picker.mjs +258 -0
- package/dist/components/dialog.cjs +319 -0
- package/dist/components/dialog.d.cts +74 -0
- package/dist/components/dialog.d.ts +74 -0
- package/dist/components/dialog.mjs +292 -0
- package/dist/components/drawer.cjs +262 -0
- package/dist/components/drawer.d.cts +113 -0
- package/dist/components/drawer.d.ts +113 -0
- package/dist/components/drawer.mjs +230 -0
- package/dist/components/dropdown-menu.cjs +328 -0
- package/dist/components/dropdown-menu.d.cts +95 -0
- package/dist/components/dropdown-menu.d.ts +95 -0
- package/dist/components/dropdown-menu.mjs +293 -0
- package/dist/components/empty-state.cjs +123 -0
- package/dist/components/empty-state.d.cts +15 -0
- package/dist/components/empty-state.d.ts +15 -0
- package/dist/components/empty-state.mjs +99 -0
- package/dist/components/file-upload.cjs +442 -0
- package/dist/components/file-upload.d.cts +35 -0
- package/dist/components/file-upload.d.ts +35 -0
- package/dist/components/file-upload.mjs +423 -0
- package/dist/components/form-field.cjs +191 -0
- package/dist/components/form-field.d.cts +163 -0
- package/dist/components/form-field.d.ts +163 -0
- package/dist/components/form-field.mjs +167 -0
- package/dist/components/hover-card.cjs +99 -0
- package/dist/components/hover-card.d.cts +28 -0
- package/dist/components/hover-card.d.ts +28 -0
- package/dist/components/hover-card.mjs +75 -0
- package/dist/components/image-gallery.cjs +359 -0
- package/dist/components/image-gallery.d.cts +46 -0
- package/dist/components/image-gallery.d.ts +46 -0
- package/dist/components/image-gallery.mjs +340 -0
- package/dist/components/index.cjs +719 -0
- package/dist/components/index.d.cts +84 -0
- package/dist/components/index.d.ts +84 -0
- package/dist/components/index.mjs +771 -0
- package/dist/components/infinite-scroll.cjs +95 -0
- package/dist/components/infinite-scroll.d.cts +54 -0
- package/dist/components/infinite-scroll.d.ts +54 -0
- package/dist/components/infinite-scroll.mjs +71 -0
- package/dist/components/input-group.cjs +202 -0
- package/dist/components/input-group.d.cts +22 -0
- package/dist/components/input-group.d.ts +22 -0
- package/dist/components/input-group.mjs +178 -0
- package/dist/components/input.cjs +318 -0
- package/dist/components/input.d.cts +99 -0
- package/dist/components/input.d.ts +99 -0
- package/dist/components/input.mjs +296 -0
- package/dist/components/kbd.cjs +69 -0
- package/dist/components/kbd.d.cts +25 -0
- package/dist/components/kbd.d.ts +25 -0
- package/dist/components/kbd.mjs +44 -0
- package/dist/components/label.cjs +138 -0
- package/dist/components/label.d.cts +91 -0
- package/dist/components/label.d.ts +91 -0
- package/dist/components/label.mjs +113 -0
- package/dist/components/markdown.cjs +179 -0
- package/dist/components/markdown.d.cts +41 -0
- package/dist/components/markdown.d.ts +41 -0
- package/dist/components/markdown.mjs +155 -0
- package/dist/components/menubar.cjs +365 -0
- package/dist/components/menubar.d.cts +88 -0
- package/dist/components/menubar.d.ts +88 -0
- package/dist/components/menubar.mjs +329 -0
- package/dist/components/navigation-menu.cjs +280 -0
- package/dist/components/navigation-menu.d.cts +123 -0
- package/dist/components/navigation-menu.d.ts +123 -0
- package/dist/components/navigation-menu.mjs +250 -0
- package/dist/components/number-input.cjs +419 -0
- package/dist/components/number-input.d.cts +111 -0
- package/dist/components/number-input.d.ts +111 -0
- package/dist/components/number-input.mjs +400 -0
- package/dist/components/pagination.cjs +322 -0
- package/dist/components/pagination.d.cts +119 -0
- package/dist/components/pagination.d.ts +119 -0
- package/dist/components/pagination.mjs +297 -0
- package/dist/components/pin-input.cjs +321 -0
- package/dist/components/pin-input.d.cts +112 -0
- package/dist/components/pin-input.d.ts +112 -0
- package/dist/components/pin-input.mjs +303 -0
- package/dist/components/popover.cjs +194 -0
- package/dist/components/popover.d.cts +108 -0
- package/dist/components/popover.d.ts +108 -0
- package/dist/components/popover.mjs +168 -0
- package/dist/components/progress.cjs +237 -0
- package/dist/components/progress.d.cts +137 -0
- package/dist/components/progress.d.ts +137 -0
- package/dist/components/progress.mjs +211 -0
- package/dist/components/radio.cjs +344 -0
- package/dist/components/radio.d.cts +145 -0
- package/dist/components/radio.d.ts +145 -0
- package/dist/components/radio.mjs +320 -0
- package/dist/components/resizable.cjs +121 -0
- package/dist/components/resizable.d.cts +23 -0
- package/dist/components/resizable.d.ts +23 -0
- package/dist/components/resizable.mjs +99 -0
- package/dist/components/scroll-area.cjs +168 -0
- package/dist/components/scroll-area.d.cts +131 -0
- package/dist/components/scroll-area.d.ts +131 -0
- package/dist/components/scroll-area.mjs +143 -0
- package/dist/components/search-input.cjs +261 -0
- package/dist/components/search-input.d.cts +26 -0
- package/dist/components/search-input.d.ts +26 -0
- package/dist/components/search-input.mjs +243 -0
- package/dist/components/select.cjs +320 -0
- package/dist/components/select.d.cts +55 -0
- package/dist/components/select.d.ts +55 -0
- package/dist/components/select.mjs +288 -0
- package/dist/components/separator.cjs +193 -0
- package/dist/components/separator.d.cts +92 -0
- package/dist/components/separator.d.ts +92 -0
- package/dist/components/separator.mjs +170 -0
- package/dist/components/sheet.cjs +399 -0
- package/dist/components/sheet.d.cts +219 -0
- package/dist/components/sheet.d.ts +219 -0
- package/dist/components/sheet.mjs +379 -0
- package/dist/components/sidebar.cjs +1077 -0
- package/dist/components/sidebar.d.cts +733 -0
- package/dist/components/sidebar.d.ts +733 -0
- package/dist/components/sidebar.mjs +1033 -0
- package/dist/components/skeleton.cjs +210 -0
- package/dist/components/skeleton.d.cts +202 -0
- package/dist/components/skeleton.d.ts +202 -0
- package/dist/components/skeleton.mjs +182 -0
- package/dist/components/slider.cjs +319 -0
- package/dist/components/slider.d.cts +82 -0
- package/dist/components/slider.d.ts +82 -0
- package/dist/components/slider.mjs +296 -0
- package/dist/components/sonner.cjs +119 -0
- package/dist/components/sonner.d.cts +60 -0
- package/dist/components/sonner.d.ts +60 -0
- package/dist/components/sonner.mjs +94 -0
- package/dist/components/spinner.cjs +238 -0
- package/dist/components/spinner.d.cts +101 -0
- package/dist/components/spinner.d.ts +101 -0
- package/dist/components/spinner.mjs +213 -0
- package/dist/components/stat.cjs +180 -0
- package/dist/components/stat.d.cts +21 -0
- package/dist/components/stat.d.ts +21 -0
- package/dist/components/stat.mjs +161 -0
- package/dist/components/steps.cjs +228 -0
- package/dist/components/steps.d.cts +76 -0
- package/dist/components/steps.d.ts +76 -0
- package/dist/components/steps.mjs +207 -0
- package/dist/components/switch.cjs +243 -0
- package/dist/components/switch.d.cts +90 -0
- package/dist/components/switch.d.ts +90 -0
- package/dist/components/switch.mjs +228 -0
- package/dist/components/table.cjs +381 -0
- package/dist/components/table.d.cts +181 -0
- package/dist/components/table.d.ts +181 -0
- package/dist/components/table.mjs +349 -0
- package/dist/components/tabs.cjs +326 -0
- package/dist/components/tabs.d.cts +154 -0
- package/dist/components/tabs.d.ts +154 -0
- package/dist/components/tabs.mjs +304 -0
- package/dist/components/textarea.cjs +258 -0
- package/dist/components/textarea.d.cts +112 -0
- package/dist/components/textarea.d.ts +112 -0
- package/dist/components/textarea.mjs +233 -0
- package/dist/components/theme-toggle.cjs +282 -0
- package/dist/components/theme-toggle.d.cts +58 -0
- package/dist/components/theme-toggle.d.ts +58 -0
- package/dist/components/theme-toggle.mjs +258 -0
- package/dist/components/timeline.cjs +178 -0
- package/dist/components/timeline.d.cts +41 -0
- package/dist/components/timeline.d.ts +41 -0
- package/dist/components/timeline.mjs +157 -0
- package/dist/components/toast.cjs +546 -0
- package/dist/components/toast.d.cts +169 -0
- package/dist/components/toast.d.ts +169 -0
- package/dist/components/toast.mjs +528 -0
- package/dist/components/toggle-group.cjs +204 -0
- package/dist/components/toggle-group.d.cts +215 -0
- package/dist/components/toggle-group.d.ts +215 -0
- package/dist/components/toggle-group.mjs +180 -0
- package/dist/components/toggle.cjs +155 -0
- package/dist/components/toggle.d.cts +100 -0
- package/dist/components/toggle.d.ts +100 -0
- package/dist/components/toggle.mjs +130 -0
- package/dist/components/tooltip.cjs +155 -0
- package/dist/components/tooltip.d.cts +129 -0
- package/dist/components/tooltip.d.ts +129 -0
- package/dist/components/tooltip.mjs +132 -0
- package/dist/components/tree-view.cjs +450 -0
- package/dist/components/tree-view.d.cts +67 -0
- package/dist/components/tree-view.d.ts +67 -0
- package/dist/components/tree-view.mjs +433 -0
- package/dist/components/video-player.cjs +344 -0
- package/dist/components/video-player.d.cts +34 -0
- package/dist/components/video-player.d.ts +34 -0
- package/dist/components/video-player.mjs +320 -0
- package/dist/components/virtual-list.cjs +153 -0
- package/dist/components/virtual-list.d.cts +53 -0
- package/dist/components/virtual-list.d.ts +53 -0
- package/dist/components/virtual-list.mjs +136 -0
- package/dist/components/visually-hidden.cjs +43 -0
- package/dist/components/visually-hidden.d.cts +9 -0
- package/dist/components/visually-hidden.d.ts +9 -0
- package/dist/components/visually-hidden.mjs +21 -0
- package/dist/index.cjs +1081 -1933
- package/dist/index.d.cts +99 -11
- package/dist/index.d.ts +99 -11
- package/dist/index.mjs +1138 -16
- package/dist/motion/hooks.cjs +98 -0
- package/dist/motion/hooks.d.cts +32 -0
- package/dist/motion/hooks.d.ts +32 -0
- package/dist/motion/hooks.mjs +70 -0
- package/dist/motion/index.cjs +157 -0
- package/dist/motion/index.d.cts +5 -0
- package/dist/motion/index.d.ts +5 -0
- package/dist/motion/index.mjs +137 -0
- package/dist/motion/presets.cjs +609 -0
- package/dist/{motion.d.ts → motion/presets.d.cts} +1 -30
- package/dist/{motion.d.cts → motion/presets.d.ts} +1 -30
- package/dist/{chunk-PLRSH37T.mjs → motion/presets.mjs} +119 -126
- package/dist/primitives/container.cjs +88 -0
- package/dist/primitives/container.d.cts +82 -0
- package/dist/primitives/container.d.ts +82 -0
- package/dist/primitives/container.mjs +64 -0
- package/dist/primitives/divider.cjs +74 -0
- package/dist/primitives/divider.d.cts +30 -0
- package/dist/primitives/divider.d.ts +30 -0
- package/dist/primitives/divider.mjs +50 -0
- package/dist/primitives/index.cjs +54 -0
- package/dist/primitives/index.d.cts +6 -0
- package/dist/primitives/index.d.ts +6 -0
- package/dist/primitives/index.mjs +33 -0
- package/dist/primitives/stack.cjs +167 -0
- package/dist/primitives/stack.d.cts +132 -0
- package/dist/primitives/stack.d.ts +132 -0
- package/dist/primitives/stack.mjs +142 -0
- package/dist/primitives/typography.cjs +260 -0
- package/dist/primitives/typography.d.cts +157 -0
- package/dist/primitives/typography.d.ts +157 -0
- package/dist/primitives/typography.mjs +229 -0
- package/dist/theme/contract.cjs +246 -0
- package/dist/theme/contract.d.cts +76 -0
- package/dist/theme/contract.d.ts +76 -0
- package/dist/theme/contract.mjs +221 -0
- package/dist/theme/customizer-store.cjs +266 -0
- package/dist/theme/customizer-store.d.cts +76 -0
- package/dist/theme/customizer-store.d.ts +76 -0
- package/dist/theme/customizer-store.mjs +261 -0
- package/dist/theme/customizer.cjs +812 -0
- package/dist/theme/customizer.d.cts +13 -0
- package/dist/theme/customizer.d.ts +13 -0
- package/dist/theme/customizer.mjs +803 -0
- package/dist/theme/index.cjs +105 -0
- package/dist/theme/index.d.cts +13 -0
- package/dist/theme/index.d.ts +13 -0
- package/dist/theme/index.mjs +87 -0
- package/dist/theme/presets.cjs +1205 -0
- package/dist/theme/presets.d.cts +232 -0
- package/dist/theme/presets.d.ts +232 -0
- package/dist/theme/presets.mjs +1175 -0
- package/dist/theme/provider.cjs +122 -0
- package/dist/theme/provider.d.cts +57 -0
- package/dist/theme/provider.d.ts +57 -0
- package/dist/theme/provider.mjs +104 -0
- package/dist/{chunk-IVZAB7BV.mjs → tokens/colors.cjs} +212 -86
- package/dist/{z-index-Dd8IllRx.d.cts → tokens/colors.d.cts} +235 -72
- package/dist/{z-index-Dd8IllRx.d.ts → tokens/colors.d.ts} +235 -72
- package/dist/{chunk-ZBGR7MUW.cjs → tokens/colors.mjs} +165 -104
- package/dist/tokens/index.cjs +96 -0
- package/dist/tokens/index.d.cts +7 -0
- package/dist/tokens/index.d.ts +7 -0
- package/dist/tokens/index.mjs +71 -0
- package/dist/{chunk-XCKK6P46.cjs → tokens/motion.cjs} +46 -18
- package/dist/{motion-D9wQbcKL.d.cts → tokens/motion.d.cts} +1 -1
- package/dist/{motion-D9wQbcKL.d.ts → tokens/motion.d.ts} +1 -1
- package/dist/{chunk-EZ2L3XPS.mjs → tokens/motion.mjs} +16 -10
- package/dist/tokens/radius.cjs +41 -0
- package/dist/tokens/radius.d.cts +18 -0
- package/dist/tokens/radius.d.ts +18 -0
- package/dist/tokens/radius.mjs +17 -0
- package/dist/tokens/shadows.cjs +57 -0
- package/dist/tokens/shadows.d.cts +32 -0
- package/dist/tokens/shadows.d.ts +32 -0
- package/dist/tokens/shadows.mjs +32 -0
- package/dist/tokens/spacing.cjs +51 -0
- package/dist/tokens/spacing.d.cts +26 -0
- package/dist/tokens/spacing.d.ts +26 -0
- package/dist/{chunk-NMPHV6ZD.mjs → tokens/spacing.mjs} +4 -4
- package/dist/{chunk-ECIGDEAH.cjs → tokens/typography.cjs} +43 -16
- package/dist/{typography-DlvVjEdE.d.ts → tokens/typography.d.cts} +1 -1
- package/dist/{typography-DlvVjEdE.d.cts → tokens/typography.d.ts} +1 -1
- package/dist/{chunk-ITBG42M5.mjs → tokens/typography.mjs} +14 -9
- package/dist/tokens/z-index.cjs +47 -0
- package/dist/tokens/z-index.d.cts +24 -0
- package/dist/tokens/z-index.d.ts +24 -0
- package/dist/tokens/z-index.mjs +23 -0
- package/dist/utils/cn.cjs +102 -0
- package/dist/utils/cn.d.cts +84 -0
- package/dist/utils/cn.d.ts +84 -0
- package/dist/{chunk-ZT3PCXDF.mjs → utils/cn.mjs} +14 -7
- package/dist/{chunk-33QEKXRQ.cjs → utils/contrast.cjs} +68 -38
- package/dist/utils/contrast.d.cts +209 -0
- package/dist/utils/contrast.d.ts +209 -0
- package/dist/{chunk-5NZDQWRV.mjs → utils/contrast.mjs} +27 -18
- package/dist/utils/focus-ring.cjs +81 -0
- package/dist/utils/focus-ring.d.cts +80 -0
- package/dist/utils/focus-ring.d.ts +80 -0
- package/dist/utils/focus-ring.mjs +47 -0
- package/dist/utils/index.cjs +107 -0
- package/dist/utils/index.d.cts +6 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.mjs +88 -0
- package/dist/utils/types.cjs +38 -0
- package/dist/utils/types.d.cts +187 -0
- package/dist/utils/types.d.ts +187 -0
- package/dist/utils/types.mjs +13 -0
- package/package.json +191 -191
- package/dist/chunk-2JFREULQ.cjs +0 -29
- package/dist/chunk-3EHT6IOA.cjs +0 -49
- package/dist/chunk-4ON3M3OM.cjs +0 -73
- package/dist/chunk-5TP7J7T4.cjs +0 -1766
- package/dist/chunk-A2DGHQL2.cjs +0 -21808
- package/dist/chunk-EQWESXRH.mjs +0 -1735
- package/dist/chunk-F4JJFWWU.cjs +0 -604
- package/dist/chunk-FUWXGHWQ.cjs +0 -468
- package/dist/chunk-MBYCK2JJ.mjs +0 -37
- package/dist/chunk-OHEH57BV.mjs +0 -455
- package/dist/chunk-XAIUX2YS.mjs +0 -21477
- package/dist/components.cjs +0 -1247
- package/dist/components.d.cts +0 -7881
- package/dist/components.d.ts +0 -7881
- package/dist/components.mjs +0 -6
- package/dist/motion.cjs +0 -264
- package/dist/motion.mjs +0 -3
- package/dist/primitives.cjs +0 -57
- package/dist/primitives.d.cts +0 -390
- package/dist/primitives.d.ts +0 -390
- package/dist/primitives.mjs +0 -4
- package/dist/theme.cjs +0 -131
- package/dist/theme.d.cts +0 -414
- package/dist/theme.d.ts +0 -414
- package/dist/theme.mjs +0 -6
- package/dist/tokens.cjs +0 -137
- package/dist/tokens.d.cts +0 -30
- package/dist/tokens.d.ts +0 -30
- package/dist/tokens.mjs +0 -4
- package/dist/utils.cjs +0 -164
- package/dist/utils.d.cts +0 -525
- package/dist/utils.d.ts +0 -525
- package/dist/utils.mjs +0 -3
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
4
|
+
import { VariantProps } from 'class-variance-authority';
|
|
5
|
+
|
|
6
|
+
declare const avatarVariants: (props?: ({
|
|
7
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
8
|
+
shape?: "circle" | "square" | null | undefined;
|
|
9
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
10
|
+
type AvatarStatus = "online" | "offline" | "busy" | "away";
|
|
11
|
+
type AvatarSize = "xs" | "sm" | "md" | "lg" | "xl";
|
|
12
|
+
type AvatarShape = "circle" | "square";
|
|
13
|
+
interface AvatarProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "color">, VariantProps<typeof avatarVariants> {
|
|
14
|
+
/**
|
|
15
|
+
* Image source URL for the avatar.
|
|
16
|
+
* When provided, the component renders an `<img>` element.
|
|
17
|
+
* If the image fails to load, it falls back to initials or icon.
|
|
18
|
+
*/
|
|
19
|
+
src?: string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Alt text for the avatar image.
|
|
22
|
+
* Required for accessibility when `src` is provided.
|
|
23
|
+
* Also used as tooltip/title text.
|
|
24
|
+
*/
|
|
25
|
+
alt?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Full name of the user. Used to:
|
|
28
|
+
* 1. Generate initials for the fallback display
|
|
29
|
+
* 2. Provide alt text if `alt` is not explicitly set
|
|
30
|
+
*
|
|
31
|
+
* Initials are derived from the first letter of the first and last
|
|
32
|
+
* name segments (e.g. "Jane Doe" → "JD", "Alice" → "A").
|
|
33
|
+
*/
|
|
34
|
+
name?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Size of the avatar.
|
|
37
|
+
* @default "md"
|
|
38
|
+
*/
|
|
39
|
+
size?: AvatarSize;
|
|
40
|
+
/**
|
|
41
|
+
* Shape of the avatar.
|
|
42
|
+
* @default "circle"
|
|
43
|
+
*/
|
|
44
|
+
shape?: AvatarShape;
|
|
45
|
+
/**
|
|
46
|
+
* Status indicator displayed as a colored dot on the avatar.
|
|
47
|
+
* Position is automatically adjusted based on the avatar size.
|
|
48
|
+
*/
|
|
49
|
+
status?: AvatarStatus;
|
|
50
|
+
/**
|
|
51
|
+
* Custom accessible label for the status indicator.
|
|
52
|
+
* Overrides the default label derived from the status value.
|
|
53
|
+
*/
|
|
54
|
+
statusLabel?: string;
|
|
55
|
+
/**
|
|
56
|
+
* Custom fallback icon to display when no `src` or `name` is provided.
|
|
57
|
+
* Defaults to a generic user silhouette SVG.
|
|
58
|
+
*/
|
|
59
|
+
fallbackIcon?: ReactNode;
|
|
60
|
+
/**
|
|
61
|
+
* Custom background color class for the fallback state.
|
|
62
|
+
* Useful for generating unique colors per user.
|
|
63
|
+
*
|
|
64
|
+
* @example "bg-indigo-100 text-indigo-700"
|
|
65
|
+
*/
|
|
66
|
+
fallbackClassName?: string;
|
|
67
|
+
/** Additional CSS classes to merge on the root element. */
|
|
68
|
+
className?: string;
|
|
69
|
+
/** Content to render inside the avatar (overrides all fallback logic). */
|
|
70
|
+
children?: ReactNode;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Avatar — displays a user's profile image, initials, or a fallback icon.
|
|
74
|
+
*
|
|
75
|
+
* Built on the design system's token layer with CVA for variant composition.
|
|
76
|
+
* All colors, radii, spacing, and transitions come from CSS custom properties
|
|
77
|
+
* defined in design-system.css.
|
|
78
|
+
*
|
|
79
|
+
* The component automatically handles image loading and gracefully falls
|
|
80
|
+
* back to initials (derived from `name`) or a default user icon.
|
|
81
|
+
*
|
|
82
|
+
* Accessibility:
|
|
83
|
+
* - Images include `alt` text (falls back to `name` if not provided)
|
|
84
|
+
* - Fallback initials container has `role="img"` and `aria-label`
|
|
85
|
+
* - Status dot has `role="status"` and descriptive `aria-label`
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```tsx
|
|
89
|
+
* // With image
|
|
90
|
+
* <Avatar src="/photo.jpg" alt="Jane Doe" />
|
|
91
|
+
*
|
|
92
|
+
* // Initials fallback
|
|
93
|
+
* <Avatar name="Jane Doe" />
|
|
94
|
+
* <Avatar name="Jane Doe" size="lg" />
|
|
95
|
+
*
|
|
96
|
+
* // With status indicator
|
|
97
|
+
* <Avatar src="/photo.jpg" alt="Jane" status="online" />
|
|
98
|
+
* <Avatar name="Bob" status="busy" />
|
|
99
|
+
* <Avatar name="Charlie" status="away" size="sm" />
|
|
100
|
+
*
|
|
101
|
+
* // Square shape (for orgs/apps)
|
|
102
|
+
* <Avatar src="/logo.png" alt="Acme Inc" shape="square" />
|
|
103
|
+
*
|
|
104
|
+
* // All sizes
|
|
105
|
+
* <Avatar name="A" size="xs" />
|
|
106
|
+
* <Avatar name="A" size="sm" />
|
|
107
|
+
* <Avatar name="A" size="md" />
|
|
108
|
+
* <Avatar name="A" size="lg" />
|
|
109
|
+
* <Avatar name="A" size="xl" />
|
|
110
|
+
*
|
|
111
|
+
* // Custom fallback styling
|
|
112
|
+
* <Avatar name="Jane" fallbackClassName="bg-indigo-100 text-indigo-700" />
|
|
113
|
+
*
|
|
114
|
+
* // Custom fallback icon
|
|
115
|
+
* <Avatar fallbackIcon={<BotIcon className="size-[60%]" />} />
|
|
116
|
+
*
|
|
117
|
+
* // Custom children (overrides all fallback logic)
|
|
118
|
+
* <Avatar>
|
|
119
|
+
* <span>🎉</span>
|
|
120
|
+
* </Avatar>
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
declare const Avatar: react.ForwardRefExoticComponent<AvatarProps & react.RefAttributes<HTMLSpanElement>>;
|
|
124
|
+
interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
125
|
+
/**
|
|
126
|
+
* Maximum number of avatars to display before showing the "+N" overflow.
|
|
127
|
+
* Set to `0` or `Infinity` to disable truncation.
|
|
128
|
+
* @default 5
|
|
129
|
+
*/
|
|
130
|
+
max?: number;
|
|
131
|
+
/**
|
|
132
|
+
* Size applied to all child avatars and the overflow indicator.
|
|
133
|
+
* Overrides the `size` prop on individual Avatar children.
|
|
134
|
+
* @default "md"
|
|
135
|
+
*/
|
|
136
|
+
size?: AvatarSize;
|
|
137
|
+
/**
|
|
138
|
+
* Shape applied to all child avatars and the overflow indicator.
|
|
139
|
+
* Overrides the `shape` prop on individual Avatar children.
|
|
140
|
+
* @default "circle"
|
|
141
|
+
*/
|
|
142
|
+
shape?: AvatarShape;
|
|
143
|
+
/**
|
|
144
|
+
* Spacing between overlapping avatars (as a negative margin).
|
|
145
|
+
* @default "default" — uses size-appropriate overlap
|
|
146
|
+
*/
|
|
147
|
+
spacing?: "tight" | "default" | "loose";
|
|
148
|
+
/** Content — should be Avatar components. */
|
|
149
|
+
children?: ReactNode;
|
|
150
|
+
/** Additional CSS classes to merge on the wrapper. */
|
|
151
|
+
className?: string;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* AvatarGroup — stacks multiple avatars with overlap and "+N" overflow.
|
|
155
|
+
*
|
|
156
|
+
* Renders child Avatar components in a horizontal stack with negative
|
|
157
|
+
* margins for overlap. When the number of children exceeds `max`, the
|
|
158
|
+
* excess avatars are hidden and a "+N" overflow indicator is shown.
|
|
159
|
+
*
|
|
160
|
+
* The group enforces consistent `size` and `shape` across all children
|
|
161
|
+
* by cloning them with the group's props.
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```tsx
|
|
165
|
+
* // Basic group
|
|
166
|
+
* <AvatarGroup>
|
|
167
|
+
* <Avatar src="/a.jpg" alt="Alice" />
|
|
168
|
+
* <Avatar src="/b.jpg" alt="Bob" />
|
|
169
|
+
* <Avatar name="Charlie" />
|
|
170
|
+
* </AvatarGroup>
|
|
171
|
+
*
|
|
172
|
+
* // With max and overflow
|
|
173
|
+
* <AvatarGroup max={3}>
|
|
174
|
+
* <Avatar name="Alice" />
|
|
175
|
+
* <Avatar name="Bob" />
|
|
176
|
+
* <Avatar name="Charlie" />
|
|
177
|
+
* <Avatar name="Diana" />
|
|
178
|
+
* <Avatar name="Eve" />
|
|
179
|
+
* </AvatarGroup>
|
|
180
|
+
* // Renders: [Alice] [Bob] [Charlie] [+2]
|
|
181
|
+
*
|
|
182
|
+
* // Custom size and spacing
|
|
183
|
+
* <AvatarGroup size="lg" spacing="tight">
|
|
184
|
+
* <Avatar name="A" />
|
|
185
|
+
* <Avatar name="B" />
|
|
186
|
+
* <Avatar name="C" />
|
|
187
|
+
* </AvatarGroup>
|
|
188
|
+
*
|
|
189
|
+
* // Square group (for org logos)
|
|
190
|
+
* <AvatarGroup shape="square" size="sm">
|
|
191
|
+
* <Avatar src="/logo1.png" alt="Org 1" />
|
|
192
|
+
* <Avatar src="/logo2.png" alt="Org 2" />
|
|
193
|
+
* </AvatarGroup>
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
declare const AvatarGroup: react.ForwardRefExoticComponent<AvatarGroupProps & react.RefAttributes<HTMLDivElement>>;
|
|
197
|
+
|
|
198
|
+
export { Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarShape, type AvatarSize, type AvatarStatus, avatarVariants };
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from "../utils/cn";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import {
|
|
6
|
+
Children,
|
|
7
|
+
cloneElement,
|
|
8
|
+
forwardRef,
|
|
9
|
+
isValidElement,
|
|
10
|
+
useEffect,
|
|
11
|
+
useState
|
|
12
|
+
} from "react";
|
|
13
|
+
const avatarVariants = cva(
|
|
14
|
+
// Base styles — shared across all variants and sizes
|
|
15
|
+
[
|
|
16
|
+
// Layout
|
|
17
|
+
"relative inline-flex items-center justify-center shrink-0",
|
|
18
|
+
// Typography for fallback initials
|
|
19
|
+
"font-medium leading-none select-none",
|
|
20
|
+
// Default colors for fallback state
|
|
21
|
+
"bg-muted text-muted-foreground"
|
|
22
|
+
],
|
|
23
|
+
{
|
|
24
|
+
variants: {
|
|
25
|
+
// -----------------------------------------------------------------
|
|
26
|
+
// Size Variants
|
|
27
|
+
// -----------------------------------------------------------------
|
|
28
|
+
size: {
|
|
29
|
+
/**
|
|
30
|
+
* Extra small — 24px. Inline metadata, compact lists.
|
|
31
|
+
*/
|
|
32
|
+
xs: "size-6 text-[10px]",
|
|
33
|
+
/**
|
|
34
|
+
* Small — 32px. Table rows, compact cards.
|
|
35
|
+
*/
|
|
36
|
+
sm: "size-8 text-xs",
|
|
37
|
+
/**
|
|
38
|
+
* Medium — 40px. Default, cards, comments.
|
|
39
|
+
*/
|
|
40
|
+
md: "size-10 text-sm",
|
|
41
|
+
/**
|
|
42
|
+
* Large — 48px. Profile headers, featured content.
|
|
43
|
+
*/
|
|
44
|
+
lg: "size-12 text-base",
|
|
45
|
+
/**
|
|
46
|
+
* Extra large — 64px. Profile pages, hero sections.
|
|
47
|
+
*/
|
|
48
|
+
xl: "size-16 text-lg"
|
|
49
|
+
},
|
|
50
|
+
// -----------------------------------------------------------------
|
|
51
|
+
// Shape Variants
|
|
52
|
+
// -----------------------------------------------------------------
|
|
53
|
+
shape: {
|
|
54
|
+
/**
|
|
55
|
+
* Circle — default, standard avatar shape.
|
|
56
|
+
*/
|
|
57
|
+
circle: "rounded-full",
|
|
58
|
+
/**
|
|
59
|
+
* Square — rounded rectangle, for app icons or org logos.
|
|
60
|
+
*/
|
|
61
|
+
square: "rounded-md"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
defaultVariants: {
|
|
65
|
+
size: "md",
|
|
66
|
+
shape: "circle"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
const statusColorMap = {
|
|
71
|
+
online: "bg-success",
|
|
72
|
+
offline: "bg-muted-foreground",
|
|
73
|
+
busy: "bg-danger",
|
|
74
|
+
away: "bg-warning"
|
|
75
|
+
};
|
|
76
|
+
const statusLabelMap = {
|
|
77
|
+
online: "Online",
|
|
78
|
+
offline: "Offline",
|
|
79
|
+
busy: "Busy",
|
|
80
|
+
away: "Away"
|
|
81
|
+
};
|
|
82
|
+
const statusSizeMap = {
|
|
83
|
+
xs: "size-1.5",
|
|
84
|
+
sm: "size-2",
|
|
85
|
+
md: "size-2.5",
|
|
86
|
+
lg: "size-3",
|
|
87
|
+
xl: "size-3.5"
|
|
88
|
+
};
|
|
89
|
+
const statusPositionMap = {
|
|
90
|
+
xs: "bottom-0 right-0",
|
|
91
|
+
sm: "bottom-0 right-0",
|
|
92
|
+
md: "bottom-0.5 right-0.5",
|
|
93
|
+
lg: "bottom-0.5 right-0.5",
|
|
94
|
+
xl: "bottom-1 right-1"
|
|
95
|
+
};
|
|
96
|
+
function getInitials(name) {
|
|
97
|
+
const parts = name.trim().split(/\s+/).filter(Boolean);
|
|
98
|
+
if (parts.length === 0) return "";
|
|
99
|
+
if (parts.length === 1) return parts[0][0].toUpperCase();
|
|
100
|
+
return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
|
|
101
|
+
}
|
|
102
|
+
function DefaultFallbackIcon({ className }) {
|
|
103
|
+
return /* @__PURE__ */ jsxs(
|
|
104
|
+
"svg",
|
|
105
|
+
{
|
|
106
|
+
className: cn("size-8 translate-y-px text-current opacity-70", className),
|
|
107
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
108
|
+
viewBox: "0 0 24 24",
|
|
109
|
+
fill: "currentColor",
|
|
110
|
+
"aria-hidden": "true",
|
|
111
|
+
children: [
|
|
112
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "7", r: "4" }),
|
|
113
|
+
/* @__PURE__ */ jsx("path", { d: "M12 14c-4.42 0-8 2.24-8 5v5h16v-5c0-2.76-3.58-5-8-5z" })
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
function StatusDot({
|
|
119
|
+
status,
|
|
120
|
+
size,
|
|
121
|
+
label,
|
|
122
|
+
shape
|
|
123
|
+
}) {
|
|
124
|
+
const resolvedLabel = label ?? statusLabelMap[status];
|
|
125
|
+
return /* @__PURE__ */ jsx(
|
|
126
|
+
"span",
|
|
127
|
+
{
|
|
128
|
+
className: cn(
|
|
129
|
+
"absolute block",
|
|
130
|
+
"rounded-full",
|
|
131
|
+
"ring-2 ring-background",
|
|
132
|
+
statusSizeMap[size],
|
|
133
|
+
statusColorMap[status],
|
|
134
|
+
// Position based on shape — circle uses corner, square uses edge
|
|
135
|
+
shape === "circle" ? statusPositionMap[size] : "bottom-0 right-0"
|
|
136
|
+
),
|
|
137
|
+
role: "status",
|
|
138
|
+
"aria-label": resolvedLabel
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
function useImageLoadStatus(src) {
|
|
143
|
+
const [status, setStatus] = useState(
|
|
144
|
+
() => src ? "loading" : "error"
|
|
145
|
+
);
|
|
146
|
+
useEffect(() => {
|
|
147
|
+
if (!src) {
|
|
148
|
+
setStatus("error");
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
setStatus("loading");
|
|
152
|
+
const img = new Image();
|
|
153
|
+
const handleLoad = () => setStatus("loaded");
|
|
154
|
+
const handleError = () => setStatus("error");
|
|
155
|
+
img.addEventListener("load", handleLoad);
|
|
156
|
+
img.addEventListener("error", handleError);
|
|
157
|
+
img.src = src;
|
|
158
|
+
if (img.complete) {
|
|
159
|
+
setStatus("loaded");
|
|
160
|
+
}
|
|
161
|
+
return () => {
|
|
162
|
+
img.removeEventListener("load", handleLoad);
|
|
163
|
+
img.removeEventListener("error", handleError);
|
|
164
|
+
};
|
|
165
|
+
}, [src]);
|
|
166
|
+
return status;
|
|
167
|
+
}
|
|
168
|
+
const Avatar = forwardRef(function Avatar2({
|
|
169
|
+
src,
|
|
170
|
+
alt,
|
|
171
|
+
name,
|
|
172
|
+
size = "md",
|
|
173
|
+
shape = "circle",
|
|
174
|
+
status,
|
|
175
|
+
statusLabel,
|
|
176
|
+
fallbackIcon,
|
|
177
|
+
fallbackClassName,
|
|
178
|
+
className,
|
|
179
|
+
children,
|
|
180
|
+
...rest
|
|
181
|
+
}, ref) {
|
|
182
|
+
const imageStatus = useImageLoadStatus(src);
|
|
183
|
+
const showImage = imageStatus === "loaded" && src;
|
|
184
|
+
const initials = name ? getInitials(name) : "";
|
|
185
|
+
const resolvedAlt = alt ?? name ?? "Avatar";
|
|
186
|
+
const imgEl = showImage ? /* @__PURE__ */ jsx(
|
|
187
|
+
"img",
|
|
188
|
+
{
|
|
189
|
+
src,
|
|
190
|
+
alt: resolvedAlt,
|
|
191
|
+
className: "size-full object-cover",
|
|
192
|
+
draggable: false
|
|
193
|
+
}
|
|
194
|
+
) : null;
|
|
195
|
+
return /* @__PURE__ */ jsxs(
|
|
196
|
+
"span",
|
|
197
|
+
{
|
|
198
|
+
ref,
|
|
199
|
+
className: cn(
|
|
200
|
+
avatarVariants({ size, shape }),
|
|
201
|
+
!showImage && fallbackClassName,
|
|
202
|
+
className
|
|
203
|
+
),
|
|
204
|
+
"data-ds": "",
|
|
205
|
+
"data-ds-component": "avatar",
|
|
206
|
+
"data-ds-size": size,
|
|
207
|
+
"data-ds-shape": shape,
|
|
208
|
+
...rest,
|
|
209
|
+
children: [
|
|
210
|
+
/* @__PURE__ */ jsx("span", { className: "absolute inset-0 overflow-hidden rounded-[inherit] flex items-center justify-center", children: children ? children : showImage ? (
|
|
211
|
+
/* Priority 2: Loaded image */
|
|
212
|
+
imgEl
|
|
213
|
+
) : initials ? (
|
|
214
|
+
/* Priority 3: Initials from name */
|
|
215
|
+
/* @__PURE__ */ jsx("span", { role: "img", "aria-label": resolvedAlt, children: initials })
|
|
216
|
+
) : (
|
|
217
|
+
/* Priority 4: Fallback icon */
|
|
218
|
+
/* @__PURE__ */ jsx("span", { role: "img", "aria-label": resolvedAlt, children: fallbackIcon ?? /* @__PURE__ */ jsx(DefaultFallbackIcon, {}) })
|
|
219
|
+
) }),
|
|
220
|
+
status && /* @__PURE__ */ jsx(
|
|
221
|
+
StatusDot,
|
|
222
|
+
{
|
|
223
|
+
status,
|
|
224
|
+
size,
|
|
225
|
+
label: statusLabel,
|
|
226
|
+
shape
|
|
227
|
+
}
|
|
228
|
+
)
|
|
229
|
+
]
|
|
230
|
+
}
|
|
231
|
+
);
|
|
232
|
+
});
|
|
233
|
+
Avatar.displayName = "Avatar";
|
|
234
|
+
const overlapMap = {
|
|
235
|
+
xs: { tight: "-ml-3", default: "-ml-2.5", loose: "-ml-1.5" },
|
|
236
|
+
sm: { tight: "-ml-4", default: "-ml-3", loose: "-ml-2" },
|
|
237
|
+
md: { tight: "-ml-5", default: "-ml-4", loose: "-ml-3" },
|
|
238
|
+
lg: { tight: "-ml-6", default: "-ml-5", loose: "-ml-3.5" },
|
|
239
|
+
xl: { tight: "-ml-8", default: "-ml-6", loose: "-ml-4" }
|
|
240
|
+
};
|
|
241
|
+
const AvatarGroup = forwardRef(
|
|
242
|
+
function AvatarGroup2({
|
|
243
|
+
max = 5,
|
|
244
|
+
size = "md",
|
|
245
|
+
shape = "circle",
|
|
246
|
+
spacing = "default",
|
|
247
|
+
className,
|
|
248
|
+
children,
|
|
249
|
+
...rest
|
|
250
|
+
}, ref) {
|
|
251
|
+
const childArray = Children.toArray(children).filter(isValidElement);
|
|
252
|
+
const totalCount = childArray.length;
|
|
253
|
+
const overflowCount = max > 0 && totalCount > max ? totalCount - max : 0;
|
|
254
|
+
const visibleChildren = overflowCount > 0 ? childArray.slice(0, max) : childArray;
|
|
255
|
+
const overlapClass = overlapMap[size][spacing];
|
|
256
|
+
return /* @__PURE__ */ jsxs(
|
|
257
|
+
"div",
|
|
258
|
+
{
|
|
259
|
+
ref,
|
|
260
|
+
className: cn("inline-flex items-center", className),
|
|
261
|
+
role: "group",
|
|
262
|
+
"aria-label": `Group of ${totalCount} avatars`,
|
|
263
|
+
"data-ds": "",
|
|
264
|
+
"data-ds-component": "avatar-group",
|
|
265
|
+
...rest,
|
|
266
|
+
children: [
|
|
267
|
+
visibleChildren.map((child, index) => {
|
|
268
|
+
if (!isValidElement(child)) return child;
|
|
269
|
+
return /* @__PURE__ */ jsx(
|
|
270
|
+
"span",
|
|
271
|
+
{
|
|
272
|
+
className: cn(
|
|
273
|
+
index > 0 && overlapClass,
|
|
274
|
+
// Ensure proper stacking order (first avatar on top)
|
|
275
|
+
// z-index is set via CSS var so hover:z-50! (Tailwind) can override it
|
|
276
|
+
"relative inline-flex cursor-pointer transition-transform duration-150 ease-out",
|
|
277
|
+
"z-(--ag-z)",
|
|
278
|
+
"hover:z-50! hover:scale-110"
|
|
279
|
+
),
|
|
280
|
+
style: { "--ag-z": totalCount - index },
|
|
281
|
+
children: cloneElement(child, {
|
|
282
|
+
size,
|
|
283
|
+
shape,
|
|
284
|
+
className: cn(
|
|
285
|
+
child.props?.className,
|
|
286
|
+
"ring-2 ring-background"
|
|
287
|
+
)
|
|
288
|
+
})
|
|
289
|
+
},
|
|
290
|
+
child.props?.alt ?? child.props?.name ?? index
|
|
291
|
+
);
|
|
292
|
+
}),
|
|
293
|
+
overflowCount > 0 && /* @__PURE__ */ jsx(
|
|
294
|
+
"span",
|
|
295
|
+
{
|
|
296
|
+
className: cn(overlapClass, "relative inline-flex z-(--ag-z)"),
|
|
297
|
+
style: { "--ag-z": 0 },
|
|
298
|
+
children: /* @__PURE__ */ jsxs(
|
|
299
|
+
"span",
|
|
300
|
+
{
|
|
301
|
+
className: cn(
|
|
302
|
+
avatarVariants({ size, shape }),
|
|
303
|
+
"ring-2 ring-background",
|
|
304
|
+
"bg-muted text-muted-foreground",
|
|
305
|
+
"font-semibold"
|
|
306
|
+
),
|
|
307
|
+
role: "img",
|
|
308
|
+
"aria-label": `${overflowCount} more`,
|
|
309
|
+
"data-ds": "",
|
|
310
|
+
"data-ds-component": "avatar-overflow",
|
|
311
|
+
children: [
|
|
312
|
+
"+",
|
|
313
|
+
overflowCount
|
|
314
|
+
]
|
|
315
|
+
}
|
|
316
|
+
)
|
|
317
|
+
}
|
|
318
|
+
)
|
|
319
|
+
]
|
|
320
|
+
}
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
);
|
|
324
|
+
AvatarGroup.displayName = "AvatarGroup";
|
|
325
|
+
export {
|
|
326
|
+
Avatar,
|
|
327
|
+
AvatarGroup,
|
|
328
|
+
avatarVariants
|
|
329
|
+
};
|