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,1239 @@
|
|
|
1
|
+
import React from "react"
|
|
2
|
+
import type { Meta, StoryObj } from "@storybook/react"
|
|
3
|
+
|
|
4
|
+
import { GripVerticalIcon } from "."
|
|
5
|
+
|
|
6
|
+
const meta: Meta<typeof GripVerticalIcon> = {
|
|
7
|
+
title: "Icons/GripVerticalIcon",
|
|
8
|
+
component: GripVerticalIcon,
|
|
9
|
+
parameters: {
|
|
10
|
+
layout: "fullscreen",
|
|
11
|
+
backgrounds: {
|
|
12
|
+
default: "dark",
|
|
13
|
+
values: [
|
|
14
|
+
{ name: "dark", value: "#0a0a0a" },
|
|
15
|
+
{ name: "darker", value: "#000000" },
|
|
16
|
+
{ name: "light", value: "#ffffff" },
|
|
17
|
+
],
|
|
18
|
+
},
|
|
19
|
+
docs: {
|
|
20
|
+
page: () => (
|
|
21
|
+
<>
|
|
22
|
+
{/* Override default docs styling */}
|
|
23
|
+
<style>
|
|
24
|
+
{`
|
|
25
|
+
.sbdocs-wrapper {
|
|
26
|
+
padding: 0 ;
|
|
27
|
+
max-width: none ;
|
|
28
|
+
background: transparent ;
|
|
29
|
+
}
|
|
30
|
+
.sbdocs-content {
|
|
31
|
+
max-width: none ;
|
|
32
|
+
padding: 0 ;
|
|
33
|
+
margin: 0 ;
|
|
34
|
+
background: transparent ;
|
|
35
|
+
}
|
|
36
|
+
.docs-story {
|
|
37
|
+
background: transparent ;
|
|
38
|
+
}
|
|
39
|
+
.sbdocs {
|
|
40
|
+
background: transparent ;
|
|
41
|
+
}
|
|
42
|
+
body {
|
|
43
|
+
background: #0a0a0a ;
|
|
44
|
+
}
|
|
45
|
+
#storybook-docs {
|
|
46
|
+
background: #0a0a0a ;
|
|
47
|
+
}
|
|
48
|
+
.sbdocs-preview {
|
|
49
|
+
background: transparent ;
|
|
50
|
+
border: none ;
|
|
51
|
+
}
|
|
52
|
+
.sbdocs-h1, .sbdocs-h2, .sbdocs-h3, .sbdocs-h4, .sbdocs-h5, .sbdocs-h6 {
|
|
53
|
+
color: white ;
|
|
54
|
+
}
|
|
55
|
+
.sbdocs-p, .sbdocs-li {
|
|
56
|
+
color: rgba(255, 255, 255, 0.7) ;
|
|
57
|
+
}
|
|
58
|
+
.sbdocs-code {
|
|
59
|
+
background: rgba(255, 255, 255, 0.1) ;
|
|
60
|
+
color: rgba(168, 85, 247, 1) ;
|
|
61
|
+
border: 1px solid rgba(255, 255, 255, 0.1) ;
|
|
62
|
+
}
|
|
63
|
+
.sbdocs-pre {
|
|
64
|
+
background: rgba(0, 0, 0, 0.4) ;
|
|
65
|
+
border: 1px solid rgba(255, 255, 255, 0.1) ;
|
|
66
|
+
}
|
|
67
|
+
.sbdocs-table {
|
|
68
|
+
background: rgba(255, 255, 255, 0.05) ;
|
|
69
|
+
border: 1px solid rgba(255, 255, 255, 0.1) ;
|
|
70
|
+
}
|
|
71
|
+
.sbdocs-table th {
|
|
72
|
+
background: rgba(255, 255, 255, 0.05) ;
|
|
73
|
+
color: white ;
|
|
74
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.1) ;
|
|
75
|
+
}
|
|
76
|
+
.sbdocs-table td {
|
|
77
|
+
color: rgba(255, 255, 255, 0.7) ;
|
|
78
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.05) ;
|
|
79
|
+
}
|
|
80
|
+
@keyframes wiggle {
|
|
81
|
+
0%, 100% { transform: rotate(-3deg); }
|
|
82
|
+
50% { transform: rotate(3deg); }
|
|
83
|
+
}
|
|
84
|
+
.animate-wiggle {
|
|
85
|
+
animation: wiggle 0.5s ease-in-out infinite;
|
|
86
|
+
}
|
|
87
|
+
`}
|
|
88
|
+
</style>
|
|
89
|
+
|
|
90
|
+
<div className="min-h-screen bg-gradient-to-br from-gray-900 via-purple-900/20 to-gray-900">
|
|
91
|
+
{/* Header */}
|
|
92
|
+
<div className="relative overflow-hidden border-b border-white/10 bg-black/20 backdrop-blur-xl">
|
|
93
|
+
<div className="absolute inset-0 bg-gradient-to-r from-gray-500/10 via-transparent to-blue-500/10" />
|
|
94
|
+
<div className="relative !mx-auto max-w-7xl px-6 py-16">
|
|
95
|
+
<div className="!space-y-6 text-center">
|
|
96
|
+
<div className="!mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border border-gray-500/30 bg-gradient-to-br from-gray-500/20 to-blue-500/20">
|
|
97
|
+
<GripVerticalIcon className="h-12 w-12 text-gray-400" />
|
|
98
|
+
</div>
|
|
99
|
+
<h1 className="!text-fm-primary text-5xl font-bold">
|
|
100
|
+
GripVerticalIcon
|
|
101
|
+
</h1>
|
|
102
|
+
<p className="!mx-auto max-w-3xl text-xl leading-relaxed !text-white/70">
|
|
103
|
+
A versatile vertical grip icon featuring two columns of
|
|
104
|
+
three dots each, commonly used as a drag handle indicator
|
|
105
|
+
for vertical movement and reordering operations. Perfect for
|
|
106
|
+
sortable lists, draggable cards, and interactive elements.
|
|
107
|
+
Built with accessibility in mind using Radix UI's
|
|
108
|
+
AccessibleIcon wrapper.
|
|
109
|
+
</p>
|
|
110
|
+
|
|
111
|
+
{/* Stats */}
|
|
112
|
+
<div className="flex items-center justify-center gap-8 pt-8">
|
|
113
|
+
<div className="text-center">
|
|
114
|
+
<div className="text-3xl font-bold text-gray-300">
|
|
115
|
+
Draggable
|
|
116
|
+
</div>
|
|
117
|
+
<div className="text-sm text-white/60">
|
|
118
|
+
Vertical movement
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
<div className="h-8 w-px bg-white/20" />
|
|
122
|
+
<div className="text-center">
|
|
123
|
+
<div className="text-3xl font-bold text-blue-300">
|
|
124
|
+
Sortable
|
|
125
|
+
</div>
|
|
126
|
+
<div className="text-sm text-white/60">
|
|
127
|
+
Reordering controls
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
<div className="h-8 w-px bg-white/20" />
|
|
131
|
+
<div className="text-center">
|
|
132
|
+
<div className="text-3xl font-bold text-cyan-300">
|
|
133
|
+
Interactive
|
|
134
|
+
</div>
|
|
135
|
+
<div className="text-sm text-white/60">
|
|
136
|
+
Touch-friendly
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
{/* Content */}
|
|
145
|
+
<div className="!mx-auto max-w-7xl !space-y-16 px-6 py-12">
|
|
146
|
+
{/* Quick Usage */}
|
|
147
|
+
<div className="!space-y-8">
|
|
148
|
+
<h2 className="text-center text-3xl font-bold !text-white">
|
|
149
|
+
Quick Start
|
|
150
|
+
</h2>
|
|
151
|
+
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
152
|
+
<div className="!space-y-4">
|
|
153
|
+
<h3 className="text-xl font-semibold !text-gray-300">
|
|
154
|
+
Basic Usage
|
|
155
|
+
</h3>
|
|
156
|
+
<div className="rounded-lg bg-black/40 p-4">
|
|
157
|
+
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
158
|
+
{`import { GripVerticalIcon } from "@icons/grip-vertical-icon"
|
|
159
|
+
|
|
160
|
+
function SortableItem() {
|
|
161
|
+
return (
|
|
162
|
+
<div className="flex items-center gap-3 p-3">
|
|
163
|
+
<GripVerticalIcon className="h-4 w-4 text-gray-400 cursor-move " />
|
|
164
|
+
<span>Draggable List Item</span>
|
|
165
|
+
</div>
|
|
166
|
+
)
|
|
167
|
+
}`}
|
|
168
|
+
</pre>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<div className="!space-y-4">
|
|
173
|
+
<h3 className="text-xl font-semibold !text-gray-300">
|
|
174
|
+
Live Preview
|
|
175
|
+
</h3>
|
|
176
|
+
<div className="flex h-32 items-center justify-center rounded-lg border border-white/10 bg-white/5">
|
|
177
|
+
<div className="flex items-center gap-3 rounded-lg border border-gray-500/20 bg-gray-500/10 px-4 py-3">
|
|
178
|
+
<GripVerticalIcon className="h-4 w-4 cursor-move text-gray-400" />
|
|
179
|
+
<span className="text-white">Draggable List Item</span>
|
|
180
|
+
</div>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
|
|
186
|
+
{/* Props Documentation */}
|
|
187
|
+
<div className="!space-y-8">
|
|
188
|
+
<h2 className="text-center text-3xl font-bold !text-white">
|
|
189
|
+
Props & Configuration
|
|
190
|
+
</h2>
|
|
191
|
+
|
|
192
|
+
<div className="overflow-hidden rounded-lg border border-white/10 bg-white/5">
|
|
193
|
+
<div className="bg-white/5 p-4">
|
|
194
|
+
<h3 className="text-xl font-semibold !text-white">Props</h3>
|
|
195
|
+
</div>
|
|
196
|
+
<table className="!my-0 w-full">
|
|
197
|
+
<thead className="bg-white/5">
|
|
198
|
+
<tr className="border-b border-white/10">
|
|
199
|
+
<th className="px-6 py-4 text-left text-sm font-semibold !text-white">
|
|
200
|
+
Prop
|
|
201
|
+
</th>
|
|
202
|
+
<th className="px-6 py-4 text-left text-sm font-semibold !text-white">
|
|
203
|
+
Type
|
|
204
|
+
</th>
|
|
205
|
+
<th className="px-6 py-4 text-left text-sm font-semibold !text-white">
|
|
206
|
+
Default
|
|
207
|
+
</th>
|
|
208
|
+
<th className="px-6 py-4 text-left text-sm font-semibold !text-white">
|
|
209
|
+
Description
|
|
210
|
+
</th>
|
|
211
|
+
</tr>
|
|
212
|
+
</thead>
|
|
213
|
+
<tbody>
|
|
214
|
+
<tr className="border-b border-white/5">
|
|
215
|
+
<td className="px-6 py-4 font-mono text-sm !text-gray-300">
|
|
216
|
+
width
|
|
217
|
+
</td>
|
|
218
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
219
|
+
number | string
|
|
220
|
+
</td>
|
|
221
|
+
<td className="px-6 py-4 text-sm !text-white/50">24</td>
|
|
222
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
223
|
+
Width of the icon in pixels
|
|
224
|
+
</td>
|
|
225
|
+
</tr>
|
|
226
|
+
<tr className="border-b border-white/5 !bg-black/10">
|
|
227
|
+
<td className="px-6 py-4 font-mono text-sm !text-gray-300">
|
|
228
|
+
height
|
|
229
|
+
</td>
|
|
230
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
231
|
+
number | string
|
|
232
|
+
</td>
|
|
233
|
+
<td className="px-6 py-4 text-sm !text-white/50">24</td>
|
|
234
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
235
|
+
Height of the icon in pixels
|
|
236
|
+
</td>
|
|
237
|
+
</tr>
|
|
238
|
+
<tr className="border-b border-white/5">
|
|
239
|
+
<td className="px-6 py-4 font-mono text-sm !text-gray-300">
|
|
240
|
+
stroke
|
|
241
|
+
</td>
|
|
242
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
243
|
+
string
|
|
244
|
+
</td>
|
|
245
|
+
<td className="px-6 py-4 text-sm !text-white/50">
|
|
246
|
+
currentColor
|
|
247
|
+
</td>
|
|
248
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
249
|
+
Stroke color of the dots
|
|
250
|
+
</td>
|
|
251
|
+
</tr>
|
|
252
|
+
<tr className="border-b border-white/5 !bg-black/10">
|
|
253
|
+
<td className="px-6 py-4 font-mono text-sm !text-gray-300">
|
|
254
|
+
strokeWidth
|
|
255
|
+
</td>
|
|
256
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
257
|
+
string | number
|
|
258
|
+
</td>
|
|
259
|
+
<td className="px-6 py-4 text-sm !text-white/50">2</td>
|
|
260
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
261
|
+
Stroke width of the dots
|
|
262
|
+
</td>
|
|
263
|
+
</tr>
|
|
264
|
+
<tr className="border-b border-white/5">
|
|
265
|
+
<td className="px-6 py-4 font-mono text-sm !text-gray-300">
|
|
266
|
+
fill
|
|
267
|
+
</td>
|
|
268
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
269
|
+
string
|
|
270
|
+
</td>
|
|
271
|
+
<td className="px-6 py-4 text-sm !text-white/50">
|
|
272
|
+
none
|
|
273
|
+
</td>
|
|
274
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
275
|
+
Fill color of the dots
|
|
276
|
+
</td>
|
|
277
|
+
</tr>
|
|
278
|
+
<tr className="border-b border-white/5 !bg-black/10">
|
|
279
|
+
<td className="px-6 py-4 font-mono text-sm !text-gray-300">
|
|
280
|
+
className
|
|
281
|
+
</td>
|
|
282
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
283
|
+
string
|
|
284
|
+
</td>
|
|
285
|
+
<td className="px-6 py-4 text-sm !text-white/50">-</td>
|
|
286
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
287
|
+
CSS classes for styling (use for overrides)
|
|
288
|
+
</td>
|
|
289
|
+
</tr>
|
|
290
|
+
<tr className="!bg-black/10">
|
|
291
|
+
<td className="px-6 py-4 font-mono text-sm !text-gray-300">
|
|
292
|
+
...svgProps
|
|
293
|
+
</td>
|
|
294
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
295
|
+
SVGProps
|
|
296
|
+
</td>
|
|
297
|
+
<td className="px-6 py-4 text-sm !text-white/50">-</td>
|
|
298
|
+
<td className="px-6 py-4 text-sm !text-white/70">
|
|
299
|
+
All standard SVG element props
|
|
300
|
+
</td>
|
|
301
|
+
</tr>
|
|
302
|
+
</tbody>
|
|
303
|
+
</table>
|
|
304
|
+
</div>
|
|
305
|
+
</div>
|
|
306
|
+
|
|
307
|
+
{/* Size Variations */}
|
|
308
|
+
<div className="!space-y-8">
|
|
309
|
+
<h2 className="text-center text-3xl font-bold !text-white">
|
|
310
|
+
Size Variations
|
|
311
|
+
</h2>
|
|
312
|
+
<div className="rounded-lg border border-white/10 bg-white/5 p-8">
|
|
313
|
+
<div className="!space-y-6">
|
|
314
|
+
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
315
|
+
<div className="!space-y-4">
|
|
316
|
+
<h3 className="text-lg font-semibold !text-gray-300">
|
|
317
|
+
Standard Sizes
|
|
318
|
+
</h3>
|
|
319
|
+
<div className="flex items-end gap-6 rounded-lg bg-black/20 p-6">
|
|
320
|
+
<div className="text-center">
|
|
321
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-3 w-3 text-gray-400" />
|
|
322
|
+
<span className="text-xs text-white/60">12px</span>
|
|
323
|
+
</div>
|
|
324
|
+
<div className="text-center">
|
|
325
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-4 w-4 text-gray-400" />
|
|
326
|
+
<span className="text-xs text-white/60">16px</span>
|
|
327
|
+
</div>
|
|
328
|
+
<div className="text-center">
|
|
329
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-5 w-5 text-gray-400" />
|
|
330
|
+
<span className="text-xs text-white/60">20px</span>
|
|
331
|
+
</div>
|
|
332
|
+
<div className="text-center">
|
|
333
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-6 w-6 text-gray-400" />
|
|
334
|
+
<span className="text-xs text-white/60">24px</span>
|
|
335
|
+
</div>
|
|
336
|
+
<div className="text-center">
|
|
337
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-8 w-8 text-gray-400" />
|
|
338
|
+
<span className="text-xs text-white/60">32px</span>
|
|
339
|
+
</div>
|
|
340
|
+
<div className="text-center">
|
|
341
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-12 w-12 text-gray-400" />
|
|
342
|
+
<span className="text-xs text-white/60">48px</span>
|
|
343
|
+
</div>
|
|
344
|
+
</div>
|
|
345
|
+
</div>
|
|
346
|
+
|
|
347
|
+
<div className="!space-y-4">
|
|
348
|
+
<h3 className="text-lg font-semibold !text-gray-300">
|
|
349
|
+
Code Example
|
|
350
|
+
</h3>
|
|
351
|
+
<div className="rounded-lg bg-black/40 p-4">
|
|
352
|
+
<pre className="overflow-x-auto text-sm !text-cyan-300">
|
|
353
|
+
{`// Small (16px)
|
|
354
|
+
<GripVerticalIcon className="h-4 w-4 " />
|
|
355
|
+
|
|
356
|
+
// Medium (24px)
|
|
357
|
+
<GripVerticalIcon className="h-6 w-6 " />
|
|
358
|
+
|
|
359
|
+
// Large (32px)
|
|
360
|
+
<GripVerticalIcon className="h-8 w-8 " />
|
|
361
|
+
|
|
362
|
+
// Custom size with cursor
|
|
363
|
+
<GripVerticalIcon
|
|
364
|
+
width={40}
|
|
365
|
+
height={40}
|
|
366
|
+
className="cursor-move "
|
|
367
|
+
/>`}
|
|
368
|
+
</pre>
|
|
369
|
+
</div>
|
|
370
|
+
</div>
|
|
371
|
+
</div>
|
|
372
|
+
</div>
|
|
373
|
+
</div>
|
|
374
|
+
</div>
|
|
375
|
+
|
|
376
|
+
{/* Color Variations */}
|
|
377
|
+
<div className="!space-y-8">
|
|
378
|
+
<h2 className="text-center text-3xl font-bold !text-white">
|
|
379
|
+
Color Variations
|
|
380
|
+
</h2>
|
|
381
|
+
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
382
|
+
<div className="!space-y-4">
|
|
383
|
+
<h3 className="text-lg font-semibold !text-gray-300">
|
|
384
|
+
Semantic Colors
|
|
385
|
+
</h3>
|
|
386
|
+
<div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
|
|
387
|
+
<div className="flex items-center gap-4">
|
|
388
|
+
<GripVerticalIcon className="h-6 w-6 text-gray-400" />
|
|
389
|
+
<div>
|
|
390
|
+
<div className="text-sm font-medium text-white">
|
|
391
|
+
Default
|
|
392
|
+
</div>
|
|
393
|
+
<div className="text-xs text-white/60">
|
|
394
|
+
text-gray-400
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
</div>
|
|
398
|
+
<div className="flex items-center gap-4">
|
|
399
|
+
<GripVerticalIcon className="h-6 w-6 text-white/50" />
|
|
400
|
+
<div>
|
|
401
|
+
<div className="text-sm font-medium text-white">
|
|
402
|
+
Muted
|
|
403
|
+
</div>
|
|
404
|
+
<div className="text-xs text-white/60">
|
|
405
|
+
text-white/50
|
|
406
|
+
</div>
|
|
407
|
+
</div>
|
|
408
|
+
</div>
|
|
409
|
+
<div className="flex items-center gap-4">
|
|
410
|
+
<GripVerticalIcon className="h-6 w-6 text-blue-400" />
|
|
411
|
+
<div>
|
|
412
|
+
<div className="text-sm font-medium text-white">
|
|
413
|
+
Primary
|
|
414
|
+
</div>
|
|
415
|
+
<div className="text-xs text-white/60">
|
|
416
|
+
text-blue-400
|
|
417
|
+
</div>
|
|
418
|
+
</div>
|
|
419
|
+
</div>
|
|
420
|
+
<div className="flex items-center gap-4">
|
|
421
|
+
<GripVerticalIcon className="h-6 w-6 text-white/30" />
|
|
422
|
+
<div>
|
|
423
|
+
<div className="text-sm font-medium text-white">
|
|
424
|
+
Disabled
|
|
425
|
+
</div>
|
|
426
|
+
<div className="text-xs text-white/60">
|
|
427
|
+
text-white/30
|
|
428
|
+
</div>
|
|
429
|
+
</div>
|
|
430
|
+
</div>
|
|
431
|
+
</div>
|
|
432
|
+
</div>
|
|
433
|
+
|
|
434
|
+
<div className="!space-y-4">
|
|
435
|
+
<h3 className="text-lg font-semibold !text-gray-300">
|
|
436
|
+
Custom Colors
|
|
437
|
+
</h3>
|
|
438
|
+
<div className="rounded-lg bg-black/40 p-4">
|
|
439
|
+
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
440
|
+
{`// Using Tailwind classes with
|
|
441
|
+
<GripVerticalIcon className="h-6 w-6 text-gray-400 " />
|
|
442
|
+
<GripVerticalIcon className="h-6 w-6 text-blue-500 " />
|
|
443
|
+
|
|
444
|
+
// Using CSS custom properties
|
|
445
|
+
<GripVerticalIcon
|
|
446
|
+
className="h-6 w-6 "
|
|
447
|
+
style={{ color: 'var(--color-primary)' }}
|
|
448
|
+
/>
|
|
449
|
+
|
|
450
|
+
// Direct stroke prop for filled variant
|
|
451
|
+
<GripVerticalIcon
|
|
452
|
+
width={24}
|
|
453
|
+
height={24}
|
|
454
|
+
stroke="#6b7280"
|
|
455
|
+
fill="currentColor"
|
|
456
|
+
/>`}
|
|
457
|
+
</pre>
|
|
458
|
+
</div>
|
|
459
|
+
</div>
|
|
460
|
+
</div>
|
|
461
|
+
</div>
|
|
462
|
+
|
|
463
|
+
{/* Usage Examples */}
|
|
464
|
+
<div className="!space-y-8">
|
|
465
|
+
<h2 className="text-center text-3xl font-bold !text-white">
|
|
466
|
+
Usage Examples
|
|
467
|
+
</h2>
|
|
468
|
+
|
|
469
|
+
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
470
|
+
{/* Sortable List */}
|
|
471
|
+
<div className="!space-y-4">
|
|
472
|
+
<h3 className="text-lg font-semibold !text-gray-300">
|
|
473
|
+
Sortable List
|
|
474
|
+
</h3>
|
|
475
|
+
<div className="!space-y-4">
|
|
476
|
+
<div className="rounded-lg border border-white/10 bg-white/5 p-4">
|
|
477
|
+
<div className="!space-y-2">
|
|
478
|
+
{[
|
|
479
|
+
"First Task",
|
|
480
|
+
"Second Task",
|
|
481
|
+
"Third Task",
|
|
482
|
+
"Fourth Task",
|
|
483
|
+
].map((task, index) => (
|
|
484
|
+
<div
|
|
485
|
+
key={index}
|
|
486
|
+
className="flex items-center gap-3 rounded border border-white/10 bg-white/5 p-3 transition-colors hover:bg-white/10"
|
|
487
|
+
>
|
|
488
|
+
<GripVerticalIcon className="h-4 w-4 cursor-move text-white/40 transition-colors hover:text-white/70" />
|
|
489
|
+
<span className="flex-1 text-sm text-white">
|
|
490
|
+
{task}
|
|
491
|
+
</span>
|
|
492
|
+
<span className="text-xs text-white/40">
|
|
493
|
+
#{index + 1}
|
|
494
|
+
</span>
|
|
495
|
+
</div>
|
|
496
|
+
))}
|
|
497
|
+
</div>
|
|
498
|
+
</div>
|
|
499
|
+
<div className="rounded-lg bg-black/40 p-4">
|
|
500
|
+
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
501
|
+
{`// Sortable list item
|
|
502
|
+
<div className="flex items-center gap-3 p-3 border border-white/10 bg-white/5 rounded hover:bg-white/10 transition-colors">
|
|
503
|
+
<GripVerticalIcon className="h-4 w-4 cursor-move text-white/40 hover:text-white/70 transition-colors " />
|
|
504
|
+
<span className="flex-1 text-sm text-white">First Task</span>
|
|
505
|
+
<span className="text-xs text-white/40">#1</span>
|
|
506
|
+
</div>`}
|
|
507
|
+
</pre>
|
|
508
|
+
</div>
|
|
509
|
+
</div>
|
|
510
|
+
</div>
|
|
511
|
+
|
|
512
|
+
{/* Draggable Cards */}
|
|
513
|
+
<div className="!space-y-4">
|
|
514
|
+
<h3 className="text-lg font-semibold !text-gray-300">
|
|
515
|
+
Draggable Cards
|
|
516
|
+
</h3>
|
|
517
|
+
<div className="!space-y-4">
|
|
518
|
+
<div className="grid grid-cols-1 gap-4">
|
|
519
|
+
{["Project Alpha", "Project Beta", "Project Gamma"].map(
|
|
520
|
+
(project, index) => (
|
|
521
|
+
<div
|
|
522
|
+
key={index}
|
|
523
|
+
className="relative rounded-lg border border-white/10 bg-white/5 p-4 transition-colors hover:bg-white/10"
|
|
524
|
+
>
|
|
525
|
+
<div className="absolute top-3 right-3">
|
|
526
|
+
<GripVerticalIcon className="h-4 w-4 cursor-move text-white/30 transition-colors hover:text-white/60" />
|
|
527
|
+
</div>
|
|
528
|
+
<h5 className="mb-2 text-sm font-medium !text-white">
|
|
529
|
+
{project}
|
|
530
|
+
</h5>
|
|
531
|
+
<p className="text-xs !text-white/60">
|
|
532
|
+
Drag to reorder this card
|
|
533
|
+
</p>
|
|
534
|
+
<div className="mt-3 flex gap-2">
|
|
535
|
+
<div className="h-2 w-2 rounded-full bg-green-400"></div>
|
|
536
|
+
<div className="h-2 w-2 rounded-full bg-yellow-400"></div>
|
|
537
|
+
<div className="h-2 w-2 rounded-full bg-red-400"></div>
|
|
538
|
+
</div>
|
|
539
|
+
</div>
|
|
540
|
+
)
|
|
541
|
+
)}
|
|
542
|
+
</div>
|
|
543
|
+
<div className="rounded-lg bg-black/40 p-4">
|
|
544
|
+
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
545
|
+
{`// Draggable card
|
|
546
|
+
<div className="relative border border-white/10 bg-white/5 p-4 rounded-lg hover:bg-white/10 transition-colors">
|
|
547
|
+
<div className="absolute top-3 right-3">
|
|
548
|
+
<GripVerticalIcon className="h-4 w-4 cursor-move text-white/30 hover:text-white/60 transition-colors " />
|
|
549
|
+
</div>
|
|
550
|
+
<h5 className="mb-2 text-sm font-medium text-white">Project Alpha</h5>
|
|
551
|
+
<p className="text-xs text-white/60">Drag to reorder this card</p>
|
|
552
|
+
</div>`}
|
|
553
|
+
</pre>
|
|
554
|
+
</div>
|
|
555
|
+
</div>
|
|
556
|
+
</div>
|
|
557
|
+
|
|
558
|
+
{/* Table Rows */}
|
|
559
|
+
<div className="!space-y-4">
|
|
560
|
+
<h3 className="text-lg font-semibold !text-gray-300">
|
|
561
|
+
Sortable Table Rows
|
|
562
|
+
</h3>
|
|
563
|
+
<div className="!space-y-4">
|
|
564
|
+
<div className="overflow-hidden rounded-lg border border-white/10 bg-white/5">
|
|
565
|
+
<div className="grid grid-cols-12 gap-4 border-b border-white/10 bg-white/5 p-3">
|
|
566
|
+
<div className="col-span-1"></div>
|
|
567
|
+
<div className="col-span-4 text-xs font-medium text-white/70">
|
|
568
|
+
Name
|
|
569
|
+
</div>
|
|
570
|
+
<div className="col-span-3 text-xs font-medium text-white/70">
|
|
571
|
+
Status
|
|
572
|
+
</div>
|
|
573
|
+
<div className="col-span-2 text-xs font-medium text-white/70">
|
|
574
|
+
Priority
|
|
575
|
+
</div>
|
|
576
|
+
<div className="col-span-2 text-xs font-medium text-white/70">
|
|
577
|
+
Date
|
|
578
|
+
</div>
|
|
579
|
+
</div>
|
|
580
|
+
{[
|
|
581
|
+
{
|
|
582
|
+
name: "User Interface Design",
|
|
583
|
+
status: "In Progress",
|
|
584
|
+
priority: "High",
|
|
585
|
+
date: "2024-03-15",
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
name: "Backend Development",
|
|
589
|
+
status: "Pending",
|
|
590
|
+
priority: "Medium",
|
|
591
|
+
date: "2024-03-20",
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
name: "Testing & QA",
|
|
595
|
+
status: "Not Started",
|
|
596
|
+
priority: "Low",
|
|
597
|
+
date: "2024-03-25",
|
|
598
|
+
},
|
|
599
|
+
].map((row, index) => (
|
|
600
|
+
<div
|
|
601
|
+
key={index}
|
|
602
|
+
className="grid grid-cols-12 gap-4 border-b border-white/10 p-3 transition-colors hover:bg-white/5"
|
|
603
|
+
>
|
|
604
|
+
<div className="col-span-1 flex items-center">
|
|
605
|
+
<GripVerticalIcon className="h-4 w-4 cursor-move text-white/30 transition-colors hover:text-white/60" />
|
|
606
|
+
</div>
|
|
607
|
+
<div className="col-span-4 text-sm text-white">
|
|
608
|
+
{row.name}
|
|
609
|
+
</div>
|
|
610
|
+
<div className="col-span-3 text-sm text-white/70">
|
|
611
|
+
{row.status}
|
|
612
|
+
</div>
|
|
613
|
+
<div className="col-span-2 text-sm text-white/70">
|
|
614
|
+
{row.priority}
|
|
615
|
+
</div>
|
|
616
|
+
<div className="col-span-2 text-sm text-white/70">
|
|
617
|
+
{row.date}
|
|
618
|
+
</div>
|
|
619
|
+
</div>
|
|
620
|
+
))}
|
|
621
|
+
</div>
|
|
622
|
+
<div className="rounded-lg bg-black/40 p-4">
|
|
623
|
+
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
624
|
+
{`// Table row with drag handle
|
|
625
|
+
<div className="grid grid-cols-12 gap-4 p-3 border-b border-white/10 hover:bg-white/5 transition-colors">
|
|
626
|
+
<div className="col-span-1 flex items-center">
|
|
627
|
+
<GripVerticalIcon className="h-4 w-4 cursor-move text-white/30 hover:text-white/60 transition-colors " />
|
|
628
|
+
</div>
|
|
629
|
+
<div className="col-span-4 text-sm text-white">User Interface Design</div>
|
|
630
|
+
<div className="col-span-3 text-sm text-white/70">In Progress</div>
|
|
631
|
+
<div className="col-span-2 text-sm text-white/70">High</div>
|
|
632
|
+
<div className="col-span-2 text-sm text-white/70">2024-03-15</div>
|
|
633
|
+
</div>`}
|
|
634
|
+
</pre>
|
|
635
|
+
</div>
|
|
636
|
+
</div>
|
|
637
|
+
</div>
|
|
638
|
+
|
|
639
|
+
{/* Menu Items */}
|
|
640
|
+
<div className="!space-y-4">
|
|
641
|
+
<h3 className="text-lg font-semibold !text-gray-300">
|
|
642
|
+
Reorderable Menu
|
|
643
|
+
</h3>
|
|
644
|
+
<div className="!space-y-4">
|
|
645
|
+
<div className="max-w-xs rounded-lg border border-white/10 bg-white/5 p-2">
|
|
646
|
+
{[
|
|
647
|
+
"Dashboard",
|
|
648
|
+
"Projects",
|
|
649
|
+
"Team",
|
|
650
|
+
"Settings",
|
|
651
|
+
"Help",
|
|
652
|
+
].map((item, index) => (
|
|
653
|
+
<div
|
|
654
|
+
key={index}
|
|
655
|
+
className="flex cursor-pointer items-center gap-3 rounded p-2 transition-colors hover:bg-white/10"
|
|
656
|
+
>
|
|
657
|
+
<GripVerticalIcon className="h-3 w-3 cursor-move text-white/30" />
|
|
658
|
+
<span className="flex-1 text-sm text-white">
|
|
659
|
+
{item}
|
|
660
|
+
</span>
|
|
661
|
+
<span className="text-xs text-white/40">
|
|
662
|
+
⌘{index + 1}
|
|
663
|
+
</span>
|
|
664
|
+
</div>
|
|
665
|
+
))}
|
|
666
|
+
</div>
|
|
667
|
+
<div className="rounded-lg bg-black/40 p-4">
|
|
668
|
+
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
669
|
+
{`// Menu item with drag handle
|
|
670
|
+
<div className="flex items-center gap-3 p-2 rounded hover:bg-white/10 transition-colors cursor-pointer">
|
|
671
|
+
<GripVerticalIcon className="h-3 w-3 cursor-move text-white/30 " />
|
|
672
|
+
<span className="flex-1 text-sm text-white">Dashboard</span>
|
|
673
|
+
<span className="text-xs text-white/40">⌘1</span>
|
|
674
|
+
</div>`}
|
|
675
|
+
</pre>
|
|
676
|
+
</div>
|
|
677
|
+
</div>
|
|
678
|
+
</div>
|
|
679
|
+
</div>
|
|
680
|
+
</div>
|
|
681
|
+
|
|
682
|
+
{/* Interactive States */}
|
|
683
|
+
<div className="!space-y-8">
|
|
684
|
+
<h2 className="text-center text-3xl font-bold !text-white">
|
|
685
|
+
Interactive States & Animations
|
|
686
|
+
</h2>
|
|
687
|
+
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
688
|
+
<div className="!space-y-4">
|
|
689
|
+
<h3 className="text-lg font-semibold !text-gray-300">
|
|
690
|
+
Hover & Focus States
|
|
691
|
+
</h3>
|
|
692
|
+
<div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
|
|
693
|
+
<div className="flex items-center gap-4">
|
|
694
|
+
<GripVerticalIcon className="h-6 w-6 text-white/60 transition-colors hover:text-white" />
|
|
695
|
+
<div>
|
|
696
|
+
<div className="text-sm font-medium text-white">
|
|
697
|
+
Color Change
|
|
698
|
+
</div>
|
|
699
|
+
<div className="text-xs text-white/60">
|
|
700
|
+
hover:text-white
|
|
701
|
+
</div>
|
|
702
|
+
</div>
|
|
703
|
+
</div>
|
|
704
|
+
<div className="flex items-center gap-4">
|
|
705
|
+
<GripVerticalIcon className="h-6 w-6 text-white transition-transform hover:scale-110" />
|
|
706
|
+
<div>
|
|
707
|
+
<div className="text-sm font-medium text-white">
|
|
708
|
+
Scale Effect
|
|
709
|
+
</div>
|
|
710
|
+
<div className="text-xs text-white/60">
|
|
711
|
+
hover:scale-110
|
|
712
|
+
</div>
|
|
713
|
+
</div>
|
|
714
|
+
</div>
|
|
715
|
+
<div className="flex items-center gap-4">
|
|
716
|
+
<div
|
|
717
|
+
className="rounded p-2 focus:ring-2 focus:ring-blue-500 focus:outline-none"
|
|
718
|
+
tabIndex={0}
|
|
719
|
+
>
|
|
720
|
+
<GripVerticalIcon className="h-6 w-6 text-white" />
|
|
721
|
+
</div>
|
|
722
|
+
<div>
|
|
723
|
+
<div className="text-sm font-medium text-white">
|
|
724
|
+
Focus Ring
|
|
725
|
+
</div>
|
|
726
|
+
<div className="text-xs text-white/60">
|
|
727
|
+
focus:ring-2
|
|
728
|
+
</div>
|
|
729
|
+
</div>
|
|
730
|
+
</div>
|
|
731
|
+
<div className="flex items-center gap-4">
|
|
732
|
+
<GripVerticalIcon className="animate-wiggle h-6 w-6 text-purple-400" />
|
|
733
|
+
<div>
|
|
734
|
+
<div className="text-sm font-medium text-white">
|
|
735
|
+
Wiggle Animation
|
|
736
|
+
</div>
|
|
737
|
+
<div className="text-xs text-white/60">
|
|
738
|
+
Custom animation
|
|
739
|
+
</div>
|
|
740
|
+
</div>
|
|
741
|
+
</div>
|
|
742
|
+
</div>
|
|
743
|
+
</div>
|
|
744
|
+
|
|
745
|
+
<div className="!space-y-4">
|
|
746
|
+
<h3 className="text-lg font-semibold !text-gray-300">
|
|
747
|
+
Cursor Styles
|
|
748
|
+
</h3>
|
|
749
|
+
<div className="rounded-lg bg-black/40 p-4">
|
|
750
|
+
<pre className="overflow-x-auto text-sm !text-cyan-300">
|
|
751
|
+
{`// Different cursor styles for grip icons
|
|
752
|
+
<GripVerticalIcon className="h-6 w-6 cursor-move " />
|
|
753
|
+
<GripVerticalIcon className="h-6 w-6 cursor-grab hover:cursor-grabbing " />
|
|
754
|
+
<GripVerticalIcon className="h-6 w-6 cursor-ns-resize " />
|
|
755
|
+
|
|
756
|
+
// With interactive feedback
|
|
757
|
+
<GripVerticalIcon className="h-6 w-6 text-white/60 hover:text-white transition-colors cursor-move " />
|
|
758
|
+
|
|
759
|
+
// Wiggle animation keyframes
|
|
760
|
+
@keyframes wiggle {
|
|
761
|
+
0%, 100% { transform: rotate(-3deg); }
|
|
762
|
+
50% { transform: rotate(3deg); }
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
.animate-wiggle {
|
|
766
|
+
animation: wiggle 0.5s ease-in-out infinite;
|
|
767
|
+
}`}
|
|
768
|
+
</pre>
|
|
769
|
+
</div>
|
|
770
|
+
</div>
|
|
771
|
+
</div>
|
|
772
|
+
</div>
|
|
773
|
+
|
|
774
|
+
{/* Accessibility */}
|
|
775
|
+
<div className="!space-y-8">
|
|
776
|
+
<h2 className="text-center text-3xl font-bold !text-white">
|
|
777
|
+
Accessibility Features
|
|
778
|
+
</h2>
|
|
779
|
+
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
780
|
+
<div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
|
|
781
|
+
<h3 className="text-lg font-semibold !text-green-300">
|
|
782
|
+
✅ Built-in Features
|
|
783
|
+
</h3>
|
|
784
|
+
<ul className="!space-y-2 text-sm !text-white/70">
|
|
785
|
+
<li className="!text-white/70">
|
|
786
|
+
Uses Radix UI AccessibleIcon wrapper
|
|
787
|
+
</li>
|
|
788
|
+
<li className="!text-white/70">
|
|
789
|
+
Provides screen reader label "Grip Vertical icon"
|
|
790
|
+
</li>
|
|
791
|
+
<li className="!text-white/70">
|
|
792
|
+
Supports keyboard navigation when interactive
|
|
793
|
+
</li>
|
|
794
|
+
<li className="!text-white/70">
|
|
795
|
+
Maintains proper color contrast ratios
|
|
796
|
+
</li>
|
|
797
|
+
<li className="!text-white/70">
|
|
798
|
+
Scales with user's font size preferences
|
|
799
|
+
</li>
|
|
800
|
+
</ul>
|
|
801
|
+
</div>
|
|
802
|
+
|
|
803
|
+
<div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
|
|
804
|
+
<h3 className="text-lg font-semibold !text-gray-300">
|
|
805
|
+
💡 Best Practices
|
|
806
|
+
</h3>
|
|
807
|
+
<ul className="!space-y-2 text-sm text-white/70">
|
|
808
|
+
<li className="!text-white/70">
|
|
809
|
+
Always wrap in focusable elements (button, div with
|
|
810
|
+
tabIndex)
|
|
811
|
+
</li>
|
|
812
|
+
<li className="!text-white/70">
|
|
813
|
+
Provide clear ARIA labels explaining drag functionality
|
|
814
|
+
</li>
|
|
815
|
+
<li className="!text-white/70">
|
|
816
|
+
Include keyboard instructions for reordering
|
|
817
|
+
</li>
|
|
818
|
+
<li className="!text-white/70">
|
|
819
|
+
Use appropriate cursor styles (cursor-move, cursor-grab)
|
|
820
|
+
</li>
|
|
821
|
+
<li className="!text-white/70">
|
|
822
|
+
Ensure sufficient touch target size (minimum 44px)
|
|
823
|
+
</li>
|
|
824
|
+
</ul>
|
|
825
|
+
</div>
|
|
826
|
+
</div>
|
|
827
|
+
|
|
828
|
+
<div className="rounded-lg border border-white/10 bg-white/5 p-6">
|
|
829
|
+
<h3 className="mb-4 text-lg font-semibold !text-purple-300">
|
|
830
|
+
Proper ARIA Implementation
|
|
831
|
+
</h3>
|
|
832
|
+
<div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
|
833
|
+
<div className="rounded-lg bg-black/40 p-4">
|
|
834
|
+
<pre className="overflow-x-auto text-sm !text-cyan-300">
|
|
835
|
+
{`// Keyboard accessible drag handle
|
|
836
|
+
<button
|
|
837
|
+
aria-label="Reorder item - use arrow keys to move"
|
|
838
|
+
className="p-2 rounded focus:ring-2 focus:ring-blue-500 focus:outline-none"
|
|
839
|
+
tabIndex={0}
|
|
840
|
+
onKeyDown={(e) => {
|
|
841
|
+
if (e.key === 'ArrowUp') handleMoveUp()
|
|
842
|
+
if (e.key === 'ArrowDown') handleMoveDown()
|
|
843
|
+
}}
|
|
844
|
+
>
|
|
845
|
+
<GripVerticalIcon className="h-4 w-4 text-gray-400 " />
|
|
846
|
+
</button>
|
|
847
|
+
|
|
848
|
+
// Sortable list with instructions
|
|
849
|
+
<div
|
|
850
|
+
role="list"
|
|
851
|
+
aria-describedby="sort-instructions"
|
|
852
|
+
>
|
|
853
|
+
{/* List items */}
|
|
854
|
+
</div>
|
|
855
|
+
<div id="sort-instructions" className="sr-only">
|
|
856
|
+
Use arrow keys to reorder items, or drag with mouse
|
|
857
|
+
</div>`}
|
|
858
|
+
</pre>
|
|
859
|
+
</div>
|
|
860
|
+
<div className="!space-y-4">
|
|
861
|
+
<p className="text-sm !text-white/70">
|
|
862
|
+
When using GripVerticalIcon for interactive reordering,
|
|
863
|
+
provide keyboard alternatives and clear instructions for
|
|
864
|
+
screen reader users.
|
|
865
|
+
</p>
|
|
866
|
+
<div className="rounded-lg border border-gray-500/20 bg-gray-500/10 p-4">
|
|
867
|
+
<div className="flex items-center gap-2 text-sm text-gray-200">
|
|
868
|
+
<GripVerticalIcon className="h-4 w-4" />
|
|
869
|
+
<span>
|
|
870
|
+
Screen readers announce "Grip Vertical icon" for
|
|
871
|
+
context
|
|
872
|
+
</span>
|
|
873
|
+
</div>
|
|
874
|
+
</div>
|
|
875
|
+
</div>
|
|
876
|
+
</div>
|
|
877
|
+
</div>
|
|
878
|
+
</div>
|
|
879
|
+
|
|
880
|
+
{/* Related Icons */}
|
|
881
|
+
<div className="!space-y-8">
|
|
882
|
+
<h2 className="text-center text-3xl font-bold !text-white">
|
|
883
|
+
Related Icons
|
|
884
|
+
</h2>
|
|
885
|
+
<div className="grid grid-cols-2 gap-6 md:grid-cols-4">
|
|
886
|
+
<div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
|
|
887
|
+
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-gray-500/20">
|
|
888
|
+
<span className="!text-2xl !text-white">⋮⋮</span>
|
|
889
|
+
</div>
|
|
890
|
+
<div>
|
|
891
|
+
<div className="font-medium text-white">
|
|
892
|
+
GripHorizontalIcon
|
|
893
|
+
</div>
|
|
894
|
+
<div className="text-xs text-white/60">
|
|
895
|
+
Horizontal movement
|
|
896
|
+
</div>
|
|
897
|
+
</div>
|
|
898
|
+
</div>
|
|
899
|
+
<div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
|
|
900
|
+
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-blue-500/20">
|
|
901
|
+
<span className="text-2xl">↕️</span>
|
|
902
|
+
</div>
|
|
903
|
+
<div>
|
|
904
|
+
<div className="font-medium text-white">MoveIcon</div>
|
|
905
|
+
<div className="text-xs text-white/60">
|
|
906
|
+
All directions
|
|
907
|
+
</div>
|
|
908
|
+
</div>
|
|
909
|
+
</div>
|
|
910
|
+
<div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
|
|
911
|
+
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-green-500/20">
|
|
912
|
+
<span className="text-2xl">⤴️</span>
|
|
913
|
+
</div>
|
|
914
|
+
<div>
|
|
915
|
+
<div className="font-medium text-white">DragIcon</div>
|
|
916
|
+
<div className="text-xs text-white/60">
|
|
917
|
+
Drag operations
|
|
918
|
+
</div>
|
|
919
|
+
</div>
|
|
920
|
+
</div>
|
|
921
|
+
<div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
|
|
922
|
+
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-purple-500/20">
|
|
923
|
+
<span className="text-2xl">⚡</span>
|
|
924
|
+
</div>
|
|
925
|
+
<div>
|
|
926
|
+
<div className="font-medium text-white">SortIcon</div>
|
|
927
|
+
<div className="text-xs text-white/60">
|
|
928
|
+
Sorting controls
|
|
929
|
+
</div>
|
|
930
|
+
</div>
|
|
931
|
+
</div>
|
|
932
|
+
</div>
|
|
933
|
+
</div>
|
|
934
|
+
</div>
|
|
935
|
+
|
|
936
|
+
{/* Footer */}
|
|
937
|
+
<div className="border-t border-white/10 bg-black/20 backdrop-blur-xl">
|
|
938
|
+
<div className="!mx-auto max-w-7xl px-6 py-8">
|
|
939
|
+
<div className="!space-y-4 text-center">
|
|
940
|
+
<p className="!text-white/60">
|
|
941
|
+
GripVerticalIcon is part of the Aural UI icon library, built
|
|
942
|
+
with drag-and-drop interactions and accessibility in mind.
|
|
943
|
+
</p>
|
|
944
|
+
<p className="text-sm !text-white/40">
|
|
945
|
+
All icons use Radix UI's AccessibleIcon for screen reader
|
|
946
|
+
compatibility and follow WCAG guidelines for interactive
|
|
947
|
+
elements.
|
|
948
|
+
</p>
|
|
949
|
+
</div>
|
|
950
|
+
</div>
|
|
951
|
+
</div>
|
|
952
|
+
</div>
|
|
953
|
+
</>
|
|
954
|
+
),
|
|
955
|
+
},
|
|
956
|
+
},
|
|
957
|
+
tags: ["autodocs"],
|
|
958
|
+
argTypes: {
|
|
959
|
+
width: {
|
|
960
|
+
control: { type: "range", min: 8, max: 96, step: 2 },
|
|
961
|
+
description: "Width of the icon in pixels",
|
|
962
|
+
},
|
|
963
|
+
height: {
|
|
964
|
+
control: { type: "range", min: 8, max: 96, step: 2 },
|
|
965
|
+
description: "Height of the icon in pixels",
|
|
966
|
+
},
|
|
967
|
+
stroke: {
|
|
968
|
+
control: "color",
|
|
969
|
+
description: "Stroke color of the dots",
|
|
970
|
+
},
|
|
971
|
+
strokeWidth: {
|
|
972
|
+
control: { type: "range", min: 0.5, max: 4, step: 0.5 },
|
|
973
|
+
description: "Stroke width of the dots",
|
|
974
|
+
},
|
|
975
|
+
fill: {
|
|
976
|
+
control: "color",
|
|
977
|
+
description: "Fill color of the dots",
|
|
978
|
+
},
|
|
979
|
+
className: {
|
|
980
|
+
control: "text",
|
|
981
|
+
description: "CSS classes for styling (use for overrides)",
|
|
982
|
+
},
|
|
983
|
+
},
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
export default meta
|
|
987
|
+
type Story = StoryObj<typeof GripVerticalIcon>
|
|
988
|
+
|
|
989
|
+
// Story parameters for consistent dark theme
|
|
990
|
+
const storyParameters = {
|
|
991
|
+
backgrounds: {
|
|
992
|
+
default: "dark",
|
|
993
|
+
values: [
|
|
994
|
+
{ name: "dark", value: "#0a0a0a" },
|
|
995
|
+
{ name: "darker", value: "#000000" },
|
|
996
|
+
],
|
|
997
|
+
},
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
export const Default: Story = {
|
|
1001
|
+
args: {
|
|
1002
|
+
className: "h-6 w-6 text-gray-400 ",
|
|
1003
|
+
},
|
|
1004
|
+
parameters: storyParameters,
|
|
1005
|
+
render: (args) => (
|
|
1006
|
+
<div className="flex h-32 min-h-dvh items-center justify-center rounded-lg bg-gradient-to-br from-gray-900 to-gray-800">
|
|
1007
|
+
<GripVerticalIcon {...args} />
|
|
1008
|
+
</div>
|
|
1009
|
+
),
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
export const SizeVariations: Story = {
|
|
1013
|
+
parameters: {
|
|
1014
|
+
...storyParameters,
|
|
1015
|
+
docs: {
|
|
1016
|
+
description: {
|
|
1017
|
+
story:
|
|
1018
|
+
"GripVerticalIcon in different sizes, from small UI elements to large drag handles.",
|
|
1019
|
+
},
|
|
1020
|
+
},
|
|
1021
|
+
},
|
|
1022
|
+
render: () => (
|
|
1023
|
+
<div className="flex h-64 min-h-dvh items-center justify-center gap-8 rounded-lg bg-gradient-to-br from-gray-900 to-gray-800 p-8">
|
|
1024
|
+
<div className="text-center">
|
|
1025
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-3 w-3 text-gray-400" />
|
|
1026
|
+
<span className="text-xs text-white/60">12px</span>
|
|
1027
|
+
</div>
|
|
1028
|
+
<div className="text-center">
|
|
1029
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-4 w-4 text-gray-400" />
|
|
1030
|
+
<span className="text-xs text-white/60">16px</span>
|
|
1031
|
+
</div>
|
|
1032
|
+
<div className="text-center">
|
|
1033
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-5 w-5 text-gray-400" />
|
|
1034
|
+
<span className="text-xs text-white/60">20px</span>
|
|
1035
|
+
</div>
|
|
1036
|
+
<div className="text-center">
|
|
1037
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-6 w-6 text-gray-400" />
|
|
1038
|
+
<span className="text-xs text-white/60">24px</span>
|
|
1039
|
+
</div>
|
|
1040
|
+
<div className="text-center">
|
|
1041
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-8 w-8 text-gray-400" />
|
|
1042
|
+
<span className="text-xs text-white/60">32px</span>
|
|
1043
|
+
</div>
|
|
1044
|
+
<div className="text-center">
|
|
1045
|
+
<GripVerticalIcon className="!mx-auto mb-2 h-12 w-12 text-gray-400" />
|
|
1046
|
+
<span className="text-xs text-white/60">48px</span>
|
|
1047
|
+
</div>
|
|
1048
|
+
</div>
|
|
1049
|
+
),
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
export const ColorVariations: Story = {
|
|
1053
|
+
parameters: {
|
|
1054
|
+
...storyParameters,
|
|
1055
|
+
docs: {
|
|
1056
|
+
description: {
|
|
1057
|
+
story:
|
|
1058
|
+
"GripVerticalIcon in different colors for various interaction states and contexts.",
|
|
1059
|
+
},
|
|
1060
|
+
},
|
|
1061
|
+
},
|
|
1062
|
+
render: () => (
|
|
1063
|
+
<div className="grid min-h-dvh grid-cols-2 items-center justify-center gap-6 rounded-lg bg-gradient-to-br from-gray-900 to-gray-800 p-8 md:grid-cols-4">
|
|
1064
|
+
<div className="text-center">
|
|
1065
|
+
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-gray-500/30 bg-gray-500/20">
|
|
1066
|
+
<GripVerticalIcon className="h-8 w-8 text-gray-400" />
|
|
1067
|
+
</div>
|
|
1068
|
+
<div className="text-sm font-medium text-white">Default</div>
|
|
1069
|
+
<div className="text-xs text-gray-400">text-gray-400</div>
|
|
1070
|
+
</div>
|
|
1071
|
+
<div className="text-center">
|
|
1072
|
+
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-white/30 bg-white/20">
|
|
1073
|
+
<GripVerticalIcon className="h-8 w-8 text-white/50" />
|
|
1074
|
+
</div>
|
|
1075
|
+
<div className="text-sm font-medium text-white">Muted</div>
|
|
1076
|
+
<div className="text-xs text-white/50">text-white/50</div>
|
|
1077
|
+
</div>
|
|
1078
|
+
<div className="text-center">
|
|
1079
|
+
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-blue-500/30 bg-blue-500/20">
|
|
1080
|
+
<GripVerticalIcon className="h-8 w-8 text-blue-400" />
|
|
1081
|
+
</div>
|
|
1082
|
+
<div className="text-sm font-medium text-white">Primary</div>
|
|
1083
|
+
<div className="text-xs text-blue-400">text-blue-400</div>
|
|
1084
|
+
</div>
|
|
1085
|
+
<div className="text-center">
|
|
1086
|
+
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-white/10 bg-white/5">
|
|
1087
|
+
<GripVerticalIcon className="h-8 w-8 text-white/30" />
|
|
1088
|
+
</div>
|
|
1089
|
+
<div className="text-sm font-medium text-white">Disabled</div>
|
|
1090
|
+
<div className="text-xs text-white/30">text-white/30</div>
|
|
1091
|
+
</div>
|
|
1092
|
+
</div>
|
|
1093
|
+
),
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
export const UsageExamples: Story = {
|
|
1097
|
+
parameters: {
|
|
1098
|
+
...storyParameters,
|
|
1099
|
+
docs: {
|
|
1100
|
+
description: {
|
|
1101
|
+
story:
|
|
1102
|
+
"Real-world usage examples showing GripVerticalIcon in different drag-and-drop contexts.",
|
|
1103
|
+
},
|
|
1104
|
+
},
|
|
1105
|
+
},
|
|
1106
|
+
render: () => (
|
|
1107
|
+
<div className="min-h-dvh !space-y-8 rounded-lg bg-gradient-to-br from-gray-900 to-gray-800 p-8">
|
|
1108
|
+
{/* Sortable List */}
|
|
1109
|
+
<div className="!space-y-2">
|
|
1110
|
+
<h3 className="text-sm font-medium text-white">Sortable List</h3>
|
|
1111
|
+
<div className="rounded-lg border border-white/10 bg-white/5 p-4">
|
|
1112
|
+
<div className="!space-y-2">
|
|
1113
|
+
{["First Task", "Second Task", "Third Task"].map((task, index) => (
|
|
1114
|
+
<div
|
|
1115
|
+
key={index}
|
|
1116
|
+
className="flex items-center gap-3 rounded border border-white/10 bg-white/5 p-3 transition-colors hover:bg-white/10"
|
|
1117
|
+
>
|
|
1118
|
+
<GripVerticalIcon className="h-4 w-4 cursor-move text-white/40 transition-colors hover:text-white/70" />
|
|
1119
|
+
<span className="flex-1 text-sm text-white">{task}</span>
|
|
1120
|
+
<span className="text-xs text-white/40">#{index + 1}</span>
|
|
1121
|
+
</div>
|
|
1122
|
+
))}
|
|
1123
|
+
</div>
|
|
1124
|
+
</div>
|
|
1125
|
+
</div>
|
|
1126
|
+
|
|
1127
|
+
{/* Draggable Cards */}
|
|
1128
|
+
<div className="!space-y-2">
|
|
1129
|
+
<h3 className="text-sm font-medium text-white">Draggable Cards</h3>
|
|
1130
|
+
<div className="grid grid-cols-1 gap-4 md:grid-cols-2">
|
|
1131
|
+
{["Project Alpha", "Project Beta"].map((project, index) => (
|
|
1132
|
+
<div
|
|
1133
|
+
key={index}
|
|
1134
|
+
className="relative rounded-lg border border-white/10 bg-white/5 p-4 transition-colors hover:bg-white/10"
|
|
1135
|
+
>
|
|
1136
|
+
<div className="absolute top-3 right-3">
|
|
1137
|
+
<GripVerticalIcon className="h-4 w-4 cursor-move text-white/30 transition-colors hover:text-white/60" />
|
|
1138
|
+
</div>
|
|
1139
|
+
<h5 className="mb-2 text-sm font-medium text-white">{project}</h5>
|
|
1140
|
+
<p className="text-xs text-white/60">Drag to reorder this card</p>
|
|
1141
|
+
</div>
|
|
1142
|
+
))}
|
|
1143
|
+
</div>
|
|
1144
|
+
</div>
|
|
1145
|
+
|
|
1146
|
+
{/* Menu Items */}
|
|
1147
|
+
<div className="!space-y-2">
|
|
1148
|
+
<h3 className="text-sm font-medium text-white">Reorderable Menu</h3>
|
|
1149
|
+
<div className="max-w-xs rounded-lg border border-white/10 bg-white/5 p-2">
|
|
1150
|
+
{["Dashboard", "Projects", "Settings"].map((item, index) => (
|
|
1151
|
+
<div
|
|
1152
|
+
key={index}
|
|
1153
|
+
className="flex cursor-pointer items-center gap-3 rounded p-2 transition-colors hover:bg-white/10"
|
|
1154
|
+
>
|
|
1155
|
+
<GripVerticalIcon className="h-3 w-3 cursor-move text-white/30" />
|
|
1156
|
+
<span className="flex-1 text-sm text-white">{item}</span>
|
|
1157
|
+
</div>
|
|
1158
|
+
))}
|
|
1159
|
+
</div>
|
|
1160
|
+
</div>
|
|
1161
|
+
</div>
|
|
1162
|
+
),
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
export const InteractiveStates: Story = {
|
|
1166
|
+
parameters: {
|
|
1167
|
+
...storyParameters,
|
|
1168
|
+
docs: {
|
|
1169
|
+
description: {
|
|
1170
|
+
story:
|
|
1171
|
+
"Interactive states showing hover effects, animations, and cursor styles for the grip icon.",
|
|
1172
|
+
},
|
|
1173
|
+
},
|
|
1174
|
+
},
|
|
1175
|
+
render: () => (
|
|
1176
|
+
<div className="min-h-dvh !space-y-8 rounded-lg bg-gradient-to-br from-gray-900 to-gray-800 p-8">
|
|
1177
|
+
<div className="!space-y-4">
|
|
1178
|
+
<h3 className="text-sm font-medium text-white/70">Hover Effects</h3>
|
|
1179
|
+
<div className="flex gap-8">
|
|
1180
|
+
<div className="flex flex-col items-center gap-2">
|
|
1181
|
+
<GripVerticalIcon className="h-8 w-8 text-white/60 transition-colors hover:text-white" />
|
|
1182
|
+
<span className="text-xs text-white/60">Color Change</span>
|
|
1183
|
+
</div>
|
|
1184
|
+
<div className="flex flex-col items-center gap-2">
|
|
1185
|
+
<GripVerticalIcon className="h-8 w-8 text-white transition-transform hover:scale-110" />
|
|
1186
|
+
<span className="text-xs text-white/60">Scale Up</span>
|
|
1187
|
+
</div>
|
|
1188
|
+
<div className="flex flex-col items-center gap-2">
|
|
1189
|
+
<GripVerticalIcon className="animate-wiggle h-8 w-8 text-purple-400" />
|
|
1190
|
+
<span className="text-xs text-white/60">Wiggle Animation</span>
|
|
1191
|
+
</div>
|
|
1192
|
+
</div>
|
|
1193
|
+
</div>
|
|
1194
|
+
|
|
1195
|
+
<div className="!space-y-4">
|
|
1196
|
+
<h3 className="text-sm font-medium text-white/70">Cursor States</h3>
|
|
1197
|
+
<div className="flex gap-8">
|
|
1198
|
+
<div className="flex flex-col items-center gap-2">
|
|
1199
|
+
<GripVerticalIcon className="h-8 w-8 cursor-move text-white" />
|
|
1200
|
+
<span className="text-xs text-white/60">cursor-move</span>
|
|
1201
|
+
</div>
|
|
1202
|
+
<div className="flex flex-col items-center gap-2">
|
|
1203
|
+
<GripVerticalIcon className="h-8 w-8 cursor-grab text-white hover:cursor-grabbing" />
|
|
1204
|
+
<span className="text-xs text-white/60">cursor-grab</span>
|
|
1205
|
+
</div>
|
|
1206
|
+
<div className="flex flex-col items-center gap-2">
|
|
1207
|
+
<GripVerticalIcon className="h-8 w-8 cursor-ns-resize text-white" />
|
|
1208
|
+
<span className="text-xs text-white/60">cursor-ns-resize</span>
|
|
1209
|
+
</div>
|
|
1210
|
+
</div>
|
|
1211
|
+
</div>
|
|
1212
|
+
</div>
|
|
1213
|
+
),
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
export const Playground: Story = {
|
|
1217
|
+
parameters: {
|
|
1218
|
+
...storyParameters,
|
|
1219
|
+
docs: {
|
|
1220
|
+
description: {
|
|
1221
|
+
story:
|
|
1222
|
+
"Interactive playground to experiment with different GripVerticalIcon configurations.",
|
|
1223
|
+
},
|
|
1224
|
+
},
|
|
1225
|
+
},
|
|
1226
|
+
args: {
|
|
1227
|
+
width: 32,
|
|
1228
|
+
height: 32,
|
|
1229
|
+
className: "text-gray-400 cursor-move ",
|
|
1230
|
+
strokeWidth: 2,
|
|
1231
|
+
},
|
|
1232
|
+
render: (args) => (
|
|
1233
|
+
<div className="flex h-64 min-h-dvh items-center justify-center rounded-lg bg-gradient-to-br from-gray-900 to-gray-800">
|
|
1234
|
+
<div className="rounded-lg border border-white/10 bg-white/5 p-8">
|
|
1235
|
+
<GripVerticalIcon {...args} />
|
|
1236
|
+
</div>
|
|
1237
|
+
</div>
|
|
1238
|
+
),
|
|
1239
|
+
}
|