aural-ui 4.0.1 → 4.1.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/dist/components/aspect-ratio/AspectRatio.stories.tsx +290 -1228
- package/dist/components/avatar/Avatar.stories.tsx +219 -235
- package/dist/components/badge/Badge.stories.tsx +379 -116
- package/dist/components/banner/Banner.stories.tsx +445 -391
- package/dist/components/breadcrumb/Breadcrumb.stories.tsx +453 -199
- package/dist/components/button/Button.stories.tsx +585 -230
- package/dist/components/card/Card.stories.tsx +619 -301
- package/dist/components/char-count/CharCount.stories.tsx +350 -248
- package/dist/components/checkbox/Checkbox.stories.tsx +309 -167
- package/dist/components/chip/Chip.stories.tsx +362 -168
- package/dist/components/circular-loader/CircularLoader.stories.tsx +221 -636
- package/dist/components/clamp-lines/ClampLines.stories.tsx +246 -117
- package/dist/components/collapsible/Collapsible.stories.tsx +391 -252
- package/dist/components/command/Command.stories.tsx +530 -867
- package/dist/components/dialog/Dialog.stories.tsx +501 -950
- package/dist/components/divider/Divider.stories.tsx +264 -527
- package/dist/components/dot-loader/DotLoader.stories.tsx +256 -257
- package/dist/components/drawer/Drawer.stories.tsx +659 -1023
- package/dist/components/dropdown/Dropdown.stories.tsx +643 -1028
- package/dist/components/form/Form.stories.tsx +560 -274
- package/dist/components/helper-text/HelperText.stories.tsx +199 -200
- package/dist/components/hover-card/HoverCard.stories.tsx +318 -1254
- package/dist/components/icon-button/IconButton.stories.tsx +837 -194
- package/dist/components/if-else/if-else.stories.tsx +370 -83
- package/dist/components/input/Input.stories.tsx +436 -368
- package/dist/components/label/Label.stories.tsx +156 -154
- package/dist/components/list/List.stories.tsx +484 -835
- package/dist/components/marquee/Marquee.stories.tsx +356 -712
- package/dist/components/otp-inputs/OtpInputs.stories.tsx +352 -422
- package/dist/components/overlay/Overlay.stories.tsx +452 -824
- package/dist/components/pagination/Pagination.stories.tsx +721 -210
- package/dist/components/popover/Popover.stories.tsx +481 -896
- package/dist/components/radio/Radio.stories.tsx +432 -124
- package/dist/components/resizable/Resizable.stories.tsx +495 -799
- package/dist/components/scroll-area/ScrollArea.stories.tsx +383 -1059
- package/dist/components/search/Search.stories.tsx +312 -595
- package/dist/components/select/Select.stories.tsx +684 -789
- package/dist/components/sheet/Sheet.stories.tsx +671 -950
- package/dist/components/skelton/Skelton.stories.tsx +230 -764
- package/dist/components/slider/Slider.stories.tsx +383 -760
- package/dist/components/stepper/Stepper.stories.tsx +371 -514
- package/dist/components/switch/Switch.stories.tsx +461 -208
- package/dist/components/switch-case/SwitchCase.stories.tsx +367 -188
- package/dist/components/table/Table.stories.tsx +770 -916
- package/dist/components/tabs/Tabs.stories.tsx +458 -1455
- package/dist/components/tag/Tag.stories.tsx +714 -542
- package/dist/components/textarea/TextArea.stories.tsx +621 -562
- package/dist/components/thumbnail-tags/ThumbnailTags.stories.tsx +228 -154
- package/dist/components/toast/Toast.stories.tsx +452 -1339
- package/dist/components/toggle/Toggle.stories.tsx +488 -931
- package/dist/components/tooltip/Tooltip.stories.tsx +344 -1388
- package/dist/components/typography/Typography.stories.tsx +406 -89
- package/dist/hooks/use-change-state/UseChangeState.stories.tsx +309 -606
- package/dist/hooks/use-previous/UsePrevious.stories.tsx +367 -917
- package/dist/hooks/use-standalone-pagination/UseStandalonePagination.stories.tsx +639 -867
- package/dist/icons/Icons.stories.tsx +0 -12
- package/dist/icons/ai-avatar-icon/AiAvatarIcon.stories.tsx +223 -1060
- package/dist/icons/alert-icon/AlertIcon.stories.tsx +106 -968
- package/dist/icons/all-icons.tsx +37 -16
- package/dist/icons/angle-down-icon/AngleDownIcon.stories.tsx +137 -1010
- package/dist/icons/apple-logo-icon/AppleLogoIcon.stories.tsx +145 -935
- package/dist/icons/arrow-box-left-icon/ArrowBoxLeftIcon.stories.tsx +132 -1046
- package/dist/icons/arrow-corner-up-left-icon/ArrowCornerUpLeftIcon.stories.tsx +134 -986
- package/dist/icons/arrow-corner-up-right-icon/ArrowCornerUpRightIcon.stories.tsx +135 -1028
- package/dist/icons/arrow-left-icon/ArrowLeftIcon.stories.tsx +133 -971
- package/dist/icons/arrow-right-icon/ArrowRightIcon.stories.tsx +145 -1123
- package/dist/icons/arrow-right-up-icon/ArrowRightUpIcon.stories.tsx +143 -1252
- package/dist/icons/art-board-icon/ArtBoardIcon.stories.tsx +123 -632
- package/dist/icons/audio-bar-icon/AudioBarIcon.stories.tsx +141 -1223
- package/dist/icons/backward-ten-seconds-icon/BackwardTenSecondsIcon.stories.tsx +164 -1018
- package/dist/icons/bubble-check-icon/BubbleCheckIcon.stories.tsx +121 -1236
- package/dist/icons/bubble-crossed-icon/BubbleCrossedIcon.stories.tsx +121 -1213
- package/dist/icons/bubble-sparkle-icon/BubbleSparkleIcon.stories.tsx +116 -893
- package/dist/icons/camera-icon/CameraIcon.stories.tsx +109 -1254
- package/dist/icons/capital-a-letter-icon/CapitalALetterIcon.stories.tsx +114 -975
- package/dist/icons/chevron-double-left-icon/ChevronDoubleLeftIcon.stories.tsx +157 -994
- package/dist/icons/chevron-double-right-icon/ChevronDoubleRightIcon.stories.tsx +160 -992
- package/dist/icons/chevron-down-icon/ChevronDownIcon.stories.tsx +140 -970
- package/dist/icons/chevron-left-icon/ChevronLeftIcon.stories.tsx +126 -993
- package/dist/icons/chevron-right-icon/ChevronRightIcon.stories.tsx +144 -987
- package/dist/icons/chevron-up-icon/ChevronUpIcon.stories.tsx +141 -1007
- package/dist/icons/circle-tick-icon/CircleTickIcon.stories.tsx +147 -1187
- package/dist/icons/circular-play-icon/CircularPlayIcon.stories.tsx +110 -476
- package/dist/icons/coin-icon/CoinIcon.stories.tsx +120 -1364
- package/dist/icons/coin-toons-icon/CoinToonsIcon.stories.tsx +113 -1360
- package/dist/icons/column-wide-add-icon/ColumnWideAddIcon.stories.tsx +111 -942
- package/dist/icons/command-icon/CommandIcon.stories.tsx +124 -1087
- package/dist/icons/copy-icon/CopyIcon.stories.tsx +119 -996
- package/dist/icons/cross-circle-icon/CrossCircleIcon.stories.tsx +144 -1046
- package/dist/icons/cross-icon/CrossIcon.stories.tsx +136 -999
- package/dist/icons/download-icon/DownloadIcon.stories.tsx +123 -857
- package/dist/icons/edit-big-icon/EditBigIcon.stories.tsx +121 -1080
- package/dist/icons/email-icon/EmailIcon.stories.tsx +112 -979
- package/dist/icons/expand-icon/ExpandIcon.stories.tsx +109 -1146
- package/dist/icons/eye-close-icon/EyeCloseIcon.stories.tsx +141 -1068
- package/dist/icons/eye-open-icon/EyeOpenIcon.stories.tsx +140 -1081
- package/dist/icons/feature-shine-icon/FeatureShineIcon.stories.tsx +124 -1050
- package/dist/icons/file-chart-icon/FileChartIcon.stories.tsx +123 -1091
- package/dist/icons/file-text-icon/FileTextIcon.stories.tsx +122 -633
- package/dist/icons/filter-bar-row-icon/FilterBarRowIcon.stories.tsx +116 -1087
- package/dist/icons/forward-ten-seconds-icon/ForwardTenSecondsIcon.stories.tsx +166 -1020
- package/dist/icons/git-branch-icon/GitBranchIcon.stories.tsx +112 -1182
- package/dist/icons/git-fork-icon/GitForkIcon.stories.tsx +112 -1155
- package/dist/icons/globe-icon/GlobeIcon.stories.tsx +127 -325
- package/dist/icons/google-logo-icon/GoogleLogoIcon.stories.tsx +142 -985
- package/dist/icons/grip-vertical-icon/GripVerticalIcon.stories.tsx +116 -1217
- package/dist/icons/head-icon/HeadIcon.stories.tsx +108 -953
- package/dist/icons/heart-icon/HeartIcon.stories.tsx +117 -1060
- package/dist/icons/image-avatar-sparkle-icon/ImageAvatarSparkleIcon.stories.tsx +116 -716
- package/dist/icons/image-icon/ImageIcon.stories.tsx +102 -1164
- package/dist/icons/import-folder-icon/ImportFolderIcon.stories.tsx +108 -1233
- package/dist/icons/import-left-arrow-folder-icon/ImportLeftArrowFolderIcon.stories.tsx +133 -1289
- package/dist/icons/indian-flag-icon/IndianFlagIcon.stories.tsx +155 -1012
- package/dist/icons/instagram-icon/InstagramIcon.stories.tsx +158 -1438
- package/dist/icons/layout-column-icon/LayoutColumnIcon.stories.tsx +121 -1011
- package/dist/icons/layout-left-icon/LayoutLeftIcon.stories.tsx +116 -981
- package/dist/icons/layout-right-icon/LayoutRightIcon.stories.tsx +116 -979
- package/dist/icons/light-bulb-simple-icon/LightBulbSimpleIcon.stories.tsx +105 -1252
- package/dist/icons/linked-in-icon/LinkedInIcon.stories.tsx +151 -1554
- package/dist/icons/magic-book-icon/MagicBookIcon.stories.tsx +107 -1227
- package/dist/icons/magic-edit-icon/MagicEditIcon.stories.tsx +116 -707
- package/dist/icons/maintenance-icon/MaintenanceIcon.stories.tsx +119 -1226
- package/dist/icons/message-icon/MessageIcon.stories.tsx +111 -557
- package/dist/icons/minimize-icon/MinimizeIcon.stories.tsx +112 -1198
- package/dist/icons/moon-icon/MoonIcon.stories.tsx +117 -557
- package/dist/icons/move-horizontal-icon/MoveHorizontalIcon.stories.tsx +106 -1235
- package/dist/icons/move-vertical-icon/MoveVerticalIcon.stories.tsx +112 -1185
- package/dist/icons/musical-note-icon/MusicalNoteIcon.stories.tsx +116 -1012
- package/dist/icons/notepad-icon/NotepadIcon.stories.tsx +108 -1137
- package/dist/icons/notes-icon/NotesIcon.stories.tsx +116 -1138
- package/dist/icons/page-search-icon/PageSearchIcon.stories.tsx +106 -1146
- package/dist/icons/page-text-icon/PageTextIcon.stories.tsx +119 -719
- package/dist/icons/paint-roll-icon/PaintRollIcon.stories.tsx +110 -999
- package/dist/icons/paper-plane-icon/PaperPlaneIcon.stories.tsx +109 -912
- package/dist/icons/pause-icon/PauseIcon.stories.tsx +110 -1041
- package/dist/icons/pencil-icon/PencilIcon.stories.tsx +112 -1109
- package/dist/icons/phone-icon/PhoneIcon.stories.tsx +112 -1023
- package/dist/icons/plus-icon/PlusIcon.stories.tsx +103 -1132
- package/dist/icons/pocket-studio-icon/PocketStudioIcon.stories.tsx +104 -870
- package/dist/icons/scroll-down-icon/ScrollDownIcon.stories.tsx +99 -476
- package/dist/icons/search-icon/SearchIcon.stories.tsx +108 -1161
- package/dist/icons/setting-icon/SettingIcon.stories.tsx +104 -1009
- package/dist/icons/share-icon/ShareIcon.stories.tsx +117 -1064
- package/dist/icons/shield-icon/ShieldIcon.stories.tsx +114 -974
- package/dist/icons/site-logo-icon/SiteLogoIcon.stories.tsx +134 -1160
- package/dist/icons/skip-backward-icon/SkipBackwardIcon.stories.tsx +169 -1017
- package/dist/icons/skip-forward-icon/SkipForwardIcon.stories.tsx +161 -1016
- package/dist/icons/sparkles-soft-icon/SparklesSoftIcon.stories.tsx +102 -1001
- package/dist/icons/spinner-gradient-icon/SpinnerGradientIcon.stories.tsx +155 -593
- package/dist/icons/spinner-solid-icon/SpinnerSolidIcon.stories.tsx +155 -608
- package/dist/icons/spinner-solid-neutral-icon/SpinnerSolidINeutralcon.stories.tsx +142 -712
- package/dist/icons/star-icon/StarIcon.stories.tsx +120 -946
- package/dist/icons/store-coin-icon/StoreCoinIcon.stories.tsx +109 -1013
- package/dist/icons/suggestion-icon/SuggestionIcon.stories.tsx +113 -891
- package/dist/icons/sun-icon/SunIcon.stories.tsx +117 -864
- package/dist/icons/text-color-icon/TextColorIcon.stories.tsx +113 -989
- package/dist/icons/text-indicator-icon/TextIndicatorIcon.stories.tsx +120 -1027
- package/dist/icons/threads-icon/ThreadsIcon.stories.tsx +153 -1476
- package/dist/icons/tick-circle-icon/TickCircleIcon.stories.tsx +143 -1187
- package/dist/icons/tick-icon/TickIcon.stories.tsx +142 -1322
- package/dist/icons/trash-icon/TrashIcon.stories.tsx +105 -970
- package/dist/icons/twitter-x-icon/TwitterXIcon.stories.tsx +154 -1457
- package/dist/icons/upload-icon/UploadIcon.stories.tsx +112 -930
- package/dist/icons/vertical-menu-icon/VerticalMenuIcon.stories.tsx +115 -1019
- package/dist/icons/video-play-list-icon/VideoPlaylistIcon.stories.tsx +122 -1092
- package/dist/icons/voice-playing-icon/VoicePlayingIcon.stories.tsx +120 -1401
- package/dist/icons/volume-full-icon/VolumeFullIcon.stories.tsx +107 -1212
- package/dist/icons/volume-half-icon/VolumeHalfIcon.stories.tsx +109 -1122
- package/dist/icons/volume-off-icon/VolumeOffIcon.stories.tsx +112 -1124
- package/dist/icons/warning-icon/WarningIcon.stories.tsx +119 -1083
- package/dist/icons/youtube-icon/YoutubeIcon.stories.tsx +158 -983
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import React from "react"
|
|
2
2
|
import type { Meta, StoryObj } from "@storybook/react-vite"
|
|
3
3
|
|
|
4
|
+
import { DownloadIcon } from "src/ui/icons/download-icon"
|
|
5
|
+
import { FileTextIcon } from "src/ui/icons/file-text-icon"
|
|
6
|
+
import { ImportLeftArrowFolderIcon } from "src/ui/icons/import-left-arrow-folder-icon"
|
|
7
|
+
import { UploadIcon } from "src/ui/icons/upload-icon"
|
|
8
|
+
import {
|
|
9
|
+
IconColorVariations,
|
|
10
|
+
IconDefaultCanvas,
|
|
11
|
+
IconPlaygroundCanvas,
|
|
12
|
+
IconSizeVariations,
|
|
13
|
+
IconUsageCanvas,
|
|
14
|
+
IconUsageSection,
|
|
15
|
+
} from "src/ui/story-spec/icons/icon-story-canvas"
|
|
16
|
+
import { AuralIconDocsPage } from "src/ui/story-spec/icons/icon-story-docs-page"
|
|
17
|
+
|
|
4
18
|
import { ImportFolderIcon } from "."
|
|
5
19
|
|
|
6
20
|
const meta: Meta<typeof ImportFolderIcon> = {
|
|
@@ -18,994 +32,72 @@ const meta: Meta<typeof ImportFolderIcon> = {
|
|
|
18
32
|
},
|
|
19
33
|
docs: {
|
|
20
34
|
page: () => (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
.docs-story {
|
|
37
|
-
background: transparent ;
|
|
38
|
-
}
|
|
39
|
-
.sbdocs {
|
|
40
|
-
background: transparent ;
|
|
41
|
-
}
|
|
42
|
-
body {
|
|
43
|
-
background: var(--color-fm-surface-primary) ;
|
|
44
|
-
}
|
|
45
|
-
#storybook-docs {
|
|
46
|
-
background: var(--color-fm-surface-primary) ;
|
|
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: var(--color-fm-icon-active) ;
|
|
54
|
-
}
|
|
55
|
-
.sbdocs-p, .sbdocs-li {
|
|
56
|
-
color: var(--color-fm-secondary) ;
|
|
57
|
-
}
|
|
58
|
-
.sbdocs-code {
|
|
59
|
-
background: var(--color-fm-surface-secondary) ;
|
|
60
|
-
color: var(--color-fm-secondary-500) ;
|
|
61
|
-
border: 1px solid var(--color-fm-divider-secondary) ;
|
|
62
|
-
}
|
|
63
|
-
.sbdocs-pre {
|
|
64
|
-
background: var(--color-fm-surface-secondary) ;
|
|
65
|
-
border: 1px solid var(--color-fm-divider-secondary) ;
|
|
66
|
-
}
|
|
67
|
-
.sbdocs-table {
|
|
68
|
-
background: var(--color-fm-surface-secondary) ;
|
|
69
|
-
border: 1px solid var(--color-fm-divider-secondary) ;
|
|
70
|
-
}
|
|
71
|
-
.sbdocs-table th {
|
|
72
|
-
background: var(--color-fm-surface-secondary) ;
|
|
73
|
-
color: var(--color-fm-icon-active) ;
|
|
74
|
-
border-bottom: 1px solid var(--color-fm-divider-secondary) ;
|
|
75
|
-
}
|
|
76
|
-
.sbdocs-table td {
|
|
77
|
-
color: var(--color-fm-secondary) ;
|
|
78
|
-
border-bottom: 1px solid var(--color-fm-divider-tertiary) ;
|
|
79
|
-
}
|
|
80
|
-
@keyframes pulse {
|
|
81
|
-
0%, 100% { opacity: 1; }
|
|
82
|
-
50% { opacity: 0.5; }
|
|
83
|
-
}
|
|
84
|
-
.animate-pulse {
|
|
85
|
-
animation: pulse 2s ease-in-out infinite;
|
|
86
|
-
}
|
|
87
|
-
`}
|
|
88
|
-
</style>
|
|
89
|
-
|
|
90
|
-
<div className="bg-fm-surface-primary min-h-screen">
|
|
91
|
-
{/* Header */}
|
|
92
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary relative overflow-hidden border-b backdrop-blur-xl">
|
|
93
|
-
<div className="from-fm-icon-positive/10 to-fm-icon-warning/10 absolute inset-0 bg-linear-to-r via-transparent" />
|
|
94
|
-
<div className="relative !mx-auto max-w-7xl px-6 py-16">
|
|
95
|
-
<div className="!space-y-6 text-center">
|
|
96
|
-
<div className="border-fm-icon-positive/30 from-fm-icon-positive/20 to-fm-icon-warning/20 !mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border bg-linear-to-br">
|
|
97
|
-
<ImportFolderIcon className="text-fm-icon-positive h-12 w-12" />
|
|
98
|
-
</div>
|
|
99
|
-
<h1 className="!text-fm-primary text-5xl font-bold">
|
|
100
|
-
ImportFolderIcon
|
|
101
|
-
</h1>
|
|
102
|
-
<p className="text-fm-secondary! !mx-auto max-w-3xl text-xl leading-relaxed">
|
|
103
|
-
A specialized folder icon with import functionality,
|
|
104
|
-
featuring a clean folder design with an import arrow
|
|
105
|
-
indicator. Perfect for file management systems, data import
|
|
106
|
-
operations, and document organization interfaces. Built with
|
|
107
|
-
accessibility in mind using Radix UI's AccessibleIcon
|
|
108
|
-
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-fm-icon-positive text-3xl font-bold">
|
|
115
|
-
Import
|
|
116
|
-
</div>
|
|
117
|
-
<div className="text-fm-tertiary text-sm">
|
|
118
|
-
File operations
|
|
119
|
-
</div>
|
|
120
|
-
</div>
|
|
121
|
-
<div className="bg-fm-divider-primary h-8 w-px" />
|
|
122
|
-
<div className="text-center">
|
|
123
|
-
<div className="text-fm-icon-warning text-3xl font-bold">
|
|
124
|
-
Organize
|
|
125
|
-
</div>
|
|
126
|
-
<div className="text-fm-tertiary text-sm">
|
|
127
|
-
Folder management
|
|
128
|
-
</div>
|
|
129
|
-
</div>
|
|
130
|
-
<div className="bg-fm-divider-primary h-8 w-px" />
|
|
131
|
-
<div className="text-center">
|
|
132
|
-
<div className="text-fm-icon-info text-3xl font-bold">
|
|
133
|
-
Intuitive
|
|
134
|
-
</div>
|
|
135
|
-
<div className="text-fm-tertiary text-sm">
|
|
136
|
-
Clear direction
|
|
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-fm-icon-active! text-center text-3xl font-bold">
|
|
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-fm-icon-positive! text-xl font-semibold">
|
|
154
|
-
Basic Usage
|
|
155
|
-
</h3>
|
|
156
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
157
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
158
|
-
{`import { ImportFolderIcon } from "@icons/import-folder-icon"
|
|
159
|
-
|
|
160
|
-
function FileImport() {
|
|
35
|
+
<AuralIconDocsPage
|
|
36
|
+
accentToken="info"
|
|
37
|
+
features={[
|
|
38
|
+
{ title: "Import", description: "Bring content into folder" },
|
|
39
|
+
{
|
|
40
|
+
title: "File Upload",
|
|
41
|
+
description: "Upload to directory trigger",
|
|
42
|
+
},
|
|
43
|
+
{ title: "Accessible", description: "ARIA-ready by default" },
|
|
44
|
+
]}
|
|
45
|
+
quickStart={{
|
|
46
|
+
codeExample: `import { ImportFolderIcon } from "src/ui/icons/import-folder-icon"
|
|
47
|
+
|
|
48
|
+
function ImportButton() {
|
|
161
49
|
return (
|
|
162
|
-
<
|
|
163
|
-
<ImportFolderIcon className="h-
|
|
164
|
-
<span>Import
|
|
165
|
-
</
|
|
50
|
+
<button className="flex items-center gap-2">
|
|
51
|
+
<ImportFolderIcon className="h-5 w-5 text-fm-icon-active" />
|
|
52
|
+
<span>Import files</span>
|
|
53
|
+
</button>
|
|
166
54
|
)
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
<thead className="bg-fm-surface-secondary">
|
|
202
|
-
<tr className="border-fm-divider-secondary border-b">
|
|
203
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
204
|
-
Prop
|
|
205
|
-
</th>
|
|
206
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
207
|
-
Type
|
|
208
|
-
</th>
|
|
209
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
210
|
-
Default
|
|
211
|
-
</th>
|
|
212
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
213
|
-
Description
|
|
214
|
-
</th>
|
|
215
|
-
</tr>
|
|
216
|
-
</thead>
|
|
217
|
-
<tbody>
|
|
218
|
-
{" "}
|
|
219
|
-
<tr className="bg-fm-surface-secondary!">
|
|
220
|
-
<td className="text-fm-icon-info! px-6 py-4 font-mono text-sm">
|
|
221
|
-
withAccessibility
|
|
222
|
-
</td>
|
|
223
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
224
|
-
boolean
|
|
225
|
-
</td>
|
|
226
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
227
|
-
true
|
|
228
|
-
</td>
|
|
229
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
230
|
-
Whether to wrap the icon with accessibility feature
|
|
231
|
-
</td>
|
|
232
|
-
</tr>
|
|
233
|
-
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
234
|
-
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
235
|
-
height
|
|
236
|
-
</td>
|
|
237
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
238
|
-
number | string
|
|
239
|
-
</td>
|
|
240
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
241
|
-
24
|
|
242
|
-
</td>
|
|
243
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
244
|
-
Height of the icon in pixels
|
|
245
|
-
</td>
|
|
246
|
-
</tr>
|
|
247
|
-
<tr className="border-fm-divider-tertiary border-b">
|
|
248
|
-
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
249
|
-
stroke
|
|
250
|
-
</td>
|
|
251
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
252
|
-
string
|
|
253
|
-
</td>
|
|
254
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
255
|
-
currentColor
|
|
256
|
-
</td>
|
|
257
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
258
|
-
Stroke color of the folder outline
|
|
259
|
-
</td>
|
|
260
|
-
</tr>
|
|
261
|
-
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
262
|
-
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
263
|
-
strokeWidth
|
|
264
|
-
</td>
|
|
265
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
266
|
-
string | number
|
|
267
|
-
</td>
|
|
268
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
269
|
-
1
|
|
270
|
-
</td>
|
|
271
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
272
|
-
Stroke width of the outline
|
|
273
|
-
</td>
|
|
274
|
-
</tr>
|
|
275
|
-
<tr className="border-fm-divider-tertiary border-b">
|
|
276
|
-
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
277
|
-
fill
|
|
278
|
-
</td>
|
|
279
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
280
|
-
string
|
|
281
|
-
</td>
|
|
282
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
283
|
-
none
|
|
284
|
-
</td>
|
|
285
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
286
|
-
Fill color of the icon
|
|
287
|
-
</td>
|
|
288
|
-
</tr>
|
|
289
|
-
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
290
|
-
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
291
|
-
className
|
|
292
|
-
</td>
|
|
293
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
294
|
-
string
|
|
295
|
-
</td>
|
|
296
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
297
|
-
-
|
|
298
|
-
</td>
|
|
299
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
300
|
-
CSS classes for styling (use for overrides)
|
|
301
|
-
</td>
|
|
302
|
-
</tr>
|
|
303
|
-
<tr className="bg-fm-surface-secondary!">
|
|
304
|
-
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
305
|
-
...svgProps
|
|
306
|
-
</td>
|
|
307
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
308
|
-
SVGProps
|
|
309
|
-
</td>
|
|
310
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
311
|
-
-
|
|
312
|
-
</td>
|
|
313
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
314
|
-
All standard SVG element props
|
|
315
|
-
</td>
|
|
316
|
-
</tr>
|
|
317
|
-
</tbody>
|
|
318
|
-
</table>
|
|
319
|
-
</div>
|
|
320
|
-
</div>
|
|
321
|
-
|
|
322
|
-
{/* Size Variations */}
|
|
323
|
-
<div className="!space-y-8">
|
|
324
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
325
|
-
Size Variations
|
|
326
|
-
</h2>
|
|
327
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-8">
|
|
328
|
-
<div className="!space-y-6">
|
|
329
|
-
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
330
|
-
<div className="!space-y-4">
|
|
331
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
332
|
-
Standard Sizes
|
|
333
|
-
</h3>
|
|
334
|
-
<div className="bg-fm-surface-secondary flex items-end gap-6 rounded-lg p-6">
|
|
335
|
-
<div className="text-center">
|
|
336
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-3 w-3" />
|
|
337
|
-
<span className="text-fm-tertiary text-xs">
|
|
338
|
-
12px
|
|
339
|
-
</span>
|
|
340
|
-
</div>
|
|
341
|
-
<div className="text-center">
|
|
342
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-4 w-4" />
|
|
343
|
-
<span className="text-fm-tertiary text-xs">
|
|
344
|
-
16px
|
|
345
|
-
</span>
|
|
346
|
-
</div>
|
|
347
|
-
<div className="text-center">
|
|
348
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-5 w-5" />
|
|
349
|
-
<span className="text-fm-tertiary text-xs">
|
|
350
|
-
20px
|
|
351
|
-
</span>
|
|
352
|
-
</div>
|
|
353
|
-
<div className="text-center">
|
|
354
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-6 w-6" />
|
|
355
|
-
<span className="text-fm-tertiary text-xs">
|
|
356
|
-
24px
|
|
357
|
-
</span>
|
|
358
|
-
</div>
|
|
359
|
-
<div className="text-center">
|
|
360
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-8 w-8" />
|
|
361
|
-
<span className="text-fm-tertiary text-xs">
|
|
362
|
-
32px
|
|
363
|
-
</span>
|
|
364
|
-
</div>
|
|
365
|
-
<div className="text-center">
|
|
366
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-12 w-12" />
|
|
367
|
-
<span className="text-fm-tertiary text-xs">
|
|
368
|
-
48px
|
|
369
|
-
</span>
|
|
370
|
-
</div>
|
|
371
|
-
</div>
|
|
372
|
-
</div>
|
|
373
|
-
|
|
374
|
-
<div className="!space-y-4">
|
|
375
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
376
|
-
Code Example
|
|
377
|
-
</h3>
|
|
378
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
379
|
-
<pre className="text-fm-icon-info! overflow-x-auto text-sm">
|
|
380
|
-
{`// Small (16px)
|
|
381
|
-
<ImportFolderIcon className="h-4 w-4 " />
|
|
382
|
-
|
|
383
|
-
// Medium (24px)
|
|
384
|
-
<ImportFolderIcon className="h-6 w-6 " />
|
|
385
|
-
|
|
386
|
-
// Large (32px)
|
|
387
|
-
<ImportFolderIcon className="h-8 w-8 " />
|
|
388
|
-
|
|
389
|
-
// Custom size for buttons
|
|
390
|
-
<ImportFolderIcon
|
|
391
|
-
width={40}
|
|
392
|
-
height={40}
|
|
393
|
-
className="text-green-400 "
|
|
394
|
-
/>`}
|
|
395
|
-
</pre>
|
|
396
|
-
</div>
|
|
397
|
-
</div>
|
|
398
|
-
</div>
|
|
399
|
-
</div>
|
|
400
|
-
</div>
|
|
401
|
-
</div>
|
|
402
|
-
|
|
403
|
-
{/* Color Variations */}
|
|
404
|
-
<div className="!space-y-8">
|
|
405
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
406
|
-
Color Variations
|
|
407
|
-
</h2>
|
|
408
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
409
|
-
<div className="!space-y-4">
|
|
410
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
411
|
-
Semantic Colors
|
|
412
|
-
</h3>
|
|
413
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
414
|
-
<div className="flex items-center gap-4">
|
|
415
|
-
<ImportFolderIcon className="text-fm-icon-positive h-6 w-6" />
|
|
416
|
-
<div>
|
|
417
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
418
|
-
Success
|
|
419
|
-
</div>
|
|
420
|
-
<div className="text-fm-tertiary text-xs">
|
|
421
|
-
text-fm-icon-positive
|
|
422
|
-
</div>
|
|
423
|
-
</div>
|
|
424
|
-
</div>
|
|
425
|
-
<div className="flex items-center gap-4">
|
|
426
|
-
<ImportFolderIcon className="text-fm-icon-warning h-6 w-6" />
|
|
427
|
-
<div>
|
|
428
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
429
|
-
Warning
|
|
430
|
-
</div>
|
|
431
|
-
<div className="text-fm-tertiary text-xs">
|
|
432
|
-
text-fm-icon-warning
|
|
433
|
-
</div>
|
|
434
|
-
</div>
|
|
435
|
-
</div>
|
|
436
|
-
<div className="flex items-center gap-4">
|
|
437
|
-
<ImportFolderIcon className="text-fm-icon-info h-6 w-6" />
|
|
438
|
-
<div>
|
|
439
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
440
|
-
Primary
|
|
441
|
-
</div>
|
|
442
|
-
<div className="text-fm-tertiary text-xs">
|
|
443
|
-
text-fm-icon-info
|
|
444
|
-
</div>
|
|
445
|
-
</div>
|
|
446
|
-
</div>
|
|
447
|
-
<div className="flex items-center gap-4">
|
|
448
|
-
<ImportFolderIcon className="text-fm-placeholder h-6 w-6" />
|
|
449
|
-
<div>
|
|
450
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
451
|
-
Muted
|
|
452
|
-
</div>
|
|
453
|
-
<div className="text-fm-tertiary text-xs">
|
|
454
|
-
text-fm-placeholder
|
|
455
|
-
</div>
|
|
456
|
-
</div>
|
|
457
|
-
</div>
|
|
458
|
-
</div>
|
|
459
|
-
</div>
|
|
460
|
-
|
|
461
|
-
<div className="!space-y-4">
|
|
462
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
463
|
-
Custom Colors
|
|
464
|
-
</h3>
|
|
465
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
466
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
467
|
-
{`// Using Tailwind classes with
|
|
468
|
-
<ImportFolderIcon className="h-6 w-6 text-green-400 " />
|
|
469
|
-
<ImportFolderIcon className="h-6 w-6 text-yellow-500 " />
|
|
470
|
-
|
|
471
|
-
// Using CSS custom properties
|
|
472
|
-
<ImportFolderIcon
|
|
473
|
-
className="h-6 w-6 "
|
|
474
|
-
style={{ color: 'var(--color-success)' }}
|
|
475
|
-
/>
|
|
476
|
-
|
|
477
|
-
// Direct stroke prop
|
|
478
|
-
<ImportFolderIcon
|
|
479
|
-
width={24}
|
|
480
|
-
height={24}
|
|
481
|
-
stroke="#10b981"
|
|
482
|
-
/>`}
|
|
483
|
-
</pre>
|
|
484
|
-
</div>
|
|
485
|
-
</div>
|
|
486
|
-
</div>
|
|
487
|
-
</div>
|
|
488
|
-
|
|
489
|
-
{/* Usage Examples */}
|
|
490
|
-
<div className="!space-y-8">
|
|
491
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
492
|
-
Usage Examples
|
|
493
|
-
</h2>
|
|
494
|
-
|
|
495
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
496
|
-
{/* File Import Area */}
|
|
497
|
-
<div className="!space-y-4">
|
|
498
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
499
|
-
File Import Area
|
|
500
|
-
</h3>
|
|
501
|
-
<div className="!space-y-4">
|
|
502
|
-
<div className="border-fm-divider-primary bg-fm-surface-secondary hover:border-fm-icon-positive/50 hover:bg-fm-icon-positive/10 relative rounded-lg border-2 border-dashed p-8 text-center transition-colors">
|
|
503
|
-
<ImportFolderIcon className="text-fm-placeholder !mx-auto h-12 w-12" />
|
|
504
|
-
<h4 className="text-fm-icon-active! mt-4 text-lg font-medium">
|
|
505
|
-
Import Folder
|
|
506
|
-
</h4>
|
|
507
|
-
<p className="text-fm-tertiary! mt-2 text-sm">
|
|
508
|
-
Drag and drop folders here, or click to browse
|
|
509
|
-
</p>
|
|
510
|
-
<button className="bg-fm-icon-positive/20 text-fm-icon-positive hover:bg-fm-icon-positive/30 mt-4 rounded-lg px-4 py-2 transition-colors">
|
|
511
|
-
Browse Folders
|
|
512
|
-
</button>
|
|
513
|
-
</div>
|
|
514
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
515
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
516
|
-
{`<div className="relative border-2 border-dashed border-white/20 bg-white/5 p-8 text-center rounded-lg hover:border-green-400/50 hover:bg-green-500/10 transition-colors">
|
|
517
|
-
<ImportFolderIcon className="mx-auto h-12 w-12 text-white/40 " />
|
|
518
|
-
<h4 className="mt-4 text-lg font-medium text-white">Import Folder</h4>
|
|
519
|
-
<p className="mt-2 text-sm text-white/60">
|
|
520
|
-
Drag and drop folders here, or click to browse
|
|
521
|
-
</p>
|
|
522
|
-
<button className="mt-4 bg-green-500/20 px-4 py-2 rounded-lg text-green-300 hover:bg-green-500/30 transition-colors">
|
|
523
|
-
Browse Folders
|
|
524
|
-
</button>
|
|
525
|
-
</div>`}
|
|
526
|
-
</pre>
|
|
527
|
-
</div>
|
|
528
|
-
</div>
|
|
529
|
-
</div>
|
|
530
|
-
|
|
531
|
-
{/* Import Status List */}
|
|
532
|
-
<div className="!space-y-4">
|
|
533
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
534
|
-
Import Status List
|
|
535
|
-
</h3>
|
|
536
|
-
<div className="!space-y-4">
|
|
537
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4">
|
|
538
|
-
{[
|
|
539
|
-
{ name: "Documents", status: "completed", count: 24 },
|
|
540
|
-
{ name: "Images", status: "processing", count: 56 },
|
|
541
|
-
{ name: "Videos", status: "pending", count: 12 },
|
|
542
|
-
].map((folder, index) => (
|
|
543
|
-
<div
|
|
544
|
-
key={index}
|
|
545
|
-
className="border-fm-divider-secondary bg-fm-surface-secondary hover:bg-fm-surface-secondary flex items-center gap-3 rounded border p-3 transition-colors"
|
|
546
|
-
>
|
|
547
|
-
<ImportFolderIcon
|
|
548
|
-
className={`h-5 w-5 ${
|
|
549
|
-
folder.status === "completed"
|
|
550
|
-
? "text-green-400"
|
|
551
|
-
: folder.status === "processing"
|
|
552
|
-
? "text-yellow-400"
|
|
553
|
-
: "text-gray-400"
|
|
554
|
-
}`}
|
|
555
|
-
/>
|
|
556
|
-
<div className="flex-1">
|
|
557
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
558
|
-
{folder.name}
|
|
559
|
-
</div>
|
|
560
|
-
<div className="text-fm-tertiary text-xs">
|
|
561
|
-
{folder.count} files
|
|
562
|
-
</div>
|
|
563
|
-
</div>
|
|
564
|
-
<div
|
|
565
|
-
className={`rounded px-2 py-1 text-xs ${
|
|
566
|
-
folder.status === "completed"
|
|
567
|
-
? "bg-green-500/20 text-green-300"
|
|
568
|
-
: folder.status === "processing"
|
|
569
|
-
? "bg-yellow-500/20 text-yellow-300"
|
|
570
|
-
: "bg-gray-500/20 text-gray-300"
|
|
571
|
-
}`}
|
|
572
|
-
>
|
|
573
|
-
{folder.status}
|
|
574
|
-
</div>
|
|
575
|
-
</div>
|
|
576
|
-
))}
|
|
577
|
-
</div>
|
|
578
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
579
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
580
|
-
{`// Import status item
|
|
581
|
-
<div className="flex items-center gap-3 border border-white/10 bg-white/5 p-3 rounded hover:bg-white/10 transition-colors">
|
|
582
|
-
<ImportFolderIcon className="h-5 w-5 text-green-400 " />
|
|
583
|
-
<div className="flex-1">
|
|
584
|
-
<div className="text-sm font-medium text-white">Documents</div>
|
|
585
|
-
<div className="text-xs text-white/60">24 files</div>
|
|
586
|
-
</div>
|
|
587
|
-
<div className="text-xs px-2 py-1 rounded bg-green-500/20 text-green-300">
|
|
588
|
-
completed
|
|
589
|
-
</div>
|
|
590
|
-
</div>`}
|
|
591
|
-
</pre>
|
|
592
|
-
</div>
|
|
593
|
-
</div>
|
|
594
|
-
</div>
|
|
595
|
-
|
|
596
|
-
{/* Button Integration */}
|
|
597
|
-
<div className="!space-y-4">
|
|
598
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
599
|
-
Button Integration
|
|
600
|
-
</h3>
|
|
601
|
-
<div className="!space-y-4">
|
|
602
|
-
<div className="flex flex-wrap gap-4">
|
|
603
|
-
<button className="border-fm-icon-positive/30 bg-fm-icon-positive/20 text-fm-icon-positive hover:bg-fm-icon-positive/30 flex items-center gap-2 rounded-lg border px-4 py-2 transition-colors">
|
|
604
|
-
<ImportFolderIcon className="h-4 w-4" />
|
|
605
|
-
Import Folder
|
|
606
|
-
</button>
|
|
607
|
-
<button className="border-fm-icon-warning/30 bg-fm-icon-warning/20 text-fm-icon-warning hover:bg-fm-icon-warning/30 flex items-center gap-2 rounded-lg border px-4 py-2 transition-colors">
|
|
608
|
-
<ImportFolderIcon className="h-4 w-4" />
|
|
609
|
-
Batch Import
|
|
610
|
-
</button>
|
|
611
|
-
<button className="border-fm-divider-primary bg-fm-surface-secondary text-fm-secondary hover:bg-fm-surface-secondary flex items-center gap-2 rounded-lg border px-4 py-2 transition-colors">
|
|
612
|
-
<ImportFolderIcon className="h-4 w-4" />
|
|
613
|
-
Browse Folders
|
|
614
|
-
</button>
|
|
615
|
-
</div>
|
|
616
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
617
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
618
|
-
{`// Primary import button
|
|
619
|
-
<button className="flex items-center gap-2 bg-green-500/20 border border-green-500/30 px-4 py-2 rounded-lg">
|
|
620
|
-
<ImportFolderIcon className="h-4 w-4 " />
|
|
621
|
-
Import Folder
|
|
622
|
-
</button>
|
|
623
|
-
|
|
624
|
-
// Secondary button
|
|
625
|
-
<button className="flex items-center gap-2 bg-white/5 border border-white/20 px-4 py-2 rounded-lg">
|
|
626
|
-
<ImportFolderIcon className="h-4 w-4 " />
|
|
627
|
-
Browse Folders
|
|
628
|
-
</button>`}
|
|
629
|
-
</pre>
|
|
630
|
-
</div>
|
|
631
|
-
</div>
|
|
632
|
-
</div>
|
|
633
|
-
|
|
634
|
-
{/* Sidebar Navigation */}
|
|
635
|
-
<div className="!space-y-4">
|
|
636
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
637
|
-
Sidebar Navigation
|
|
638
|
-
</h3>
|
|
639
|
-
<div className="!space-y-4">
|
|
640
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary max-w-xs rounded-lg border p-3">
|
|
641
|
-
{[
|
|
642
|
-
{ name: "All Files", icon: "📄", active: false },
|
|
643
|
-
{
|
|
644
|
-
name: "Import Folder",
|
|
645
|
-
icon: "ImportFolderIcon",
|
|
646
|
-
active: true,
|
|
647
|
-
},
|
|
648
|
-
{ name: "Recent", icon: "🕒", active: false },
|
|
649
|
-
{ name: "Shared", icon: "👥", active: false },
|
|
650
|
-
].map((item, index) => (
|
|
651
|
-
<div
|
|
652
|
-
key={index}
|
|
653
|
-
className={`flex cursor-pointer items-center gap-3 rounded p-2 transition-colors ${
|
|
654
|
-
item.active
|
|
655
|
-
? "bg-green-500/20 text-green-200"
|
|
656
|
-
: "text-white/70 hover:bg-white/10"
|
|
657
|
-
}`}
|
|
658
|
-
>
|
|
659
|
-
{item.icon === "ImportFolderIcon" ? (
|
|
660
|
-
<ImportFolderIcon
|
|
661
|
-
className={`h-4 w-4 ${
|
|
662
|
-
item.active
|
|
663
|
-
? "text-green-400"
|
|
664
|
-
: "text-white/50"
|
|
665
|
-
}`}
|
|
666
|
-
/>
|
|
667
|
-
) : (
|
|
668
|
-
<span className="text-sm">{item.icon}</span>
|
|
669
|
-
)}
|
|
670
|
-
<span className="flex-1 text-sm">{item.name}</span>
|
|
671
|
-
{item.active && (
|
|
672
|
-
<div className="bg-fm-icon-positive h-2 w-2 rounded-full"></div>
|
|
673
|
-
)}
|
|
674
|
-
</div>
|
|
675
|
-
))}
|
|
676
|
-
</div>
|
|
677
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
678
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
679
|
-
{`// Navigation item
|
|
680
|
-
<div className="flex items-center gap-3 p-2 rounded bg-green-500/20 text-green-200 cursor-pointer">
|
|
681
|
-
<ImportFolderIcon className="h-4 w-4 text-green-400 " />
|
|
682
|
-
<span className="flex-1 text-sm">Import Folder</span>
|
|
683
|
-
<div className="h-2 w-2 rounded-full bg-green-400"></div>
|
|
684
|
-
</div>`}
|
|
685
|
-
</pre>
|
|
686
|
-
</div>
|
|
687
|
-
</div>
|
|
688
|
-
</div>
|
|
689
|
-
</div>
|
|
690
|
-
</div>
|
|
691
|
-
|
|
692
|
-
{/* Interactive States */}
|
|
693
|
-
<div className="!space-y-8">
|
|
694
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
695
|
-
Interactive States & Animations
|
|
696
|
-
</h2>
|
|
697
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
698
|
-
<div className="!space-y-4">
|
|
699
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
700
|
-
Hover & Loading States
|
|
701
|
-
</h3>
|
|
702
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
703
|
-
<div className="flex items-center gap-4">
|
|
704
|
-
<ImportFolderIcon className="text-fm-tertiary hover:text-fm-icon-positive h-6 w-6 transition-colors" />
|
|
705
|
-
<div>
|
|
706
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
707
|
-
Color Change
|
|
708
|
-
</div>
|
|
709
|
-
<div className="text-fm-tertiary text-xs">
|
|
710
|
-
hover:text-fm-icon-positive
|
|
711
|
-
</div>
|
|
712
|
-
</div>
|
|
713
|
-
</div>
|
|
714
|
-
<div className="flex items-center gap-4">
|
|
715
|
-
<ImportFolderIcon className="text-fm-icon-active h-6 w-6 transition-transform hover:scale-110" />
|
|
716
|
-
<div>
|
|
717
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
718
|
-
Scale Effect
|
|
719
|
-
</div>
|
|
720
|
-
<div className="text-fm-tertiary text-xs">
|
|
721
|
-
hover:scale-110
|
|
722
|
-
</div>
|
|
723
|
-
</div>
|
|
724
|
-
</div>
|
|
725
|
-
<div className="flex items-center gap-4">
|
|
726
|
-
<ImportFolderIcon className="text-fm-icon-positive h-6 w-6 animate-pulse" />
|
|
727
|
-
<div>
|
|
728
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
729
|
-
Processing
|
|
730
|
-
</div>
|
|
731
|
-
<div className="text-fm-tertiary text-xs">
|
|
732
|
-
animate-pulse
|
|
733
|
-
</div>
|
|
734
|
-
</div>
|
|
735
|
-
</div>
|
|
736
|
-
<div className="flex items-center gap-4">
|
|
737
|
-
<div
|
|
738
|
-
className="rounded p-2 focus:ring-2 focus:ring-green-500 focus:outline-none"
|
|
739
|
-
tabIndex={0}
|
|
740
|
-
>
|
|
741
|
-
<ImportFolderIcon className="text-fm-icon-active h-6 w-6" />
|
|
742
|
-
</div>
|
|
743
|
-
<div>
|
|
744
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
745
|
-
Focus Ring
|
|
746
|
-
</div>
|
|
747
|
-
<div className="text-fm-tertiary text-xs">
|
|
748
|
-
focus:ring-2
|
|
749
|
-
</div>
|
|
750
|
-
</div>
|
|
751
|
-
</div>
|
|
752
|
-
</div>
|
|
753
|
-
</div>
|
|
754
|
-
|
|
755
|
-
<div className="!space-y-4">
|
|
756
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
757
|
-
Animation Examples
|
|
758
|
-
</h3>
|
|
759
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
760
|
-
<pre className="text-fm-icon-info! overflow-x-auto text-sm">
|
|
761
|
-
{`// Hover effects
|
|
762
|
-
<ImportFolderIcon className="h-6 w-6 text-white/60 hover:text-green-400 transition-colors " />
|
|
763
|
-
|
|
764
|
-
// Scale on hover
|
|
765
|
-
<ImportFolderIcon className="h-6 w-6 text-white hover:scale-110 transition-transform " />
|
|
766
|
-
|
|
767
|
-
// Processing animation
|
|
768
|
-
<ImportFolderIcon className="h-6 w-6 text-green-400 animate-pulse " />
|
|
769
|
-
|
|
770
|
-
// Focus states for accessibility
|
|
771
|
-
<div className="p-2 rounded focus:ring-2 focus:ring-green-500 focus:outline-none" tabIndex={0}>
|
|
772
|
-
<ImportFolderIcon className="h-6 w-6 text-white " />
|
|
773
|
-
</div>
|
|
774
|
-
|
|
775
|
-
// Pulse animation keyframes
|
|
776
|
-
@keyframes pulse {
|
|
777
|
-
0%, 100% { opacity: 1; }
|
|
778
|
-
50% { opacity: 0.5; }
|
|
779
|
-
}
|
|
780
|
-
|
|
781
|
-
.animate-pulse {
|
|
782
|
-
animation: pulse 2s ease-in-out infinite;
|
|
783
|
-
}`}
|
|
784
|
-
</pre>
|
|
785
|
-
</div>
|
|
786
|
-
</div>
|
|
787
|
-
</div>
|
|
788
|
-
</div>
|
|
789
|
-
|
|
790
|
-
{/* Accessibility */}
|
|
791
|
-
<div className="!space-y-8">
|
|
792
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
793
|
-
Accessibility Features
|
|
794
|
-
</h2>
|
|
795
|
-
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
796
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
797
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
798
|
-
✅ Built-in Features
|
|
799
|
-
</h3>
|
|
800
|
-
<ul className="text-fm-secondary! !space-y-2 text-sm">
|
|
801
|
-
<li className="text-fm-secondary!">
|
|
802
|
-
Uses Radix UI AccessibleIcon wrapper
|
|
803
|
-
</li>
|
|
804
|
-
<li className="text-fm-secondary!">
|
|
805
|
-
Provides screen reader label "Import Folder icon"
|
|
806
|
-
</li>
|
|
807
|
-
<li className="text-fm-secondary!">
|
|
808
|
-
Supports keyboard navigation when interactive
|
|
809
|
-
</li>
|
|
810
|
-
<li className="text-fm-secondary!">
|
|
811
|
-
Maintains proper color contrast ratios
|
|
812
|
-
</li>
|
|
813
|
-
<li className="text-fm-secondary!">
|
|
814
|
-
Scales with user's font size preferences
|
|
815
|
-
</li>
|
|
816
|
-
</ul>
|
|
817
|
-
</div>
|
|
818
|
-
|
|
819
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
820
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
821
|
-
💡 Best Practices
|
|
822
|
-
</h3>
|
|
823
|
-
<ul className="text-fm-secondary !space-y-2 text-sm">
|
|
824
|
-
<li className="text-fm-secondary!">
|
|
825
|
-
Always provide descriptive button labels
|
|
826
|
-
</li>
|
|
827
|
-
<li className="text-fm-secondary!">
|
|
828
|
-
Use consistent colors for import states
|
|
829
|
-
</li>
|
|
830
|
-
<li className="text-fm-secondary!">
|
|
831
|
-
Include progress indicators for long operations
|
|
832
|
-
</li>
|
|
833
|
-
<li className="text-fm-secondary!">
|
|
834
|
-
Add focus states for interactive elements
|
|
835
|
-
</li>
|
|
836
|
-
<li className="text-fm-secondary!">
|
|
837
|
-
Consider file type restrictions and feedback
|
|
838
|
-
</li>
|
|
839
|
-
</ul>
|
|
840
|
-
</div>
|
|
841
|
-
</div>
|
|
842
|
-
|
|
843
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
844
|
-
<h3 className="text-fm-secondary-600! mb-4 text-lg font-semibold">
|
|
845
|
-
File Import Accessibility
|
|
846
|
-
</h3>
|
|
847
|
-
<div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
|
848
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
849
|
-
<pre className="text-fm-icon-info! overflow-x-auto text-sm">
|
|
850
|
-
{`// Import button with proper ARIA
|
|
851
|
-
<button
|
|
852
|
-
aria-label="Import folder - browse and select folders to import"
|
|
853
|
-
className="flex items-center gap-2 p-3 rounded-lg focus:ring-2 focus:ring-green-500"
|
|
854
|
-
onClick={handleImport}
|
|
855
|
-
>
|
|
856
|
-
<ImportFolderIcon className="h-5 w-5 text-green-400 " />
|
|
857
|
-
<span>Import Folder</span>
|
|
858
|
-
</button>
|
|
859
|
-
|
|
860
|
-
// Drag-drop area with accessibility
|
|
861
|
-
<div
|
|
862
|
-
role="button"
|
|
863
|
-
aria-label="Drop zone for folders - drag folders here or click to browse"
|
|
864
|
-
tabIndex={0}
|
|
865
|
-
onKeyDown={(e) => {
|
|
866
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
|
867
|
-
handleFolderSelect()
|
|
868
|
-
}
|
|
869
|
-
}}
|
|
870
|
-
className="border-2 border-dashed p-8 text-center rounded-lg focus:ring-2 focus:ring-green-500"
|
|
871
|
-
>
|
|
872
|
-
<ImportFolderIcon className="mx-auto h-12 w-12 text-white/40 " />
|
|
873
|
-
<p>Drop folders here or click to browse</p>
|
|
874
|
-
</div>`}
|
|
875
|
-
</pre>
|
|
876
|
-
</div>
|
|
877
|
-
<div className="!space-y-4">
|
|
878
|
-
<p className="text-fm-secondary! text-sm">
|
|
879
|
-
When using ImportFolderIcon for file operations, provide
|
|
880
|
-
clear instructions and feedback for all user
|
|
881
|
-
interactions, including keyboard-only navigation.
|
|
882
|
-
</p>
|
|
883
|
-
<div className="border-fm-icon-positive/20 bg-fm-icon-positive/10 rounded-lg border p-4">
|
|
884
|
-
<div className="text-fm-icon-positive flex items-center gap-2 text-sm">
|
|
885
|
-
<ImportFolderIcon className="h-4 w-4" />
|
|
886
|
-
<span>
|
|
887
|
-
Screen readers get context about import
|
|
888
|
-
functionality
|
|
889
|
-
</span>
|
|
890
|
-
</div>
|
|
891
|
-
</div>
|
|
892
|
-
</div>
|
|
893
|
-
</div>
|
|
894
|
-
</div>
|
|
895
|
-
</div>
|
|
896
|
-
|
|
897
|
-
{/* Related Icons */}
|
|
898
|
-
<div className="!space-y-8">
|
|
899
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
900
|
-
Related Icons
|
|
901
|
-
</h2>
|
|
902
|
-
<div className="grid grid-cols-2 gap-6 md:grid-cols-4">
|
|
903
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
904
|
-
<div className="bg-fm-icon-info/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
905
|
-
<span className="text-2xl">📁</span>
|
|
906
|
-
</div>
|
|
907
|
-
<div>
|
|
908
|
-
<div className="text-fm-icon-active font-medium">
|
|
909
|
-
FolderIcon
|
|
910
|
-
</div>
|
|
911
|
-
<div className="text-fm-tertiary text-xs">
|
|
912
|
-
File organization
|
|
913
|
-
</div>
|
|
914
|
-
</div>
|
|
915
|
-
</div>
|
|
916
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
917
|
-
<div className="bg-fm-icon-warning/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
918
|
-
<span className="text-2xl">📤</span>
|
|
919
|
-
</div>
|
|
920
|
-
<div>
|
|
921
|
-
<div className="text-fm-icon-active font-medium">
|
|
922
|
-
ExportIcon
|
|
923
|
-
</div>
|
|
924
|
-
<div className="text-fm-tertiary text-xs">
|
|
925
|
-
Data export
|
|
926
|
-
</div>
|
|
927
|
-
</div>
|
|
928
|
-
</div>
|
|
929
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
930
|
-
<div className="bg-fm-icon-positive/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
931
|
-
<span className="text-2xl">⬆️</span>
|
|
932
|
-
</div>
|
|
933
|
-
<div>
|
|
934
|
-
<div className="text-fm-icon-active font-medium">
|
|
935
|
-
UploadIcon
|
|
936
|
-
</div>
|
|
937
|
-
<div className="text-fm-tertiary text-xs">
|
|
938
|
-
File uploads
|
|
939
|
-
</div>
|
|
940
|
-
</div>
|
|
941
|
-
</div>
|
|
942
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
943
|
-
<div className="bg-fm-secondary-500/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
944
|
-
<span className="text-2xl">📊</span>
|
|
945
|
-
</div>
|
|
946
|
-
<div>
|
|
947
|
-
<div className="text-fm-icon-active font-medium">
|
|
948
|
-
DataIcon
|
|
949
|
-
</div>
|
|
950
|
-
<div className="text-fm-tertiary text-xs">
|
|
951
|
-
Data management
|
|
952
|
-
</div>
|
|
953
|
-
</div>
|
|
954
|
-
</div>
|
|
955
|
-
</div>
|
|
956
|
-
</div>
|
|
957
|
-
</div>
|
|
958
|
-
|
|
959
|
-
{/* Footer */}
|
|
960
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary border-t backdrop-blur-xl">
|
|
961
|
-
<div className="!mx-auto max-w-7xl px-6 py-8">
|
|
962
|
-
<div className="!space-y-4 text-center">
|
|
963
|
-
<p className="text-fm-tertiary!">
|
|
964
|
-
ImportFolderIcon is part of the Aural UI icon library, built
|
|
965
|
-
for file management and data import operations.
|
|
966
|
-
</p>
|
|
967
|
-
<p className="text-fm-placeholder! text-sm">
|
|
968
|
-
All icons use Radix UI's AccessibleIcon for screen reader
|
|
969
|
-
compatibility and follow WCAG guidelines for file
|
|
970
|
-
operations.
|
|
971
|
-
</p>
|
|
972
|
-
</div>
|
|
973
|
-
</div>
|
|
974
|
-
</div>
|
|
975
|
-
</div>
|
|
976
|
-
</>
|
|
55
|
+
}`,
|
|
56
|
+
livePreview: (
|
|
57
|
+
<button className="flex items-center gap-2">
|
|
58
|
+
<ImportFolderIcon className="text-fm-icon-active h-6 w-6" />
|
|
59
|
+
</button>
|
|
60
|
+
),
|
|
61
|
+
}}
|
|
62
|
+
relatedIcons={[
|
|
63
|
+
{
|
|
64
|
+
name: "ImportLeftArrowFolderIcon",
|
|
65
|
+
description: "Folder import with left arrow",
|
|
66
|
+
icon: ImportLeftArrowFolderIcon,
|
|
67
|
+
accentToken: "info",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: "DownloadIcon",
|
|
71
|
+
description: "Download / save to device icon",
|
|
72
|
+
icon: DownloadIcon,
|
|
73
|
+
accentToken: "positive",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: "UploadIcon",
|
|
77
|
+
description: "Upload / send to cloud icon",
|
|
78
|
+
icon: UploadIcon,
|
|
79
|
+
accentToken: "warning",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "FileTextIcon",
|
|
83
|
+
description: "File / document text icon",
|
|
84
|
+
icon: FileTextIcon,
|
|
85
|
+
accentToken: "negative",
|
|
86
|
+
},
|
|
87
|
+
]}
|
|
88
|
+
/>
|
|
977
89
|
),
|
|
978
90
|
},
|
|
979
91
|
},
|
|
980
92
|
tags: ["autodocs"],
|
|
981
93
|
argTypes: {
|
|
982
|
-
|
|
983
|
-
control:
|
|
984
|
-
description: "
|
|
94
|
+
className: {
|
|
95
|
+
control: "text",
|
|
96
|
+
description: "CSS classes including color token",
|
|
985
97
|
},
|
|
986
98
|
withAccessibility: {
|
|
987
99
|
control: "boolean",
|
|
988
|
-
description: "
|
|
989
|
-
},
|
|
990
|
-
height: {
|
|
991
|
-
control: { type: "range", min: 8, max: 96, step: 2 },
|
|
992
|
-
description: "Height of the icon in pixels",
|
|
993
|
-
},
|
|
994
|
-
stroke: {
|
|
995
|
-
control: "color",
|
|
996
|
-
description: "Stroke color of the folder outline",
|
|
997
|
-
},
|
|
998
|
-
strokeWidth: {
|
|
999
|
-
control: { type: "range", min: 0.5, max: 4, step: 0.5 },
|
|
1000
|
-
description: "Stroke width of the outline",
|
|
1001
|
-
},
|
|
1002
|
-
fill: {
|
|
1003
|
-
control: "color",
|
|
1004
|
-
description: "Fill color of the icon",
|
|
1005
|
-
},
|
|
1006
|
-
className: {
|
|
1007
|
-
control: "text",
|
|
1008
|
-
description: "CSS classes for styling (use for overrides)",
|
|
100
|
+
description: "Wrap with accessibility label",
|
|
1009
101
|
},
|
|
1010
102
|
},
|
|
1011
103
|
}
|
|
@@ -1013,288 +105,71 @@ function FileImport() {
|
|
|
1013
105
|
export default meta
|
|
1014
106
|
type Story = StoryObj<typeof ImportFolderIcon>
|
|
1015
107
|
|
|
1016
|
-
// Story parameters for consistent dark theme
|
|
1017
|
-
const storyParameters = {
|
|
1018
|
-
backgrounds: {
|
|
1019
|
-
default: "dark",
|
|
1020
|
-
values: [
|
|
1021
|
-
{ name: "dark", value: "var(--color-fm-surface-primary)" },
|
|
1022
|
-
{ name: "darker", value: "var(--color-fm-neutral-0)" },
|
|
1023
|
-
],
|
|
1024
|
-
},
|
|
1025
|
-
}
|
|
1026
|
-
|
|
1027
108
|
export const Default: Story = {
|
|
1028
109
|
args: {
|
|
1029
|
-
className: "h-6 w-6 text-fm-icon-
|
|
110
|
+
className: "h-6 w-6 text-fm-icon-active",
|
|
1030
111
|
withAccessibility: true,
|
|
1031
112
|
},
|
|
1032
|
-
parameters: storyParameters,
|
|
1033
113
|
render: (args) => (
|
|
1034
|
-
<
|
|
114
|
+
<IconDefaultCanvas>
|
|
1035
115
|
<ImportFolderIcon {...args} />
|
|
1036
|
-
</
|
|
116
|
+
</IconDefaultCanvas>
|
|
1037
117
|
),
|
|
1038
118
|
}
|
|
1039
119
|
|
|
1040
120
|
export const SizeVariations: Story = {
|
|
1041
|
-
|
|
1042
|
-
...storyParameters,
|
|
1043
|
-
docs: {
|
|
1044
|
-
description: {
|
|
1045
|
-
story:
|
|
1046
|
-
"ImportFolderIcon in different sizes, from small UI elements to large import areas.",
|
|
1047
|
-
},
|
|
1048
|
-
},
|
|
1049
|
-
},
|
|
1050
|
-
render: () => (
|
|
1051
|
-
<div className="from-fm-surface-primary to-fm-surface-secondary flex h-64 min-h-dvh items-center justify-center gap-8 rounded-lg bg-linear-to-br p-8">
|
|
1052
|
-
<div className="text-center">
|
|
1053
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-3 w-3" />
|
|
1054
|
-
<span className="text-fm-tertiary text-xs">12px</span>
|
|
1055
|
-
</div>
|
|
1056
|
-
<div className="text-center">
|
|
1057
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-4 w-4" />
|
|
1058
|
-
<span className="text-fm-tertiary text-xs">16px</span>
|
|
1059
|
-
</div>
|
|
1060
|
-
<div className="text-center">
|
|
1061
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-5 w-5" />
|
|
1062
|
-
<span className="text-fm-tertiary text-xs">20px</span>
|
|
1063
|
-
</div>
|
|
1064
|
-
<div className="text-center">
|
|
1065
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-6 w-6" />
|
|
1066
|
-
<span className="text-fm-tertiary text-xs">24px</span>
|
|
1067
|
-
</div>
|
|
1068
|
-
<div className="text-center">
|
|
1069
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-8 w-8" />
|
|
1070
|
-
<span className="text-fm-tertiary text-xs">32px</span>
|
|
1071
|
-
</div>
|
|
1072
|
-
<div className="text-center">
|
|
1073
|
-
<ImportFolderIcon className="text-fm-icon-positive !mx-auto mb-2 h-12 w-12" />
|
|
1074
|
-
<span className="text-fm-tertiary text-xs">48px</span>
|
|
1075
|
-
</div>
|
|
1076
|
-
</div>
|
|
1077
|
-
),
|
|
121
|
+
render: () => <IconSizeVariations icon={ImportFolderIcon} />,
|
|
1078
122
|
}
|
|
1079
123
|
|
|
1080
124
|
export const ColorVariations: Story = {
|
|
1081
|
-
|
|
1082
|
-
...storyParameters,
|
|
1083
|
-
docs: {
|
|
1084
|
-
description: {
|
|
1085
|
-
story:
|
|
1086
|
-
"ImportFolderIcon in different colors for various import states and contexts.",
|
|
1087
|
-
},
|
|
1088
|
-
},
|
|
1089
|
-
},
|
|
1090
|
-
render: () => (
|
|
1091
|
-
<div className="from-fm-surface-primary to-fm-surface-secondary grid min-h-dvh grid-cols-2 items-center justify-center gap-6 rounded-lg bg-linear-to-br p-8 md:grid-cols-4">
|
|
1092
|
-
<div className="text-center">
|
|
1093
|
-
<div className="border-fm-icon-positive/30 bg-fm-icon-positive/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1094
|
-
<ImportFolderIcon className="text-fm-icon-positive h-8 w-8" />
|
|
1095
|
-
</div>
|
|
1096
|
-
<div className="text-fm-icon-active text-sm font-medium">Success</div>
|
|
1097
|
-
<div className="text-fm-icon-positive text-xs">
|
|
1098
|
-
text-fm-icon-positive
|
|
1099
|
-
</div>
|
|
1100
|
-
</div>
|
|
1101
|
-
<div className="text-center">
|
|
1102
|
-
<div className="border-fm-icon-warning/30 bg-fm-icon-warning/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1103
|
-
<ImportFolderIcon className="text-fm-icon-warning h-8 w-8" />
|
|
1104
|
-
</div>
|
|
1105
|
-
<div className="text-fm-icon-active text-sm font-medium">Warning</div>
|
|
1106
|
-
<div className="text-fm-icon-warning text-xs">text-fm-icon-warning</div>
|
|
1107
|
-
</div>
|
|
1108
|
-
<div className="text-center">
|
|
1109
|
-
<div className="border-fm-icon-info/30 bg-fm-icon-info/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1110
|
-
<ImportFolderIcon className="text-fm-icon-info h-8 w-8" />
|
|
1111
|
-
</div>
|
|
1112
|
-
<div className="text-fm-icon-active text-sm font-medium">Primary</div>
|
|
1113
|
-
<div className="text-fm-icon-info text-xs">text-fm-icon-info</div>
|
|
1114
|
-
</div>
|
|
1115
|
-
<div className="text-center">
|
|
1116
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1117
|
-
<ImportFolderIcon className="text-fm-placeholder h-8 w-8" />
|
|
1118
|
-
</div>
|
|
1119
|
-
<div className="text-fm-icon-active text-sm font-medium">Muted</div>
|
|
1120
|
-
<div className="text-fm-placeholder text-xs">text-fm-placeholder</div>
|
|
1121
|
-
</div>
|
|
1122
|
-
</div>
|
|
1123
|
-
),
|
|
125
|
+
render: () => <IconColorVariations icon={ImportFolderIcon} />,
|
|
1124
126
|
}
|
|
1125
127
|
|
|
1126
128
|
export const UsageExamples: Story = {
|
|
1127
|
-
parameters: {
|
|
1128
|
-
...storyParameters,
|
|
1129
|
-
docs: {
|
|
1130
|
-
description: {
|
|
1131
|
-
story:
|
|
1132
|
-
"Real-world usage examples showing ImportFolderIcon in different file import contexts.",
|
|
1133
|
-
},
|
|
1134
|
-
},
|
|
1135
|
-
},
|
|
1136
129
|
render: () => (
|
|
1137
|
-
<
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
</button>
|
|
130
|
+
<IconUsageCanvas>
|
|
131
|
+
<IconUsageSection title="Import Button">
|
|
132
|
+
<button className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center gap-2 rounded-xl border px-4 py-2">
|
|
133
|
+
<ImportFolderIcon className="text-fm-icon-active h-4 w-4" />
|
|
134
|
+
<span className="text-fm-primary font-fm-text text-sm">
|
|
135
|
+
Import files
|
|
136
|
+
</span>
|
|
137
|
+
</button>
|
|
138
|
+
</IconUsageSection>
|
|
139
|
+
|
|
140
|
+
<IconUsageSection title="Upload Drop Zone">
|
|
141
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex w-full max-w-sm flex-col items-center gap-3 rounded-xl border border-dashed px-4 py-6">
|
|
142
|
+
<ImportFolderIcon className="text-fm-icon-inactive h-10 w-10" />
|
|
143
|
+
<span className="text-fm-secondary font-fm-text text-sm">
|
|
144
|
+
Drop files here or click to import
|
|
145
|
+
</span>
|
|
1154
146
|
</div>
|
|
1155
|
-
</
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
{[
|
|
1164
|
-
{ name: "Documents", status: "completed", count: 24 },
|
|
1165
|
-
{ name: "Images", status: "processing", count: 56 },
|
|
1166
|
-
{ name: "Videos", status: "pending", count: 12 },
|
|
1167
|
-
].map((folder, index) => (
|
|
1168
|
-
<div
|
|
1169
|
-
key={index}
|
|
1170
|
-
className="border-fm-divider-secondary bg-fm-surface-secondary hover:bg-fm-surface-secondary flex items-center gap-3 rounded border p-3 transition-colors"
|
|
147
|
+
</IconUsageSection>
|
|
148
|
+
|
|
149
|
+
<IconUsageSection title="Toolbar Actions">
|
|
150
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center gap-2 rounded-xl border px-3 py-2">
|
|
151
|
+
{[ImportFolderIcon, DownloadIcon, UploadIcon].map((Icon, i) => (
|
|
152
|
+
<button
|
|
153
|
+
key={i}
|
|
154
|
+
className="flex h-8 w-8 items-center justify-center rounded-lg"
|
|
1171
155
|
>
|
|
1172
|
-
<
|
|
1173
|
-
|
|
1174
|
-
folder.status === "completed"
|
|
1175
|
-
? "text-green-400"
|
|
1176
|
-
: folder.status === "processing"
|
|
1177
|
-
? "text-yellow-400"
|
|
1178
|
-
: "text-gray-400"
|
|
1179
|
-
}`}
|
|
1180
|
-
/>
|
|
1181
|
-
<div className="flex-1">
|
|
1182
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
1183
|
-
{folder.name}
|
|
1184
|
-
</div>
|
|
1185
|
-
<div className="text-fm-tertiary text-xs">
|
|
1186
|
-
{folder.count} files
|
|
1187
|
-
</div>
|
|
1188
|
-
</div>
|
|
1189
|
-
<div
|
|
1190
|
-
className={`rounded px-2 py-1 text-xs ${
|
|
1191
|
-
folder.status === "completed"
|
|
1192
|
-
? "bg-green-500/20 text-green-300"
|
|
1193
|
-
: folder.status === "processing"
|
|
1194
|
-
? "bg-yellow-500/20 text-yellow-300"
|
|
1195
|
-
: "bg-gray-500/20 text-gray-300"
|
|
1196
|
-
}`}
|
|
1197
|
-
>
|
|
1198
|
-
{folder.status}
|
|
1199
|
-
</div>
|
|
1200
|
-
</div>
|
|
156
|
+
<Icon className="text-fm-icon-inactive h-4 w-4" />
|
|
157
|
+
</button>
|
|
1201
158
|
))}
|
|
1202
159
|
</div>
|
|
1203
|
-
</
|
|
1204
|
-
|
|
1205
|
-
{/* Button Integration */}
|
|
1206
|
-
<div className="!space-y-2">
|
|
1207
|
-
<h3 className="text-fm-icon-active text-sm font-medium">
|
|
1208
|
-
Button Integration
|
|
1209
|
-
</h3>
|
|
1210
|
-
<div className="flex flex-wrap gap-4">
|
|
1211
|
-
<button className="border-fm-icon-positive/30 bg-fm-icon-positive/20 text-fm-icon-positive hover:bg-fm-icon-positive/30 flex items-center gap-2 rounded-lg border px-4 py-2 transition-colors">
|
|
1212
|
-
<ImportFolderIcon className="h-4 w-4" />
|
|
1213
|
-
Import Folder
|
|
1214
|
-
</button>
|
|
1215
|
-
<button className="border-fm-icon-warning/30 bg-fm-icon-warning/20 text-fm-icon-warning hover:bg-fm-icon-warning/30 flex items-center gap-2 rounded-lg border px-4 py-2 transition-colors">
|
|
1216
|
-
<ImportFolderIcon className="h-4 w-4" />
|
|
1217
|
-
Batch Import
|
|
1218
|
-
</button>
|
|
1219
|
-
<button className="border-fm-divider-primary bg-fm-surface-secondary text-fm-secondary hover:bg-fm-surface-secondary flex items-center gap-2 rounded-lg border px-4 py-2 transition-colors">
|
|
1220
|
-
<ImportFolderIcon className="h-4 w-4" />
|
|
1221
|
-
Browse Folders
|
|
1222
|
-
</button>
|
|
1223
|
-
</div>
|
|
1224
|
-
</div>
|
|
1225
|
-
</div>
|
|
1226
|
-
),
|
|
1227
|
-
}
|
|
1228
|
-
|
|
1229
|
-
export const InteractiveStates: Story = {
|
|
1230
|
-
parameters: {
|
|
1231
|
-
...storyParameters,
|
|
1232
|
-
docs: {
|
|
1233
|
-
description: {
|
|
1234
|
-
story:
|
|
1235
|
-
"Interactive states showing hover effects, loading animations, and focus states for the import folder icon.",
|
|
1236
|
-
},
|
|
1237
|
-
},
|
|
1238
|
-
},
|
|
1239
|
-
render: () => (
|
|
1240
|
-
<div className="from-fm-surface-primary to-fm-surface-secondary min-h-dvh !space-y-8 rounded-lg bg-linear-to-br p-8">
|
|
1241
|
-
<div className="!space-y-4">
|
|
1242
|
-
<h3 className="text-fm-secondary text-sm font-medium">Hover Effects</h3>
|
|
1243
|
-
<div className="flex gap-8">
|
|
1244
|
-
<div className="flex flex-col items-center gap-2">
|
|
1245
|
-
<ImportFolderIcon className="text-fm-tertiary hover:text-fm-icon-positive h-8 w-8 transition-colors" />
|
|
1246
|
-
<span className="text-fm-tertiary text-xs">Color Change</span>
|
|
1247
|
-
</div>
|
|
1248
|
-
<div className="flex flex-col items-center gap-2">
|
|
1249
|
-
<ImportFolderIcon className="text-fm-icon-active h-8 w-8 transition-transform hover:scale-110" />
|
|
1250
|
-
<span className="text-fm-tertiary text-xs">Scale Up</span>
|
|
1251
|
-
</div>
|
|
1252
|
-
<div className="flex flex-col items-center gap-2">
|
|
1253
|
-
<ImportFolderIcon className="text-fm-icon-positive h-8 w-8 animate-pulse" />
|
|
1254
|
-
<span className="text-fm-tertiary text-xs">Processing</span>
|
|
1255
|
-
</div>
|
|
1256
|
-
</div>
|
|
1257
|
-
</div>
|
|
1258
|
-
|
|
1259
|
-
<div className="!space-y-4">
|
|
1260
|
-
<h3 className="text-fm-secondary text-sm font-medium">Focus States</h3>
|
|
1261
|
-
<div className="flex gap-8">
|
|
1262
|
-
<div className="flex flex-col items-center gap-2">
|
|
1263
|
-
<div
|
|
1264
|
-
className="rounded p-2 focus:ring-2 focus:ring-green-500 focus:outline-none"
|
|
1265
|
-
tabIndex={0}
|
|
1266
|
-
>
|
|
1267
|
-
<ImportFolderIcon className="text-fm-icon-active h-8 w-8" />
|
|
1268
|
-
</div>
|
|
1269
|
-
<span className="text-fm-tertiary text-xs">Focus Ring</span>
|
|
1270
|
-
</div>
|
|
1271
|
-
</div>
|
|
1272
|
-
</div>
|
|
1273
|
-
</div>
|
|
160
|
+
</IconUsageSection>
|
|
161
|
+
</IconUsageCanvas>
|
|
1274
162
|
),
|
|
1275
163
|
}
|
|
1276
164
|
|
|
1277
165
|
export const Playground: Story = {
|
|
1278
|
-
parameters: {
|
|
1279
|
-
...storyParameters,
|
|
1280
|
-
docs: {
|
|
1281
|
-
description: {
|
|
1282
|
-
story:
|
|
1283
|
-
"Interactive playground to experiment with different ImportFolderIcon configurations.",
|
|
1284
|
-
},
|
|
1285
|
-
},
|
|
1286
|
-
},
|
|
1287
166
|
args: {
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
className: "text-fm-icon-positive ",
|
|
1291
|
-
strokeWidth: 1,
|
|
167
|
+
className: "h-8 w-8 text-fm-icon-active",
|
|
168
|
+
withAccessibility: true,
|
|
1292
169
|
},
|
|
1293
170
|
render: (args) => (
|
|
1294
|
-
<
|
|
1295
|
-
<
|
|
1296
|
-
|
|
1297
|
-
</div>
|
|
1298
|
-
</div>
|
|
171
|
+
<IconPlaygroundCanvas>
|
|
172
|
+
<ImportFolderIcon {...args} />
|
|
173
|
+
</IconPlaygroundCanvas>
|
|
1299
174
|
),
|
|
1300
175
|
}
|