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,876 @@
1
+ import React from "react"
2
+ import type { Meta, StoryObj } from "@storybook/react"
3
+
4
+ import { Slider } from "."
5
+
6
+ const meta: Meta<typeof Slider> = {
7
+ title: "Components/UI/Slider",
8
+ component: Slider,
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
+ # Slider Component
22
+
23
+ A customizable range slider component built with Radix UI primitives and design system integration.
24
+
25
+ ## Features
26
+
27
+ - **Multiple Variants**: Default, primary, secondary, positive, warning, and info variants
28
+ - **Size Options**: Small (sm), medium (md), and large (lg) sizes
29
+ - **Orientation Support**: Horizontal and vertical orientations
30
+ - **Range & Single Value**: Support for both single value and range selection
31
+ - **Label Display**: Configurable thumb labels with custom text or values
32
+ - **Centered Thumbs**: Optional centered thumb positioning
33
+ - **Accessibility**: Built with Radix UI for keyboard navigation and screen reader support
34
+ - **Custom Styling**: Flexible class override system for complete customization
35
+ - **Touch Support**: Touch-friendly interaction on mobile devices
36
+ - **Design System**: Integrated with FM design tokens
37
+
38
+ ## Anatomy
39
+
40
+ ### Core Components
41
+ - **SliderRoot**: Main container with orientation and interaction handling
42
+ - **SliderTrack**: Background track element
43
+ - **SliderRange**: Active range/progress indicator
44
+ - **SliderThumb**: Interactive handle(s) for value selection with optional labels
45
+
46
+ ## Props Interface
47
+
48
+ \`\`\`tsx
49
+ interface SliderProps extends React.ComponentProps<typeof SliderPrimitive.Root> {
50
+ variant?: "default" | "primary" | "secondary" | "positive" | "warning" | "info"
51
+ size?: "sm" | "md" | "lg"
52
+ showLabel?: boolean // Show/hide thumb labels
53
+ label?: string // Custom label text (overrides value display)
54
+ centeredTumbs?: boolean // Center thumb positioning
55
+ classes?: {
56
+ root?: string // Override root container styles
57
+ track?: string // Override track background styles
58
+ range?: string // Override active range styles
59
+ thumb?: string // Override thumb handle styles
60
+ }
61
+ }
62
+ \`\`\`
63
+
64
+ ## New Features
65
+
66
+ ### Label Display
67
+ - **showLabel**: Toggle thumb label visibility (default: true)
68
+ - **label**: Custom text to display instead of values
69
+ - **Value Display**: Automatic value display when no custom label provided
70
+
71
+ ### Centered Thumbs
72
+ - **centeredTumbs**: Optional centered positioning for thumbs
73
+ - **Track Alignment**: Conditional styling for track-thumb alignment
74
+
75
+ ### Enhanced Styling
76
+ - **classes**: Granular style overrides for all sub-components
77
+ - **Variant Support**: Consistent variant styling across track, range, and thumbs
78
+ - **Size Variants**: Responsive sizing for different use cases
79
+
80
+ ## Usage Examples
81
+
82
+ ### Basic with Labels
83
+ \`\`\`tsx
84
+ <Slider
85
+ defaultValue={[50]}
86
+ showLabel={true}
87
+ max={100}
88
+ min={0}
89
+ />
90
+ \`\`\`
91
+
92
+ ### Custom Label Text
93
+ \`\`\`tsx
94
+ <Slider
95
+ defaultValue={[75]}
96
+ label="Volume"
97
+ showLabel={true}
98
+ />
99
+ \`\`\`
100
+
101
+ ### Without Labels
102
+ \`\`\`tsx
103
+ <Slider
104
+ defaultValue={[30]}
105
+ showLabel={false}
106
+ />
107
+ \`\`\`
108
+
109
+ ### Centered Thumbs
110
+ \`\`\`tsx
111
+ <Slider
112
+ defaultValue={[60]}
113
+ centeredTumbs={true}
114
+ />
115
+ \`\`\`
116
+
117
+ ### Custom Styling Classes
118
+ \`\`\`tsx
119
+ <Slider
120
+ defaultValue={[45]}
121
+ classes={{
122
+ root: "custom-root-class",
123
+ track: "bg-red-100",
124
+ range: "bg-red-500",
125
+ thumb: "bg-red-600 ring-red-200"
126
+ }}
127
+ />
128
+ \`\`\`
129
+ `,
130
+ },
131
+ },
132
+ },
133
+ tags: ["autodocs"],
134
+ argTypes: {
135
+ variant: {
136
+ control: "select",
137
+ options: [
138
+ "default",
139
+ "primary",
140
+ "secondary",
141
+ "positive",
142
+ "warning",
143
+ "info",
144
+ ],
145
+ description: "Visual variant of the slider",
146
+ },
147
+ size: {
148
+ control: "select",
149
+ options: ["sm", "md", "lg"],
150
+ description: "Size of the slider track and thumb",
151
+ },
152
+ showLabel: {
153
+ control: "boolean",
154
+ description: "Show or hide thumb labels",
155
+ },
156
+ label: {
157
+ control: "text",
158
+ description: "Custom label text (overrides value display)",
159
+ },
160
+ centeredTumbs: {
161
+ control: "boolean",
162
+ description: "Center thumb positioning",
163
+ },
164
+ orientation: {
165
+ control: "select",
166
+ options: ["horizontal", "vertical"],
167
+ description: "Orientation of the slider",
168
+ },
169
+ disabled: {
170
+ control: "boolean",
171
+ description: "Whether the slider is disabled",
172
+ },
173
+ min: {
174
+ control: "number",
175
+ description: "Minimum value",
176
+ },
177
+ max: {
178
+ control: "number",
179
+ description: "Maximum value",
180
+ },
181
+ step: {
182
+ control: "number",
183
+ description: "Step increment",
184
+ },
185
+ },
186
+ }
187
+
188
+ export default meta
189
+ type Story = StoryObj<typeof Slider>
190
+
191
+ // 1. Default Slider
192
+ export const Default: Story = {
193
+ args: {
194
+ defaultValue: [50],
195
+ min: 0,
196
+ max: 100,
197
+ showLabel: true,
198
+ },
199
+ render: (args) => (
200
+ <div className="w-80 p-8">
201
+ <div className="mb-4">
202
+ <h3 className="mb-2 text-lg font-medium text-white">Default Slider</h3>
203
+ <p className="text-fm-secondary text-sm">
204
+ Basic slider with default styling and value labels
205
+ </p>
206
+ </div>
207
+ <Slider {...args} />
208
+ </div>
209
+ ),
210
+ }
211
+
212
+ // 2. Label Variants
213
+ export const LabelVariants: Story = {
214
+ render: () => (
215
+ <div className="w-80 space-y-6 p-8">
216
+ <div className="mb-6">
217
+ <h3 className="mb-2 text-lg font-medium text-white">Label Options</h3>
218
+ <p className="text-fm-secondary text-sm">
219
+ Different ways to display thumb labels
220
+ </p>
221
+ </div>
222
+
223
+ <div className="space-y-6">
224
+ <div>
225
+ <label className="mb-2 block text-sm font-medium text-white">
226
+ With Value Labels (Default)
227
+ </label>
228
+ <Slider defaultValue={[60]} variant="primary" showLabel={true} />
229
+ </div>
230
+
231
+ <div>
232
+ <label className="mb-2 block text-sm font-medium text-white">
233
+ Custom Label Text
234
+ </label>
235
+ <Slider
236
+ defaultValue={[75]}
237
+ variant="positive"
238
+ showLabel={true}
239
+ label="High"
240
+ />
241
+ </div>
242
+
243
+ <div>
244
+ <label className="mb-2 block text-sm font-medium text-white">
245
+ Without Labels
246
+ </label>
247
+ <Slider defaultValue={[40]} variant="warning" showLabel={false} />
248
+ </div>
249
+
250
+ <div>
251
+ <label className="mb-2 block text-sm font-medium text-white">
252
+ Range with Custom Labels
253
+ </label>
254
+ <Slider
255
+ defaultValue={[25, 75]}
256
+ variant="info"
257
+ showLabel={true}
258
+ label="Range"
259
+ />
260
+ </div>
261
+ </div>
262
+ </div>
263
+ ),
264
+ }
265
+
266
+ // 3. All Variants with Labels
267
+ export const Variants: Story = {
268
+ render: () => (
269
+ <div className="w-80 space-y-6 p-8">
270
+ <div className="mb-6">
271
+ <h3 className="mb-2 text-lg font-medium text-white">Slider Variants</h3>
272
+ <p className="text-fm-secondary text-sm">
273
+ Different color variants with value labels
274
+ </p>
275
+ </div>
276
+
277
+ <div className="space-y-4">
278
+ <div>
279
+ <label className="mb-2 block text-sm font-medium text-white">
280
+ Default
281
+ </label>
282
+ <Slider defaultValue={[40]} variant="default" showLabel={true} />
283
+ </div>
284
+
285
+ <div>
286
+ <label className="mb-2 block text-sm font-medium text-white">
287
+ Primary
288
+ </label>
289
+ <Slider defaultValue={[60]} variant="primary" showLabel={true} />
290
+ </div>
291
+
292
+ <div>
293
+ <label className="mb-2 block text-sm font-medium text-white">
294
+ Secondary
295
+ </label>
296
+ <Slider defaultValue={[35]} variant="secondary" showLabel={true} />
297
+ </div>
298
+
299
+ <div>
300
+ <label className="mb-2 block text-sm font-medium text-white">
301
+ Positive
302
+ </label>
303
+ <Slider defaultValue={[80]} variant="positive" showLabel={true} />
304
+ </div>
305
+
306
+ <div>
307
+ <label className="mb-2 block text-sm font-medium text-white">
308
+ Warning
309
+ </label>
310
+ <Slider defaultValue={[25]} variant="warning" showLabel={true} />
311
+ </div>
312
+
313
+ <div>
314
+ <label className="mb-2 block text-sm font-medium text-white">
315
+ Info
316
+ </label>
317
+ <Slider defaultValue={[70]} variant="info" showLabel={true} />
318
+ </div>
319
+ </div>
320
+ </div>
321
+ ),
322
+ }
323
+
324
+ // 4. Different Sizes with Labels
325
+ export const Sizes: Story = {
326
+ render: () => (
327
+ <div className="w-80 space-y-6 p-8">
328
+ <div className="mb-6">
329
+ <h3 className="mb-2 text-lg font-medium text-white">Slider Sizes</h3>
330
+ <p className="text-fm-secondary text-sm">
331
+ Small, medium, and large size options with labels
332
+ </p>
333
+ </div>
334
+
335
+ <div className="space-y-6">
336
+ <div>
337
+ <label className="mb-2 block text-sm font-medium text-white">
338
+ Small (sm)
339
+ </label>
340
+ <Slider
341
+ defaultValue={[30]}
342
+ size="sm"
343
+ variant="primary"
344
+ showLabel={true}
345
+ />
346
+ </div>
347
+
348
+ <div>
349
+ <label className="mb-2 block text-sm font-medium text-white">
350
+ Medium (md) - Default
351
+ </label>
352
+ <Slider
353
+ defaultValue={[50]}
354
+ size="md"
355
+ variant="primary"
356
+ showLabel={true}
357
+ />
358
+ </div>
359
+
360
+ <div>
361
+ <label className="mb-2 block text-sm font-medium text-white">
362
+ Large (lg)
363
+ </label>
364
+ <Slider
365
+ defaultValue={[70]}
366
+ size="lg"
367
+ variant="primary"
368
+ showLabel={true}
369
+ />
370
+ </div>
371
+ </div>
372
+ </div>
373
+ ),
374
+ }
375
+
376
+ // 5. Centered Thumbs
377
+ export const CenteredThumbs: Story = {
378
+ render: () => (
379
+ <div className="w-80 space-y-6 p-8">
380
+ <div className="mb-6">
381
+ <h3 className="mb-2 text-lg font-medium text-white">Centered Thumbs</h3>
382
+ <p className="text-fm-secondary text-sm">
383
+ Compare default and centered thumb positioning
384
+ </p>
385
+ </div>
386
+
387
+ <div className="space-y-6">
388
+ <div>
389
+ <label className="mb-2 block text-sm font-medium text-white">
390
+ Default Positioning
391
+ </label>
392
+ <Slider
393
+ defaultValue={[50]}
394
+ variant="primary"
395
+ centeredTumbs={false}
396
+ showLabel={true}
397
+ />
398
+ </div>
399
+
400
+ <div>
401
+ <label className="mb-2 block text-sm font-medium text-white">
402
+ Centered Thumbs
403
+ </label>
404
+ <Slider
405
+ defaultValue={[50]}
406
+ variant="primary"
407
+ centeredTumbs={true}
408
+ showLabel={true}
409
+ />
410
+ </div>
411
+
412
+ <div>
413
+ <label className="mb-2 block text-sm font-medium text-white">
414
+ Range with Centered Thumbs
415
+ </label>
416
+ <Slider
417
+ defaultValue={[25, 75]}
418
+ variant="positive"
419
+ centeredTumbs={true}
420
+ showLabel={true}
421
+ />
422
+ </div>
423
+ </div>
424
+ </div>
425
+ ),
426
+ }
427
+
428
+ // 6. Custom Labels
429
+ export const CustomLabels: Story = {
430
+ render: () => {
431
+ const [volume, setVolume] = React.useState([75])
432
+ const [quality, setQuality] = React.useState([3])
433
+ const [temperature, setTemperature] = React.useState([22])
434
+ const [mode, setMode] = React.useState([2])
435
+
436
+ const getQualityLabel = (value: number) => {
437
+ const labels = ["Low", "Medium", "High", "Ultra", "Max"]
438
+ return labels[value - 1] || "Unknown"
439
+ }
440
+
441
+ const getModeLabel = (value: number) => {
442
+ const modes = ["Eco", "Normal", "Performance", "Turbo"]
443
+ return modes[value - 1] || "Unknown"
444
+ }
445
+
446
+ return (
447
+ <div className="w-80 space-y-6 p-8">
448
+ <div className="mb-6">
449
+ <h3 className="mb-2 text-lg font-medium text-white">Custom Labels</h3>
450
+ <p className="text-fm-secondary text-sm">
451
+ Sliders with custom label text instead of values
452
+ </p>
453
+ </div>
454
+
455
+ <div className="space-y-6">
456
+ <div>
457
+ <label className="mb-2 block text-sm font-medium text-white">
458
+ Volume Control
459
+ </label>
460
+ <Slider
461
+ value={volume}
462
+ onValueChange={setVolume}
463
+ variant="primary"
464
+ label="Vol"
465
+ showLabel={true}
466
+ />
467
+ <div className="text-fm-secondary mt-1 text-xs">
468
+ Current: {volume[0]}%
469
+ </div>
470
+ </div>
471
+
472
+ <div>
473
+ <label className="mb-2 block text-sm font-medium text-white">
474
+ Quality Setting
475
+ </label>
476
+ <Slider
477
+ value={quality}
478
+ onValueChange={setQuality}
479
+ variant="info"
480
+ min={1}
481
+ max={5}
482
+ step={1}
483
+ label={getQualityLabel(quality[0])}
484
+ showLabel={true}
485
+ />
486
+ <div className="text-fm-secondary mt-1 text-xs">
487
+ Level: {quality[0]}/5
488
+ </div>
489
+ </div>
490
+
491
+ <div>
492
+ <label className="mb-2 block text-sm font-medium text-white">
493
+ Temperature
494
+ </label>
495
+ <Slider
496
+ value={temperature}
497
+ onValueChange={setTemperature}
498
+ variant="warning"
499
+ min={16}
500
+ max={30}
501
+ label={`${temperature[0]}°C`}
502
+ showLabel={true}
503
+ />
504
+ </div>
505
+
506
+ <div>
507
+ <label className="mb-2 block text-sm font-medium text-white">
508
+ Performance Mode
509
+ </label>
510
+ <Slider
511
+ value={mode}
512
+ onValueChange={setMode}
513
+ variant="positive"
514
+ min={1}
515
+ max={4}
516
+ step={1}
517
+ label={getModeLabel(mode[0])}
518
+ showLabel={true}
519
+ />
520
+ </div>
521
+ </div>
522
+ </div>
523
+ )
524
+ },
525
+ }
526
+
527
+ // 7. Range Slider with Custom Styling
528
+ export const RangeSlider: Story = {
529
+ render: () => {
530
+ const [values, setValues] = React.useState([25, 75])
531
+
532
+ return (
533
+ <div className="w-80 p-8">
534
+ <div className="mb-6">
535
+ <h3 className="mb-2 text-lg font-medium text-white">Range Slider</h3>
536
+ <p className="text-fm-secondary">
537
+ Select a range with dual handles and labels
538
+ </p>
539
+ </div>
540
+
541
+ <div className="space-y-4">
542
+ <Slider
543
+ value={values}
544
+ onValueChange={setValues}
545
+ variant="primary"
546
+ min={0}
547
+ max={100}
548
+ showLabel={true}
549
+ classes={{
550
+ thumb: "rounded-lg",
551
+ }}
552
+ />
553
+
554
+ <div className="text-fm-secondary flex justify-between text-sm">
555
+ <span>Min: {values[0]}</span>
556
+ <span>Max: {values[1]}</span>
557
+ </div>
558
+
559
+ <div className="bg-fm-surface-secondary/20 mt-4 rounded-lg p-3">
560
+ <p className="text-fm-secondary text-sm">
561
+ Selected range: {values[0]} - {values[1]} ({values[1] - values[0]}{" "}
562
+ units)
563
+ </p>
564
+ </div>
565
+ </div>
566
+ </div>
567
+ )
568
+ },
569
+ }
570
+
571
+ // 8. Vertical Orientation with Labels
572
+ export const VerticalSlider: Story = {
573
+ render: () => (
574
+ <div className="flex items-center justify-center gap-12 p-8">
575
+ <div className="text-center">
576
+ <h4 className="mb-4 text-sm font-medium text-white">With Labels</h4>
577
+ <Slider
578
+ orientation="vertical"
579
+ defaultValue={[60]}
580
+ variant="primary"
581
+ className="h-64"
582
+ showLabel={true}
583
+ />
584
+ </div>
585
+
586
+ <div className="text-center">
587
+ <h4 className="mb-4 text-sm font-medium text-white">Without Labels</h4>
588
+ <Slider
589
+ orientation="vertical"
590
+ defaultValue={[80]}
591
+ variant="positive"
592
+ className="h-64"
593
+ showLabel={false}
594
+ />
595
+ </div>
596
+
597
+ <div className="text-center">
598
+ <h4 className="mb-4 text-sm font-medium text-white">Custom Label</h4>
599
+ <Slider
600
+ orientation="vertical"
601
+ defaultValue={[40]}
602
+ variant="warning"
603
+ className="h-64"
604
+ showLabel={true}
605
+ label="Temp"
606
+ />
607
+ </div>
608
+
609
+ <div className="text-center">
610
+ <h4 className="mb-4 text-sm font-medium text-white">Range</h4>
611
+ <Slider
612
+ orientation="vertical"
613
+ defaultValue={[30, 80]}
614
+ variant="info"
615
+ className="h-64"
616
+ showLabel={true}
617
+ />
618
+ </div>
619
+ </div>
620
+ ),
621
+ parameters: {
622
+ layout: "fullscreen",
623
+ },
624
+ }
625
+
626
+ // 9. Custom Styling Classes
627
+ export const CustomStyling: Story = {
628
+ render: () => (
629
+ <div className="w-80 space-y-6 p-8">
630
+ <div className="mb-6">
631
+ <h3 className="mb-2 text-lg font-medium text-white">Custom Styling</h3>
632
+ <p className="text-fm-secondary text-sm">
633
+ Override default styles with custom classes
634
+ </p>
635
+ </div>
636
+
637
+ <div className="space-y-6">
638
+ <div>
639
+ <label className="mb-2 block text-sm font-medium text-white">
640
+ Custom Track & Range
641
+ </label>
642
+ <Slider
643
+ defaultValue={[40]}
644
+ showLabel={true}
645
+ classes={{
646
+ track: "bg-purple-900/40 rounded-full",
647
+ range:
648
+ "bg-gradient-to-r from-purple-400 to-pink-400 rounded-full",
649
+ }}
650
+ />
651
+ </div>
652
+
653
+ <div>
654
+ <label className="mb-2 block text-sm font-medium text-white">
655
+ Custom Thumb Styling
656
+ </label>
657
+ <Slider
658
+ defaultValue={[70]}
659
+ variant="primary"
660
+ showLabel={true}
661
+ classes={{
662
+ thumb:
663
+ "bg-white text-gray-900 border-2 border-fm-primary-500 ring-fm-primary-200 rounded-full shadow-lg",
664
+ }}
665
+ />
666
+ </div>
667
+
668
+ <div>
669
+ <label className="mb-2 block text-sm font-medium text-white">
670
+ Gradient with Custom Root
671
+ </label>
672
+ <Slider
673
+ defaultValue={[55]}
674
+ showLabel={true}
675
+ label="Style"
676
+ classes={{
677
+ root: "p-2 bg-gray-900/20 rounded-lg",
678
+ range: "bg-gradient-to-r from-cyan-400 to-blue-500 rounded-full",
679
+ thumb:
680
+ "bg-gradient-to-r from-cyan-400 to-blue-500 border-0 shadow-xl",
681
+ }}
682
+ />
683
+ </div>
684
+ </div>
685
+ </div>
686
+ ),
687
+ }
688
+
689
+ // 10. Complete Interactive Showcase
690
+ export const CompleteShowcase: Story = {
691
+ render: () => {
692
+ const [settings, setSettings] = React.useState({
693
+ volume: [80],
694
+ brightness: [65],
695
+ contrast: [50],
696
+ temperature: [18, 24],
697
+ quality: [4],
698
+ mode: [2],
699
+ })
700
+
701
+ const updateSetting = (key: string, value: number[]) => {
702
+ setSettings((prev) => ({ ...prev, [key]: value }))
703
+ }
704
+
705
+ const getQualityLabel = (value: number) => {
706
+ const labels = ["Low", "Medium", "High", "Ultra", "Max"]
707
+ return labels[value - 1] || "Unknown"
708
+ }
709
+
710
+ const getModeLabel = (value: number) => {
711
+ const modes = ["Eco", "Normal", "Turbo"]
712
+ return modes[value - 1] || "Unknown"
713
+ }
714
+
715
+ return (
716
+ <div className="w-96 space-y-8 p-8">
717
+ <div className="mb-8">
718
+ <h3 className="mb-2 text-xl font-bold text-white">System Settings</h3>
719
+ <p className="text-fm-secondary">
720
+ Comprehensive slider showcase with labels and custom styling
721
+ </p>
722
+ </div>
723
+
724
+ {/* Audio Settings */}
725
+ <div className="space-y-4">
726
+ <h4 className="font-medium text-white">Audio</h4>
727
+ <div className="space-y-3">
728
+ <div className="flex items-center justify-between">
729
+ <label className="text-fm-secondary text-sm">Volume</label>
730
+ <span className="text-sm font-medium text-white">
731
+ {settings.volume[0]}%
732
+ </span>
733
+ </div>
734
+ <Slider
735
+ value={settings.volume}
736
+ onValueChange={(value) => updateSetting("volume", value)}
737
+ variant="primary"
738
+ size="md"
739
+ showLabel={true}
740
+ label="Vol"
741
+ />
742
+ </div>
743
+ </div>
744
+
745
+ {/* Display Settings */}
746
+ <div className="space-y-4">
747
+ <h4 className="font-medium text-white">Display</h4>
748
+ <div className="space-y-4">
749
+ <div className="space-y-2">
750
+ <div className="flex items-center justify-between">
751
+ <label className="text-fm-secondary text-sm">Brightness</label>
752
+ <span className="text-sm font-medium text-white">
753
+ {settings.brightness[0]}%
754
+ </span>
755
+ </div>
756
+ <Slider
757
+ value={settings.brightness}
758
+ onValueChange={(value) => updateSetting("brightness", value)}
759
+ variant="warning"
760
+ size="sm"
761
+ showLabel={false}
762
+ />
763
+ </div>
764
+
765
+ <div className="space-y-2">
766
+ <div className="flex items-center justify-between">
767
+ <label className="text-fm-secondary text-sm">Contrast</label>
768
+ <span className="text-sm font-medium text-white">
769
+ {settings.contrast[0]}%
770
+ </span>
771
+ </div>
772
+ <Slider
773
+ value={settings.contrast}
774
+ onValueChange={(value) => updateSetting("contrast", value)}
775
+ variant="info"
776
+ size="sm"
777
+ showLabel={true}
778
+ />
779
+ </div>
780
+ </div>
781
+ </div>
782
+
783
+ {/* Environment Settings */}
784
+ <div className="space-y-4">
785
+ <h4 className="font-medium text-white">Environment</h4>
786
+ <div className="space-y-3">
787
+ <div className="flex items-center justify-between">
788
+ <label className="text-fm-secondary text-sm">
789
+ Temperature Range
790
+ </label>
791
+ <span className="text-sm font-medium text-white">
792
+ {settings.temperature[0]}° - {settings.temperature[1]}°C
793
+ </span>
794
+ </div>
795
+ <Slider
796
+ value={settings.temperature}
797
+ onValueChange={(value) => updateSetting("temperature", value)}
798
+ variant="positive"
799
+ min={10}
800
+ max={30}
801
+ size="lg"
802
+ showLabel={true}
803
+ centeredTumbs={true}
804
+ />
805
+ </div>
806
+ </div>
807
+
808
+ {/* Quality Settings */}
809
+ <div className="space-y-4">
810
+ <h4 className="font-medium text-white">Performance</h4>
811
+ <div className="space-y-4">
812
+ <div className="space-y-2">
813
+ <div className="flex items-center justify-between">
814
+ <label className="text-fm-secondary text-sm">Quality</label>
815
+ <span className="text-sm font-medium text-white">
816
+ {getQualityLabel(settings.quality[0])}
817
+ </span>
818
+ </div>
819
+ <Slider
820
+ value={settings.quality}
821
+ onValueChange={(value) => updateSetting("quality", value)}
822
+ variant="secondary"
823
+ min={1}
824
+ max={5}
825
+ step={1}
826
+ showLabel={true}
827
+ label={getQualityLabel(settings.quality[0])}
828
+ />
829
+ </div>
830
+
831
+ <div className="space-y-2">
832
+ <div className="flex items-center justify-between">
833
+ <label className="text-fm-secondary text-sm">Mode</label>
834
+ <span className="text-sm font-medium text-white">
835
+ {getModeLabel(settings.mode[0])}
836
+ </span>
837
+ </div>
838
+ <Slider
839
+ value={settings.mode}
840
+ onValueChange={(value) => updateSetting("mode", value)}
841
+ variant="positive"
842
+ min={1}
843
+ max={3}
844
+ step={1}
845
+ showLabel={true}
846
+ label={getModeLabel(settings.mode[0])}
847
+ classes={{
848
+ thumb: "rounded-full shadow-lg",
849
+ }}
850
+ />
851
+ </div>
852
+ </div>
853
+ </div>
854
+
855
+ {/* Settings Summary */}
856
+ <div className="bg-fm-surface-secondary/20 mt-8 rounded-lg p-4">
857
+ <h5 className="mb-2 font-medium text-white">Current Settings</h5>
858
+ <div className="text-fm-secondary space-y-1 text-sm">
859
+ <div>Volume: {settings.volume[0]}%</div>
860
+ <div>Brightness: {settings.brightness[0]}%</div>
861
+ <div>Contrast: {settings.contrast[0]}%</div>
862
+ <div>
863
+ Temperature: {settings.temperature[0]}° -{" "}
864
+ {settings.temperature[1]}°C
865
+ </div>
866
+ <div>Quality: {getQualityLabel(settings.quality[0])}</div>
867
+ <div>Mode: {getModeLabel(settings.mode[0])}</div>
868
+ </div>
869
+ </div>
870
+ </div>
871
+ )
872
+ },
873
+ parameters: {
874
+ layout: "fullscreen",
875
+ },
876
+ }