aural-ui 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +456 -0
- package/dist/components/aspect-ratio/AspectRatio.stories.tsx +1327 -0
- package/dist/components/aspect-ratio/index.tsx +10 -0
- package/dist/components/aspect-ratio/meta.ts +8 -0
- package/dist/components/avatar/Avatar.stories.tsx +645 -0
- package/dist/components/avatar/index.tsx +50 -0
- package/dist/components/avatar/meta.ts +8 -0
- package/dist/components/badge/Badge.stories.tsx +169 -0
- package/dist/components/badge/index.tsx +28 -0
- package/dist/components/badge/meta.ts +6 -0
- package/dist/components/banner/Banner.stories.tsx +475 -0
- package/dist/components/banner/index.tsx +256 -0
- package/dist/components/banner/meta.ts +36 -0
- package/dist/components/button/Button.stories.tsx +74 -0
- package/dist/components/button/index.tsx +158 -0
- package/dist/components/button/meta.ts +33 -0
- package/dist/components/card/Card.stories.tsx +377 -0
- package/dist/components/card/index.tsx +85 -0
- package/dist/components/card/meta.ts +14 -0
- package/dist/components/char-count/CharCount.stories.tsx +334 -0
- package/dist/components/char-count/index.tsx +51 -0
- package/dist/components/char-count/meta.ts +13 -0
- package/dist/components/checkbox/Checkbox.stories.tsx +209 -0
- package/dist/components/checkbox/index.tsx +34 -0
- package/dist/components/checkbox/meta.ts +19 -0
- package/dist/components/chip/Chip.stories.tsx +207 -0
- package/dist/components/chip/index.tsx +92 -0
- package/dist/components/chip/meta.ts +17 -0
- package/dist/components/circular-loader/CircularLoader.stories.tsx +741 -0
- package/dist/components/circular-loader/index.tsx +138 -0
- package/dist/components/circular-loader/meta.ts +11 -0
- package/dist/components/collapsible/Collapsible.stories.tsx +319 -0
- package/dist/components/collapsible/index.tsx +158 -0
- package/dist/components/collapsible/meta.ts +22 -0
- package/dist/components/command/Command.stories.tsx +996 -0
- package/dist/components/command/index.tsx +324 -0
- package/dist/components/command/meta.ts +18 -0
- package/dist/components/dialog/Dialog.stories.tsx +963 -0
- package/dist/components/dialog/index.tsx +250 -0
- package/dist/components/dialog/meta.ts +28 -0
- package/dist/components/divider/Divider.stories.tsx +633 -0
- package/dist/components/divider/index.tsx +181 -0
- package/dist/components/divider/meta.ts +12 -0
- package/dist/components/dot-loader/DotLoader.stories.tsx +352 -0
- package/dist/components/dot-loader/index.tsx +78 -0
- package/dist/components/dot-loader/meta.ts +14 -0
- package/dist/components/dropdown/Dropdown.stories.tsx +1210 -0
- package/dist/components/dropdown/index.tsx +479 -0
- package/dist/components/dropdown/meta.ts +21 -0
- package/dist/components/form/Form.stories.tsx +320 -0
- package/dist/components/form/index.tsx +183 -0
- package/dist/components/form/meta.ts +11 -0
- package/dist/components/helper-text/HelperText.stories.tsx +254 -0
- package/dist/components/helper-text/index.tsx +102 -0
- package/dist/components/helper-text/meta.ts +18 -0
- package/dist/components/hover-card/HoverCard.stories.tsx +1328 -0
- package/dist/components/hover-card/index.tsx +42 -0
- package/dist/components/hover-card/meta.ts +12 -0
- package/dist/components/icon-button/IconButton.stories.tsx +252 -0
- package/dist/components/icon-button/index.tsx +130 -0
- package/dist/components/icon-button/meta.ts +20 -0
- package/dist/components/if-else/if-else.stories.tsx +100 -0
- package/dist/components/if-else/index.tsx +56 -0
- package/dist/components/if-else/meta.ts +6 -0
- package/dist/components/index.ts +70 -0
- package/dist/components/input/Input.stories.tsx +431 -0
- package/dist/components/input/index.tsx +487 -0
- package/dist/components/input/meta.ts +28 -0
- package/dist/components/label/Label.stories.tsx +200 -0
- package/dist/components/label/index.tsx +43 -0
- package/dist/components/label/meta.ts +14 -0
- package/dist/components/list/List.stories.tsx +963 -0
- package/dist/components/list/index.tsx +567 -0
- package/dist/components/list/meta.ts +24 -0
- package/dist/components/marquee/Marquee.stories.tsx +819 -0
- package/dist/components/marquee/index.tsx +107 -0
- package/dist/components/marquee/meta.ts +6 -0
- package/dist/components/overlay/Overlay.stories.tsx +954 -0
- package/dist/components/overlay/index.tsx +58 -0
- package/dist/components/overlay/meta.ts +10 -0
- package/dist/components/pagination/Pagination.stories.tsx +354 -0
- package/dist/components/pagination/index.tsx +455 -0
- package/dist/components/pagination/meta.ts +29 -0
- package/dist/components/popover/Popover.stories.tsx +1037 -0
- package/dist/components/popover/index.tsx +67 -0
- package/dist/components/popover/meta.ts +12 -0
- package/dist/components/radio/Radio.stories.tsx +146 -0
- package/dist/components/radio/index.tsx +41 -0
- package/dist/components/radio/meta.ts +19 -0
- package/dist/components/resizable/Resizable.stories.tsx +866 -0
- package/dist/components/resizable/index.tsx +55 -0
- package/dist/components/resizable/meta.ts +12 -0
- package/dist/components/scroll-area/ScrollArea.stories.tsx +1104 -0
- package/dist/components/scroll-area/index.tsx +55 -0
- package/dist/components/scroll-area/meta.ts +8 -0
- package/dist/components/search/Search.stories.tsx +678 -0
- package/dist/components/search/index.tsx +141 -0
- package/dist/components/search/meta.ts +6 -0
- package/dist/components/select/Select.stories.tsx +962 -0
- package/dist/components/select/index.tsx +512 -0
- package/dist/components/select/meta.ts +40 -0
- package/dist/components/sheet/Sheet.stories.tsx +1060 -0
- package/dist/components/sheet/index.tsx +440 -0
- package/dist/components/sheet/meta.ts +38 -0
- package/dist/components/skelton/Skelton.stories.tsx +859 -0
- package/dist/components/skelton/index.tsx +17 -0
- package/dist/components/skelton/meta.ts +6 -0
- package/dist/components/slider/Slider.stories.tsx +876 -0
- package/dist/components/slider/index.tsx +156 -0
- package/dist/components/slider/meta.ts +29 -0
- package/dist/components/stepper/Stepper.stories.tsx +639 -0
- package/dist/components/stepper/index.tsx +650 -0
- package/dist/components/stepper/meta.ts +19 -0
- package/dist/components/switch/Switch.stories.tsx +85 -0
- package/dist/components/switch/index.tsx +37 -0
- package/dist/components/switch/meta.ts +24 -0
- package/dist/components/switch-case/SwitchCase.stories.tsx +209 -0
- package/dist/components/switch-case/index.tsx +89 -0
- package/dist/components/switch-case/meta.ts +6 -0
- package/dist/components/table/Table.stories.tsx +1095 -0
- package/dist/components/table/index.tsx +113 -0
- package/dist/components/table/meta.ts +20 -0
- package/dist/components/tabs/Tabs.stories.tsx +1379 -0
- package/dist/components/tabs/index.tsx +186 -0
- package/dist/components/tabs/meta.ts +25 -0
- package/dist/components/tag/Tag.stories.tsx +625 -0
- package/dist/components/tag/index.tsx +320 -0
- package/dist/components/tag/meta.ts +52 -0
- package/dist/components/textarea/TextArea.stories.tsx +723 -0
- package/dist/components/textarea/index.tsx +480 -0
- package/dist/components/textarea/meta.ts +23 -0
- package/dist/components/toast/Toast.stories.tsx +1427 -0
- package/dist/components/toast/index.tsx +26 -0
- package/dist/components/toast/meta.ts +19 -0
- package/dist/components/toggle/Toggle.stories.tsx +1093 -0
- package/dist/components/toggle/index.tsx +44 -0
- package/dist/components/toggle/meta.ts +19 -0
- package/dist/components/tooltip/Tooltip.stories.tsx +1548 -0
- package/dist/components/tooltip/index.tsx +304 -0
- package/dist/components/tooltip/meta.ts +21 -0
- package/dist/components/typography/Typography.stories.tsx +197 -0
- package/dist/components/typography/index.tsx +184 -0
- package/dist/components/typography/meta.ts +38 -0
- package/dist/fonts/LabGrotesque-Regular.ttf +0 -0
- package/dist/fonts/LabGrotesqueTRIAL-Bold.otf +0 -0
- package/dist/fonts/LabGrotesqueTRIAL-Light.otf +0 -0
- package/dist/fonts/LabGrotesqueTRIAL-Medium.otf +0 -0
- package/dist/fonts/LabGrotesqueTRIAL-Regular.otf +0 -0
- package/dist/fonts/PPSupplySans-Regular (1).otf +0 -0
- package/dist/fonts/PPSupplySans-Regular.otf +0 -0
- package/dist/fonts/PPSupplySans-Ultralight.otf +0 -0
- package/dist/hooks/index.ts +3 -0
- package/dist/hooks/use-previous/UsePrevious.stories.tsx +997 -0
- package/dist/hooks/use-previous/index.ts +15 -0
- package/dist/hooks/use-previous/meta.ts +6 -0
- package/dist/hooks/use-standalone-pagination/UseStandalonePagination.stories.tsx +983 -0
- package/dist/hooks/use-standalone-pagination/index.ts +146 -0
- package/dist/hooks/use-standalone-pagination/meta.ts +6 -0
- package/dist/icons/Icons.stories.tsx +29 -0
- package/dist/icons/alert-icon/AlertIcon.stories.tsx +991 -0
- package/dist/icons/alert-icon/index.tsx +48 -0
- package/dist/icons/alert-icon/meta.ts +8 -0
- package/dist/icons/all-icons.tsx +738 -0
- package/dist/icons/angle-down-icon/AngleDownIcon.stories.tsx +1031 -0
- package/dist/icons/angle-down-icon/index.tsx +25 -0
- package/dist/icons/angle-down-icon/meta.ts +8 -0
- package/dist/icons/arrow-box-left-icon/ArrowBoxLeftIcon.stories.tsx +1080 -0
- package/dist/icons/arrow-box-left-icon/index.tsx +24 -0
- package/dist/icons/arrow-box-left-icon/meta.ts +8 -0
- package/dist/icons/arrow-right-icon/ArrowRightIcon.stories.tsx +1151 -0
- package/dist/icons/arrow-right-icon/index.tsx +26 -0
- package/dist/icons/arrow-right-icon/meta.ts +8 -0
- package/dist/icons/arrow-right-up-icon/ArrowRightUpIcon.stories.tsx +1273 -0
- package/dist/icons/arrow-right-up-icon/index.tsx +24 -0
- package/dist/icons/arrow-right-up-icon/meta.ts +8 -0
- package/dist/icons/art-board-icon/ArtBoardIcon.stories.tsx +670 -0
- package/dist/icons/art-board-icon/index.tsx +24 -0
- package/dist/icons/art-board-icon/meta.ts +7 -0
- package/dist/icons/audio-bar-icon/AudioBarIcon.stories.tsx +1244 -0
- package/dist/icons/audio-bar-icon/index.tsx +19 -0
- package/dist/icons/audio-bar-icon/meta.ts +8 -0
- package/dist/icons/bubble-check-icon/BubbleCheckIcon.stories.tsx +1239 -0
- package/dist/icons/bubble-check-icon/index.tsx +24 -0
- package/dist/icons/bubble-check-icon/meta.ts +8 -0
- package/dist/icons/bubble-crossed-icon/BubbleCrossedIcon.stories.tsx +1228 -0
- package/dist/icons/bubble-crossed-icon/index.tsx +24 -0
- package/dist/icons/bubble-crossed-icon/meta.ts +8 -0
- package/dist/icons/bubble-sparkle-icon/BubbleSparkleIcon.stories.tsx +912 -0
- package/dist/icons/bubble-sparkle-icon/index.tsx +26 -0
- package/dist/icons/bubble-sparkle-icon/meta.ts +8 -0
- package/dist/icons/chevron-double-left-icon/ChevronDoubleLeftIcon.stories.tsx +1021 -0
- package/dist/icons/chevron-double-left-icon/index.tsx +34 -0
- package/dist/icons/chevron-double-left-icon/meta.ts +8 -0
- package/dist/icons/chevron-double-right-icon/ChevronDoubleRightIcon.stories.tsx +1021 -0
- package/dist/icons/chevron-double-right-icon/index.tsx +34 -0
- package/dist/icons/chevron-double-right-icon/meta.ts +8 -0
- package/dist/icons/chevron-down-icon/ChevronDownIcon.stories.tsx +1001 -0
- package/dist/icons/chevron-down-icon/index.tsx +27 -0
- package/dist/icons/chevron-down-icon/meta.ts +8 -0
- package/dist/icons/chevron-left-icon/ChevronLeftIcon.stories.tsx +1029 -0
- package/dist/icons/chevron-left-icon/index.tsx +27 -0
- package/dist/icons/chevron-left-icon/meta.ts +8 -0
- package/dist/icons/chevron-right-icon/ChevronRightIcon.stories.tsx +1021 -0
- package/dist/icons/chevron-right-icon/index.tsx +27 -0
- package/dist/icons/chevron-right-icon/meta.ts +8 -0
- package/dist/icons/chevron-up-icon/ChevronUpIcon.stories.tsx +1036 -0
- package/dist/icons/chevron-up-icon/index.tsx +27 -0
- package/dist/icons/chevron-up-icon/meta.ts +8 -0
- package/dist/icons/command-icon/CommandIcon.stories.tsx +1098 -0
- package/dist/icons/command-icon/index.tsx +24 -0
- package/dist/icons/command-icon/meta.ts +8 -0
- package/dist/icons/cross-circle-icon/CrossCircleIcon.stories.tsx +1061 -0
- package/dist/icons/cross-circle-icon/index.tsx +23 -0
- package/dist/icons/cross-circle-icon/meta.ts +8 -0
- package/dist/icons/cross-icon/CrossIcon.stories.tsx +1027 -0
- package/dist/icons/cross-icon/index.tsx +24 -0
- package/dist/icons/cross-icon/meta.ts +8 -0
- package/dist/icons/edit-big-icon/EditBigIcon.stories.tsx +1092 -0
- package/dist/icons/edit-big-icon/index.tsx +22 -0
- package/dist/icons/edit-big-icon/meta.ts +8 -0
- package/dist/icons/eye-close-icon/EyeCloseIcon.stories.tsx +1090 -0
- package/dist/icons/eye-close-icon/index.tsx +26 -0
- package/dist/icons/eye-close-icon/meta.ts +8 -0
- package/dist/icons/eye-open-icon/EyeOpenIcon.stories.tsx +1098 -0
- package/dist/icons/eye-open-icon/index.tsx +24 -0
- package/dist/icons/eye-open-icon/meta.ts +8 -0
- package/dist/icons/feature-shine-icon/FeatureShineIcon.stories.tsx +1071 -0
- package/dist/icons/feature-shine-icon/index.tsx +29 -0
- package/dist/icons/feature-shine-icon/meta.ts +8 -0
- package/dist/icons/file-chart-icon/FileChartIcon.stories.tsx +1115 -0
- package/dist/icons/file-chart-icon/index.tsx +24 -0
- package/dist/icons/file-chart-icon/meta.ts +8 -0
- package/dist/icons/file-text-icon/FileTextIcon.stories.tsx +668 -0
- package/dist/icons/file-text-icon/index.tsx +24 -0
- package/dist/icons/file-text-icon/meta.ts +8 -0
- package/dist/icons/grip-vertical-icon/GripVerticalIcon.stories.tsx +1239 -0
- package/dist/icons/grip-vertical-icon/index.tsx +28 -0
- package/dist/icons/grip-vertical-icon/meta.ts +8 -0
- package/dist/icons/image-icon/ImageIcon.stories.tsx +1181 -0
- package/dist/icons/image-icon/index.tsx +24 -0
- package/dist/icons/image-icon/meta.ts +8 -0
- package/dist/icons/import-folder-icon/ImportFolderIcon.stories.tsx +1248 -0
- package/dist/icons/import-folder-icon/index.tsx +22 -0
- package/dist/icons/import-folder-icon/meta.ts +8 -0
- package/dist/icons/index.ts +46 -0
- package/dist/icons/light-bulb-simple-icon/LightBulbSimpleIcon.stories.tsx +1272 -0
- package/dist/icons/light-bulb-simple-icon/index.tsx +24 -0
- package/dist/icons/light-bulb-simple-icon/meta.ts +8 -0
- package/dist/icons/magic-book-icon/MagicBookIcon.stories.tsx +1245 -0
- package/dist/icons/magic-book-icon/index.tsx +32 -0
- package/dist/icons/magic-book-icon/meta.ts +8 -0
- package/dist/icons/maintenance-icon/MaintenanceIcon.stories.tsx +1251 -0
- package/dist/icons/maintenance-icon/index.tsx +23 -0
- package/dist/icons/maintenance-icon/meta.ts +8 -0
- package/dist/icons/message-icon/MessageIcon.stories.tsx +595 -0
- package/dist/icons/message-icon/index.tsx +30 -0
- package/dist/icons/message-icon/meta.ts +8 -0
- package/dist/icons/move-horizontal-icon/MoveHorizontalIcon.stories.tsx +1245 -0
- package/dist/icons/move-horizontal-icon/index.tsx +23 -0
- package/dist/icons/move-horizontal-icon/meta.ts +8 -0
- package/dist/icons/move-vertical-icon/MoveVerticalIcon.stories.tsx +1196 -0
- package/dist/icons/move-vertical-icon/index.tsx +23 -0
- package/dist/icons/move-vertical-icon/meta.ts +8 -0
- package/dist/icons/page-search-icon/PageSearchIcon.stories.tsx +1167 -0
- package/dist/icons/page-search-icon/index.tsx +21 -0
- package/dist/icons/page-search-icon/meta.ts +8 -0
- package/dist/icons/pencil-icon/PencilIcon.stories.tsx +1131 -0
- package/dist/icons/pencil-icon/index.tsx +21 -0
- package/dist/icons/pencil-icon/meta.ts +8 -0
- package/dist/icons/plus-icon/PlusIcon.stories.tsx +1151 -0
- package/dist/icons/plus-icon/index.tsx +24 -0
- package/dist/icons/plus-icon/meta.ts +8 -0
- package/dist/icons/search-icon/SearchIcon.stories.tsx +1181 -0
- package/dist/icons/search-icon/index.tsx +24 -0
- package/dist/icons/search-icon/meta.ts +8 -0
- package/dist/icons/site-logo-icon/SiteLogoIcon.stories.tsx +1167 -0
- package/dist/icons/site-logo-icon/index.tsx +79 -0
- package/dist/icons/site-logo-icon/meta.ts +8 -0
- package/dist/icons/spinner-gradient-icon/SpinnerGradientIcon.stories.tsx +637 -0
- package/dist/icons/spinner-gradient-icon/index.tsx +53 -0
- package/dist/icons/spinner-gradient-icon/meta.ts +8 -0
- package/dist/icons/spinner-solid-icon/SpinnerSolidIcon.stories.tsx +644 -0
- package/dist/icons/spinner-solid-icon/index.tsx +59 -0
- package/dist/icons/spinner-solid-icon/meta.ts +8 -0
- package/dist/icons/spinner-solid-neutral-icon/SpinnerSolidINeutralcon.stories.tsx +736 -0
- package/dist/icons/spinner-solid-neutral-icon/index.tsx +53 -0
- package/dist/icons/spinner-solid-neutral-icon/meta.ts +8 -0
- package/dist/icons/tick-circle-icon/TickCircleIcon.stories.tsx +1204 -0
- package/dist/icons/tick-circle-icon/index.tsx +23 -0
- package/dist/icons/tick-circle-icon/meta.ts +8 -0
- package/dist/icons/tick-icon/TickIcon.stories.tsx +1340 -0
- package/dist/icons/tick-icon/index.tsx +24 -0
- package/dist/icons/tick-icon/meta.ts +8 -0
- package/dist/icons/trash-icon/TrashIcon.stories.tsx +996 -0
- package/dist/icons/trash-icon/index.tsx +24 -0
- package/dist/icons/trash-icon/meta.ts +8 -0
- package/dist/icons/upload-icon/UploadIcon.stories.tsx +947 -0
- package/dist/icons/upload-icon/index.tsx +24 -0
- package/dist/icons/upload-icon/meta.ts +8 -0
- package/dist/icons/vertical-menu-icon/VerticalMenuIcon.stories.tsx +1045 -0
- package/dist/icons/vertical-menu-icon/index.tsx +27 -0
- package/dist/icons/vertical-menu-icon/meta.ts +8 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +206 -0
- package/dist/lib/utils.ts +6 -0
- package/dist/styles/aural-theme.css +1008 -0
- package/package.json +142 -0
|
@@ -0,0 +1,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
|
+
}
|