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.
Files changed (308) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +456 -0
  3. package/dist/components/aspect-ratio/AspectRatio.stories.tsx +1327 -0
  4. package/dist/components/aspect-ratio/index.tsx +10 -0
  5. package/dist/components/aspect-ratio/meta.ts +8 -0
  6. package/dist/components/avatar/Avatar.stories.tsx +645 -0
  7. package/dist/components/avatar/index.tsx +50 -0
  8. package/dist/components/avatar/meta.ts +8 -0
  9. package/dist/components/badge/Badge.stories.tsx +169 -0
  10. package/dist/components/badge/index.tsx +28 -0
  11. package/dist/components/badge/meta.ts +6 -0
  12. package/dist/components/banner/Banner.stories.tsx +475 -0
  13. package/dist/components/banner/index.tsx +256 -0
  14. package/dist/components/banner/meta.ts +36 -0
  15. package/dist/components/button/Button.stories.tsx +74 -0
  16. package/dist/components/button/index.tsx +158 -0
  17. package/dist/components/button/meta.ts +33 -0
  18. package/dist/components/card/Card.stories.tsx +377 -0
  19. package/dist/components/card/index.tsx +85 -0
  20. package/dist/components/card/meta.ts +14 -0
  21. package/dist/components/char-count/CharCount.stories.tsx +334 -0
  22. package/dist/components/char-count/index.tsx +51 -0
  23. package/dist/components/char-count/meta.ts +13 -0
  24. package/dist/components/checkbox/Checkbox.stories.tsx +209 -0
  25. package/dist/components/checkbox/index.tsx +34 -0
  26. package/dist/components/checkbox/meta.ts +19 -0
  27. package/dist/components/chip/Chip.stories.tsx +207 -0
  28. package/dist/components/chip/index.tsx +92 -0
  29. package/dist/components/chip/meta.ts +17 -0
  30. package/dist/components/circular-loader/CircularLoader.stories.tsx +741 -0
  31. package/dist/components/circular-loader/index.tsx +138 -0
  32. package/dist/components/circular-loader/meta.ts +11 -0
  33. package/dist/components/collapsible/Collapsible.stories.tsx +319 -0
  34. package/dist/components/collapsible/index.tsx +158 -0
  35. package/dist/components/collapsible/meta.ts +22 -0
  36. package/dist/components/command/Command.stories.tsx +996 -0
  37. package/dist/components/command/index.tsx +324 -0
  38. package/dist/components/command/meta.ts +18 -0
  39. package/dist/components/dialog/Dialog.stories.tsx +963 -0
  40. package/dist/components/dialog/index.tsx +250 -0
  41. package/dist/components/dialog/meta.ts +28 -0
  42. package/dist/components/divider/Divider.stories.tsx +633 -0
  43. package/dist/components/divider/index.tsx +181 -0
  44. package/dist/components/divider/meta.ts +12 -0
  45. package/dist/components/dot-loader/DotLoader.stories.tsx +352 -0
  46. package/dist/components/dot-loader/index.tsx +78 -0
  47. package/dist/components/dot-loader/meta.ts +14 -0
  48. package/dist/components/dropdown/Dropdown.stories.tsx +1210 -0
  49. package/dist/components/dropdown/index.tsx +479 -0
  50. package/dist/components/dropdown/meta.ts +21 -0
  51. package/dist/components/form/Form.stories.tsx +320 -0
  52. package/dist/components/form/index.tsx +183 -0
  53. package/dist/components/form/meta.ts +11 -0
  54. package/dist/components/helper-text/HelperText.stories.tsx +254 -0
  55. package/dist/components/helper-text/index.tsx +102 -0
  56. package/dist/components/helper-text/meta.ts +18 -0
  57. package/dist/components/hover-card/HoverCard.stories.tsx +1328 -0
  58. package/dist/components/hover-card/index.tsx +42 -0
  59. package/dist/components/hover-card/meta.ts +12 -0
  60. package/dist/components/icon-button/IconButton.stories.tsx +252 -0
  61. package/dist/components/icon-button/index.tsx +130 -0
  62. package/dist/components/icon-button/meta.ts +20 -0
  63. package/dist/components/if-else/if-else.stories.tsx +100 -0
  64. package/dist/components/if-else/index.tsx +56 -0
  65. package/dist/components/if-else/meta.ts +6 -0
  66. package/dist/components/index.ts +70 -0
  67. package/dist/components/input/Input.stories.tsx +431 -0
  68. package/dist/components/input/index.tsx +487 -0
  69. package/dist/components/input/meta.ts +28 -0
  70. package/dist/components/label/Label.stories.tsx +200 -0
  71. package/dist/components/label/index.tsx +43 -0
  72. package/dist/components/label/meta.ts +14 -0
  73. package/dist/components/list/List.stories.tsx +963 -0
  74. package/dist/components/list/index.tsx +567 -0
  75. package/dist/components/list/meta.ts +24 -0
  76. package/dist/components/marquee/Marquee.stories.tsx +819 -0
  77. package/dist/components/marquee/index.tsx +107 -0
  78. package/dist/components/marquee/meta.ts +6 -0
  79. package/dist/components/overlay/Overlay.stories.tsx +954 -0
  80. package/dist/components/overlay/index.tsx +58 -0
  81. package/dist/components/overlay/meta.ts +10 -0
  82. package/dist/components/pagination/Pagination.stories.tsx +354 -0
  83. package/dist/components/pagination/index.tsx +455 -0
  84. package/dist/components/pagination/meta.ts +29 -0
  85. package/dist/components/popover/Popover.stories.tsx +1037 -0
  86. package/dist/components/popover/index.tsx +67 -0
  87. package/dist/components/popover/meta.ts +12 -0
  88. package/dist/components/radio/Radio.stories.tsx +146 -0
  89. package/dist/components/radio/index.tsx +41 -0
  90. package/dist/components/radio/meta.ts +19 -0
  91. package/dist/components/resizable/Resizable.stories.tsx +866 -0
  92. package/dist/components/resizable/index.tsx +55 -0
  93. package/dist/components/resizable/meta.ts +12 -0
  94. package/dist/components/scroll-area/ScrollArea.stories.tsx +1104 -0
  95. package/dist/components/scroll-area/index.tsx +55 -0
  96. package/dist/components/scroll-area/meta.ts +8 -0
  97. package/dist/components/search/Search.stories.tsx +678 -0
  98. package/dist/components/search/index.tsx +141 -0
  99. package/dist/components/search/meta.ts +6 -0
  100. package/dist/components/select/Select.stories.tsx +962 -0
  101. package/dist/components/select/index.tsx +512 -0
  102. package/dist/components/select/meta.ts +40 -0
  103. package/dist/components/sheet/Sheet.stories.tsx +1060 -0
  104. package/dist/components/sheet/index.tsx +440 -0
  105. package/dist/components/sheet/meta.ts +38 -0
  106. package/dist/components/skelton/Skelton.stories.tsx +859 -0
  107. package/dist/components/skelton/index.tsx +17 -0
  108. package/dist/components/skelton/meta.ts +6 -0
  109. package/dist/components/slider/Slider.stories.tsx +876 -0
  110. package/dist/components/slider/index.tsx +156 -0
  111. package/dist/components/slider/meta.ts +29 -0
  112. package/dist/components/stepper/Stepper.stories.tsx +639 -0
  113. package/dist/components/stepper/index.tsx +650 -0
  114. package/dist/components/stepper/meta.ts +19 -0
  115. package/dist/components/switch/Switch.stories.tsx +85 -0
  116. package/dist/components/switch/index.tsx +37 -0
  117. package/dist/components/switch/meta.ts +24 -0
  118. package/dist/components/switch-case/SwitchCase.stories.tsx +209 -0
  119. package/dist/components/switch-case/index.tsx +89 -0
  120. package/dist/components/switch-case/meta.ts +6 -0
  121. package/dist/components/table/Table.stories.tsx +1095 -0
  122. package/dist/components/table/index.tsx +113 -0
  123. package/dist/components/table/meta.ts +20 -0
  124. package/dist/components/tabs/Tabs.stories.tsx +1379 -0
  125. package/dist/components/tabs/index.tsx +186 -0
  126. package/dist/components/tabs/meta.ts +25 -0
  127. package/dist/components/tag/Tag.stories.tsx +625 -0
  128. package/dist/components/tag/index.tsx +320 -0
  129. package/dist/components/tag/meta.ts +52 -0
  130. package/dist/components/textarea/TextArea.stories.tsx +723 -0
  131. package/dist/components/textarea/index.tsx +480 -0
  132. package/dist/components/textarea/meta.ts +23 -0
  133. package/dist/components/toast/Toast.stories.tsx +1427 -0
  134. package/dist/components/toast/index.tsx +26 -0
  135. package/dist/components/toast/meta.ts +19 -0
  136. package/dist/components/toggle/Toggle.stories.tsx +1093 -0
  137. package/dist/components/toggle/index.tsx +44 -0
  138. package/dist/components/toggle/meta.ts +19 -0
  139. package/dist/components/tooltip/Tooltip.stories.tsx +1548 -0
  140. package/dist/components/tooltip/index.tsx +304 -0
  141. package/dist/components/tooltip/meta.ts +21 -0
  142. package/dist/components/typography/Typography.stories.tsx +197 -0
  143. package/dist/components/typography/index.tsx +184 -0
  144. package/dist/components/typography/meta.ts +38 -0
  145. package/dist/fonts/LabGrotesque-Regular.ttf +0 -0
  146. package/dist/fonts/LabGrotesqueTRIAL-Bold.otf +0 -0
  147. package/dist/fonts/LabGrotesqueTRIAL-Light.otf +0 -0
  148. package/dist/fonts/LabGrotesqueTRIAL-Medium.otf +0 -0
  149. package/dist/fonts/LabGrotesqueTRIAL-Regular.otf +0 -0
  150. package/dist/fonts/PPSupplySans-Regular (1).otf +0 -0
  151. package/dist/fonts/PPSupplySans-Regular.otf +0 -0
  152. package/dist/fonts/PPSupplySans-Ultralight.otf +0 -0
  153. package/dist/hooks/index.ts +3 -0
  154. package/dist/hooks/use-previous/UsePrevious.stories.tsx +997 -0
  155. package/dist/hooks/use-previous/index.ts +15 -0
  156. package/dist/hooks/use-previous/meta.ts +6 -0
  157. package/dist/hooks/use-standalone-pagination/UseStandalonePagination.stories.tsx +983 -0
  158. package/dist/hooks/use-standalone-pagination/index.ts +146 -0
  159. package/dist/hooks/use-standalone-pagination/meta.ts +6 -0
  160. package/dist/icons/Icons.stories.tsx +29 -0
  161. package/dist/icons/alert-icon/AlertIcon.stories.tsx +991 -0
  162. package/dist/icons/alert-icon/index.tsx +48 -0
  163. package/dist/icons/alert-icon/meta.ts +8 -0
  164. package/dist/icons/all-icons.tsx +738 -0
  165. package/dist/icons/angle-down-icon/AngleDownIcon.stories.tsx +1031 -0
  166. package/dist/icons/angle-down-icon/index.tsx +25 -0
  167. package/dist/icons/angle-down-icon/meta.ts +8 -0
  168. package/dist/icons/arrow-box-left-icon/ArrowBoxLeftIcon.stories.tsx +1080 -0
  169. package/dist/icons/arrow-box-left-icon/index.tsx +24 -0
  170. package/dist/icons/arrow-box-left-icon/meta.ts +8 -0
  171. package/dist/icons/arrow-right-icon/ArrowRightIcon.stories.tsx +1151 -0
  172. package/dist/icons/arrow-right-icon/index.tsx +26 -0
  173. package/dist/icons/arrow-right-icon/meta.ts +8 -0
  174. package/dist/icons/arrow-right-up-icon/ArrowRightUpIcon.stories.tsx +1273 -0
  175. package/dist/icons/arrow-right-up-icon/index.tsx +24 -0
  176. package/dist/icons/arrow-right-up-icon/meta.ts +8 -0
  177. package/dist/icons/art-board-icon/ArtBoardIcon.stories.tsx +670 -0
  178. package/dist/icons/art-board-icon/index.tsx +24 -0
  179. package/dist/icons/art-board-icon/meta.ts +7 -0
  180. package/dist/icons/audio-bar-icon/AudioBarIcon.stories.tsx +1244 -0
  181. package/dist/icons/audio-bar-icon/index.tsx +19 -0
  182. package/dist/icons/audio-bar-icon/meta.ts +8 -0
  183. package/dist/icons/bubble-check-icon/BubbleCheckIcon.stories.tsx +1239 -0
  184. package/dist/icons/bubble-check-icon/index.tsx +24 -0
  185. package/dist/icons/bubble-check-icon/meta.ts +8 -0
  186. package/dist/icons/bubble-crossed-icon/BubbleCrossedIcon.stories.tsx +1228 -0
  187. package/dist/icons/bubble-crossed-icon/index.tsx +24 -0
  188. package/dist/icons/bubble-crossed-icon/meta.ts +8 -0
  189. package/dist/icons/bubble-sparkle-icon/BubbleSparkleIcon.stories.tsx +912 -0
  190. package/dist/icons/bubble-sparkle-icon/index.tsx +26 -0
  191. package/dist/icons/bubble-sparkle-icon/meta.ts +8 -0
  192. package/dist/icons/chevron-double-left-icon/ChevronDoubleLeftIcon.stories.tsx +1021 -0
  193. package/dist/icons/chevron-double-left-icon/index.tsx +34 -0
  194. package/dist/icons/chevron-double-left-icon/meta.ts +8 -0
  195. package/dist/icons/chevron-double-right-icon/ChevronDoubleRightIcon.stories.tsx +1021 -0
  196. package/dist/icons/chevron-double-right-icon/index.tsx +34 -0
  197. package/dist/icons/chevron-double-right-icon/meta.ts +8 -0
  198. package/dist/icons/chevron-down-icon/ChevronDownIcon.stories.tsx +1001 -0
  199. package/dist/icons/chevron-down-icon/index.tsx +27 -0
  200. package/dist/icons/chevron-down-icon/meta.ts +8 -0
  201. package/dist/icons/chevron-left-icon/ChevronLeftIcon.stories.tsx +1029 -0
  202. package/dist/icons/chevron-left-icon/index.tsx +27 -0
  203. package/dist/icons/chevron-left-icon/meta.ts +8 -0
  204. package/dist/icons/chevron-right-icon/ChevronRightIcon.stories.tsx +1021 -0
  205. package/dist/icons/chevron-right-icon/index.tsx +27 -0
  206. package/dist/icons/chevron-right-icon/meta.ts +8 -0
  207. package/dist/icons/chevron-up-icon/ChevronUpIcon.stories.tsx +1036 -0
  208. package/dist/icons/chevron-up-icon/index.tsx +27 -0
  209. package/dist/icons/chevron-up-icon/meta.ts +8 -0
  210. package/dist/icons/command-icon/CommandIcon.stories.tsx +1098 -0
  211. package/dist/icons/command-icon/index.tsx +24 -0
  212. package/dist/icons/command-icon/meta.ts +8 -0
  213. package/dist/icons/cross-circle-icon/CrossCircleIcon.stories.tsx +1061 -0
  214. package/dist/icons/cross-circle-icon/index.tsx +23 -0
  215. package/dist/icons/cross-circle-icon/meta.ts +8 -0
  216. package/dist/icons/cross-icon/CrossIcon.stories.tsx +1027 -0
  217. package/dist/icons/cross-icon/index.tsx +24 -0
  218. package/dist/icons/cross-icon/meta.ts +8 -0
  219. package/dist/icons/edit-big-icon/EditBigIcon.stories.tsx +1092 -0
  220. package/dist/icons/edit-big-icon/index.tsx +22 -0
  221. package/dist/icons/edit-big-icon/meta.ts +8 -0
  222. package/dist/icons/eye-close-icon/EyeCloseIcon.stories.tsx +1090 -0
  223. package/dist/icons/eye-close-icon/index.tsx +26 -0
  224. package/dist/icons/eye-close-icon/meta.ts +8 -0
  225. package/dist/icons/eye-open-icon/EyeOpenIcon.stories.tsx +1098 -0
  226. package/dist/icons/eye-open-icon/index.tsx +24 -0
  227. package/dist/icons/eye-open-icon/meta.ts +8 -0
  228. package/dist/icons/feature-shine-icon/FeatureShineIcon.stories.tsx +1071 -0
  229. package/dist/icons/feature-shine-icon/index.tsx +29 -0
  230. package/dist/icons/feature-shine-icon/meta.ts +8 -0
  231. package/dist/icons/file-chart-icon/FileChartIcon.stories.tsx +1115 -0
  232. package/dist/icons/file-chart-icon/index.tsx +24 -0
  233. package/dist/icons/file-chart-icon/meta.ts +8 -0
  234. package/dist/icons/file-text-icon/FileTextIcon.stories.tsx +668 -0
  235. package/dist/icons/file-text-icon/index.tsx +24 -0
  236. package/dist/icons/file-text-icon/meta.ts +8 -0
  237. package/dist/icons/grip-vertical-icon/GripVerticalIcon.stories.tsx +1239 -0
  238. package/dist/icons/grip-vertical-icon/index.tsx +28 -0
  239. package/dist/icons/grip-vertical-icon/meta.ts +8 -0
  240. package/dist/icons/image-icon/ImageIcon.stories.tsx +1181 -0
  241. package/dist/icons/image-icon/index.tsx +24 -0
  242. package/dist/icons/image-icon/meta.ts +8 -0
  243. package/dist/icons/import-folder-icon/ImportFolderIcon.stories.tsx +1248 -0
  244. package/dist/icons/import-folder-icon/index.tsx +22 -0
  245. package/dist/icons/import-folder-icon/meta.ts +8 -0
  246. package/dist/icons/index.ts +46 -0
  247. package/dist/icons/light-bulb-simple-icon/LightBulbSimpleIcon.stories.tsx +1272 -0
  248. package/dist/icons/light-bulb-simple-icon/index.tsx +24 -0
  249. package/dist/icons/light-bulb-simple-icon/meta.ts +8 -0
  250. package/dist/icons/magic-book-icon/MagicBookIcon.stories.tsx +1245 -0
  251. package/dist/icons/magic-book-icon/index.tsx +32 -0
  252. package/dist/icons/magic-book-icon/meta.ts +8 -0
  253. package/dist/icons/maintenance-icon/MaintenanceIcon.stories.tsx +1251 -0
  254. package/dist/icons/maintenance-icon/index.tsx +23 -0
  255. package/dist/icons/maintenance-icon/meta.ts +8 -0
  256. package/dist/icons/message-icon/MessageIcon.stories.tsx +595 -0
  257. package/dist/icons/message-icon/index.tsx +30 -0
  258. package/dist/icons/message-icon/meta.ts +8 -0
  259. package/dist/icons/move-horizontal-icon/MoveHorizontalIcon.stories.tsx +1245 -0
  260. package/dist/icons/move-horizontal-icon/index.tsx +23 -0
  261. package/dist/icons/move-horizontal-icon/meta.ts +8 -0
  262. package/dist/icons/move-vertical-icon/MoveVerticalIcon.stories.tsx +1196 -0
  263. package/dist/icons/move-vertical-icon/index.tsx +23 -0
  264. package/dist/icons/move-vertical-icon/meta.ts +8 -0
  265. package/dist/icons/page-search-icon/PageSearchIcon.stories.tsx +1167 -0
  266. package/dist/icons/page-search-icon/index.tsx +21 -0
  267. package/dist/icons/page-search-icon/meta.ts +8 -0
  268. package/dist/icons/pencil-icon/PencilIcon.stories.tsx +1131 -0
  269. package/dist/icons/pencil-icon/index.tsx +21 -0
  270. package/dist/icons/pencil-icon/meta.ts +8 -0
  271. package/dist/icons/plus-icon/PlusIcon.stories.tsx +1151 -0
  272. package/dist/icons/plus-icon/index.tsx +24 -0
  273. package/dist/icons/plus-icon/meta.ts +8 -0
  274. package/dist/icons/search-icon/SearchIcon.stories.tsx +1181 -0
  275. package/dist/icons/search-icon/index.tsx +24 -0
  276. package/dist/icons/search-icon/meta.ts +8 -0
  277. package/dist/icons/site-logo-icon/SiteLogoIcon.stories.tsx +1167 -0
  278. package/dist/icons/site-logo-icon/index.tsx +79 -0
  279. package/dist/icons/site-logo-icon/meta.ts +8 -0
  280. package/dist/icons/spinner-gradient-icon/SpinnerGradientIcon.stories.tsx +637 -0
  281. package/dist/icons/spinner-gradient-icon/index.tsx +53 -0
  282. package/dist/icons/spinner-gradient-icon/meta.ts +8 -0
  283. package/dist/icons/spinner-solid-icon/SpinnerSolidIcon.stories.tsx +644 -0
  284. package/dist/icons/spinner-solid-icon/index.tsx +59 -0
  285. package/dist/icons/spinner-solid-icon/meta.ts +8 -0
  286. package/dist/icons/spinner-solid-neutral-icon/SpinnerSolidINeutralcon.stories.tsx +736 -0
  287. package/dist/icons/spinner-solid-neutral-icon/index.tsx +53 -0
  288. package/dist/icons/spinner-solid-neutral-icon/meta.ts +8 -0
  289. package/dist/icons/tick-circle-icon/TickCircleIcon.stories.tsx +1204 -0
  290. package/dist/icons/tick-circle-icon/index.tsx +23 -0
  291. package/dist/icons/tick-circle-icon/meta.ts +8 -0
  292. package/dist/icons/tick-icon/TickIcon.stories.tsx +1340 -0
  293. package/dist/icons/tick-icon/index.tsx +24 -0
  294. package/dist/icons/tick-icon/meta.ts +8 -0
  295. package/dist/icons/trash-icon/TrashIcon.stories.tsx +996 -0
  296. package/dist/icons/trash-icon/index.tsx +24 -0
  297. package/dist/icons/trash-icon/meta.ts +8 -0
  298. package/dist/icons/upload-icon/UploadIcon.stories.tsx +947 -0
  299. package/dist/icons/upload-icon/index.tsx +24 -0
  300. package/dist/icons/upload-icon/meta.ts +8 -0
  301. package/dist/icons/vertical-menu-icon/VerticalMenuIcon.stories.tsx +1045 -0
  302. package/dist/icons/vertical-menu-icon/index.tsx +27 -0
  303. package/dist/icons/vertical-menu-icon/meta.ts +8 -0
  304. package/dist/index.d.ts +6 -0
  305. package/dist/index.js +206 -0
  306. package/dist/lib/utils.ts +6 -0
  307. package/dist/styles/aural-theme.css +1008 -0
  308. 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,8 @@
1
+ export const meta = {
2
+ dependencies: {
3
+ "@radix-ui/react-aspect-ratio": "^1.1.7",
4
+ },
5
+ devDependencies: {},
6
+ internalDependencies: [],
7
+ tokens: [],
8
+ }
@@ -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
+ }