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,1060 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import React, { useState } from "react"
3
+ import { Badge } from "@components/badge"
4
+ import { Button } from "@components/button"
5
+ import { Checkbox } from "@components/checkbox"
6
+ import { IconButton } from "@components/icon-button"
7
+ import Input from "@components/input"
8
+ import { Label } from "@components/label"
9
+ import Textarea from "@components/textarea"
10
+ import { AlertIcon } from "@icons/alert-icon"
11
+ import { ArrowRightIcon } from "@icons/arrow-right-icon"
12
+ import { ChevronRightIcon } from "@icons/chevron-right-icon"
13
+ import { FeatureShineIcon } from "@icons/feature-shine-icon"
14
+ import { FileChartIcon } from "@icons/file-chart-icon"
15
+ import { MagicBookIcon } from "@icons/magic-book-icon"
16
+ import { MaintenanceIcon } from "@icons/maintenance-icon"
17
+ import { SearchIcon } from "@icons/search-icon"
18
+ import { SiteLogoIcon } from "@icons/site-logo-icon"
19
+ import { TickCircleIcon } from "@icons/tick-circle-icon"
20
+ import type { Meta, StoryObj } from "@storybook/react"
21
+
22
+ import {
23
+ Sheet,
24
+ SheetClose,
25
+ SheetContent,
26
+ SheetDescription,
27
+ SheetFooter,
28
+ SheetHeader,
29
+ SheetTitle,
30
+ SheetTrigger,
31
+ } from "."
32
+
33
+ const meta: Meta<typeof Sheet> = {
34
+ title: "Components/UI/Sheet",
35
+ component: Sheet,
36
+ parameters: {
37
+ layout: "fullscreen",
38
+ backgrounds: {
39
+ default: "dark",
40
+ values: [
41
+ { name: "dark", value: "#0a0a0a" },
42
+ { name: "light", value: "#ffffff" },
43
+ ],
44
+ },
45
+ docs: {
46
+ description: {
47
+ component: `
48
+ # Sheet Component
49
+
50
+ A slide-out panel component built on Radix UI Dialog primitives that provides a drawer-like interface for displaying content from different sides of the screen.
51
+
52
+ ## Features
53
+
54
+ - **Multiple Sides**: Sheet can slide in from top, right, bottom, or left
55
+ - **Variant Colors**: Neutral, positive, negative, warning, and info color variants
56
+ - **Customizable Overlays**: Configurable opacity, glass effects, and noise textures
57
+ - **Smooth Animations**: Slide animations with proper easing for each direction
58
+ - **Accessible**: Full keyboard navigation and screen reader support
59
+ - **Flexible Content**: Header, footer, and body sections with custom styling
60
+ - **Auto Close Button**: Positioned close button with CrossIcon
61
+ - **Portal Rendering**: Renders outside normal DOM hierarchy
62
+ - **Focus Management**: Automatic focus trapping and restoration
63
+ - **Border Accents**: Colored borders that match the variant
64
+
65
+ ## Component Structure
66
+
67
+ - **Sheet**: Root component that manages sheet state
68
+ - **SheetTrigger**: Button or element that opens the sheet
69
+ - **SheetContent**: Main sheet container with overlay, content, and close button
70
+ - **SheetHeader**: Header section for title and description
71
+ - **SheetFooter**: Footer section for action buttons
72
+ - **SheetTitle**: Accessible title element
73
+ - **SheetDescription**: Optional description text
74
+ - **SheetClose**: Close button component
75
+
76
+ ## Usage Examples
77
+
78
+ ### Basic Sheet
79
+ \`\`\`tsx
80
+ <Sheet>
81
+ <SheetTrigger asChild>
82
+ <Button>Open Sheet</Button>
83
+ </SheetTrigger>
84
+ <SheetContent>
85
+ <SheetHeader>
86
+ <SheetTitle>Sheet Title</SheetTitle>
87
+ <SheetDescription>Sheet description text.</SheetDescription>
88
+ </SheetHeader>
89
+ <div>Sheet content goes here.</div>
90
+ <SheetFooter>
91
+ <SheetClose asChild>
92
+ <Button variant="outline">Cancel</Button>
93
+ </SheetClose>
94
+ <Button>Confirm</Button>
95
+ </SheetFooter>
96
+ </SheetContent>
97
+ </Sheet>
98
+ \`\`\`
99
+
100
+ ### Sheet from Different Sides
101
+ \`\`\`tsx
102
+ <SheetContent side="left">
103
+ {/* Left side sheet */}
104
+ </SheetContent>
105
+
106
+ <SheetContent side="right">
107
+ {/* Right side sheet (default) */}
108
+ </SheetContent>
109
+
110
+ <SheetContent side="top">
111
+ {/* Top side sheet */}
112
+ </SheetContent>
113
+
114
+ <SheetContent side="bottom">
115
+ {/* Bottom side sheet */}
116
+ </SheetContent>
117
+ \`\`\`
118
+
119
+ ### Colored Variants
120
+ \`\`\`tsx
121
+ <SheetContent variant="positive">
122
+ {/* Success/positive themed sheet */}
123
+ </SheetContent>
124
+
125
+ <SheetContent variant="negative">
126
+ {/* Error/negative themed sheet */}
127
+ </SheetContent>
128
+
129
+ <SheetContent variant="warning">
130
+ {/* Warning themed sheet */}
131
+ </SheetContent>
132
+
133
+ <SheetContent variant="info">
134
+ {/* Info themed sheet */}
135
+ </SheetContent>
136
+ \`\`\`
137
+
138
+ ### Custom Overlay
139
+ \`\`\`tsx
140
+ <SheetContent opacity="high" glass="medium" noise="low">
141
+ {/* High opacity overlay with glass effect and subtle noise */}
142
+ </SheetContent>
143
+ \`\`\`
144
+ `,
145
+ },
146
+ },
147
+ },
148
+ tags: ["autodocs"],
149
+ }
150
+
151
+ export default meta
152
+ type Story = StoryObj<typeof Sheet>
153
+
154
+ // Demo background content
155
+ const BackgroundContent = () => (
156
+ <div className="min-h-screen bg-gradient-to-br from-blue-900 via-purple-900 to-pink-900 p-8">
157
+ <div className="mx-auto max-w-4xl space-y-8">
158
+ <header className="text-center">
159
+ <h1 className="mb-4 text-4xl font-bold text-white">
160
+ Main Content Area
161
+ </h1>
162
+ <p className="text-white/80">
163
+ This is the main content that sits behind the sheet overlay
164
+ </p>
165
+ </header>
166
+
167
+ <div className="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
168
+ {Array.from({ length: 6 }, (_, i) => (
169
+ <div
170
+ key={i}
171
+ className="rounded-lg border border-white/20 bg-white/10 p-6"
172
+ >
173
+ <h3 className="mb-2 text-lg font-semibold text-white">
174
+ Content Block {i + 1}
175
+ </h3>
176
+ <p className="mb-4 text-sm text-white/70">
177
+ Sample content that demonstrates the sheet overlay effect
178
+ </p>
179
+ <Button size="sm" variant="outline">
180
+ Action
181
+ </Button>
182
+ </div>
183
+ ))}
184
+ </div>
185
+ </div>
186
+ </div>
187
+ )
188
+
189
+ // 1. Sheet Sides and Variants
190
+ export const SidesAndVariants: Story = {
191
+ render: () => (
192
+ <div className="relative">
193
+ <BackgroundContent />
194
+
195
+ {/* Control Panel */}
196
+ <div className="fixed top-4 left-1/2 z-50 -translate-x-1/2 transform">
197
+ <div className="space-y-4 rounded-lg bg-black/80 p-6 backdrop-blur-sm">
198
+ <h3 className="text-center text-sm font-medium text-white">
199
+ Sheet Sides & Variants
200
+ </h3>
201
+
202
+ {/* Sides */}
203
+ <div className="space-y-2">
204
+ <h4 className="text-xs font-medium tracking-wide text-white/70 uppercase">
205
+ Sides
206
+ </h4>
207
+ <div className="grid grid-cols-2 gap-2">
208
+ {/* Left Sheet - Neutral */}
209
+ <Sheet>
210
+ <SheetTrigger asChild>
211
+ <Button size="sm" variant="outline">
212
+ Left
213
+ </Button>
214
+ </SheetTrigger>
215
+ <SheetContent side="left" variant="neutral">
216
+ <SheetHeader>
217
+ <SheetTitle>Left Side Sheet</SheetTitle>
218
+ <SheetDescription>
219
+ Slides in from the left with neutral styling
220
+ </SheetDescription>
221
+ </SheetHeader>
222
+ <div className="py-4">
223
+ <div className="space-y-4">
224
+ <div className="rounded-lg bg-white/5 p-4">
225
+ <h4 className="mb-2 font-medium text-white">
226
+ Navigation Menu
227
+ </h4>
228
+ <div className="space-y-2">
229
+ {["Dashboard", "Projects", "Team", "Settings"].map(
230
+ (item) => (
231
+ <div
232
+ key={item}
233
+ className="flex items-center gap-3 rounded p-2 hover:bg-white/10"
234
+ >
235
+ <SiteLogoIcon className="h-4 w-4 text-white/60" />
236
+ <span className="text-white">{item}</span>
237
+ </div>
238
+ )
239
+ )}
240
+ </div>
241
+ </div>
242
+ </div>
243
+ </div>
244
+ </SheetContent>
245
+ </Sheet>
246
+
247
+ {/* Right Sheet - Positive */}
248
+ <Sheet>
249
+ <SheetTrigger asChild>
250
+ <Button size="sm" variant="outline">
251
+ Right
252
+ </Button>
253
+ </SheetTrigger>
254
+ <SheetContent side="right" variant="positive">
255
+ <SheetHeader>
256
+ <SheetTitle>Right Side Sheet</SheetTitle>
257
+ <SheetDescription>
258
+ Slides in from the right with positive styling
259
+ </SheetDescription>
260
+ </SheetHeader>
261
+ <div className="py-4">
262
+ <div className="rounded-lg border border-green-500/20 bg-green-500/10 p-4">
263
+ <div className="mb-2 flex items-center gap-2">
264
+ <TickCircleIcon className="h-5 w-5 text-green-400" />
265
+ <h4 className="font-medium text-white">
266
+ Success Panel
267
+ </h4>
268
+ </div>
269
+ <p className="text-sm text-white/80">
270
+ This demonstrates the positive variant with green accent
271
+ border.
272
+ </p>
273
+ </div>
274
+ </div>
275
+ </SheetContent>
276
+ </Sheet>
277
+
278
+ {/* Top Sheet - Warning */}
279
+ <Sheet>
280
+ <SheetTrigger asChild>
281
+ <Button size="sm" variant="outline">
282
+ Top
283
+ </Button>
284
+ </SheetTrigger>
285
+ <SheetContent side="top" variant="warning">
286
+ <SheetHeader>
287
+ <SheetTitle>Top Side Sheet</SheetTitle>
288
+ <SheetDescription>
289
+ Slides down from the top with warning styling
290
+ </SheetDescription>
291
+ </SheetHeader>
292
+ <div className="py-4">
293
+ <div className="rounded-lg border border-yellow-500/20 bg-yellow-500/10 p-4">
294
+ <div className="mb-2 flex items-center gap-2">
295
+ <AlertIcon className="h-5 w-5 text-yellow-400" />
296
+ <h4 className="font-medium text-white">
297
+ Warning Notice
298
+ </h4>
299
+ </div>
300
+ <p className="text-sm text-white/80">
301
+ Top sheets are great for notifications and warnings.
302
+ </p>
303
+ </div>
304
+ </div>
305
+ </SheetContent>
306
+ </Sheet>
307
+
308
+ {/* Bottom Sheet - Info */}
309
+ <Sheet>
310
+ <SheetTrigger asChild>
311
+ <Button size="sm" variant="outline">
312
+ Bottom
313
+ </Button>
314
+ </SheetTrigger>
315
+ <SheetContent side="bottom" variant="info">
316
+ <SheetHeader>
317
+ <SheetTitle>Bottom Side Sheet</SheetTitle>
318
+ <SheetDescription>
319
+ Slides up from the bottom with info styling
320
+ </SheetDescription>
321
+ </SheetHeader>
322
+ <div className="py-4">
323
+ <div className="rounded-lg border border-blue-500/20 bg-blue-500/10 p-4">
324
+ <div className="mb-2 flex items-center gap-2">
325
+ <FileChartIcon className="h-5 w-5 text-blue-400" />
326
+ <h4 className="font-medium text-white">
327
+ Information Panel
328
+ </h4>
329
+ </div>
330
+ <p className="text-sm text-white/80">
331
+ Bottom sheets work well for mobile-style interactions.
332
+ </p>
333
+ </div>
334
+ </div>
335
+ </SheetContent>
336
+ </Sheet>
337
+ </div>
338
+ </div>
339
+
340
+ {/* Error Variant */}
341
+ <div className="space-y-2">
342
+ <h4 className="text-xs font-medium tracking-wide text-white/70 uppercase">
343
+ Error Variant
344
+ </h4>
345
+ <Sheet>
346
+ <SheetTrigger asChild>
347
+ <Button size="sm" variant="outline">
348
+ Error Sheet
349
+ </Button>
350
+ </SheetTrigger>
351
+ <SheetContent side="right" variant="negative">
352
+ <SheetHeader>
353
+ <SheetTitle>Error Sheet</SheetTitle>
354
+ <SheetDescription>
355
+ Demonstrates the negative variant for error states
356
+ </SheetDescription>
357
+ </SheetHeader>
358
+ <div className="py-4">
359
+ <div className="rounded-lg border border-red-500/20 bg-red-500/10 p-4">
360
+ <div className="mb-2 flex items-center gap-2">
361
+ <AlertIcon className="h-5 w-5 text-red-400" />
362
+ <h4 className="font-medium text-white">Error Details</h4>
363
+ </div>
364
+ <p className="mb-3 text-sm text-white/80">
365
+ Something went wrong. Please check the details below.
366
+ </p>
367
+ <div className="space-y-2">
368
+ <div className="text-xs text-red-200">
369
+ • Network connection failed
370
+ </div>
371
+ <div className="text-xs text-red-200">
372
+ • Invalid response format
373
+ </div>
374
+ </div>
375
+ </div>
376
+ </div>
377
+ <SheetFooter>
378
+ <Button variant="outline" size="sm">
379
+ Retry
380
+ </Button>
381
+ <SheetClose asChild>
382
+ <Button size="sm">Close</Button>
383
+ </SheetClose>
384
+ </SheetFooter>
385
+ </SheetContent>
386
+ </Sheet>
387
+ </div>
388
+ </div>
389
+ </div>
390
+ </div>
391
+ ),
392
+ parameters: {
393
+ docs: {
394
+ description: {
395
+ story:
396
+ "Comprehensive demonstration of all sheet sides (left, right, top, bottom) and color variants (neutral, positive, negative, warning, info) with colored border accents.",
397
+ },
398
+ },
399
+ },
400
+ }
401
+
402
+ // 2. Navigation Sheet
403
+ export const NavigationSheet: Story = {
404
+ render: () => (
405
+ <div className="relative">
406
+ <BackgroundContent />
407
+
408
+ {/* Mobile-style header */}
409
+ <div className="fixed top-0 right-0 left-0 z-40 bg-black/80 backdrop-blur-sm">
410
+ <div className="flex items-center justify-between p-4">
411
+ <Sheet>
412
+ <SheetTrigger asChild>
413
+ <IconButton
414
+ variant="ghost"
415
+ icon={<SiteLogoIcon />}
416
+ label="Menu"
417
+ />
418
+ </SheetTrigger>
419
+ <SheetContent side="left" className="w-80">
420
+ <SheetHeader>
421
+ <SheetTitle>Navigation Menu</SheetTitle>
422
+ <SheetDescription>
423
+ Main navigation for the application
424
+ </SheetDescription>
425
+ </SheetHeader>
426
+
427
+ <div className="py-4">
428
+ <nav className="space-y-2">
429
+ {[
430
+ {
431
+ label: "Dashboard",
432
+ icon: SiteLogoIcon,
433
+ active: true,
434
+ badge: null,
435
+ },
436
+ {
437
+ label: "Projects",
438
+ icon: FeatureShineIcon,
439
+ active: false,
440
+ badge: "3",
441
+ },
442
+ {
443
+ label: "Analytics",
444
+ icon: FileChartIcon,
445
+ active: false,
446
+ badge: null,
447
+ },
448
+ {
449
+ label: "Team",
450
+ icon: TickCircleIcon,
451
+ active: false,
452
+ badge: "New",
453
+ },
454
+ {
455
+ label: "Settings",
456
+ icon: MaintenanceIcon,
457
+ active: false,
458
+ badge: null,
459
+ },
460
+ ].map((item) => (
461
+ <a
462
+ key={item.label}
463
+ href="#"
464
+ className={`flex items-center gap-3 rounded-lg p-3 transition-colors ${
465
+ item.active
466
+ ? "bg-blue-500/20 text-blue-300"
467
+ : "text-white hover:bg-white/10"
468
+ }`}
469
+ >
470
+ <item.icon className="h-5 w-5" />
471
+ <span className="flex-1">{item.label}</span>
472
+ {item.badge && (
473
+ <Badge
474
+ color={item.badge === "New" ? "positive" : "neutral"}
475
+ size="sm"
476
+ >
477
+ {item.badge}
478
+ </Badge>
479
+ )}
480
+ <ChevronRightIcon className="h-4 w-4" />
481
+ </a>
482
+ ))}
483
+ </nav>
484
+
485
+ <div className="mt-8 space-y-4">
486
+ <div className="rounded-lg bg-white/5 p-4">
487
+ <h4 className="mb-2 text-sm font-medium text-white">
488
+ Quick Actions
489
+ </h4>
490
+ <div className="space-y-2">
491
+ <Button
492
+ size="sm"
493
+ variant="outline"
494
+ className="w-full justify-start"
495
+ >
496
+ <SearchIcon className="mr-2 h-4 w-4" />
497
+ Search
498
+ </Button>
499
+ <Button
500
+ size="sm"
501
+ variant="outline"
502
+ className="w-full justify-start"
503
+ >
504
+ <MagicBookIcon className="mr-2 h-4 w-4" />
505
+ Help & Support
506
+ </Button>
507
+ </div>
508
+ </div>
509
+ </div>
510
+ </div>
511
+
512
+ <SheetFooter>
513
+ <div className="w-full space-y-2">
514
+ <div className="flex items-center gap-3 rounded-lg bg-white/5 p-3">
515
+ <div className="h-8 w-8 rounded-full bg-gradient-to-r from-blue-500 to-purple-500"></div>
516
+ <div>
517
+ <p className="text-sm font-medium text-white">John Doe</p>
518
+ <p className="text-xs text-white/60">john@example.com</p>
519
+ </div>
520
+ </div>
521
+ <SheetClose asChild>
522
+ <Button variant="outline" className="w-full">
523
+ Close Menu
524
+ </Button>
525
+ </SheetClose>
526
+ </div>
527
+ </SheetFooter>
528
+ </SheetContent>
529
+ </Sheet>
530
+
531
+ <h1 className="text-lg font-semibold text-white">App Title</h1>
532
+
533
+ <IconButton
534
+ variant="ghost"
535
+ icon={<MaintenanceIcon />}
536
+ label="Settings"
537
+ />
538
+ </div>
539
+ </div>
540
+
541
+ {/* Add padding top to account for fixed header */}
542
+ <div className="pt-16">
543
+ <BackgroundContent />
544
+ </div>
545
+ </div>
546
+ ),
547
+ parameters: {
548
+ docs: {
549
+ description: {
550
+ story:
551
+ "Mobile-style navigation sheet with menu items, badges, user profile, and quick actions demonstrating common mobile app patterns.",
552
+ },
553
+ },
554
+ },
555
+ }
556
+
557
+ // 3. Form Sheet
558
+ export const FormSheet: Story = {
559
+ render: () => {
560
+ const [formData, setFormData] = useState({
561
+ name: "",
562
+ email: "",
563
+ subject: "",
564
+ message: "",
565
+ newsletter: false,
566
+ })
567
+
568
+ return (
569
+ <div className="relative">
570
+ <BackgroundContent />
571
+
572
+ <div className="fixed right-4 bottom-4 z-50">
573
+ <Sheet>
574
+ <SheetTrigger asChild>
575
+ <Button className="rounded-full shadow-lg">
576
+ <SearchIcon className="mr-2 h-4 w-4" />
577
+ Contact Us
578
+ </Button>
579
+ </SheetTrigger>
580
+ <SheetContent side="right" className="w-96">
581
+ <SheetHeader>
582
+ <SheetTitle>Contact Form</SheetTitle>
583
+ <SheetDescription>
584
+ Send us a message and we'll get back to you soon.
585
+ </SheetDescription>
586
+ </SheetHeader>
587
+
588
+ <div className="py-4">
589
+ <form className="space-y-4">
590
+ <div className="space-y-2">
591
+ <Label htmlFor="name">Name</Label>
592
+ <Input
593
+ id="name"
594
+ placeholder="Your full name"
595
+ value={formData.name}
596
+ onChange={(e: any) =>
597
+ setFormData((prev) => ({
598
+ ...prev,
599
+ name: e.target.value,
600
+ }))
601
+ }
602
+ />
603
+ </div>
604
+
605
+ <div className="space-y-2">
606
+ <Label htmlFor="email">Email</Label>
607
+ <Input
608
+ id="email"
609
+ type="email"
610
+ placeholder="your.email@example.com"
611
+ value={formData.email}
612
+ onChange={(e: any) =>
613
+ setFormData((prev) => ({
614
+ ...prev,
615
+ email: e.target.value,
616
+ }))
617
+ }
618
+ />
619
+ </div>
620
+
621
+ <div className="space-y-2">
622
+ <Label htmlFor="subject">Subject</Label>
623
+ <Input
624
+ id="subject"
625
+ placeholder="Message subject"
626
+ value={formData.subject}
627
+ onChange={(e: any) =>
628
+ setFormData((prev) => ({
629
+ ...prev,
630
+ subject: e.target.value,
631
+ }))
632
+ }
633
+ />
634
+ </div>
635
+
636
+ <div className="space-y-2">
637
+ <Label htmlFor="message">Message</Label>
638
+ <Textarea
639
+ id="message"
640
+ placeholder="Your message..."
641
+ rows={4}
642
+ value={formData.message}
643
+ onChange={(e: any) =>
644
+ setFormData((prev) => ({
645
+ ...prev,
646
+ message: e.target.value,
647
+ }))
648
+ }
649
+ />
650
+ </div>
651
+
652
+ <div className="flex items-center space-x-2">
653
+ <Checkbox
654
+ id="newsletter"
655
+ checked={formData.newsletter}
656
+ onCheckedChange={(checked) =>
657
+ setFormData((prev) => ({
658
+ ...prev,
659
+ newsletter: checked as boolean,
660
+ }))
661
+ }
662
+ />
663
+ <Label htmlFor="newsletter" className="text-sm">
664
+ Subscribe to newsletter
665
+ </Label>
666
+ </div>
667
+
668
+ <div className="rounded-lg bg-blue-500/10 p-3">
669
+ <p className="text-xs text-blue-200">
670
+ We typically respond within 24 hours. For urgent matters,
671
+ please call our support line.
672
+ </p>
673
+ </div>
674
+ </form>
675
+ </div>
676
+
677
+ <SheetFooter>
678
+ <div className="flex w-full gap-2">
679
+ <SheetClose asChild>
680
+ <Button variant="outline" className="flex-1">
681
+ Cancel
682
+ </Button>
683
+ </SheetClose>
684
+ <Button
685
+ className="flex-1"
686
+ disabled={
687
+ !formData.name || !formData.email || !formData.message
688
+ }
689
+ >
690
+ Send Message
691
+ </Button>
692
+ </div>
693
+ </SheetFooter>
694
+ </SheetContent>
695
+ </Sheet>
696
+ </div>
697
+ </div>
698
+ )
699
+ },
700
+ parameters: {
701
+ docs: {
702
+ description: {
703
+ story:
704
+ "Contact form sheet with form validation, checkbox input, and user feedback elements.",
705
+ },
706
+ },
707
+ },
708
+ }
709
+
710
+ // 4. Settings Panel Sheet
711
+ export const SettingsPanelSheet: Story = {
712
+ render: () => {
713
+ const [settings, setSettings] = useState({
714
+ notifications: true,
715
+ darkMode: true,
716
+ analytics: false,
717
+ autoSave: true,
718
+ emailUpdates: false,
719
+ })
720
+
721
+ const toggleSetting = (key: string) => {
722
+ setSettings((prev) => ({
723
+ ...prev,
724
+ [key]: !prev[key as keyof typeof prev],
725
+ }))
726
+ }
727
+
728
+ return (
729
+ <div className="relative">
730
+ <BackgroundContent />
731
+
732
+ <div className="fixed top-4 right-4 z-50">
733
+ <Sheet>
734
+ <SheetTrigger asChild>
735
+ <Button variant="outline">
736
+ <MaintenanceIcon className="mr-2 h-4 w-4" />
737
+ Settings
738
+ </Button>
739
+ </SheetTrigger>
740
+ <SheetContent side="right" className="w-80">
741
+ <SheetHeader>
742
+ <SheetTitle>Application Settings</SheetTitle>
743
+ <SheetDescription>
744
+ Customize your experience and preferences
745
+ </SheetDescription>
746
+ </SheetHeader>
747
+
748
+ <div className="py-4">
749
+ <div className="space-y-6">
750
+ {/* Notifications Section */}
751
+ <div className="space-y-3">
752
+ <h4 className="text-sm font-medium text-white">
753
+ Notifications
754
+ </h4>
755
+ <div className="space-y-3">
756
+ <div className="flex items-center justify-between">
757
+ <span className="text-sm text-white">
758
+ Push Notifications
759
+ </span>
760
+ <Checkbox
761
+ checked={settings.notifications}
762
+ onCheckedChange={() => toggleSetting("notifications")}
763
+ />
764
+ </div>
765
+
766
+ <div className="flex items-center justify-between">
767
+ <span className="text-sm text-white">
768
+ Email Updates
769
+ </span>
770
+ <Checkbox
771
+ checked={settings.emailUpdates}
772
+ onCheckedChange={() => toggleSetting("emailUpdates")}
773
+ />
774
+ </div>
775
+
776
+ <div className="flex items-center justify-between">
777
+ <span className="text-sm text-white">Analytics</span>
778
+ <Checkbox
779
+ checked={settings.analytics}
780
+ onCheckedChange={() => toggleSetting("analytics")}
781
+ />
782
+ </div>
783
+ </div>
784
+ </div>
785
+
786
+ {/* Appearance Section */}
787
+ <div className="space-y-3">
788
+ <h4 className="text-sm font-medium text-white">
789
+ Appearance
790
+ </h4>
791
+ <div className="space-y-3">
792
+ <div className="flex items-center justify-between">
793
+ <span className="text-sm text-white">Dark Mode</span>
794
+ <Checkbox
795
+ checked={settings.darkMode}
796
+ onCheckedChange={() => toggleSetting("darkMode")}
797
+ />
798
+ </div>
799
+ </div>
800
+ </div>
801
+
802
+ {/* Advanced Section */}
803
+ <div className="space-y-3">
804
+ <h4 className="text-sm font-medium text-white">Advanced</h4>
805
+ <div className="space-y-3">
806
+ <div className="flex items-center justify-between">
807
+ <span className="text-sm text-white">Auto Save</span>
808
+ <Checkbox
809
+ checked={settings.autoSave}
810
+ onCheckedChange={() => toggleSetting("autoSave")}
811
+ />
812
+ </div>
813
+
814
+ <Button variant="outline" size="sm" className="w-full">
815
+ <FileChartIcon className="mr-2 h-4 w-4" />
816
+ Clear Cache
817
+ </Button>
818
+
819
+ <Button variant="outline" size="sm" className="w-full">
820
+ <ArrowRightIcon className="mr-2 h-4 w-4" />
821
+ Export Data
822
+ </Button>
823
+ </div>
824
+ </div>
825
+ </div>
826
+ </div>
827
+
828
+ <SheetFooter>
829
+ <div className="flex w-full gap-2">
830
+ <Button variant="outline" size="sm" className="flex-1">
831
+ Reset
832
+ </Button>
833
+ <SheetClose asChild>
834
+ <Button size="sm" className="flex-1">
835
+ Save Changes
836
+ </Button>
837
+ </SheetClose>
838
+ </div>
839
+ </SheetFooter>
840
+ </SheetContent>
841
+ </Sheet>
842
+ </div>
843
+ </div>
844
+ )
845
+ },
846
+ parameters: {
847
+ docs: {
848
+ description: {
849
+ story:
850
+ "Settings panel sheet with checkboxes, sections, and action buttons demonstrating configuration interfaces.",
851
+ },
852
+ },
853
+ },
854
+ }
855
+
856
+ // 5. Overlay Variations
857
+ export const OverlayVariations: Story = {
858
+ render: () => (
859
+ <div className="relative">
860
+ <BackgroundContent />
861
+
862
+ <div className="fixed bottom-4 left-1/2 z-50 -translate-x-1/2 transform">
863
+ <div className="space-y-2 rounded-lg bg-black/80 p-4 backdrop-blur-sm">
864
+ <h3 className="text-center text-sm font-medium text-white">
865
+ Overlay Variations
866
+ </h3>
867
+ <div className="flex gap-2">
868
+ {/* Low Opacity */}
869
+ <Sheet>
870
+ <SheetTrigger asChild>
871
+ <Button size="sm" variant="outline">
872
+ Low Opacity
873
+ </Button>
874
+ </SheetTrigger>
875
+ <SheetContent side="right" opacity="low">
876
+ <SheetHeader>
877
+ <SheetTitle>Low Opacity</SheetTitle>
878
+ <SheetDescription>
879
+ Subtle background overlay that maintains visibility
880
+ </SheetDescription>
881
+ </SheetHeader>
882
+ <div className="py-4">
883
+ <p className="text-sm text-white/80">
884
+ This sheet uses low opacity overlay, allowing more of the
885
+ background content to remain visible.
886
+ </p>
887
+ </div>
888
+ </SheetContent>
889
+ </Sheet>
890
+
891
+ {/* High Opacity */}
892
+ <Sheet>
893
+ <SheetTrigger asChild>
894
+ <Button size="sm" variant="outline">
895
+ High Opacity
896
+ </Button>
897
+ </SheetTrigger>
898
+ <SheetContent side="right" opacity="high">
899
+ <SheetHeader>
900
+ <SheetTitle>High Opacity</SheetTitle>
901
+ <SheetDescription>
902
+ Strong background overlay for maximum focus
903
+ </SheetDescription>
904
+ </SheetHeader>
905
+ <div className="py-4">
906
+ <p className="text-sm text-white/80">
907
+ This sheet uses high opacity overlay, creating strong focus
908
+ on the sheet content by dimming the background
909
+ significantly.
910
+ </p>
911
+ </div>
912
+ </SheetContent>
913
+ </Sheet>
914
+
915
+ {/* Glass Effect */}
916
+ <Sheet>
917
+ <SheetTrigger asChild>
918
+ <Button size="sm" variant="outline">
919
+ Glass Effect
920
+ </Button>
921
+ </SheetTrigger>
922
+ <SheetContent side="right" glass="high">
923
+ <SheetHeader>
924
+ <SheetTitle>Glass Effect</SheetTitle>
925
+ <SheetDescription>
926
+ Frosted glass overlay for modern aesthetics
927
+ </SheetDescription>
928
+ </SheetHeader>
929
+ <div className="py-4">
930
+ <p className="text-sm text-white/80">
931
+ This sheet includes a glass effect with backdrop blur,
932
+ creating a modern frosted glass appearance.
933
+ </p>
934
+ </div>
935
+ </SheetContent>
936
+ </Sheet>
937
+
938
+ {/* Noise Texture */}
939
+ <Sheet>
940
+ <SheetTrigger asChild>
941
+ <Button size="sm" variant="outline">
942
+ Noise Texture
943
+ </Button>
944
+ </SheetTrigger>
945
+ <SheetContent side="right" noise="medium">
946
+ <SheetHeader>
947
+ <SheetTitle>Noise Texture</SheetTitle>
948
+ <SheetDescription>
949
+ Textured overlay for enhanced visual depth
950
+ </SheetDescription>
951
+ </SheetHeader>
952
+ <div className="py-4">
953
+ <p className="text-sm text-white/80">
954
+ This sheet includes noise texture overlay, adding visual
955
+ interest and depth to the background.
956
+ </p>
957
+ </div>
958
+ </SheetContent>
959
+ </Sheet>
960
+ </div>
961
+ </div>
962
+ </div>
963
+ </div>
964
+ ),
965
+ parameters: {
966
+ docs: {
967
+ description: {
968
+ story:
969
+ "Different overlay configurations showing opacity levels, glass effects, and noise textures for various visual requirements.",
970
+ },
971
+ },
972
+ },
973
+ }
974
+
975
+ // 6. Mobile Bottom Sheet
976
+ export const MobileBottomSheet: Story = {
977
+ render: () => {
978
+ const [selectedOption, setSelectedOption] = useState<string | null>(null)
979
+
980
+ return (
981
+ <div className="relative">
982
+ <BackgroundContent />
983
+
984
+ {/* Simulate mobile content */}
985
+ <div className="fixed bottom-4 left-1/2 z-50 -translate-x-1/2 transform">
986
+ <Sheet>
987
+ <SheetTrigger asChild>
988
+ <Button>Share Options</Button>
989
+ </SheetTrigger>
990
+ <SheetContent side="bottom" className="h-auto max-h-96">
991
+ <SheetHeader>
992
+ <SheetTitle>Share</SheetTitle>
993
+ <SheetDescription>
994
+ Choose how you'd like to share this content
995
+ </SheetDescription>
996
+ </SheetHeader>
997
+
998
+ <div className="py-4">
999
+ <div className="mb-6 grid grid-cols-4 gap-4">
1000
+ {[
1001
+ { name: "Message", icon: SearchIcon },
1002
+ { name: "Email", icon: AlertIcon },
1003
+ { name: "Copy Link", icon: TickCircleIcon },
1004
+ { name: "More", icon: SiteLogoIcon },
1005
+ ].map((option) => (
1006
+ <button
1007
+ key={option.name}
1008
+ onClick={() => setSelectedOption(option.name)}
1009
+ className={`flex flex-col items-center gap-2 rounded-lg p-3 transition-colors ${
1010
+ selectedOption === option.name
1011
+ ? "bg-blue-500/20 text-blue-300"
1012
+ : "text-white hover:bg-white/10"
1013
+ }`}
1014
+ >
1015
+ <option.icon className="h-6 w-6" />
1016
+ <span className="text-xs">{option.name}</span>
1017
+ </button>
1018
+ ))}
1019
+ </div>
1020
+
1021
+ <div className="space-y-2">
1022
+ <h4 className="text-sm font-medium text-white">
1023
+ Recent Contacts
1024
+ </h4>
1025
+ {Array.from({ length: 3 }, (_, i) => (
1026
+ <div
1027
+ key={i}
1028
+ className="flex items-center gap-3 rounded-lg p-2 hover:bg-white/10"
1029
+ >
1030
+ <div className="h-8 w-8 rounded-full bg-gradient-to-r from-blue-500 to-purple-500"></div>
1031
+ <span className="text-sm text-white">
1032
+ Contact {i + 1}
1033
+ </span>
1034
+ </div>
1035
+ ))}
1036
+ </div>
1037
+ </div>
1038
+
1039
+ <SheetFooter>
1040
+ <SheetClose asChild>
1041
+ <Button variant="outline" className="w-full">
1042
+ Cancel
1043
+ </Button>
1044
+ </SheetClose>
1045
+ </SheetFooter>
1046
+ </SheetContent>
1047
+ </Sheet>
1048
+ </div>
1049
+ </div>
1050
+ )
1051
+ },
1052
+ parameters: {
1053
+ docs: {
1054
+ description: {
1055
+ story:
1056
+ "Mobile-style bottom sheet with share options and contact list, demonstrating common mobile interaction patterns.",
1057
+ },
1058
+ },
1059
+ },
1060
+ }