aural-ui 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +456 -0
- package/dist/components/aspect-ratio/AspectRatio.stories.tsx +1327 -0
- package/dist/components/aspect-ratio/index.tsx +10 -0
- package/dist/components/aspect-ratio/meta.ts +8 -0
- package/dist/components/avatar/Avatar.stories.tsx +645 -0
- package/dist/components/avatar/index.tsx +50 -0
- package/dist/components/avatar/meta.ts +8 -0
- package/dist/components/badge/Badge.stories.tsx +169 -0
- package/dist/components/badge/index.tsx +28 -0
- package/dist/components/badge/meta.ts +6 -0
- package/dist/components/banner/Banner.stories.tsx +475 -0
- package/dist/components/banner/index.tsx +256 -0
- package/dist/components/banner/meta.ts +36 -0
- package/dist/components/button/Button.stories.tsx +74 -0
- package/dist/components/button/index.tsx +158 -0
- package/dist/components/button/meta.ts +33 -0
- package/dist/components/card/Card.stories.tsx +377 -0
- package/dist/components/card/index.tsx +85 -0
- package/dist/components/card/meta.ts +14 -0
- package/dist/components/char-count/CharCount.stories.tsx +334 -0
- package/dist/components/char-count/index.tsx +51 -0
- package/dist/components/char-count/meta.ts +13 -0
- package/dist/components/checkbox/Checkbox.stories.tsx +209 -0
- package/dist/components/checkbox/index.tsx +34 -0
- package/dist/components/checkbox/meta.ts +19 -0
- package/dist/components/chip/Chip.stories.tsx +207 -0
- package/dist/components/chip/index.tsx +92 -0
- package/dist/components/chip/meta.ts +17 -0
- package/dist/components/circular-loader/CircularLoader.stories.tsx +741 -0
- package/dist/components/circular-loader/index.tsx +138 -0
- package/dist/components/circular-loader/meta.ts +11 -0
- package/dist/components/collapsible/Collapsible.stories.tsx +319 -0
- package/dist/components/collapsible/index.tsx +158 -0
- package/dist/components/collapsible/meta.ts +22 -0
- package/dist/components/command/Command.stories.tsx +996 -0
- package/dist/components/command/index.tsx +324 -0
- package/dist/components/command/meta.ts +18 -0
- package/dist/components/dialog/Dialog.stories.tsx +963 -0
- package/dist/components/dialog/index.tsx +250 -0
- package/dist/components/dialog/meta.ts +28 -0
- package/dist/components/divider/Divider.stories.tsx +633 -0
- package/dist/components/divider/index.tsx +181 -0
- package/dist/components/divider/meta.ts +12 -0
- package/dist/components/dot-loader/DotLoader.stories.tsx +352 -0
- package/dist/components/dot-loader/index.tsx +78 -0
- package/dist/components/dot-loader/meta.ts +14 -0
- package/dist/components/dropdown/Dropdown.stories.tsx +1210 -0
- package/dist/components/dropdown/index.tsx +479 -0
- package/dist/components/dropdown/meta.ts +21 -0
- package/dist/components/form/Form.stories.tsx +320 -0
- package/dist/components/form/index.tsx +183 -0
- package/dist/components/form/meta.ts +11 -0
- package/dist/components/helper-text/HelperText.stories.tsx +254 -0
- package/dist/components/helper-text/index.tsx +102 -0
- package/dist/components/helper-text/meta.ts +18 -0
- package/dist/components/hover-card/HoverCard.stories.tsx +1328 -0
- package/dist/components/hover-card/index.tsx +42 -0
- package/dist/components/hover-card/meta.ts +12 -0
- package/dist/components/icon-button/IconButton.stories.tsx +252 -0
- package/dist/components/icon-button/index.tsx +130 -0
- package/dist/components/icon-button/meta.ts +20 -0
- package/dist/components/if-else/if-else.stories.tsx +100 -0
- package/dist/components/if-else/index.tsx +56 -0
- package/dist/components/if-else/meta.ts +6 -0
- package/dist/components/index.ts +70 -0
- package/dist/components/input/Input.stories.tsx +431 -0
- package/dist/components/input/index.tsx +487 -0
- package/dist/components/input/meta.ts +28 -0
- package/dist/components/label/Label.stories.tsx +200 -0
- package/dist/components/label/index.tsx +43 -0
- package/dist/components/label/meta.ts +14 -0
- package/dist/components/list/List.stories.tsx +963 -0
- package/dist/components/list/index.tsx +567 -0
- package/dist/components/list/meta.ts +24 -0
- package/dist/components/marquee/Marquee.stories.tsx +819 -0
- package/dist/components/marquee/index.tsx +107 -0
- package/dist/components/marquee/meta.ts +6 -0
- package/dist/components/overlay/Overlay.stories.tsx +954 -0
- package/dist/components/overlay/index.tsx +58 -0
- package/dist/components/overlay/meta.ts +10 -0
- package/dist/components/pagination/Pagination.stories.tsx +354 -0
- package/dist/components/pagination/index.tsx +455 -0
- package/dist/components/pagination/meta.ts +29 -0
- package/dist/components/popover/Popover.stories.tsx +1037 -0
- package/dist/components/popover/index.tsx +67 -0
- package/dist/components/popover/meta.ts +12 -0
- package/dist/components/radio/Radio.stories.tsx +146 -0
- package/dist/components/radio/index.tsx +41 -0
- package/dist/components/radio/meta.ts +19 -0
- package/dist/components/resizable/Resizable.stories.tsx +866 -0
- package/dist/components/resizable/index.tsx +55 -0
- package/dist/components/resizable/meta.ts +12 -0
- package/dist/components/scroll-area/ScrollArea.stories.tsx +1104 -0
- package/dist/components/scroll-area/index.tsx +55 -0
- package/dist/components/scroll-area/meta.ts +8 -0
- package/dist/components/search/Search.stories.tsx +678 -0
- package/dist/components/search/index.tsx +141 -0
- package/dist/components/search/meta.ts +6 -0
- package/dist/components/select/Select.stories.tsx +962 -0
- package/dist/components/select/index.tsx +512 -0
- package/dist/components/select/meta.ts +40 -0
- package/dist/components/sheet/Sheet.stories.tsx +1060 -0
- package/dist/components/sheet/index.tsx +440 -0
- package/dist/components/sheet/meta.ts +38 -0
- package/dist/components/skelton/Skelton.stories.tsx +859 -0
- package/dist/components/skelton/index.tsx +17 -0
- package/dist/components/skelton/meta.ts +6 -0
- package/dist/components/slider/Slider.stories.tsx +876 -0
- package/dist/components/slider/index.tsx +156 -0
- package/dist/components/slider/meta.ts +29 -0
- package/dist/components/stepper/Stepper.stories.tsx +639 -0
- package/dist/components/stepper/index.tsx +650 -0
- package/dist/components/stepper/meta.ts +19 -0
- package/dist/components/switch/Switch.stories.tsx +85 -0
- package/dist/components/switch/index.tsx +37 -0
- package/dist/components/switch/meta.ts +24 -0
- package/dist/components/switch-case/SwitchCase.stories.tsx +209 -0
- package/dist/components/switch-case/index.tsx +89 -0
- package/dist/components/switch-case/meta.ts +6 -0
- package/dist/components/table/Table.stories.tsx +1095 -0
- package/dist/components/table/index.tsx +113 -0
- package/dist/components/table/meta.ts +20 -0
- package/dist/components/tabs/Tabs.stories.tsx +1379 -0
- package/dist/components/tabs/index.tsx +186 -0
- package/dist/components/tabs/meta.ts +25 -0
- package/dist/components/tag/Tag.stories.tsx +625 -0
- package/dist/components/tag/index.tsx +320 -0
- package/dist/components/tag/meta.ts +52 -0
- package/dist/components/textarea/TextArea.stories.tsx +723 -0
- package/dist/components/textarea/index.tsx +480 -0
- package/dist/components/textarea/meta.ts +23 -0
- package/dist/components/toast/Toast.stories.tsx +1427 -0
- package/dist/components/toast/index.tsx +26 -0
- package/dist/components/toast/meta.ts +19 -0
- package/dist/components/toggle/Toggle.stories.tsx +1093 -0
- package/dist/components/toggle/index.tsx +44 -0
- package/dist/components/toggle/meta.ts +19 -0
- package/dist/components/tooltip/Tooltip.stories.tsx +1548 -0
- package/dist/components/tooltip/index.tsx +304 -0
- package/dist/components/tooltip/meta.ts +21 -0
- package/dist/components/typography/Typography.stories.tsx +197 -0
- package/dist/components/typography/index.tsx +184 -0
- package/dist/components/typography/meta.ts +38 -0
- package/dist/fonts/LabGrotesque-Regular.ttf +0 -0
- package/dist/fonts/LabGrotesqueTRIAL-Bold.otf +0 -0
- package/dist/fonts/LabGrotesqueTRIAL-Light.otf +0 -0
- package/dist/fonts/LabGrotesqueTRIAL-Medium.otf +0 -0
- package/dist/fonts/LabGrotesqueTRIAL-Regular.otf +0 -0
- package/dist/fonts/PPSupplySans-Regular (1).otf +0 -0
- package/dist/fonts/PPSupplySans-Regular.otf +0 -0
- package/dist/fonts/PPSupplySans-Ultralight.otf +0 -0
- package/dist/hooks/index.ts +3 -0
- package/dist/hooks/use-previous/UsePrevious.stories.tsx +997 -0
- package/dist/hooks/use-previous/index.ts +15 -0
- package/dist/hooks/use-previous/meta.ts +6 -0
- package/dist/hooks/use-standalone-pagination/UseStandalonePagination.stories.tsx +983 -0
- package/dist/hooks/use-standalone-pagination/index.ts +146 -0
- package/dist/hooks/use-standalone-pagination/meta.ts +6 -0
- package/dist/icons/Icons.stories.tsx +29 -0
- package/dist/icons/alert-icon/AlertIcon.stories.tsx +991 -0
- package/dist/icons/alert-icon/index.tsx +48 -0
- package/dist/icons/alert-icon/meta.ts +8 -0
- package/dist/icons/all-icons.tsx +738 -0
- package/dist/icons/angle-down-icon/AngleDownIcon.stories.tsx +1031 -0
- package/dist/icons/angle-down-icon/index.tsx +25 -0
- package/dist/icons/angle-down-icon/meta.ts +8 -0
- package/dist/icons/arrow-box-left-icon/ArrowBoxLeftIcon.stories.tsx +1080 -0
- package/dist/icons/arrow-box-left-icon/index.tsx +24 -0
- package/dist/icons/arrow-box-left-icon/meta.ts +8 -0
- package/dist/icons/arrow-right-icon/ArrowRightIcon.stories.tsx +1151 -0
- package/dist/icons/arrow-right-icon/index.tsx +26 -0
- package/dist/icons/arrow-right-icon/meta.ts +8 -0
- package/dist/icons/arrow-right-up-icon/ArrowRightUpIcon.stories.tsx +1273 -0
- package/dist/icons/arrow-right-up-icon/index.tsx +24 -0
- package/dist/icons/arrow-right-up-icon/meta.ts +8 -0
- package/dist/icons/art-board-icon/ArtBoardIcon.stories.tsx +670 -0
- package/dist/icons/art-board-icon/index.tsx +24 -0
- package/dist/icons/art-board-icon/meta.ts +7 -0
- package/dist/icons/audio-bar-icon/AudioBarIcon.stories.tsx +1244 -0
- package/dist/icons/audio-bar-icon/index.tsx +19 -0
- package/dist/icons/audio-bar-icon/meta.ts +8 -0
- package/dist/icons/bubble-check-icon/BubbleCheckIcon.stories.tsx +1239 -0
- package/dist/icons/bubble-check-icon/index.tsx +24 -0
- package/dist/icons/bubble-check-icon/meta.ts +8 -0
- package/dist/icons/bubble-crossed-icon/BubbleCrossedIcon.stories.tsx +1228 -0
- package/dist/icons/bubble-crossed-icon/index.tsx +24 -0
- package/dist/icons/bubble-crossed-icon/meta.ts +8 -0
- package/dist/icons/bubble-sparkle-icon/BubbleSparkleIcon.stories.tsx +912 -0
- package/dist/icons/bubble-sparkle-icon/index.tsx +26 -0
- package/dist/icons/bubble-sparkle-icon/meta.ts +8 -0
- package/dist/icons/chevron-double-left-icon/ChevronDoubleLeftIcon.stories.tsx +1021 -0
- package/dist/icons/chevron-double-left-icon/index.tsx +34 -0
- package/dist/icons/chevron-double-left-icon/meta.ts +8 -0
- package/dist/icons/chevron-double-right-icon/ChevronDoubleRightIcon.stories.tsx +1021 -0
- package/dist/icons/chevron-double-right-icon/index.tsx +34 -0
- package/dist/icons/chevron-double-right-icon/meta.ts +8 -0
- package/dist/icons/chevron-down-icon/ChevronDownIcon.stories.tsx +1001 -0
- package/dist/icons/chevron-down-icon/index.tsx +27 -0
- package/dist/icons/chevron-down-icon/meta.ts +8 -0
- package/dist/icons/chevron-left-icon/ChevronLeftIcon.stories.tsx +1029 -0
- package/dist/icons/chevron-left-icon/index.tsx +27 -0
- package/dist/icons/chevron-left-icon/meta.ts +8 -0
- package/dist/icons/chevron-right-icon/ChevronRightIcon.stories.tsx +1021 -0
- package/dist/icons/chevron-right-icon/index.tsx +27 -0
- package/dist/icons/chevron-right-icon/meta.ts +8 -0
- package/dist/icons/chevron-up-icon/ChevronUpIcon.stories.tsx +1036 -0
- package/dist/icons/chevron-up-icon/index.tsx +27 -0
- package/dist/icons/chevron-up-icon/meta.ts +8 -0
- package/dist/icons/command-icon/CommandIcon.stories.tsx +1098 -0
- package/dist/icons/command-icon/index.tsx +24 -0
- package/dist/icons/command-icon/meta.ts +8 -0
- package/dist/icons/cross-circle-icon/CrossCircleIcon.stories.tsx +1061 -0
- package/dist/icons/cross-circle-icon/index.tsx +23 -0
- package/dist/icons/cross-circle-icon/meta.ts +8 -0
- package/dist/icons/cross-icon/CrossIcon.stories.tsx +1027 -0
- package/dist/icons/cross-icon/index.tsx +24 -0
- package/dist/icons/cross-icon/meta.ts +8 -0
- package/dist/icons/edit-big-icon/EditBigIcon.stories.tsx +1092 -0
- package/dist/icons/edit-big-icon/index.tsx +22 -0
- package/dist/icons/edit-big-icon/meta.ts +8 -0
- package/dist/icons/eye-close-icon/EyeCloseIcon.stories.tsx +1090 -0
- package/dist/icons/eye-close-icon/index.tsx +26 -0
- package/dist/icons/eye-close-icon/meta.ts +8 -0
- package/dist/icons/eye-open-icon/EyeOpenIcon.stories.tsx +1098 -0
- package/dist/icons/eye-open-icon/index.tsx +24 -0
- package/dist/icons/eye-open-icon/meta.ts +8 -0
- package/dist/icons/feature-shine-icon/FeatureShineIcon.stories.tsx +1071 -0
- package/dist/icons/feature-shine-icon/index.tsx +29 -0
- package/dist/icons/feature-shine-icon/meta.ts +8 -0
- package/dist/icons/file-chart-icon/FileChartIcon.stories.tsx +1115 -0
- package/dist/icons/file-chart-icon/index.tsx +24 -0
- package/dist/icons/file-chart-icon/meta.ts +8 -0
- package/dist/icons/file-text-icon/FileTextIcon.stories.tsx +668 -0
- package/dist/icons/file-text-icon/index.tsx +24 -0
- package/dist/icons/file-text-icon/meta.ts +8 -0
- package/dist/icons/grip-vertical-icon/GripVerticalIcon.stories.tsx +1239 -0
- package/dist/icons/grip-vertical-icon/index.tsx +28 -0
- package/dist/icons/grip-vertical-icon/meta.ts +8 -0
- package/dist/icons/image-icon/ImageIcon.stories.tsx +1181 -0
- package/dist/icons/image-icon/index.tsx +24 -0
- package/dist/icons/image-icon/meta.ts +8 -0
- package/dist/icons/import-folder-icon/ImportFolderIcon.stories.tsx +1248 -0
- package/dist/icons/import-folder-icon/index.tsx +22 -0
- package/dist/icons/import-folder-icon/meta.ts +8 -0
- package/dist/icons/index.ts +46 -0
- package/dist/icons/light-bulb-simple-icon/LightBulbSimpleIcon.stories.tsx +1272 -0
- package/dist/icons/light-bulb-simple-icon/index.tsx +24 -0
- package/dist/icons/light-bulb-simple-icon/meta.ts +8 -0
- package/dist/icons/magic-book-icon/MagicBookIcon.stories.tsx +1245 -0
- package/dist/icons/magic-book-icon/index.tsx +32 -0
- package/dist/icons/magic-book-icon/meta.ts +8 -0
- package/dist/icons/maintenance-icon/MaintenanceIcon.stories.tsx +1251 -0
- package/dist/icons/maintenance-icon/index.tsx +23 -0
- package/dist/icons/maintenance-icon/meta.ts +8 -0
- package/dist/icons/message-icon/MessageIcon.stories.tsx +595 -0
- package/dist/icons/message-icon/index.tsx +30 -0
- package/dist/icons/message-icon/meta.ts +8 -0
- package/dist/icons/move-horizontal-icon/MoveHorizontalIcon.stories.tsx +1245 -0
- package/dist/icons/move-horizontal-icon/index.tsx +23 -0
- package/dist/icons/move-horizontal-icon/meta.ts +8 -0
- package/dist/icons/move-vertical-icon/MoveVerticalIcon.stories.tsx +1196 -0
- package/dist/icons/move-vertical-icon/index.tsx +23 -0
- package/dist/icons/move-vertical-icon/meta.ts +8 -0
- package/dist/icons/page-search-icon/PageSearchIcon.stories.tsx +1167 -0
- package/dist/icons/page-search-icon/index.tsx +21 -0
- package/dist/icons/page-search-icon/meta.ts +8 -0
- package/dist/icons/pencil-icon/PencilIcon.stories.tsx +1131 -0
- package/dist/icons/pencil-icon/index.tsx +21 -0
- package/dist/icons/pencil-icon/meta.ts +8 -0
- package/dist/icons/plus-icon/PlusIcon.stories.tsx +1151 -0
- package/dist/icons/plus-icon/index.tsx +24 -0
- package/dist/icons/plus-icon/meta.ts +8 -0
- package/dist/icons/search-icon/SearchIcon.stories.tsx +1181 -0
- package/dist/icons/search-icon/index.tsx +24 -0
- package/dist/icons/search-icon/meta.ts +8 -0
- package/dist/icons/site-logo-icon/SiteLogoIcon.stories.tsx +1167 -0
- package/dist/icons/site-logo-icon/index.tsx +79 -0
- package/dist/icons/site-logo-icon/meta.ts +8 -0
- package/dist/icons/spinner-gradient-icon/SpinnerGradientIcon.stories.tsx +637 -0
- package/dist/icons/spinner-gradient-icon/index.tsx +53 -0
- package/dist/icons/spinner-gradient-icon/meta.ts +8 -0
- package/dist/icons/spinner-solid-icon/SpinnerSolidIcon.stories.tsx +644 -0
- package/dist/icons/spinner-solid-icon/index.tsx +59 -0
- package/dist/icons/spinner-solid-icon/meta.ts +8 -0
- package/dist/icons/spinner-solid-neutral-icon/SpinnerSolidINeutralcon.stories.tsx +736 -0
- package/dist/icons/spinner-solid-neutral-icon/index.tsx +53 -0
- package/dist/icons/spinner-solid-neutral-icon/meta.ts +8 -0
- package/dist/icons/tick-circle-icon/TickCircleIcon.stories.tsx +1204 -0
- package/dist/icons/tick-circle-icon/index.tsx +23 -0
- package/dist/icons/tick-circle-icon/meta.ts +8 -0
- package/dist/icons/tick-icon/TickIcon.stories.tsx +1340 -0
- package/dist/icons/tick-icon/index.tsx +24 -0
- package/dist/icons/tick-icon/meta.ts +8 -0
- package/dist/icons/trash-icon/TrashIcon.stories.tsx +996 -0
- package/dist/icons/trash-icon/index.tsx +24 -0
- package/dist/icons/trash-icon/meta.ts +8 -0
- package/dist/icons/upload-icon/UploadIcon.stories.tsx +947 -0
- package/dist/icons/upload-icon/index.tsx +24 -0
- package/dist/icons/upload-icon/meta.ts +8 -0
- package/dist/icons/vertical-menu-icon/VerticalMenuIcon.stories.tsx +1045 -0
- package/dist/icons/vertical-menu-icon/index.tsx +27 -0
- package/dist/icons/vertical-menu-icon/meta.ts +8 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +206 -0
- package/dist/lib/utils.ts +6 -0
- package/dist/styles/aural-theme.css +1008 -0
- package/package.json +142 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio"
|
|
3
|
+
|
|
4
|
+
function AspectRatio({
|
|
5
|
+
...props
|
|
6
|
+
}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {
|
|
7
|
+
return <AspectRatioPrimitive.Root data-slot="aspect-ratio" {...props} />
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { AspectRatio }
|
|
@@ -0,0 +1,645 @@
|
|
|
1
|
+
import React from "react"
|
|
2
|
+
import type { Meta, StoryObj } from "@storybook/react"
|
|
3
|
+
|
|
4
|
+
import { Avatar, AvatarFallback, AvatarImage } from "."
|
|
5
|
+
|
|
6
|
+
const meta: Meta<typeof Avatar> = {
|
|
7
|
+
title: "Components/UI/Avatar",
|
|
8
|
+
component: Avatar,
|
|
9
|
+
parameters: {
|
|
10
|
+
layout: "centered",
|
|
11
|
+
backgrounds: {
|
|
12
|
+
default: "dark",
|
|
13
|
+
values: [
|
|
14
|
+
{ name: "dark", value: "#0a0a0a" },
|
|
15
|
+
{ name: "light", value: "#ffffff" },
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
docs: {
|
|
19
|
+
description: {
|
|
20
|
+
component: `
|
|
21
|
+
# Avatar Component
|
|
22
|
+
|
|
23
|
+
A versatile avatar component built on Radix UI primitives for displaying user profile images with automatic fallback handling.
|
|
24
|
+
|
|
25
|
+
## Features
|
|
26
|
+
|
|
27
|
+
- **Automatic Fallback**: Graceful fallback to initials or placeholder when image fails to load
|
|
28
|
+
- **Responsive Design**: Flexible sizing with consistent aspect ratio
|
|
29
|
+
- **Accessibility**: Built-in accessibility features from Radix UI
|
|
30
|
+
- **Custom Styling**: Easy customization via className prop
|
|
31
|
+
- **Image Optimization**: Proper image handling with loading states
|
|
32
|
+
- **Circular Design**: Rounded avatar design optimized for profile pictures
|
|
33
|
+
|
|
34
|
+
## Component Structure
|
|
35
|
+
|
|
36
|
+
- **Avatar**: Root container that manages the avatar display
|
|
37
|
+
- **AvatarImage**: The actual image element with proper sizing and aspect ratio
|
|
38
|
+
- **AvatarFallback**: Fallback content displayed when image fails to load or is loading
|
|
39
|
+
|
|
40
|
+
## Usage Examples
|
|
41
|
+
|
|
42
|
+
### Basic Avatar
|
|
43
|
+
\`\`\`tsx
|
|
44
|
+
<Avatar>
|
|
45
|
+
<AvatarImage src="/user-avatar.jpg" alt="User Name" />
|
|
46
|
+
<AvatarFallback>UN</AvatarFallback>
|
|
47
|
+
</Avatar>
|
|
48
|
+
\`\`\`
|
|
49
|
+
|
|
50
|
+
### Custom Sizing
|
|
51
|
+
\`\`\`tsx
|
|
52
|
+
<Avatar className="size-16">
|
|
53
|
+
<AvatarImage src="/user-avatar.jpg" alt="User Name" />
|
|
54
|
+
<AvatarFallback>UN</AvatarFallback>
|
|
55
|
+
</Avatar>
|
|
56
|
+
\`\`\`
|
|
57
|
+
|
|
58
|
+
### Fallback Only
|
|
59
|
+
\`\`\`tsx
|
|
60
|
+
<Avatar>
|
|
61
|
+
<AvatarFallback>AB</AvatarFallback>
|
|
62
|
+
</Avatar>
|
|
63
|
+
\`\`\`
|
|
64
|
+
`,
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
tags: ["autodocs"],
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export default meta
|
|
72
|
+
type Story = StoryObj<typeof Avatar>
|
|
73
|
+
|
|
74
|
+
// 1. Basic Avatar Examples
|
|
75
|
+
export const BasicAvatars: Story = {
|
|
76
|
+
render: () => (
|
|
77
|
+
<div className="space-y-8">
|
|
78
|
+
<div className="text-center">
|
|
79
|
+
<h3 className="mb-2 font-medium text-white">Basic Avatars</h3>
|
|
80
|
+
<p className="text-sm text-white/60">
|
|
81
|
+
Standard avatar components with images and fallbacks
|
|
82
|
+
</p>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<div className="flex flex-wrap items-center justify-center gap-4">
|
|
86
|
+
{/* Avatar with Image */}
|
|
87
|
+
<div className="space-y-2 text-center">
|
|
88
|
+
<Avatar>
|
|
89
|
+
<AvatarImage
|
|
90
|
+
src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=100&h=100&fit=crop&crop=face"
|
|
91
|
+
alt="John Doe"
|
|
92
|
+
/>
|
|
93
|
+
<AvatarFallback>JD</AvatarFallback>
|
|
94
|
+
</Avatar>
|
|
95
|
+
<p className="text-xs text-white/60">With Image</p>
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
{/* Avatar with Fallback Only */}
|
|
99
|
+
<div className="space-y-2 text-center">
|
|
100
|
+
<Avatar className="text-fm-primary [font-size:var(--text-fm-sm)]">
|
|
101
|
+
<AvatarFallback>AB</AvatarFallback>
|
|
102
|
+
</Avatar>
|
|
103
|
+
<p className="text-xs text-white/60">Fallback Only</p>
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
{/* Avatar with Broken Image (shows fallback) */}
|
|
107
|
+
<div className="space-y-2 text-center">
|
|
108
|
+
<Avatar className="text-fm-primary [font-size:var(--text-fm-sm)]">
|
|
109
|
+
<AvatarImage src="/broken-image.jpg" alt="Broken" />
|
|
110
|
+
<AvatarFallback>BR</AvatarFallback>
|
|
111
|
+
</Avatar>
|
|
112
|
+
<p className="text-xs text-white/60">Broken Image</p>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
{/* Different Initials */}
|
|
116
|
+
<div className="space-y-2 text-center">
|
|
117
|
+
<Avatar className="text-fm-primary [font-size:var(--text-fm-sm)]">
|
|
118
|
+
<AvatarFallback>SM</AvatarFallback>
|
|
119
|
+
</Avatar>
|
|
120
|
+
<p className="text-xs text-white/60">Initials</p>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
),
|
|
125
|
+
parameters: {
|
|
126
|
+
docs: {
|
|
127
|
+
description: {
|
|
128
|
+
story:
|
|
129
|
+
"Basic avatar examples showing image display and fallback behavior when images fail to load.",
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// 2. Size Variations
|
|
136
|
+
export const SizeVariations: Story = {
|
|
137
|
+
render: () => (
|
|
138
|
+
<div className="space-y-8">
|
|
139
|
+
<div className="text-center">
|
|
140
|
+
<h3 className="mb-2 font-medium text-white">Size Variations</h3>
|
|
141
|
+
<p className="text-sm text-white/60">
|
|
142
|
+
Different avatar sizes for various use cases
|
|
143
|
+
</p>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<div className="flex flex-wrap items-end justify-center gap-6">
|
|
147
|
+
{/* Extra Small */}
|
|
148
|
+
<div className="space-y-2 text-center">
|
|
149
|
+
<Avatar className="text-fm-primary size-6 [font-size:var(--text-fm-sm)]">
|
|
150
|
+
<AvatarImage
|
|
151
|
+
src="https://images.unsplash.com/photo-1494790108755-2616b612b47c?w=100&h=100&fit=crop&crop=face"
|
|
152
|
+
alt="User"
|
|
153
|
+
/>
|
|
154
|
+
<AvatarFallback className="text-xs">XS</AvatarFallback>
|
|
155
|
+
</Avatar>
|
|
156
|
+
<p className="text-xs text-white/60">Extra Small (24px)</p>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
{/* Small */}
|
|
160
|
+
<div className="space-y-2 text-center">
|
|
161
|
+
<Avatar className="size-7">
|
|
162
|
+
<AvatarImage
|
|
163
|
+
src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop&crop=face"
|
|
164
|
+
alt="User"
|
|
165
|
+
/>
|
|
166
|
+
<AvatarFallback className="text-xs">S</AvatarFallback>
|
|
167
|
+
</Avatar>
|
|
168
|
+
<p className="text-xs text-white/60">Small (28px)</p>
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
{/* Default */}
|
|
172
|
+
<div className="space-y-2 text-center">
|
|
173
|
+
<Avatar>
|
|
174
|
+
<AvatarImage
|
|
175
|
+
src="https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=100&h=100&fit=crop&crop=face"
|
|
176
|
+
alt="User"
|
|
177
|
+
/>
|
|
178
|
+
<AvatarFallback>M</AvatarFallback>
|
|
179
|
+
</Avatar>
|
|
180
|
+
<p className="text-xs text-white/60">Default (32px)</p>
|
|
181
|
+
</div>
|
|
182
|
+
|
|
183
|
+
{/* Large */}
|
|
184
|
+
<div className="space-y-2 text-center">
|
|
185
|
+
<Avatar className="size-12">
|
|
186
|
+
<AvatarImage
|
|
187
|
+
src="https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=100&h=100&fit=crop&crop=face"
|
|
188
|
+
alt="User"
|
|
189
|
+
/>
|
|
190
|
+
<AvatarFallback>L</AvatarFallback>
|
|
191
|
+
</Avatar>
|
|
192
|
+
<p className="text-xs text-white/60">Large (48px)</p>
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
{/* Extra Large */}
|
|
196
|
+
<div className="space-y-2 text-center">
|
|
197
|
+
<Avatar className="size-16">
|
|
198
|
+
<AvatarImage
|
|
199
|
+
src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=100&h=100&fit=crop&crop=face"
|
|
200
|
+
alt="User"
|
|
201
|
+
/>
|
|
202
|
+
<AvatarFallback className="text-lg">XL</AvatarFallback>
|
|
203
|
+
</Avatar>
|
|
204
|
+
<p className="text-xs text-white/60">Extra Large (64px)</p>
|
|
205
|
+
</div>
|
|
206
|
+
|
|
207
|
+
{/* XXL */}
|
|
208
|
+
<div className="space-y-2 text-center">
|
|
209
|
+
<Avatar className="text-fm-primary size-20 [font-size:var(--text-fm-sm)]">
|
|
210
|
+
<AvatarImage
|
|
211
|
+
src="https://images.unsplash.com/photo-1494790108755-2616b612b47c?w=100&h=100&fit=crop&crop=face"
|
|
212
|
+
alt="User"
|
|
213
|
+
/>
|
|
214
|
+
<AvatarFallback className="text-xl">XXL</AvatarFallback>
|
|
215
|
+
</Avatar>
|
|
216
|
+
<p className="text-xs text-white/60">XXL (80px)</p>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
),
|
|
221
|
+
parameters: {
|
|
222
|
+
docs: {
|
|
223
|
+
description: {
|
|
224
|
+
story:
|
|
225
|
+
"Various avatar sizes from extra small (24px) to extra large (80px) for different UI contexts.",
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// 3. Fallback Variations
|
|
232
|
+
export const FallbackVariations: Story = {
|
|
233
|
+
render: () => (
|
|
234
|
+
<div className="space-y-8">
|
|
235
|
+
<div className="text-center">
|
|
236
|
+
<h3 className="mb-2 font-medium text-white">Fallback Variations</h3>
|
|
237
|
+
<p className="text-sm text-white/60">
|
|
238
|
+
Different fallback content styles and approaches
|
|
239
|
+
</p>
|
|
240
|
+
</div>
|
|
241
|
+
|
|
242
|
+
<div className="mx-auto grid max-w-lg grid-cols-2 gap-6 md:grid-cols-4">
|
|
243
|
+
{/* Standard Initials */}
|
|
244
|
+
<div className="space-y-2 text-center">
|
|
245
|
+
<Avatar className="text-fm-primary size-12">
|
|
246
|
+
<AvatarFallback>JD</AvatarFallback>
|
|
247
|
+
</Avatar>
|
|
248
|
+
<p className="text-xs text-white/60">Standard Initials</p>
|
|
249
|
+
</div>
|
|
250
|
+
|
|
251
|
+
{/* Single Initial */}
|
|
252
|
+
<div className="space-y-2 text-center">
|
|
253
|
+
<Avatar className="text-fm-primary size-12">
|
|
254
|
+
<AvatarFallback>A</AvatarFallback>
|
|
255
|
+
</Avatar>
|
|
256
|
+
<p className="text-xs text-white/60">Single Initial</p>
|
|
257
|
+
</div>
|
|
258
|
+
|
|
259
|
+
{/* Numbers */}
|
|
260
|
+
<div className="space-y-2 text-center">
|
|
261
|
+
<Avatar className="text-fm-primary size-12">
|
|
262
|
+
<AvatarFallback>42</AvatarFallback>
|
|
263
|
+
</Avatar>
|
|
264
|
+
<p className="text-xs text-white/60">Numbers</p>
|
|
265
|
+
</div>
|
|
266
|
+
|
|
267
|
+
{/* Custom Background */}
|
|
268
|
+
<div className="space-y-2 text-center">
|
|
269
|
+
<Avatar className="size-12">
|
|
270
|
+
<AvatarFallback className="bg-blue-500 text-white">
|
|
271
|
+
BG
|
|
272
|
+
</AvatarFallback>
|
|
273
|
+
</Avatar>
|
|
274
|
+
<p className="text-xs text-white/60">Custom Background</p>
|
|
275
|
+
</div>
|
|
276
|
+
|
|
277
|
+
{/* Gradient Background */}
|
|
278
|
+
<div className="space-y-2 text-center">
|
|
279
|
+
<Avatar className="size-12">
|
|
280
|
+
<AvatarFallback className="bg-gradient-to-br from-purple-500 to-pink-500 text-white">
|
|
281
|
+
GR
|
|
282
|
+
</AvatarFallback>
|
|
283
|
+
</Avatar>
|
|
284
|
+
<p className="text-xs text-white/60">Gradient</p>
|
|
285
|
+
</div>
|
|
286
|
+
|
|
287
|
+
{/* Different Color */}
|
|
288
|
+
<div className="space-y-2 text-center">
|
|
289
|
+
<Avatar className="size-12">
|
|
290
|
+
<AvatarFallback className="bg-green-500 text-white">
|
|
291
|
+
GN
|
|
292
|
+
</AvatarFallback>
|
|
293
|
+
</Avatar>
|
|
294
|
+
<p className="text-xs text-white/60">Green Theme</p>
|
|
295
|
+
</div>
|
|
296
|
+
|
|
297
|
+
{/* Orange Theme */}
|
|
298
|
+
<div className="space-y-2 text-center">
|
|
299
|
+
<Avatar className="size-12">
|
|
300
|
+
<AvatarFallback className="bg-orange-500 text-white">
|
|
301
|
+
OR
|
|
302
|
+
</AvatarFallback>
|
|
303
|
+
</Avatar>
|
|
304
|
+
<p className="text-xs text-white/60">Orange Theme</p>
|
|
305
|
+
</div>
|
|
306
|
+
|
|
307
|
+
{/* Dark Theme */}
|
|
308
|
+
<div className="space-y-2 text-center">
|
|
309
|
+
<Avatar className="size-12">
|
|
310
|
+
<AvatarFallback className="bg-gray-800 text-gray-200">
|
|
311
|
+
DK
|
|
312
|
+
</AvatarFallback>
|
|
313
|
+
</Avatar>
|
|
314
|
+
<p className="text-xs text-white/60">Dark Theme</p>
|
|
315
|
+
</div>
|
|
316
|
+
</div>
|
|
317
|
+
</div>
|
|
318
|
+
),
|
|
319
|
+
parameters: {
|
|
320
|
+
docs: {
|
|
321
|
+
description: {
|
|
322
|
+
story:
|
|
323
|
+
"Various fallback content styles including initials, numbers, and custom backgrounds with different color themes.",
|
|
324
|
+
},
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// 4. Real World Examples
|
|
330
|
+
export const RealWorldExamples: Story = {
|
|
331
|
+
render: () => (
|
|
332
|
+
<div className="space-y-12">
|
|
333
|
+
<div className="text-center">
|
|
334
|
+
<h3 className="mb-2 font-medium text-white">Real World Examples</h3>
|
|
335
|
+
<p className="text-sm text-white/60">
|
|
336
|
+
Common avatar usage patterns in UI components
|
|
337
|
+
</p>
|
|
338
|
+
</div>
|
|
339
|
+
|
|
340
|
+
{/* User List */}
|
|
341
|
+
<div className="space-y-4">
|
|
342
|
+
<h4 className="text-sm font-medium text-white/80">User List</h4>
|
|
343
|
+
<div className="mx-auto max-w-md space-y-3">
|
|
344
|
+
<div className="flex items-center gap-3 rounded-lg border border-white/10 bg-white/5 p-3">
|
|
345
|
+
<Avatar>
|
|
346
|
+
<AvatarImage
|
|
347
|
+
src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=100&h=100&fit=crop&crop=face"
|
|
348
|
+
alt="John Doe"
|
|
349
|
+
/>
|
|
350
|
+
<AvatarFallback>JD</AvatarFallback>
|
|
351
|
+
</Avatar>
|
|
352
|
+
<div>
|
|
353
|
+
<p className="text-sm font-medium text-white">John Doe</p>
|
|
354
|
+
<p className="text-xs text-white/60">john.doe@example.com</p>
|
|
355
|
+
</div>
|
|
356
|
+
</div>
|
|
357
|
+
<div className="flex items-center gap-3 rounded-lg border border-white/10 bg-white/5 p-3">
|
|
358
|
+
<Avatar>
|
|
359
|
+
<AvatarImage
|
|
360
|
+
src="https://images.unsplash.com/photo-1494790108755-2616b612b47c?w=100&h=100&fit=crop&crop=face"
|
|
361
|
+
alt="Sarah Wilson"
|
|
362
|
+
/>
|
|
363
|
+
<AvatarFallback>SW</AvatarFallback>
|
|
364
|
+
</Avatar>
|
|
365
|
+
<div>
|
|
366
|
+
<p className="text-sm font-medium text-white">Sarah Wilson</p>
|
|
367
|
+
<p className="text-xs text-white/60">sarah.wilson@example.com</p>
|
|
368
|
+
</div>
|
|
369
|
+
</div>
|
|
370
|
+
<div className="flex items-center gap-3 rounded-lg border border-white/10 bg-white/5 p-3">
|
|
371
|
+
<Avatar>
|
|
372
|
+
<AvatarFallback className="bg-blue-500 text-white">
|
|
373
|
+
MJ
|
|
374
|
+
</AvatarFallback>
|
|
375
|
+
</Avatar>
|
|
376
|
+
<div>
|
|
377
|
+
<p className="text-sm font-medium text-white">Michael Johnson</p>
|
|
378
|
+
<p className="text-xs text-white/60">michael.j@example.com</p>
|
|
379
|
+
</div>
|
|
380
|
+
</div>
|
|
381
|
+
</div>
|
|
382
|
+
</div>
|
|
383
|
+
|
|
384
|
+
{/* Comment Thread */}
|
|
385
|
+
<div className="space-y-4">
|
|
386
|
+
<h4 className="text-sm font-medium text-white/80">Comment Thread</h4>
|
|
387
|
+
<div className="mx-auto max-w-md space-y-4">
|
|
388
|
+
<div className="flex gap-3">
|
|
389
|
+
<Avatar className="size-8">
|
|
390
|
+
<AvatarImage
|
|
391
|
+
src="https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=100&h=100&fit=crop&crop=face"
|
|
392
|
+
alt="Alex"
|
|
393
|
+
/>
|
|
394
|
+
<AvatarFallback className="text-xs">AL</AvatarFallback>
|
|
395
|
+
</Avatar>
|
|
396
|
+
<div className="flex-1">
|
|
397
|
+
<div className="rounded-lg border border-white/10 bg-white/5 p-3">
|
|
398
|
+
<p className="mb-1 text-xs font-medium text-white">
|
|
399
|
+
Alex Thompson
|
|
400
|
+
</p>
|
|
401
|
+
<p className="text-sm text-white/80">
|
|
402
|
+
This looks great! Really like the new design direction.
|
|
403
|
+
</p>
|
|
404
|
+
</div>
|
|
405
|
+
<p className="mt-1 text-xs text-white/40">2 hours ago</p>
|
|
406
|
+
</div>
|
|
407
|
+
</div>
|
|
408
|
+
<div className="flex gap-3">
|
|
409
|
+
<Avatar className="size-8">
|
|
410
|
+
<AvatarFallback className="bg-purple-500 text-xs text-white">
|
|
411
|
+
EM
|
|
412
|
+
</AvatarFallback>
|
|
413
|
+
</Avatar>
|
|
414
|
+
<div className="flex-1">
|
|
415
|
+
<div className="rounded-lg border border-white/10 bg-white/5 p-3">
|
|
416
|
+
<p className="mb-1 text-xs font-medium text-white">
|
|
417
|
+
Emma Davis
|
|
418
|
+
</p>
|
|
419
|
+
<p className="text-sm text-white/80">
|
|
420
|
+
Agreed! The frosted glass effect is perfect.
|
|
421
|
+
</p>
|
|
422
|
+
</div>
|
|
423
|
+
<p className="mt-1 text-xs text-white/40">1 hour ago</p>
|
|
424
|
+
</div>
|
|
425
|
+
</div>
|
|
426
|
+
</div>
|
|
427
|
+
</div>
|
|
428
|
+
|
|
429
|
+
{/* Team Members */}
|
|
430
|
+
<div className="space-y-4">
|
|
431
|
+
<h4 className="text-sm font-medium text-white/80">Team Members</h4>
|
|
432
|
+
<div className="flex items-center justify-center gap-2">
|
|
433
|
+
<Avatar className="size-10">
|
|
434
|
+
<AvatarImage
|
|
435
|
+
src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=100&h=100&fit=crop&crop=face"
|
|
436
|
+
alt="Team Lead"
|
|
437
|
+
/>
|
|
438
|
+
<AvatarFallback>TL</AvatarFallback>
|
|
439
|
+
</Avatar>
|
|
440
|
+
<Avatar className="size-10">
|
|
441
|
+
<AvatarImage
|
|
442
|
+
src="https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=100&h=100&fit=crop&crop=face"
|
|
443
|
+
alt="Designer"
|
|
444
|
+
/>
|
|
445
|
+
<AvatarFallback>DS</AvatarFallback>
|
|
446
|
+
</Avatar>
|
|
447
|
+
<Avatar className="size-10">
|
|
448
|
+
<AvatarFallback className="bg-green-500 text-white">
|
|
449
|
+
DE
|
|
450
|
+
</AvatarFallback>
|
|
451
|
+
</Avatar>
|
|
452
|
+
<Avatar className="size-10">
|
|
453
|
+
<AvatarFallback className="bg-orange-500 text-white">
|
|
454
|
+
PM
|
|
455
|
+
</AvatarFallback>
|
|
456
|
+
</Avatar>
|
|
457
|
+
<Avatar className="size-10">
|
|
458
|
+
<AvatarFallback className="bg-gray-600 text-xs text-white">
|
|
459
|
+
+3
|
|
460
|
+
</AvatarFallback>
|
|
461
|
+
</Avatar>
|
|
462
|
+
</div>
|
|
463
|
+
</div>
|
|
464
|
+
</div>
|
|
465
|
+
),
|
|
466
|
+
parameters: {
|
|
467
|
+
docs: {
|
|
468
|
+
description: {
|
|
469
|
+
story:
|
|
470
|
+
"Real-world usage examples including user lists, comment threads, and team member displays showing how avatars integrate into common UI patterns.",
|
|
471
|
+
},
|
|
472
|
+
},
|
|
473
|
+
},
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// 5. Loading States
|
|
477
|
+
export const LoadingStates: Story = {
|
|
478
|
+
render: () => (
|
|
479
|
+
<div className="space-y-8">
|
|
480
|
+
<div className="text-center">
|
|
481
|
+
<h3 className="mb-2 font-medium text-white">Loading States</h3>
|
|
482
|
+
<p className="text-sm text-white/60">
|
|
483
|
+
How avatars handle loading and error states
|
|
484
|
+
</p>
|
|
485
|
+
</div>
|
|
486
|
+
|
|
487
|
+
<div className="flex flex-wrap items-center justify-center gap-6">
|
|
488
|
+
{/* Loading State Simulation */}
|
|
489
|
+
<div className="space-y-2 text-center">
|
|
490
|
+
<Avatar>
|
|
491
|
+
<AvatarImage
|
|
492
|
+
src="https://httpstat.us/200?sleep=5000"
|
|
493
|
+
alt="Loading"
|
|
494
|
+
/>
|
|
495
|
+
<AvatarFallback className="animate-pulse bg-gray-600">
|
|
496
|
+
<div className="h-4 w-4 rounded bg-gray-400"></div>
|
|
497
|
+
</AvatarFallback>
|
|
498
|
+
</Avatar>
|
|
499
|
+
<p className="text-xs text-white/60">Loading...</p>
|
|
500
|
+
</div>
|
|
501
|
+
|
|
502
|
+
{/* Error State */}
|
|
503
|
+
<div className="space-y-2 text-center">
|
|
504
|
+
<Avatar>
|
|
505
|
+
<AvatarImage src="/non-existent-image.jpg" alt="Error" />
|
|
506
|
+
<AvatarFallback className="border border-red-500/30 bg-red-500/20 text-red-400">
|
|
507
|
+
!
|
|
508
|
+
</AvatarFallback>
|
|
509
|
+
</Avatar>
|
|
510
|
+
<p className="text-xs text-white/60">Error State</p>
|
|
511
|
+
</div>
|
|
512
|
+
|
|
513
|
+
{/* Skeleton State */}
|
|
514
|
+
<div className="space-y-2 text-center">
|
|
515
|
+
<Avatar className="animate-pulse bg-gray-700">
|
|
516
|
+
<AvatarFallback className="bg-gray-600"></AvatarFallback>
|
|
517
|
+
</Avatar>
|
|
518
|
+
<p className="text-xs text-white/60">Skeleton</p>
|
|
519
|
+
</div>
|
|
520
|
+
|
|
521
|
+
{/* Success State */}
|
|
522
|
+
<div className="space-y-2 text-center">
|
|
523
|
+
<Avatar>
|
|
524
|
+
<AvatarImage
|
|
525
|
+
src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=100&h=100&fit=crop&crop=face"
|
|
526
|
+
alt="Loaded"
|
|
527
|
+
/>
|
|
528
|
+
<AvatarFallback>OK</AvatarFallback>
|
|
529
|
+
</Avatar>
|
|
530
|
+
<p className="text-xs text-white/60">Loaded</p>
|
|
531
|
+
</div>
|
|
532
|
+
</div>
|
|
533
|
+
|
|
534
|
+
<div className="text-center">
|
|
535
|
+
<div className="inline-block max-w-lg rounded-lg border border-white/10 bg-white/5 p-4">
|
|
536
|
+
<h4 className="mb-2 text-sm font-medium text-white">
|
|
537
|
+
Loading Behavior
|
|
538
|
+
</h4>
|
|
539
|
+
<p className="text-xs leading-relaxed text-white/60">
|
|
540
|
+
Avatars automatically show fallback content while images are loading
|
|
541
|
+
or if they fail to load. You can customize the fallback appearance
|
|
542
|
+
to match your design system or show loading indicators.
|
|
543
|
+
</p>
|
|
544
|
+
</div>
|
|
545
|
+
</div>
|
|
546
|
+
</div>
|
|
547
|
+
),
|
|
548
|
+
parameters: {
|
|
549
|
+
docs: {
|
|
550
|
+
description: {
|
|
551
|
+
story:
|
|
552
|
+
"Examples of different loading states including loading indicators, error states, skeleton loading, and successful image loading.",
|
|
553
|
+
},
|
|
554
|
+
},
|
|
555
|
+
},
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
// 6. Accessibility Example
|
|
559
|
+
export const AccessibilityExample: Story = {
|
|
560
|
+
render: () => (
|
|
561
|
+
<div className="space-y-8">
|
|
562
|
+
<div className="text-center">
|
|
563
|
+
<h3 className="mb-2 font-medium text-white">Accessibility Features</h3>
|
|
564
|
+
<p className="text-sm text-white/60">
|
|
565
|
+
Proper accessibility implementation with alt text and descriptions
|
|
566
|
+
</p>
|
|
567
|
+
</div>
|
|
568
|
+
|
|
569
|
+
<div className="mx-auto max-w-md space-y-6">
|
|
570
|
+
{/* Profile with proper alt text */}
|
|
571
|
+
<div className="flex items-center gap-3 rounded-lg border border-white/10 bg-white/5 p-4">
|
|
572
|
+
<Avatar>
|
|
573
|
+
<AvatarImage
|
|
574
|
+
src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=100&h=100&fit=crop&crop=face"
|
|
575
|
+
alt="Profile picture of John Doe, Software Engineer"
|
|
576
|
+
/>
|
|
577
|
+
<AvatarFallback>JD</AvatarFallback>
|
|
578
|
+
</Avatar>
|
|
579
|
+
<div>
|
|
580
|
+
<p className="text-sm font-medium text-white">John Doe</p>
|
|
581
|
+
<p className="text-xs text-white/60">Software Engineer</p>
|
|
582
|
+
</div>
|
|
583
|
+
</div>
|
|
584
|
+
|
|
585
|
+
{/* Fallback with descriptive content */}
|
|
586
|
+
<div className="flex items-center gap-3 rounded-lg border border-white/10 bg-white/5 p-4">
|
|
587
|
+
<Avatar title="User avatar for Sarah Wilson">
|
|
588
|
+
<AvatarFallback aria-label="Sarah Wilson's initials">
|
|
589
|
+
SW
|
|
590
|
+
</AvatarFallback>
|
|
591
|
+
</Avatar>
|
|
592
|
+
<div>
|
|
593
|
+
<p className="text-sm font-medium text-white">Sarah Wilson</p>
|
|
594
|
+
<p className="text-xs text-white/60">UX Designer</p>
|
|
595
|
+
</div>
|
|
596
|
+
</div>
|
|
597
|
+
|
|
598
|
+
{/* Online status indicator */}
|
|
599
|
+
<div className="flex items-center gap-3 rounded-lg border border-white/10 bg-white/5 p-4">
|
|
600
|
+
<div className="relative">
|
|
601
|
+
<Avatar>
|
|
602
|
+
<AvatarImage
|
|
603
|
+
src="https://images.unsplash.com/photo-1494790108755-2616b612b47c?w=100&h=100&fit=crop&crop=face"
|
|
604
|
+
alt="Profile picture of Emma Davis, Product Manager"
|
|
605
|
+
/>
|
|
606
|
+
<AvatarFallback>ED</AvatarFallback>
|
|
607
|
+
</Avatar>
|
|
608
|
+
<div
|
|
609
|
+
className="absolute -right-0.5 -bottom-0.5 h-3 w-3 rounded-full border-2 border-gray-900 bg-green-500"
|
|
610
|
+
aria-label="Online status indicator"
|
|
611
|
+
title="Currently online"
|
|
612
|
+
></div>
|
|
613
|
+
</div>
|
|
614
|
+
<div>
|
|
615
|
+
<p className="text-sm font-medium text-white">Emma Davis</p>
|
|
616
|
+
<p className="text-xs text-white/60">Product Manager • Online</p>
|
|
617
|
+
</div>
|
|
618
|
+
</div>
|
|
619
|
+
</div>
|
|
620
|
+
|
|
621
|
+
<div className="text-center">
|
|
622
|
+
<div className="inline-block max-w-lg rounded-lg border border-white/10 bg-white/5 p-4">
|
|
623
|
+
<h4 className="mb-2 text-sm font-medium text-white">
|
|
624
|
+
Accessibility Best Practices
|
|
625
|
+
</h4>
|
|
626
|
+
<div className="space-y-2 text-left text-xs text-white/60">
|
|
627
|
+
<p>• Use descriptive alt text for images</p>
|
|
628
|
+
<p>• Provide aria-label for fallback content</p>
|
|
629
|
+
<p>• Include title attributes for additional context</p>
|
|
630
|
+
<p>• Ensure sufficient color contrast for text</p>
|
|
631
|
+
<p>• Add status indicators with proper labels</p>
|
|
632
|
+
</div>
|
|
633
|
+
</div>
|
|
634
|
+
</div>
|
|
635
|
+
</div>
|
|
636
|
+
),
|
|
637
|
+
parameters: {
|
|
638
|
+
docs: {
|
|
639
|
+
description: {
|
|
640
|
+
story:
|
|
641
|
+
"Examples demonstrating proper accessibility implementation including descriptive alt text, aria labels, and status indicators.",
|
|
642
|
+
},
|
|
643
|
+
},
|
|
644
|
+
},
|
|
645
|
+
}
|