aural-ui 3.0.7 → 4.0.1
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 +271 -242
- package/dist/components/avatar/Avatar.stories.tsx +84 -70
- package/dist/components/button/Button.stories.tsx +7 -7
- package/dist/components/button/index.tsx +7 -7
- package/dist/components/card/Card.stories.tsx +3 -3
- package/dist/components/char-count/CharCount.stories.tsx +9 -9
- package/dist/components/circular-loader/CircularLoader.stories.tsx +109 -93
- package/dist/components/collapsible/Collapsible.stories.tsx +1 -1
- package/dist/components/command/Command.stories.tsx +52 -38
- package/dist/components/dialog/Dialog.stories.tsx +89 -84
- package/dist/components/divider/Divider.stories.tsx +86 -60
- package/dist/components/dot-loader/DotLoader.stories.tsx +12 -12
- package/dist/components/drawer/Drawer.stories.tsx +74 -44
- package/dist/components/drawer/index.tsx +3 -3
- package/dist/components/dropdown/Dropdown.stories.tsx +42 -32
- package/dist/components/helper-text/HelperText.stories.tsx +2 -2
- package/dist/components/hover-card/HoverCard.stories.tsx +211 -178
- package/dist/components/input/Input.stories.tsx +2 -2
- package/dist/components/label/Label.stories.tsx +10 -10
- package/dist/components/list/List.stories.tsx +58 -44
- package/dist/components/marquee/Marquee.stories.tsx +131 -113
- package/dist/components/otp-inputs/OtpInputs.stories.tsx +47 -35
- package/dist/components/overlay/Overlay.stories.tsx +98 -92
- package/dist/components/overlay/index.tsx +4 -4
- package/dist/components/popover/Popover.stories.tsx +132 -106
- package/dist/components/radio/Radio.stories.tsx +2 -2
- package/dist/components/resizable/Resizable.stories.tsx +186 -138
- package/dist/components/scroll-area/ScrollArea.stories.tsx +174 -120
- package/dist/components/search/Search.stories.tsx +81 -59
- package/dist/components/select/Select.stories.tsx +3 -1
- package/dist/components/sheet/Sheet.stories.tsx +68 -54
- package/dist/components/slider/Slider.stories.tsx +71 -47
- package/dist/components/stepper/Stepper.stories.tsx +16 -16
- package/dist/components/switch/Switch.stories.tsx +12 -12
- package/dist/components/table/Table.stories.tsx +8 -6
- package/dist/components/tabs/Tabs.stories.tsx +324 -268
- package/dist/components/textarea/TextArea.stories.tsx +1 -1
- package/dist/components/thumbnail-tags/ThumbnailTags.stories.tsx +16 -10
- package/dist/components/toast/Toast.stories.tsx +51 -45
- package/dist/components/toggle/Toggle.stories.tsx +111 -89
- package/dist/components/tooltip/Tooltip.stories.tsx +160 -144
- package/dist/icons/Icons.stories.tsx +2 -2
- package/dist/icons/ai-avatar-icon/AiAvatarIcon.stories.tsx +287 -237
- package/dist/icons/alert-icon/AlertIcon.stories.tsx +290 -248
- package/dist/icons/all-icons.tsx +97 -81
- package/dist/icons/angle-down-icon/AngleDownIcon.stories.tsx +312 -270
- package/dist/icons/apple-logo-icon/AppleLogoIcon.stories.tsx +294 -244
- package/dist/icons/arrow-box-left-icon/ArrowBoxLeftIcon.stories.tsx +309 -279
- package/dist/icons/arrow-corner-up-left-icon/ArrowCornerUpLeftIcon.stories.tsx +294 -258
- package/dist/icons/arrow-corner-up-right-icon/ArrowCornerUpRightIcon.stories.tsx +289 -255
- package/dist/icons/arrow-left-icon/ArrowLeftIcon.stories.tsx +288 -256
- package/dist/icons/arrow-right-icon/ArrowRightIcon.stories.tsx +322 -288
- package/dist/icons/arrow-right-up-icon/ArrowRightUpIcon.stories.tsx +340 -296
- package/dist/icons/art-board-icon/ArtBoardIcon.stories.tsx +197 -177
- package/dist/icons/audio-bar-icon/AudioBarIcon.stories.tsx +390 -328
- package/dist/icons/backward-ten-seconds-icon/BackwardTenSecondsIcon.stories.tsx +313 -277
- package/dist/icons/bubble-check-icon/BubbleCheckIcon.stories.tsx +367 -309
- package/dist/icons/bubble-crossed-icon/BubbleCrossedIcon.stories.tsx +356 -308
- package/dist/icons/bubble-sparkle-icon/BubbleSparkleIcon.stories.tsx +280 -234
- package/dist/icons/camera-icon/CameraIcon.stories.tsx +370 -326
- package/dist/icons/capital-a-letter-icon/CapitalALetterIcon.stories.tsx +300 -256
- package/dist/icons/chevron-double-left-icon/ChevronDoubleLeftIcon.stories.tsx +298 -262
- package/dist/icons/chevron-double-right-icon/ChevronDoubleRightIcon.stories.tsx +294 -260
- package/dist/icons/chevron-down-icon/ChevronDownIcon.stories.tsx +291 -259
- package/dist/icons/chevron-left-icon/ChevronLeftIcon.stories.tsx +286 -256
- package/dist/icons/chevron-right-icon/ChevronRightIcon.stories.tsx +282 -256
- package/dist/icons/chevron-up-icon/ChevronUpIcon.stories.tsx +292 -256
- package/dist/icons/circle-tick-icon/CircleTickIcon.stories.tsx +338 -290
- package/dist/icons/circular-play-icon/CircularPlayIcon.stories.tsx +167 -148
- package/dist/icons/coin-icon/CoinIcon.stories.tsx +342 -296
- package/dist/icons/coin-toons-icon/CoinToonsIcon.stories.tsx +342 -296
- package/dist/icons/column-wide-add-icon/ColumnWideAddIcon.stories.tsx +280 -238
- package/dist/icons/command-icon/CommandIcon.stories.tsx +328 -280
- package/dist/icons/copy-icon/CopyIcon.stories.tsx +294 -256
- package/dist/icons/cross-circle-icon/CrossCircleIcon.stories.tsx +285 -235
- package/dist/icons/cross-icon/CrossIcon.stories.tsx +308 -266
- package/dist/icons/download-icon/DownloadIcon.stories.tsx +271 -231
- package/dist/icons/edit-big-icon/EditBigIcon.stories.tsx +330 -278
- package/dist/icons/email-icon/EmailIcon.stories.tsx +303 -257
- package/dist/icons/expand-icon/ExpandIcon.stories.tsx +324 -286
- package/dist/icons/eye-close-icon/EyeCloseIcon.stories.tsx +317 -271
- package/dist/icons/eye-open-icon/EyeOpenIcon.stories.tsx +320 -272
- package/dist/icons/feature-shine-icon/FeatureShineIcon.stories.tsx +322 -280
- package/dist/icons/file-chart-icon/FileChartIcon.stories.tsx +315 -277
- package/dist/icons/file-text-icon/FileTextIcon.stories.tsx +199 -177
- package/dist/icons/filter-bar-row-icon/FilterBarRowIcon.stories.tsx +304 -264
- package/dist/icons/forward-ten-seconds-icon/ForwardTenSecondsIcon.stories.tsx +311 -277
- package/dist/icons/git-branch-icon/GitBranchIcon.stories.tsx +327 -287
- package/dist/icons/git-fork-icon/GitForkIcon.stories.tsx +314 -278
- package/dist/icons/globe-icon/GlobeIcon.stories.tsx +113 -98
- package/dist/icons/google-logo-icon/GoogleLogoIcon.stories.tsx +274 -226
- package/dist/icons/grip-vertical-icon/GripVerticalIcon.stories.tsx +349 -303
- package/dist/icons/head-icon/HeadIcon.stories.tsx +286 -246
- package/dist/icons/heart-icon/HeartIcon.stories.tsx +312 -268
- package/dist/icons/image-avatar-sparkle-icon/ImageAvatarSparkleIcon.stories.tsx +246 -210
- package/dist/icons/image-icon/ImageIcon.stories.tsx +330 -284
- package/dist/icons/import-folder-icon/ImportFolderIcon.stories.tsx +326 -282
- package/dist/icons/import-left-arrow-folder-icon/ImportLeftArrowFolderIcon.stories.tsx +330 -294
- package/dist/icons/indian-flag-icon/IndianFlagIcon.stories.tsx +288 -234
- package/dist/icons/instagram-icon/InstagramIcon.stories.tsx +386 -330
- package/dist/icons/layout-column-icon/LayoutColumnIcon.stories.tsx +305 -263
- package/dist/icons/layout-left-icon/LayoutLeftIcon.stories.tsx +295 -259
- package/dist/icons/layout-right-icon/LayoutRightIcon.stories.tsx +296 -256
- package/dist/icons/light-bulb-simple-icon/LightBulbSimpleIcon.stories.tsx +322 -282
- package/dist/icons/linked-in-icon/LinkedInIcon.stories.tsx +399 -359
- package/dist/icons/magic-book-icon/MagicBookIcon.stories.tsx +314 -272
- package/dist/icons/magic-edit-icon/MagicEditIcon.stories.tsx +238 -206
- package/dist/icons/maintenance-icon/MaintenanceIcon.stories.tsx +322 -276
- package/dist/icons/message-icon/MessageIcon.stories.tsx +192 -170
- package/dist/icons/minimize-icon/MinimizeIcon.stories.tsx +348 -304
- package/dist/icons/moon-icon/MoonIcon.stories.tsx +191 -167
- package/dist/icons/move-horizontal-icon/MoveHorizontalIcon.stories.tsx +380 -326
- package/dist/icons/move-vertical-icon/MoveVerticalIcon.stories.tsx +345 -291
- package/dist/icons/musical-note-icon/MusicalNoteIcon.stories.tsx +310 -266
- package/dist/icons/notepad-icon/NotepadIcon.stories.tsx +311 -271
- package/dist/icons/notes-icon/NotesIcon.stories.tsx +311 -271
- package/dist/icons/page-search-icon/PageSearchIcon.stories.tsx +309 -271
- package/dist/icons/page-text-icon/PageTextIcon.stories.tsx +248 -210
- package/dist/icons/paint-roll-icon/PaintRollIcon.stories.tsx +310 -262
- package/dist/icons/paper-plane-icon/PaperPlaneIcon.stories.tsx +274 -236
- package/dist/icons/pause-icon/PauseIcon.stories.tsx +324 -280
- package/dist/icons/pencil-icon/PencilIcon.stories.tsx +323 -281
- package/dist/icons/phone-icon/PhoneIcon.stories.tsx +288 -240
- package/dist/icons/plus-icon/PlusIcon.stories.tsx +315 -273
- package/dist/icons/pocket-studio-icon/PocketStudioIcon.stories.tsx +278 -234
- package/dist/icons/scroll-down-icon/ScrollDownIcon.stories.tsx +161 -151
- package/dist/icons/search-icon/SearchIcon.stories.tsx +324 -284
- package/dist/icons/setting-icon/SettingIcon.stories.tsx +306 -264
- package/dist/icons/share-icon/ShareIcon.stories.tsx +314 -272
- package/dist/icons/shield-icon/ShieldIcon.stories.tsx +281 -235
- package/dist/icons/site-logo-icon/SiteLogoIcon.stories.tsx +309 -250
- package/dist/icons/skip-backward-icon/SkipBackwardIcon.stories.tsx +317 -279
- package/dist/icons/skip-forward-icon/SkipForwardIcon.stories.tsx +315 -279
- package/dist/icons/sparkles-soft-icon/SparklesSoftIcon.stories.tsx +299 -253
- package/dist/icons/spinner-gradient-icon/SpinnerGradientIcon.stories.tsx +185 -169
- package/dist/icons/spinner-gradient-icon/index.tsx +6 -1
- package/dist/icons/spinner-solid-icon/SpinnerSolidIcon.stories.tsx +192 -168
- package/dist/icons/spinner-solid-icon/index.tsx +6 -1
- package/dist/icons/spinner-solid-neutral-icon/SpinnerSolidINeutralcon.stories.tsx +212 -178
- package/dist/icons/spinner-solid-neutral-icon/index.tsx +1 -1
- package/dist/icons/star-icon/StarIcon.stories.tsx +290 -244
- package/dist/icons/store-coin-icon/StoreCoinIcon.stories.tsx +286 -234
- package/dist/icons/suggestion-icon/SuggestionIcon.stories.tsx +272 -230
- package/dist/icons/sun-icon/SunIcon.stories.tsx +262 -226
- package/dist/icons/text-color-icon/TextColorIcon.stories.tsx +321 -279
- package/dist/icons/text-indicator-icon/TextIndicatorIcon.stories.tsx +332 -282
- package/dist/icons/threads-icon/ThreadsIcon.stories.tsx +394 -342
- package/dist/icons/tick-circle-icon/TickCircleIcon.stories.tsx +338 -290
- package/dist/icons/tick-icon/TickIcon.stories.tsx +364 -315
- package/dist/icons/trash-icon/TrashIcon.stories.tsx +293 -253
- package/dist/icons/twitter-x-icon/TwitterXIcon.stories.tsx +396 -338
- package/dist/icons/upload-icon/UploadIcon.stories.tsx +291 -247
- package/dist/icons/vertical-menu-icon/VerticalMenuIcon.stories.tsx +309 -271
- package/dist/icons/video-play-list-icon/VideoPlaylistIcon.stories.tsx +336 -290
- package/dist/icons/voice-playing-icon/VoicePlayingIcon.stories.tsx +382 -334
- package/dist/icons/volume-full-icon/VolumeFullIcon.stories.tsx +349 -305
- package/dist/icons/volume-half-icon/VolumeHalfIcon.stories.tsx +327 -295
- package/dist/icons/volume-off-icon/VolumeOffIcon.stories.tsx +336 -296
- package/dist/icons/warning-icon/WarningIcon.stories.tsx +314 -274
- package/dist/icons/youtube-icon/YoutubeIcon.stories.tsx +311 -261
- package/dist/index.cjs +84 -84
- package/dist/index.js +84 -84
- package/dist/styles/aural-all-theme.css +1222 -0
- package/dist/styles/{aural-theme.css → aural-dark-theme.css} +15 -3
- package/dist/styles/aural-light-theme.css +1047 -0
- package/package.json +1 -1
|
@@ -227,74 +227,82 @@ export const Basic: Story = {
|
|
|
227
227
|
<TabsTrigger value="reports">Reports</TabsTrigger>
|
|
228
228
|
</TabsList>
|
|
229
229
|
<TabsContent value="overview" className="mt-6">
|
|
230
|
-
<div className="rounded-lg border
|
|
231
|
-
<h3 className="mb-4 text-lg font-semibold
|
|
232
|
-
|
|
230
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
231
|
+
<h3 className="text-fm-primary mb-4 text-lg font-semibold">
|
|
232
|
+
Overview
|
|
233
|
+
</h3>
|
|
234
|
+
<p className="text-fm-secondary mb-4">
|
|
233
235
|
Get a comprehensive view of your project's key metrics and
|
|
234
236
|
performance indicators.
|
|
235
237
|
</p>
|
|
236
238
|
<div className="grid grid-cols-2 gap-4">
|
|
237
|
-
<div className="
|
|
238
|
-
<div className="text-2xl font-bold
|
|
239
|
-
<div className="text-
|
|
239
|
+
<div className="border-fm-divider-secondary bg-fm-surface-info-sec rounded-lg border p-4">
|
|
240
|
+
<div className="text-fm-info text-2xl font-bold">1,234</div>
|
|
241
|
+
<div className="text-fm-secondary text-sm">Total Users</div>
|
|
240
242
|
</div>
|
|
241
|
-
<div className="
|
|
242
|
-
<div className="text-2xl font-bold
|
|
243
|
-
<div className="text-
|
|
243
|
+
<div className="border-fm-divider-positive bg-fm-surface-positive-sec rounded-lg border p-4">
|
|
244
|
+
<div className="text-fm-positive text-2xl font-bold">98.5%</div>
|
|
245
|
+
<div className="text-fm-secondary text-sm">Uptime</div>
|
|
244
246
|
</div>
|
|
245
247
|
</div>
|
|
246
248
|
</div>
|
|
247
249
|
</TabsContent>
|
|
248
250
|
<TabsContent value="analytics" className="mt-6">
|
|
249
|
-
<div className="rounded-lg border
|
|
250
|
-
<h3 className="mb-4 text-lg font-semibold
|
|
251
|
-
|
|
251
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
252
|
+
<h3 className="text-fm-primary mb-4 text-lg font-semibold">
|
|
253
|
+
Analytics
|
|
254
|
+
</h3>
|
|
255
|
+
<p className="text-fm-secondary mb-4">
|
|
252
256
|
Deep dive into user behavior and engagement patterns across your
|
|
253
257
|
platform.
|
|
254
258
|
</p>
|
|
255
259
|
<div className="space-y-4">
|
|
256
|
-
<div className="flex items-center justify-between rounded-lg
|
|
257
|
-
<span className="text-
|
|
258
|
-
<span className="font-semibold
|
|
260
|
+
<div className="bg-fm-surface-secondary flex items-center justify-between rounded-lg p-3">
|
|
261
|
+
<span className="text-fm-primary">Page Views</span>
|
|
262
|
+
<span className="text-fm-positive font-semibold">+12.5%</span>
|
|
259
263
|
</div>
|
|
260
|
-
<div className="flex items-center justify-between rounded-lg
|
|
261
|
-
<span className="text-
|
|
262
|
-
<span className="font-semibold
|
|
264
|
+
<div className="bg-fm-surface-secondary flex items-center justify-between rounded-lg p-3">
|
|
265
|
+
<span className="text-fm-primary">Session Duration</span>
|
|
266
|
+
<span className="text-fm-info font-semibold">4:32 avg</span>
|
|
263
267
|
</div>
|
|
264
|
-
<div className="flex items-center justify-between rounded-lg
|
|
265
|
-
<span className="text-
|
|
268
|
+
<div className="bg-fm-surface-secondary flex items-center justify-between rounded-lg p-3">
|
|
269
|
+
<span className="text-fm-primary">Bounce Rate</span>
|
|
266
270
|
<span className="font-semibold text-orange-400">32.1%</span>
|
|
267
271
|
</div>
|
|
268
272
|
</div>
|
|
269
273
|
</div>
|
|
270
274
|
</TabsContent>
|
|
271
275
|
<TabsContent value="reports" className="mt-6">
|
|
272
|
-
<div className="rounded-lg border
|
|
273
|
-
<h3 className="mb-4 text-lg font-semibold
|
|
274
|
-
|
|
276
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
277
|
+
<h3 className="text-fm-primary mb-4 text-lg font-semibold">
|
|
278
|
+
Reports
|
|
279
|
+
</h3>
|
|
280
|
+
<p className="text-fm-secondary mb-4">
|
|
275
281
|
Generate and download detailed reports for stakeholders and
|
|
276
282
|
analysis.
|
|
277
283
|
</p>
|
|
278
284
|
<div className="space-y-3">
|
|
279
|
-
<button className="w-full rounded-lg
|
|
280
|
-
<div className="font-medium
|
|
285
|
+
<button className="bg-fm-surface-secondary hover:bg-fm-surface-tertiary w-full rounded-lg p-3 text-left transition-colors">
|
|
286
|
+
<div className="text-fm-primary font-medium">
|
|
281
287
|
Monthly Performance Report
|
|
282
288
|
</div>
|
|
283
|
-
<div className="text-
|
|
289
|
+
<div className="text-fm-secondary text-sm">
|
|
284
290
|
Last generated: 2 days ago
|
|
285
291
|
</div>
|
|
286
292
|
</button>
|
|
287
|
-
<button className="w-full rounded-lg
|
|
288
|
-
<div className="font-medium
|
|
293
|
+
<button className="bg-fm-surface-secondary hover:bg-fm-surface-tertiary w-full rounded-lg p-3 text-left transition-colors">
|
|
294
|
+
<div className="text-fm-primary font-medium">
|
|
289
295
|
User Engagement Analysis
|
|
290
296
|
</div>
|
|
291
|
-
<div className="text-
|
|
297
|
+
<div className="text-fm-secondary text-sm">
|
|
292
298
|
Last generated: 1 week ago
|
|
293
299
|
</div>
|
|
294
300
|
</button>
|
|
295
|
-
<button className="w-full rounded-lg
|
|
296
|
-
<div className="font-medium
|
|
297
|
-
|
|
301
|
+
<button className="bg-fm-surface-secondary hover:bg-fm-surface-tertiary w-full rounded-lg p-3 text-left transition-colors">
|
|
302
|
+
<div className="text-fm-primary font-medium">
|
|
303
|
+
Revenue Breakdown
|
|
304
|
+
</div>
|
|
305
|
+
<div className="text-fm-secondary text-sm">
|
|
298
306
|
Last generated: 3 days ago
|
|
299
307
|
</div>
|
|
300
308
|
</button>
|
|
@@ -339,40 +347,46 @@ export const WithIcons: Story = {
|
|
|
339
347
|
</TabsList>
|
|
340
348
|
|
|
341
349
|
<TabsContent value="dashboard" className="mt-6">
|
|
342
|
-
<div className="rounded-lg border
|
|
350
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
343
351
|
<div className="mb-4 flex items-center gap-3">
|
|
344
|
-
<FileChartIcon className="h-6 w-6
|
|
345
|
-
<h3 className="text-lg font-semibold
|
|
352
|
+
<FileChartIcon className="text-fm-info h-6 w-6" />
|
|
353
|
+
<h3 className="text-fm-primary text-lg font-semibold">
|
|
354
|
+
Dashboard
|
|
355
|
+
</h3>
|
|
346
356
|
</div>
|
|
347
357
|
<div className="grid grid-cols-1 gap-4 md:grid-cols-3">
|
|
348
358
|
<div className="rounded-lg border border-blue-500/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 p-4">
|
|
349
|
-
<div className="text-2xl font-bold
|
|
350
|
-
<div className="text-
|
|
351
|
-
<div className="mt-1 text-xs
|
|
359
|
+
<div className="text-fm-primary text-2xl font-bold">847</div>
|
|
360
|
+
<div className="text-fm-secondary text-sm">Active Sessions</div>
|
|
361
|
+
<div className="text-fm-positive mt-1 text-xs">
|
|
352
362
|
↗ +15% from yesterday
|
|
353
363
|
</div>
|
|
354
364
|
</div>
|
|
355
365
|
<div className="rounded-lg border border-green-500/30 bg-gradient-to-br from-green-500/20 to-teal-500/20 p-4">
|
|
356
|
-
<div className="text-2xl font-bold
|
|
357
|
-
|
|
358
|
-
|
|
366
|
+
<div className="text-fm-primary text-2xl font-bold">
|
|
367
|
+
$12,847
|
|
368
|
+
</div>
|
|
369
|
+
<div className="text-fm-secondary text-sm">Revenue Today</div>
|
|
370
|
+
<div className="text-fm-positive mt-1 text-xs">
|
|
359
371
|
↗ +8% from yesterday
|
|
360
372
|
</div>
|
|
361
373
|
</div>
|
|
362
374
|
<div className="rounded-lg border border-orange-500/30 bg-gradient-to-br from-orange-500/20 to-red-500/20 p-4">
|
|
363
|
-
<div className="text-2xl font-bold
|
|
364
|
-
<div className="text-
|
|
365
|
-
<div className="mt-1 text-xs
|
|
375
|
+
<div className="text-fm-primary text-2xl font-bold">23</div>
|
|
376
|
+
<div className="text-fm-secondary text-sm">Critical Issues</div>
|
|
377
|
+
<div className="text-fm-icon-negative mt-1 text-xs">
|
|
378
|
+
↗ +3 new issues
|
|
379
|
+
</div>
|
|
366
380
|
</div>
|
|
367
381
|
</div>
|
|
368
382
|
</div>
|
|
369
383
|
</TabsContent>
|
|
370
384
|
|
|
371
385
|
<TabsContent value="users" className="mt-6">
|
|
372
|
-
<div className="rounded-lg border
|
|
386
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
373
387
|
<div className="mb-4 flex items-center gap-3">
|
|
374
|
-
<EyeOpenIcon className="h-6 w-6
|
|
375
|
-
<h3 className="text-lg font-semibold
|
|
388
|
+
<EyeOpenIcon className="text-fm-positive h-6 w-6" />
|
|
389
|
+
<h3 className="text-fm-primary text-lg font-semibold">
|
|
376
390
|
User Management
|
|
377
391
|
</h3>
|
|
378
392
|
</div>
|
|
@@ -405,30 +419,34 @@ export const WithIcons: Story = {
|
|
|
405
419
|
].map((user, index) => (
|
|
406
420
|
<div
|
|
407
421
|
key={index}
|
|
408
|
-
className="flex items-center justify-between rounded-lg
|
|
422
|
+
className="bg-fm-surface-secondary hover:bg-fm-surface-tertiary flex items-center justify-between rounded-lg p-3 transition-colors"
|
|
409
423
|
>
|
|
410
424
|
<div className="flex items-center gap-3">
|
|
411
425
|
<div className="flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-purple-500 to-pink-500">
|
|
412
|
-
<span className="text-sm font-semibold
|
|
426
|
+
<span className="text-fm-primary text-sm font-semibold">
|
|
413
427
|
{user.avatar}
|
|
414
428
|
</span>
|
|
415
429
|
</div>
|
|
416
430
|
<div>
|
|
417
|
-
<div className="font-medium
|
|
418
|
-
|
|
431
|
+
<div className="text-fm-primary font-medium">
|
|
432
|
+
{user.name}
|
|
433
|
+
</div>
|
|
434
|
+
<div className="text-fm-secondary text-sm">
|
|
435
|
+
{user.role}
|
|
436
|
+
</div>
|
|
419
437
|
</div>
|
|
420
438
|
</div>
|
|
421
439
|
<div className="flex items-center gap-2">
|
|
422
440
|
<div
|
|
423
441
|
className={`h-2 w-2 rounded-full ${
|
|
424
442
|
user.status === "online"
|
|
425
|
-
? "bg-
|
|
443
|
+
? "bg-fm-surface-positive"
|
|
426
444
|
: user.status === "away"
|
|
427
445
|
? "bg-yellow-500"
|
|
428
|
-
: "bg-
|
|
446
|
+
: "bg-fm-surface-tertiary"
|
|
429
447
|
}`}
|
|
430
448
|
/>
|
|
431
|
-
<span className="text-
|
|
449
|
+
<span className="text-fm-secondary text-xs capitalize">
|
|
432
450
|
{user.status}
|
|
433
451
|
</span>
|
|
434
452
|
</div>
|
|
@@ -439,43 +457,47 @@ export const WithIcons: Story = {
|
|
|
439
457
|
</TabsContent>
|
|
440
458
|
|
|
441
459
|
<TabsContent value="settings" className="mt-6">
|
|
442
|
-
<div className="rounded-lg border
|
|
460
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
443
461
|
<div className="mb-4 flex items-center gap-3">
|
|
444
462
|
<EditBigIcon className="h-6 w-6 text-purple-400" />
|
|
445
|
-
<h3 className="text-lg font-semibold
|
|
463
|
+
<h3 className="text-fm-primary text-lg font-semibold">
|
|
464
|
+
Settings
|
|
465
|
+
</h3>
|
|
446
466
|
</div>
|
|
447
467
|
<div className="space-y-4">
|
|
448
|
-
<div className="flex items-center justify-between rounded-lg
|
|
468
|
+
<div className="bg-fm-surface-secondary flex items-center justify-between rounded-lg p-3">
|
|
449
469
|
<div>
|
|
450
|
-
<div className="font-medium
|
|
470
|
+
<div className="text-fm-primary font-medium">
|
|
451
471
|
Email Notifications
|
|
452
472
|
</div>
|
|
453
|
-
<div className="text-
|
|
473
|
+
<div className="text-fm-secondary text-sm">
|
|
454
474
|
Receive updates via email
|
|
455
475
|
</div>
|
|
456
476
|
</div>
|
|
457
|
-
<button className="relative h-6 w-12 rounded-full
|
|
458
|
-
<div className="absolute top-0.5 right-0.5 h-5 w-5 rounded-full
|
|
477
|
+
<button className="bg-fm-surface-info relative h-6 w-12 rounded-full">
|
|
478
|
+
<div className="bg-fm-surface-primary absolute top-0.5 right-0.5 h-5 w-5 rounded-full transition-transform"></div>
|
|
459
479
|
</button>
|
|
460
480
|
</div>
|
|
461
|
-
<div className="flex items-center justify-between rounded-lg
|
|
481
|
+
<div className="bg-fm-surface-secondary flex items-center justify-between rounded-lg p-3">
|
|
462
482
|
<div>
|
|
463
|
-
<div className="font-medium
|
|
464
|
-
<div className="text-
|
|
483
|
+
<div className="text-fm-primary font-medium">Dark Mode</div>
|
|
484
|
+
<div className="text-fm-secondary text-sm">
|
|
485
|
+
Use dark theme
|
|
486
|
+
</div>
|
|
465
487
|
</div>
|
|
466
|
-
<button className="relative h-6 w-12 rounded-full
|
|
467
|
-
<div className="absolute top-0.5 right-0.5 h-5 w-5 rounded-full
|
|
488
|
+
<button className="bg-fm-surface-info relative h-6 w-12 rounded-full">
|
|
489
|
+
<div className="bg-fm-surface-primary absolute top-0.5 right-0.5 h-5 w-5 rounded-full transition-transform"></div>
|
|
468
490
|
</button>
|
|
469
491
|
</div>
|
|
470
|
-
<div className="flex items-center justify-between rounded-lg
|
|
492
|
+
<div className="bg-fm-surface-secondary flex items-center justify-between rounded-lg p-3">
|
|
471
493
|
<div>
|
|
472
|
-
<div className="font-medium
|
|
473
|
-
<div className="text-
|
|
494
|
+
<div className="text-fm-primary font-medium">Auto-save</div>
|
|
495
|
+
<div className="text-fm-secondary text-sm">
|
|
474
496
|
Automatically save changes
|
|
475
497
|
</div>
|
|
476
498
|
</div>
|
|
477
|
-
<button className="relative h-6 w-12 rounded-full
|
|
478
|
-
<div className="absolute top-0.5 left-0.5 h-5 w-5 rounded-full
|
|
499
|
+
<button className="bg-fm-surface-tertiary relative h-6 w-12 rounded-full">
|
|
500
|
+
<div className="bg-fm-surface-primary absolute top-0.5 left-0.5 h-5 w-5 rounded-full transition-transform"></div>
|
|
479
501
|
</button>
|
|
480
502
|
</div>
|
|
481
503
|
</div>
|
|
@@ -483,22 +505,24 @@ export const WithIcons: Story = {
|
|
|
483
505
|
</TabsContent>
|
|
484
506
|
|
|
485
507
|
<TabsContent value="alerts" className="mt-6">
|
|
486
|
-
<div className="rounded-lg border
|
|
508
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
487
509
|
<div className="mb-4 flex items-center gap-3">
|
|
488
|
-
<AlertIcon className="h-6 w-6
|
|
489
|
-
<h3 className="text-lg font-semibold
|
|
510
|
+
<AlertIcon className="text-fm-icon-negative h-6 w-6" />
|
|
511
|
+
<h3 className="text-fm-primary text-lg font-semibold">
|
|
490
512
|
System Alerts
|
|
491
513
|
</h3>
|
|
492
514
|
</div>
|
|
493
515
|
<div className="space-y-3">
|
|
494
|
-
<div className="flex items-start gap-3 rounded-lg border
|
|
495
|
-
<AlertIcon className="mt-0.5 h-5 w-5 flex-shrink-0
|
|
516
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex items-start gap-3 rounded-lg border p-3">
|
|
517
|
+
<AlertIcon className="text-fm-icon-negative mt-0.5 h-5 w-5 flex-shrink-0" />
|
|
496
518
|
<div>
|
|
497
|
-
<div className="font-medium
|
|
498
|
-
|
|
519
|
+
<div className="text-fm-primary font-medium">
|
|
520
|
+
High CPU Usage
|
|
521
|
+
</div>
|
|
522
|
+
<div className="text-fm-secondary text-sm">
|
|
499
523
|
Server load is above 90% threshold
|
|
500
524
|
</div>
|
|
501
|
-
<div className="mt-1 text-xs
|
|
525
|
+
<div className="text-fm-tertiary mt-1 text-xs">
|
|
502
526
|
2 minutes ago
|
|
503
527
|
</div>
|
|
504
528
|
</div>
|
|
@@ -506,25 +530,29 @@ export const WithIcons: Story = {
|
|
|
506
530
|
<div className="flex items-start gap-3 rounded-lg border border-yellow-500/20 bg-yellow-500/10 p-3">
|
|
507
531
|
<AlertIcon className="mt-0.5 h-5 w-5 flex-shrink-0 text-yellow-400" />
|
|
508
532
|
<div>
|
|
509
|
-
<div className="font-medium
|
|
533
|
+
<div className="text-fm-primary font-medium">
|
|
510
534
|
Database Connection
|
|
511
535
|
</div>
|
|
512
|
-
<div className="text-
|
|
536
|
+
<div className="text-fm-secondary text-sm">
|
|
513
537
|
Intermittent connectivity issues detected
|
|
514
538
|
</div>
|
|
515
|
-
<div className="mt-1 text-xs
|
|
539
|
+
<div className="text-fm-tertiary mt-1 text-xs">
|
|
516
540
|
15 minutes ago
|
|
517
541
|
</div>
|
|
518
542
|
</div>
|
|
519
543
|
</div>
|
|
520
|
-
<div className="flex items-start gap-3 rounded-lg border
|
|
521
|
-
<TickCircleIcon className="mt-0.5 h-5 w-5 flex-shrink-0
|
|
544
|
+
<div className="border-fm-divider-positive bg-fm-surface-positive-sec flex items-start gap-3 rounded-lg border p-3">
|
|
545
|
+
<TickCircleIcon className="text-fm-positive mt-0.5 h-5 w-5 flex-shrink-0" />
|
|
522
546
|
<div>
|
|
523
|
-
<div className="font-medium
|
|
524
|
-
|
|
547
|
+
<div className="text-fm-primary font-medium">
|
|
548
|
+
Backup Completed
|
|
549
|
+
</div>
|
|
550
|
+
<div className="text-fm-secondary text-sm">
|
|
525
551
|
Daily backup finished successfully
|
|
526
552
|
</div>
|
|
527
|
-
<div className="mt-1 text-xs
|
|
553
|
+
<div className="text-fm-tertiary mt-1 text-xs">
|
|
554
|
+
1 hour ago
|
|
555
|
+
</div>
|
|
528
556
|
</div>
|
|
529
557
|
</div>
|
|
530
558
|
</div>
|
|
@@ -548,7 +576,7 @@ export const SizeVariations: Story = {
|
|
|
548
576
|
render: () => (
|
|
549
577
|
<div className="w-full max-w-4xl space-y-8">
|
|
550
578
|
<div className="space-y-4">
|
|
551
|
-
<h3 className="text-lg font-medium
|
|
579
|
+
<h3 className="text-fm-primary text-lg font-medium">Small Size</h3>
|
|
552
580
|
<Tabs defaultValue="tab1" size="sm" className="w-full">
|
|
553
581
|
<TabsList className="grid w-full grid-cols-3">
|
|
554
582
|
<TabsTrigger value="tab1">Compact</TabsTrigger>
|
|
@@ -556,23 +584,23 @@ export const SizeVariations: Story = {
|
|
|
556
584
|
<TabsTrigger value="tab3">Minimal</TabsTrigger>
|
|
557
585
|
</TabsList>
|
|
558
586
|
<TabsContent value="tab1" className="mt-4">
|
|
559
|
-
<div className="rounded-lg border
|
|
560
|
-
<p className="text-
|
|
587
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-4">
|
|
588
|
+
<p className="text-fm-secondary">
|
|
561
589
|
Small tabs are perfect for compact interfaces and secondary
|
|
562
590
|
navigation.
|
|
563
591
|
</p>
|
|
564
592
|
</div>
|
|
565
593
|
</TabsContent>
|
|
566
594
|
<TabsContent value="tab2" className="mt-4">
|
|
567
|
-
<div className="rounded-lg border
|
|
568
|
-
<p className="text-
|
|
595
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-4">
|
|
596
|
+
<p className="text-fm-secondary">
|
|
569
597
|
Ideal for sidebars, modal dialogs, and tight spaces.
|
|
570
598
|
</p>
|
|
571
599
|
</div>
|
|
572
600
|
</TabsContent>
|
|
573
601
|
<TabsContent value="tab3" className="mt-4">
|
|
574
|
-
<div className="rounded-lg border
|
|
575
|
-
<p className="text-
|
|
602
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-4">
|
|
603
|
+
<p className="text-fm-secondary">
|
|
576
604
|
Minimal design with efficient use of space.
|
|
577
605
|
</p>
|
|
578
606
|
</div>
|
|
@@ -581,7 +609,7 @@ export const SizeVariations: Story = {
|
|
|
581
609
|
</div>
|
|
582
610
|
|
|
583
611
|
<div className="space-y-4">
|
|
584
|
-
<h3 className="text-lg font-medium
|
|
612
|
+
<h3 className="text-fm-primary text-lg font-medium">
|
|
585
613
|
Medium Size (Default)
|
|
586
614
|
</h3>
|
|
587
615
|
<Tabs defaultValue="tab1" size="md" className="w-full">
|
|
@@ -591,23 +619,23 @@ export const SizeVariations: Story = {
|
|
|
591
619
|
<TabsTrigger value="tab3">Default</TabsTrigger>
|
|
592
620
|
</TabsList>
|
|
593
621
|
<TabsContent value="tab1" className="mt-4">
|
|
594
|
-
<div className="rounded-lg border
|
|
595
|
-
<p className="text-
|
|
622
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
623
|
+
<p className="text-fm-secondary">
|
|
596
624
|
Medium tabs provide the perfect balance between visibility and
|
|
597
625
|
space efficiency.
|
|
598
626
|
</p>
|
|
599
627
|
</div>
|
|
600
628
|
</TabsContent>
|
|
601
629
|
<TabsContent value="tab2" className="mt-4">
|
|
602
|
-
<div className="rounded-lg border
|
|
603
|
-
<p className="text-
|
|
630
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
631
|
+
<p className="text-fm-secondary">
|
|
604
632
|
Great for main content areas and primary navigation.
|
|
605
633
|
</p>
|
|
606
634
|
</div>
|
|
607
635
|
</TabsContent>
|
|
608
636
|
<TabsContent value="tab3" className="mt-4">
|
|
609
|
-
<div className="rounded-lg border
|
|
610
|
-
<p className="text-
|
|
637
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
638
|
+
<p className="text-fm-secondary">
|
|
611
639
|
The default choice for most tab implementations.
|
|
612
640
|
</p>
|
|
613
641
|
</div>
|
|
@@ -616,7 +644,7 @@ export const SizeVariations: Story = {
|
|
|
616
644
|
</div>
|
|
617
645
|
|
|
618
646
|
<div className="space-y-4">
|
|
619
|
-
<h3 className="text-lg font-medium
|
|
647
|
+
<h3 className="text-fm-primary text-lg font-medium">Large Size</h3>
|
|
620
648
|
<Tabs defaultValue="tab1" size="lg" className="w-full">
|
|
621
649
|
<TabsList className="grid w-full grid-cols-3">
|
|
622
650
|
<TabsTrigger value="tab1">Prominent</TabsTrigger>
|
|
@@ -624,24 +652,24 @@ export const SizeVariations: Story = {
|
|
|
624
652
|
<TabsTrigger value="tab3">Bold</TabsTrigger>
|
|
625
653
|
</TabsList>
|
|
626
654
|
<TabsContent value="tab1" className="mt-4">
|
|
627
|
-
<div className="rounded-lg border
|
|
628
|
-
<p className="text-
|
|
655
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-8">
|
|
656
|
+
<p className="text-fm-secondary">
|
|
629
657
|
Large tabs make a statement and are perfect for hero sections
|
|
630
658
|
and primary interfaces.
|
|
631
659
|
</p>
|
|
632
660
|
</div>
|
|
633
661
|
</TabsContent>
|
|
634
662
|
<TabsContent value="tab2" className="mt-4">
|
|
635
|
-
<div className="rounded-lg border
|
|
636
|
-
<p className="text-
|
|
663
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-8">
|
|
664
|
+
<p className="text-fm-secondary">
|
|
637
665
|
Enhanced visibility and improved touch targets for mobile
|
|
638
666
|
interfaces.
|
|
639
667
|
</p>
|
|
640
668
|
</div>
|
|
641
669
|
</TabsContent>
|
|
642
670
|
<TabsContent value="tab3" className="mt-4">
|
|
643
|
-
<div className="rounded-lg border
|
|
644
|
-
<p className="text-
|
|
671
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-8">
|
|
672
|
+
<p className="text-fm-secondary">
|
|
645
673
|
Bold design that commands attention and improves user
|
|
646
674
|
experience.
|
|
647
675
|
</p>
|
|
@@ -666,10 +694,10 @@ export const IndividualSizeOverride: Story = {
|
|
|
666
694
|
render: () => (
|
|
667
695
|
<div className="w-full max-w-3xl space-y-6">
|
|
668
696
|
<div className="text-center">
|
|
669
|
-
<h3 className="mb-2 text-lg font-medium
|
|
697
|
+
<h3 className="text-fm-primary mb-2 text-lg font-medium">
|
|
670
698
|
Individual Size Override
|
|
671
699
|
</h3>
|
|
672
|
-
<p className="text-
|
|
700
|
+
<p className="text-fm-secondary text-sm">
|
|
673
701
|
Tabs component has size="md" set, but individual triggers can override
|
|
674
702
|
with their own size prop
|
|
675
703
|
</p>
|
|
@@ -688,23 +716,23 @@ export const IndividualSizeOverride: Story = {
|
|
|
688
716
|
</TabsList>
|
|
689
717
|
|
|
690
718
|
<TabsContent value="small" className="mt-6">
|
|
691
|
-
<div className="rounded-lg border
|
|
692
|
-
<h3 className="mb-4 text-lg font-semibold
|
|
719
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
720
|
+
<h3 className="text-fm-primary mb-4 text-lg font-semibold">
|
|
693
721
|
Small Override
|
|
694
722
|
</h3>
|
|
695
|
-
<p className="text-
|
|
723
|
+
<p className="text-fm-secondary">
|
|
696
724
|
This tab trigger has{" "}
|
|
697
|
-
<code className="
|
|
725
|
+
<code className="bg-fm-surface-secondary rounded px-2 py-1 text-sm">
|
|
698
726
|
size="sm"
|
|
699
727
|
</code>{" "}
|
|
700
728
|
which overrides the parent Tabs component's{" "}
|
|
701
|
-
<code className="
|
|
729
|
+
<code className="bg-fm-surface-secondary rounded px-2 py-1 text-sm">
|
|
702
730
|
size="md"
|
|
703
731
|
</code>{" "}
|
|
704
732
|
setting.
|
|
705
733
|
</p>
|
|
706
|
-
<div className="mt-4 rounded-lg border
|
|
707
|
-
<div className="text-
|
|
734
|
+
<div className="border-fm-divider-secondary bg-fm-surface-info-sec mt-4 rounded-lg border p-3">
|
|
735
|
+
<div className="text-fm-info text-sm">
|
|
708
736
|
<strong>Use case:</strong> When you need most tabs to be medium
|
|
709
737
|
size but want to emphasize or de-emphasize specific tabs.
|
|
710
738
|
</div>
|
|
@@ -713,21 +741,21 @@ export const IndividualSizeOverride: Story = {
|
|
|
713
741
|
</TabsContent>
|
|
714
742
|
|
|
715
743
|
<TabsContent value="normal" className="mt-6">
|
|
716
|
-
<div className="rounded-lg border
|
|
717
|
-
<h3 className="mb-4 text-lg font-semibold
|
|
744
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
745
|
+
<h3 className="text-fm-primary mb-4 text-lg font-semibold">
|
|
718
746
|
Normal Size
|
|
719
747
|
</h3>
|
|
720
|
-
<p className="text-
|
|
748
|
+
<p className="text-fm-secondary">
|
|
721
749
|
This tab uses the default size inherited from the parent Tabs
|
|
722
750
|
component (
|
|
723
|
-
<code className="
|
|
751
|
+
<code className="bg-fm-surface-secondary rounded px-2 py-1 text-sm">
|
|
724
752
|
size="md"
|
|
725
753
|
</code>
|
|
726
754
|
).
|
|
727
755
|
</p>
|
|
728
756
|
<div className="mt-4 grid grid-cols-2 gap-4">
|
|
729
|
-
<div className="
|
|
730
|
-
<div className="text-
|
|
757
|
+
<div className="border-fm-divider-positive bg-fm-surface-positive-sec rounded-lg border p-3">
|
|
758
|
+
<div className="text-fm-positive text-sm">
|
|
731
759
|
Consistent sizing across most tabs
|
|
732
760
|
</div>
|
|
733
761
|
</div>
|
|
@@ -741,30 +769,30 @@ export const IndividualSizeOverride: Story = {
|
|
|
741
769
|
</TabsContent>
|
|
742
770
|
|
|
743
771
|
<TabsContent value="normal2" className="mt-6">
|
|
744
|
-
<div className="rounded-lg border
|
|
745
|
-
<h3 className="mb-4 text-lg font-semibold
|
|
772
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
773
|
+
<h3 className="text-fm-primary mb-4 text-lg font-semibold">
|
|
746
774
|
Another Normal Tab
|
|
747
775
|
</h3>
|
|
748
|
-
<p className="text-
|
|
776
|
+
<p className="text-fm-secondary">
|
|
749
777
|
Another tab using the inherited medium size from the parent
|
|
750
778
|
component.
|
|
751
779
|
</p>
|
|
752
780
|
<div className="mt-4 space-y-3">
|
|
753
|
-
<div className="flex items-center gap-3 rounded-lg
|
|
754
|
-
<TickCircleIcon className="h-5 w-5
|
|
755
|
-
<span className="text-
|
|
781
|
+
<div className="bg-fm-surface-secondary flex items-center gap-3 rounded-lg p-3">
|
|
782
|
+
<TickCircleIcon className="text-fm-positive h-5 w-5" />
|
|
783
|
+
<span className="text-fm-secondary">
|
|
756
784
|
Inherits parent size automatically
|
|
757
785
|
</span>
|
|
758
786
|
</div>
|
|
759
|
-
<div className="flex items-center gap-3 rounded-lg
|
|
760
|
-
<TickCircleIcon className="h-5 w-5
|
|
761
|
-
<span className="text-
|
|
787
|
+
<div className="bg-fm-surface-secondary flex items-center gap-3 rounded-lg p-3">
|
|
788
|
+
<TickCircleIcon className="text-fm-positive h-5 w-5" />
|
|
789
|
+
<span className="text-fm-secondary">
|
|
762
790
|
No need to specify size prop
|
|
763
791
|
</span>
|
|
764
792
|
</div>
|
|
765
|
-
<div className="flex items-center gap-3 rounded-lg
|
|
766
|
-
<TickCircleIcon className="h-5 w-5
|
|
767
|
-
<span className="text-
|
|
793
|
+
<div className="bg-fm-surface-secondary flex items-center gap-3 rounded-lg p-3">
|
|
794
|
+
<TickCircleIcon className="text-fm-positive h-5 w-5" />
|
|
795
|
+
<span className="text-fm-secondary">
|
|
768
796
|
Maintains consistent appearance
|
|
769
797
|
</span>
|
|
770
798
|
</div>
|
|
@@ -773,20 +801,20 @@ export const IndividualSizeOverride: Story = {
|
|
|
773
801
|
</TabsContent>
|
|
774
802
|
|
|
775
803
|
<TabsContent value="large" className="mt-6">
|
|
776
|
-
<div className="rounded-lg border
|
|
777
|
-
<h3 className="mb-4 text-lg font-semibold
|
|
804
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
805
|
+
<h3 className="text-fm-primary mb-4 text-lg font-semibold">
|
|
778
806
|
Large Override
|
|
779
807
|
</h3>
|
|
780
|
-
<p className="text-
|
|
808
|
+
<p className="text-fm-secondary">
|
|
781
809
|
This tab trigger has{" "}
|
|
782
|
-
<code className="
|
|
810
|
+
<code className="bg-fm-surface-secondary rounded px-2 py-1 text-sm">
|
|
783
811
|
size="lg"
|
|
784
812
|
</code>{" "}
|
|
785
813
|
which overrides the parent's medium size setting, making it more
|
|
786
814
|
prominent.
|
|
787
815
|
</p>
|
|
788
|
-
<div className="mt-4 rounded-lg border
|
|
789
|
-
<div className="text-
|
|
816
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary mt-4 rounded-lg border p-3">
|
|
817
|
+
<div className="text-fm-warning text-sm">
|
|
790
818
|
<strong>Use case:</strong> Call-to-action tabs, primary
|
|
791
819
|
navigation items, or tabs that need extra visual emphasis in
|
|
792
820
|
your interface.
|
|
@@ -794,24 +822,28 @@ export const IndividualSizeOverride: Story = {
|
|
|
794
822
|
</div>
|
|
795
823
|
<div className="mt-4 grid grid-cols-1 gap-4 md:grid-cols-2">
|
|
796
824
|
<div className="rounded-lg border border-blue-500/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 p-4">
|
|
797
|
-
<div className="text-lg font-semibold
|
|
798
|
-
|
|
825
|
+
<div className="text-fm-primary text-lg font-semibold">
|
|
826
|
+
Enhanced
|
|
827
|
+
</div>
|
|
828
|
+
<div className="text-fm-secondary text-sm">
|
|
829
|
+
Better visibility
|
|
830
|
+
</div>
|
|
799
831
|
</div>
|
|
800
832
|
<div className="rounded-lg border border-green-500/30 bg-gradient-to-br from-green-500/20 to-teal-500/20 p-4">
|
|
801
|
-
<div className="text-lg font-semibold
|
|
833
|
+
<div className="text-fm-primary text-lg font-semibold">
|
|
802
834
|
Prominent
|
|
803
835
|
</div>
|
|
804
|
-
<div className="text-
|
|
836
|
+
<div className="text-fm-secondary text-sm">Draws attention</div>
|
|
805
837
|
</div>
|
|
806
838
|
</div>
|
|
807
839
|
</div>
|
|
808
840
|
</TabsContent>
|
|
809
841
|
</Tabs>
|
|
810
842
|
|
|
811
|
-
<div className="space-y-1 text-center text-xs
|
|
843
|
+
<div className="text-fm-secondary space-y-1 text-center text-xs">
|
|
812
844
|
<p>
|
|
813
845
|
Parent Tabs component:{" "}
|
|
814
|
-
<code className="
|
|
846
|
+
<code className="bg-fm-surface-secondary rounded px-2 py-0.5 font-mono">
|
|
815
847
|
size="md"
|
|
816
848
|
</code>
|
|
817
849
|
</p>
|
|
@@ -856,10 +888,10 @@ export const ComplexContent: Story = {
|
|
|
856
888
|
<TabsContent value="products" className="mt-6">
|
|
857
889
|
<div className="space-y-4">
|
|
858
890
|
<div className="flex items-center justify-between">
|
|
859
|
-
<h3 className="text-lg font-semibold
|
|
891
|
+
<h3 className="text-fm-primary text-lg font-semibold">
|
|
860
892
|
Product Catalog
|
|
861
893
|
</h3>
|
|
862
|
-
<button className="flex items-center gap-2 rounded-lg
|
|
894
|
+
<button className="bg-fm-surface-info text-fm-surface-primary hover:bg-fm-surface-info flex items-center gap-2 rounded-lg px-4 py-2 transition-colors">
|
|
863
895
|
<PlusIcon className="h-4 w-4" />
|
|
864
896
|
Add Product
|
|
865
897
|
</button>
|
|
@@ -906,22 +938,22 @@ export const ComplexContent: Story = {
|
|
|
906
938
|
].map((product, index) => (
|
|
907
939
|
<div
|
|
908
940
|
key={index}
|
|
909
|
-
className="
|
|
941
|
+
className="border-fm-divider-secondary bg-fm-surface-secondary hover:bg-fm-surface-tertiary rounded-lg border p-4 transition-colors"
|
|
910
942
|
>
|
|
911
943
|
<div className="mb-3 flex aspect-square items-center justify-center rounded-lg bg-gradient-to-br from-purple-500/20 to-pink-500/20">
|
|
912
|
-
<SearchIcon className="h-8 w-8
|
|
944
|
+
<SearchIcon className="text-fm-tertiary h-8 w-8" />
|
|
913
945
|
</div>
|
|
914
|
-
<h4 className="mb-1 font-medium
|
|
946
|
+
<h4 className="text-fm-primary mb-1 font-medium">
|
|
915
947
|
{product.name}
|
|
916
948
|
</h4>
|
|
917
|
-
<p className="mb-2 text-sm
|
|
949
|
+
<p className="text-fm-secondary mb-2 text-sm">
|
|
918
950
|
{product.category}
|
|
919
951
|
</p>
|
|
920
952
|
<div className="flex items-center justify-between">
|
|
921
|
-
<span className="font-semibold
|
|
953
|
+
<span className="text-fm-primary font-semibold">
|
|
922
954
|
{product.price}
|
|
923
955
|
</span>
|
|
924
|
-
<span className="text-
|
|
956
|
+
<span className="text-fm-secondary text-xs">
|
|
925
957
|
{product.stock} in stock
|
|
926
958
|
</span>
|
|
927
959
|
</div>
|
|
@@ -934,14 +966,14 @@ export const ComplexContent: Story = {
|
|
|
934
966
|
<TabsContent value="customers" className="mt-6">
|
|
935
967
|
<div className="space-y-4">
|
|
936
968
|
<div className="flex items-center justify-between">
|
|
937
|
-
<h3 className="text-lg font-semibold
|
|
969
|
+
<h3 className="text-fm-primary text-lg font-semibold">
|
|
938
970
|
Customer Directory
|
|
939
971
|
</h3>
|
|
940
972
|
<div className="flex gap-2">
|
|
941
|
-
<button className="
|
|
973
|
+
<button className="bg-fm-surface-secondary text-fm-primary hover:bg-fm-surface-tertiary rounded px-3 py-1 text-sm transition-colors">
|
|
942
974
|
Export
|
|
943
975
|
</button>
|
|
944
|
-
<button className="
|
|
976
|
+
<button className="bg-fm-surface-info text-fm-surface-primary hover:bg-fm-surface-info rounded px-3 py-1 text-sm transition-colors">
|
|
945
977
|
Add Customer
|
|
946
978
|
</button>
|
|
947
979
|
</div>
|
|
@@ -982,11 +1014,11 @@ export const ComplexContent: Story = {
|
|
|
982
1014
|
].map((customer, index) => (
|
|
983
1015
|
<div
|
|
984
1016
|
key={index}
|
|
985
|
-
className="flex items-center justify-between rounded-lg border
|
|
1017
|
+
className="border-fm-divider-secondary bg-fm-surface-secondary hover:bg-fm-surface-tertiary flex items-center justify-between rounded-lg border p-4 transition-colors"
|
|
986
1018
|
>
|
|
987
1019
|
<div className="flex items-center gap-3">
|
|
988
1020
|
<div className="flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-purple-500">
|
|
989
|
-
<span className="text-sm font-semibold
|
|
1021
|
+
<span className="text-fm-primary text-sm font-semibold">
|
|
990
1022
|
{customer.name
|
|
991
1023
|
.split(" ")
|
|
992
1024
|
.map((n) => n[0])
|
|
@@ -994,19 +1026,19 @@ export const ComplexContent: Story = {
|
|
|
994
1026
|
</span>
|
|
995
1027
|
</div>
|
|
996
1028
|
<div>
|
|
997
|
-
<div className="font-medium
|
|
1029
|
+
<div className="text-fm-primary font-medium">
|
|
998
1030
|
{customer.name}
|
|
999
1031
|
</div>
|
|
1000
|
-
<div className="text-
|
|
1032
|
+
<div className="text-fm-secondary text-sm">
|
|
1001
1033
|
{customer.email}
|
|
1002
1034
|
</div>
|
|
1003
1035
|
</div>
|
|
1004
1036
|
</div>
|
|
1005
1037
|
<div className="text-right">
|
|
1006
|
-
<div className="font-medium
|
|
1038
|
+
<div className="text-fm-primary font-medium">
|
|
1007
1039
|
{customer.value}
|
|
1008
1040
|
</div>
|
|
1009
|
-
<div className="text-
|
|
1041
|
+
<div className="text-fm-secondary text-sm">
|
|
1010
1042
|
{customer.orders} orders
|
|
1011
1043
|
</div>
|
|
1012
1044
|
</div>
|
|
@@ -1019,11 +1051,11 @@ export const ComplexContent: Story = {
|
|
|
1019
1051
|
<TabsContent value="orders" className="mt-6">
|
|
1020
1052
|
<div className="space-y-4">
|
|
1021
1053
|
<div className="flex items-center justify-between">
|
|
1022
|
-
<h3 className="text-lg font-semibold
|
|
1054
|
+
<h3 className="text-fm-primary text-lg font-semibold">
|
|
1023
1055
|
Recent Orders
|
|
1024
1056
|
</h3>
|
|
1025
1057
|
<div className="flex gap-2">
|
|
1026
|
-
<select className="
|
|
1058
|
+
<select className="border-fm-divider-secondary bg-fm-surface-secondary text-fm-primary rounded border px-3 py-1 text-sm">
|
|
1027
1059
|
<option>All Status</option>
|
|
1028
1060
|
<option>Pending</option>
|
|
1029
1061
|
<option>Processing</option>
|
|
@@ -1073,32 +1105,36 @@ export const ComplexContent: Story = {
|
|
|
1073
1105
|
].map((order, index) => (
|
|
1074
1106
|
<div
|
|
1075
1107
|
key={index}
|
|
1076
|
-
className="flex items-center justify-between rounded-lg border
|
|
1108
|
+
className="border-fm-divider-secondary bg-fm-surface-secondary hover:bg-fm-surface-tertiary flex items-center justify-between rounded-lg border p-4 transition-colors"
|
|
1077
1109
|
>
|
|
1078
1110
|
<div className="flex items-center gap-4">
|
|
1079
1111
|
<div>
|
|
1080
|
-
<div className="font-medium
|
|
1081
|
-
|
|
1112
|
+
<div className="text-fm-primary font-medium">
|
|
1113
|
+
{order.id}
|
|
1114
|
+
</div>
|
|
1115
|
+
<div className="text-fm-secondary text-sm">
|
|
1082
1116
|
{order.customer}
|
|
1083
1117
|
</div>
|
|
1084
1118
|
</div>
|
|
1085
1119
|
</div>
|
|
1086
1120
|
<div className="flex items-center gap-4">
|
|
1087
1121
|
<div className="text-right">
|
|
1088
|
-
<div className="font-medium
|
|
1122
|
+
<div className="text-fm-primary font-medium">
|
|
1089
1123
|
{order.total}
|
|
1090
1124
|
</div>
|
|
1091
|
-
<div className="text-
|
|
1125
|
+
<div className="text-fm-secondary text-sm">
|
|
1126
|
+
{order.date}
|
|
1127
|
+
</div>
|
|
1092
1128
|
</div>
|
|
1093
1129
|
<span
|
|
1094
1130
|
className={`rounded-full px-2 py-1 text-xs ${
|
|
1095
1131
|
order.status === "delivered"
|
|
1096
|
-
? "bg-green-500/20
|
|
1132
|
+
? "text-fm-positive bg-green-500/20"
|
|
1097
1133
|
: order.status === "shipped"
|
|
1098
|
-
? "bg-blue-500/20
|
|
1134
|
+
? "text-fm-info bg-blue-500/20"
|
|
1099
1135
|
: order.status === "processing"
|
|
1100
1136
|
? "bg-yellow-500/20 text-yellow-400"
|
|
1101
|
-
: "bg-
|
|
1137
|
+
: "bg-fm-surface-secondary text-fm-tertiary"
|
|
1102
1138
|
}`}
|
|
1103
1139
|
>
|
|
1104
1140
|
{order.status}
|
|
@@ -1113,50 +1149,58 @@ export const ComplexContent: Story = {
|
|
|
1113
1149
|
<TabsContent value="analytics" className="mt-6">
|
|
1114
1150
|
<div className="space-y-6">
|
|
1115
1151
|
<div className="flex items-center gap-3">
|
|
1116
|
-
<TickCircleIcon className="h-6 w-6
|
|
1117
|
-
<h3 className="text-lg font-semibold
|
|
1152
|
+
<TickCircleIcon className="text-fm-positive h-6 w-6" />
|
|
1153
|
+
<h3 className="text-fm-primary text-lg font-semibold">
|
|
1118
1154
|
Sales Analytics
|
|
1119
1155
|
</h3>
|
|
1120
|
-
<span className="rounded-full bg-green-500/20 px-3 py-1 text-xs
|
|
1156
|
+
<span className="text-fm-positive rounded-full bg-green-500/20 px-3 py-1 text-xs">
|
|
1121
1157
|
Large Tab
|
|
1122
1158
|
</span>
|
|
1123
1159
|
</div>
|
|
1124
1160
|
|
|
1125
1161
|
<div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4">
|
|
1126
1162
|
<div className="rounded-lg border border-blue-500/30 bg-gradient-to-br from-blue-500/20 to-cyan-500/20 p-4">
|
|
1127
|
-
<div className="text-2xl font-bold
|
|
1128
|
-
|
|
1129
|
-
|
|
1163
|
+
<div className="text-fm-primary text-2xl font-bold">
|
|
1164
|
+
$45,231
|
|
1165
|
+
</div>
|
|
1166
|
+
<div className="text-fm-secondary text-sm">
|
|
1167
|
+
Revenue This Month
|
|
1168
|
+
</div>
|
|
1169
|
+
<div className="text-fm-positive mt-1 text-xs">
|
|
1130
1170
|
↗ +12% vs last month
|
|
1131
1171
|
</div>
|
|
1132
1172
|
</div>
|
|
1133
1173
|
<div className="rounded-lg border border-green-500/30 bg-gradient-to-br from-green-500/20 to-emerald-500/20 p-4">
|
|
1134
|
-
<div className="text-2xl font-bold
|
|
1135
|
-
<div className="text-
|
|
1136
|
-
|
|
1174
|
+
<div className="text-fm-primary text-2xl font-bold">1,847</div>
|
|
1175
|
+
<div className="text-fm-secondary text-sm">
|
|
1176
|
+
Orders This Month
|
|
1177
|
+
</div>
|
|
1178
|
+
<div className="text-fm-positive mt-1 text-xs">
|
|
1137
1179
|
↗ +8% vs last month
|
|
1138
1180
|
</div>
|
|
1139
1181
|
</div>
|
|
1140
1182
|
<div className="rounded-lg border border-purple-500/30 bg-gradient-to-br from-purple-500/20 to-pink-500/20 p-4">
|
|
1141
|
-
<div className="text-2xl font-bold
|
|
1142
|
-
<div className="text-
|
|
1143
|
-
<div className="mt-1 text-xs
|
|
1183
|
+
<div className="text-fm-primary text-2xl font-bold">324</div>
|
|
1184
|
+
<div className="text-fm-secondary text-sm">New Customers</div>
|
|
1185
|
+
<div className="text-fm-positive mt-1 text-xs">
|
|
1144
1186
|
↗ +15% vs last month
|
|
1145
1187
|
</div>
|
|
1146
1188
|
</div>
|
|
1147
1189
|
<div className="rounded-lg border border-orange-500/30 bg-gradient-to-br from-orange-500/20 to-red-500/20 p-4">
|
|
1148
|
-
<div className="text-2xl font-bold
|
|
1149
|
-
<div className="text-
|
|
1150
|
-
<div className="mt-1 text-xs
|
|
1190
|
+
<div className="text-fm-primary text-2xl font-bold">$24.50</div>
|
|
1191
|
+
<div className="text-fm-secondary text-sm">Avg Order Value</div>
|
|
1192
|
+
<div className="text-fm-icon-negative mt-1 text-xs">
|
|
1151
1193
|
↘ -3% vs last month
|
|
1152
1194
|
</div>
|
|
1153
1195
|
</div>
|
|
1154
1196
|
</div>
|
|
1155
1197
|
|
|
1156
|
-
<div className="
|
|
1157
|
-
<div className="text-
|
|
1198
|
+
<div className="border-fm-divider-warning bg-fm-surface-warning-sec rounded-lg border p-4">
|
|
1199
|
+
<div className="text-fm-warning text-sm">
|
|
1158
1200
|
<strong>Note:</strong> The Analytics tab uses{" "}
|
|
1159
|
-
<code className="
|
|
1201
|
+
<code className="bg-fm-surface-secondary rounded px-2 py-1">
|
|
1202
|
+
size="lg"
|
|
1203
|
+
</code>
|
|
1160
1204
|
to emphasize its importance as the primary data view, while
|
|
1161
1205
|
other tabs inherit the default medium size.
|
|
1162
1206
|
</div>
|
|
@@ -1181,7 +1225,7 @@ export const GlowDirectionVariations: Story = {
|
|
|
1181
1225
|
render: () => (
|
|
1182
1226
|
<div className="w-full max-w-4xl space-y-8">
|
|
1183
1227
|
<div className="space-y-4">
|
|
1184
|
-
<h3 className="text-lg font-medium
|
|
1228
|
+
<h3 className="text-fm-primary text-lg font-medium">
|
|
1185
1229
|
Bottom Glow (Default)
|
|
1186
1230
|
</h3>
|
|
1187
1231
|
<Tabs defaultValue="tab1" size="md" className="w-full">
|
|
@@ -1197,24 +1241,24 @@ export const GlowDirectionVariations: Story = {
|
|
|
1197
1241
|
</TabsTrigger>
|
|
1198
1242
|
</TabsList>
|
|
1199
1243
|
<TabsContent value="tab1" className="mt-4">
|
|
1200
|
-
<div className="rounded-lg border
|
|
1201
|
-
<p className="text-
|
|
1244
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1245
|
+
<p className="text-fm-secondary">
|
|
1202
1246
|
Bottom glow creates an underline effect that emphasizes the
|
|
1203
1247
|
tab's connection to content below.
|
|
1204
1248
|
</p>
|
|
1205
1249
|
</div>
|
|
1206
1250
|
</TabsContent>
|
|
1207
1251
|
<TabsContent value="tab2" className="mt-4">
|
|
1208
|
-
<div className="rounded-lg border
|
|
1209
|
-
<p className="text-
|
|
1252
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1253
|
+
<p className="text-fm-secondary">
|
|
1210
1254
|
Perfect for interfaces where you want to draw attention to the
|
|
1211
1255
|
content area.
|
|
1212
1256
|
</p>
|
|
1213
1257
|
</div>
|
|
1214
1258
|
</TabsContent>
|
|
1215
1259
|
<TabsContent value="tab3" className="mt-4">
|
|
1216
|
-
<div className="rounded-lg border
|
|
1217
|
-
<p className="text-
|
|
1260
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1261
|
+
<p className="text-fm-secondary">
|
|
1218
1262
|
Creates a strong visual connection between the tab and its
|
|
1219
1263
|
associated content.
|
|
1220
1264
|
</p>
|
|
@@ -1224,7 +1268,7 @@ export const GlowDirectionVariations: Story = {
|
|
|
1224
1268
|
</div>
|
|
1225
1269
|
|
|
1226
1270
|
<div className="space-y-4">
|
|
1227
|
-
<h3 className="text-lg font-medium
|
|
1271
|
+
<h3 className="text-fm-primary text-lg font-medium">Top Glow</h3>
|
|
1228
1272
|
<Tabs defaultValue="tab1" size="md" className="w-full">
|
|
1229
1273
|
<TabsList className="grid w-full grid-cols-3">
|
|
1230
1274
|
<TabsTrigger value="tab1" glowDirection="top">
|
|
@@ -1238,23 +1282,23 @@ export const GlowDirectionVariations: Story = {
|
|
|
1238
1282
|
</TabsTrigger>
|
|
1239
1283
|
</TabsList>
|
|
1240
1284
|
<TabsContent value="tab1" className="mt-4">
|
|
1241
|
-
<div className="rounded-lg border
|
|
1242
|
-
<p className="text-
|
|
1285
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1286
|
+
<p className="text-fm-secondary">
|
|
1243
1287
|
Top glow creates a subtle highlight effect above the active tab,
|
|
1244
1288
|
perfect for elevated interfaces.
|
|
1245
1289
|
</p>
|
|
1246
1290
|
</div>
|
|
1247
1291
|
</TabsContent>
|
|
1248
1292
|
<TabsContent value="tab2" className="mt-4">
|
|
1249
|
-
<div className="rounded-lg border
|
|
1250
|
-
<p className="text-
|
|
1293
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1294
|
+
<p className="text-fm-secondary">
|
|
1251
1295
|
Alternative glow direction for different visual effects.
|
|
1252
1296
|
</p>
|
|
1253
1297
|
</div>
|
|
1254
1298
|
</TabsContent>
|
|
1255
1299
|
<TabsContent value="tab3" className="mt-4">
|
|
1256
|
-
<div className="rounded-lg border
|
|
1257
|
-
<p className="text-
|
|
1300
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1301
|
+
<p className="text-fm-secondary">
|
|
1258
1302
|
Ideal for creating variety in your interface design.
|
|
1259
1303
|
</p>
|
|
1260
1304
|
</div>
|
|
@@ -1263,7 +1307,7 @@ export const GlowDirectionVariations: Story = {
|
|
|
1263
1307
|
</div>
|
|
1264
1308
|
|
|
1265
1309
|
<div className="space-y-4">
|
|
1266
|
-
<h3 className="text-lg font-medium
|
|
1310
|
+
<h3 className="text-fm-primary text-lg font-medium">
|
|
1267
1311
|
Mixed Glow Directions
|
|
1268
1312
|
</h3>
|
|
1269
1313
|
<Tabs defaultValue="tab1" size="md" className="w-full">
|
|
@@ -1282,32 +1326,32 @@ export const GlowDirectionVariations: Story = {
|
|
|
1282
1326
|
</TabsTrigger>
|
|
1283
1327
|
</TabsList>
|
|
1284
1328
|
<TabsContent value="tab1" className="mt-4">
|
|
1285
|
-
<div className="rounded-lg border
|
|
1286
|
-
<p className="text-
|
|
1329
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1330
|
+
<p className="text-fm-secondary">
|
|
1287
1331
|
You can mix and match glow directions for different visual
|
|
1288
1332
|
effects.
|
|
1289
1333
|
</p>
|
|
1290
1334
|
</div>
|
|
1291
1335
|
</TabsContent>
|
|
1292
1336
|
<TabsContent value="tab2" className="mt-4">
|
|
1293
|
-
<div className="rounded-lg border
|
|
1294
|
-
<p className="text-
|
|
1337
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1338
|
+
<p className="text-fm-secondary">
|
|
1295
1339
|
Each tab can have its own glow direction for maximum
|
|
1296
1340
|
flexibility.
|
|
1297
1341
|
</p>
|
|
1298
1342
|
</div>
|
|
1299
1343
|
</TabsContent>
|
|
1300
1344
|
<TabsContent value="tab3" className="mt-4">
|
|
1301
|
-
<div className="rounded-lg border
|
|
1302
|
-
<p className="text-
|
|
1345
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1346
|
+
<p className="text-fm-secondary">
|
|
1303
1347
|
Useful for creating visual hierarchy or emphasizing specific
|
|
1304
1348
|
tabs.
|
|
1305
1349
|
</p>
|
|
1306
1350
|
</div>
|
|
1307
1351
|
</TabsContent>
|
|
1308
1352
|
<TabsContent value="tab4" className="mt-4">
|
|
1309
|
-
<div className="rounded-lg border
|
|
1310
|
-
<p className="text-
|
|
1353
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1354
|
+
<p className="text-fm-secondary">
|
|
1311
1355
|
Experiment with different combinations to achieve your desired
|
|
1312
1356
|
design.
|
|
1313
1357
|
</p>
|
|
@@ -1316,8 +1360,8 @@ export const GlowDirectionVariations: Story = {
|
|
|
1316
1360
|
</Tabs>
|
|
1317
1361
|
</div>
|
|
1318
1362
|
|
|
1319
|
-
<div className="
|
|
1320
|
-
<div className="text-
|
|
1363
|
+
<div className="border-fm-divider-secondary bg-fm-surface-info-sec rounded-lg border p-4">
|
|
1364
|
+
<div className="text-fm-info text-sm">
|
|
1321
1365
|
<strong>Note:</strong> The glowDirection prop allows you to customize
|
|
1322
1366
|
the visual effect of active tabs. Use "bottom" (default) for an
|
|
1323
1367
|
underline-style glow or "top" for a subtle highlight effect. You can
|
|
@@ -1356,10 +1400,10 @@ export const InteractiveStates: Story = {
|
|
|
1356
1400
|
return (
|
|
1357
1401
|
<div className="w-full max-w-3xl space-y-6">
|
|
1358
1402
|
<div className="text-center">
|
|
1359
|
-
<h3 className="mb-2 text-lg font-medium
|
|
1403
|
+
<h3 className="text-fm-primary mb-2 text-lg font-medium">
|
|
1360
1404
|
Interactive States Demo
|
|
1361
1405
|
</h3>
|
|
1362
|
-
<p className="text-
|
|
1406
|
+
<p className="text-fm-secondary text-sm">
|
|
1363
1407
|
Click tabs to see loading states and transitions
|
|
1364
1408
|
</p>
|
|
1365
1409
|
</div>
|
|
@@ -1377,7 +1421,7 @@ export const InteractiveStates: Story = {
|
|
|
1377
1421
|
</TabsTrigger>
|
|
1378
1422
|
<TabsTrigger value="loading" className="gap-2" disabled={isLoading}>
|
|
1379
1423
|
{isLoading && activeTab === "loading" ? (
|
|
1380
|
-
<div className="h-4 w-4 animate-spin rounded-full border-2
|
|
1424
|
+
<div className="border-fm-divider-secondary border-t-fm-primary h-4 w-4 animate-spin rounded-full border-2" />
|
|
1381
1425
|
) : (
|
|
1382
1426
|
<AlertIcon className="h-4 w-4" />
|
|
1383
1427
|
)}
|
|
@@ -1394,62 +1438,66 @@ export const InteractiveStates: Story = {
|
|
|
1394
1438
|
</TabsList>
|
|
1395
1439
|
|
|
1396
1440
|
<TabsContent value="normal" className="mt-6">
|
|
1397
|
-
<div className="rounded-lg border
|
|
1398
|
-
<h3 className="mb-4 text-lg font-semibold
|
|
1441
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1442
|
+
<h3 className="text-fm-primary mb-4 text-lg font-semibold">
|
|
1399
1443
|
Normal State
|
|
1400
1444
|
</h3>
|
|
1401
|
-
<p className="mb-4
|
|
1445
|
+
<p className="text-fm-secondary mb-4">
|
|
1402
1446
|
This is the default state of the component with all
|
|
1403
1447
|
functionality working normally.
|
|
1404
1448
|
</p>
|
|
1405
1449
|
<div className="grid grid-cols-2 gap-4">
|
|
1406
|
-
<div className="
|
|
1407
|
-
<div className="text-lg font-semibold
|
|
1408
|
-
|
|
1450
|
+
<div className="border-fm-divider-secondary bg-fm-surface-info-sec rounded-lg border p-3">
|
|
1451
|
+
<div className="text-fm-primary text-lg font-semibold">
|
|
1452
|
+
98.5%
|
|
1453
|
+
</div>
|
|
1454
|
+
<div className="text-fm-secondary text-sm">System Uptime</div>
|
|
1409
1455
|
</div>
|
|
1410
|
-
<div className="
|
|
1411
|
-
<div className="text-lg font-semibold
|
|
1412
|
-
|
|
1456
|
+
<div className="border-fm-divider-positive bg-fm-surface-positive-sec rounded-lg border p-3">
|
|
1457
|
+
<div className="text-fm-primary text-lg font-semibold">
|
|
1458
|
+
1,247
|
|
1459
|
+
</div>
|
|
1460
|
+
<div className="text-fm-secondary text-sm">Active Users</div>
|
|
1413
1461
|
</div>
|
|
1414
1462
|
</div>
|
|
1415
1463
|
</div>
|
|
1416
1464
|
</TabsContent>
|
|
1417
1465
|
|
|
1418
1466
|
<TabsContent value="loading" className="mt-6">
|
|
1419
|
-
<div className="rounded-lg border
|
|
1467
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1420
1468
|
{isLoading ? (
|
|
1421
1469
|
<div className="py-8 text-center">
|
|
1422
|
-
<div className="mx-auto mb-4 h-8 w-8 animate-spin rounded-full border-2
|
|
1423
|
-
<h3 className="mb-2 text-lg font-semibold
|
|
1470
|
+
<div className="border-fm-divider-secondary border-t-fm-primary mx-auto mb-4 h-8 w-8 animate-spin rounded-full border-2" />
|
|
1471
|
+
<h3 className="text-fm-primary mb-2 text-lg font-semibold">
|
|
1424
1472
|
Loading Content...
|
|
1425
1473
|
</h3>
|
|
1426
|
-
<p className="text-
|
|
1474
|
+
<p className="text-fm-secondary">
|
|
1427
1475
|
Please wait while we fetch the latest data.
|
|
1428
1476
|
</p>
|
|
1429
1477
|
</div>
|
|
1430
1478
|
) : (
|
|
1431
1479
|
<>
|
|
1432
|
-
<h3 className="mb-4 text-lg font-semibold
|
|
1480
|
+
<h3 className="text-fm-primary mb-4 text-lg font-semibold">
|
|
1433
1481
|
Loading State Demo
|
|
1434
1482
|
</h3>
|
|
1435
|
-
<p className="mb-4
|
|
1483
|
+
<p className="text-fm-secondary mb-4">
|
|
1436
1484
|
This tab demonstrates loading states and async content
|
|
1437
1485
|
fetching.
|
|
1438
1486
|
</p>
|
|
1439
1487
|
<div className="space-y-3">
|
|
1440
|
-
<div className="flex items-center gap-3 rounded-lg
|
|
1441
|
-
<div className="flex h-5 w-5 items-center justify-center rounded-full
|
|
1442
|
-
<TickCircleIcon className="h-3 w-3
|
|
1488
|
+
<div className="bg-fm-surface-secondary flex items-center gap-3 rounded-lg p-3">
|
|
1489
|
+
<div className="bg-fm-surface-positive flex h-5 w-5 items-center justify-center rounded-full">
|
|
1490
|
+
<TickCircleIcon className="text-fm-primary h-3 w-3" />
|
|
1443
1491
|
</div>
|
|
1444
|
-
<span className="text-
|
|
1492
|
+
<span className="text-fm-secondary">
|
|
1445
1493
|
Content loaded successfully
|
|
1446
1494
|
</span>
|
|
1447
1495
|
</div>
|
|
1448
|
-
<div className="flex items-center gap-3 rounded-lg
|
|
1449
|
-
<div className="flex h-5 w-5 items-center justify-center rounded-full
|
|
1450
|
-
<AlertIcon className="h-3 w-3
|
|
1496
|
+
<div className="bg-fm-surface-secondary flex items-center gap-3 rounded-lg p-3">
|
|
1497
|
+
<div className="bg-fm-surface-info flex h-5 w-5 items-center justify-center rounded-full">
|
|
1498
|
+
<AlertIcon className="text-fm-primary h-3 w-3" />
|
|
1451
1499
|
</div>
|
|
1452
|
-
<span className="text-
|
|
1500
|
+
<span className="text-fm-secondary">
|
|
1453
1501
|
Data synchronized with server
|
|
1454
1502
|
</span>
|
|
1455
1503
|
</div>
|
|
@@ -1460,31 +1508,31 @@ export const InteractiveStates: Story = {
|
|
|
1460
1508
|
</TabsContent>
|
|
1461
1509
|
|
|
1462
1510
|
<TabsContent value="error" className="mt-6">
|
|
1463
|
-
<div className="
|
|
1511
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1464
1512
|
<div className="mb-4 flex items-start gap-3">
|
|
1465
|
-
<CrossIcon className="mt-0.5 h-6 w-6 flex-shrink-0
|
|
1513
|
+
<CrossIcon className="text-fm-icon-negative mt-0.5 h-6 w-6 flex-shrink-0" />
|
|
1466
1514
|
<div>
|
|
1467
|
-
<h3 className="text-lg font-semibold
|
|
1515
|
+
<h3 className="text-fm-primary text-lg font-semibold">
|
|
1468
1516
|
Error State
|
|
1469
1517
|
</h3>
|
|
1470
|
-
<p className="text-
|
|
1518
|
+
<p className="text-fm-secondary">
|
|
1471
1519
|
Something went wrong while loading the content.
|
|
1472
1520
|
</p>
|
|
1473
1521
|
</div>
|
|
1474
1522
|
</div>
|
|
1475
1523
|
|
|
1476
|
-
<div className="mb-4 rounded-lg border
|
|
1477
|
-
<div className="text-
|
|
1524
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary mb-4 rounded-lg border p-4">
|
|
1525
|
+
<div className="text-fm-secondary text-sm">
|
|
1478
1526
|
<strong>Error:</strong> Failed to fetch data from the server.
|
|
1479
1527
|
Please check your connection and try again.
|
|
1480
1528
|
</div>
|
|
1481
1529
|
</div>
|
|
1482
1530
|
|
|
1483
1531
|
<div className="flex gap-2">
|
|
1484
|
-
<button className="
|
|
1532
|
+
<button className="bg-fm-surface-negative text-fm-surface-primary hover:bg-fm-surface-negative rounded-lg px-4 py-2 transition-colors">
|
|
1485
1533
|
Retry
|
|
1486
1534
|
</button>
|
|
1487
|
-
<button className="
|
|
1535
|
+
<button className="bg-fm-surface-secondary text-fm-primary hover:bg-fm-surface-tertiary rounded-lg px-4 py-2 transition-colors">
|
|
1488
1536
|
Report Issue
|
|
1489
1537
|
</button>
|
|
1490
1538
|
</div>
|
|
@@ -1492,38 +1540,46 @@ export const InteractiveStates: Story = {
|
|
|
1492
1540
|
</TabsContent>
|
|
1493
1541
|
|
|
1494
1542
|
<TabsContent value="success" className="mt-6">
|
|
1495
|
-
<div className="
|
|
1543
|
+
<div className="border-fm-divider-positive bg-fm-surface-positive-sec rounded-lg border p-6">
|
|
1496
1544
|
<div className="mb-4 flex items-start gap-3">
|
|
1497
|
-
<TickCircleIcon className="mt-0.5 h-6 w-6 flex-shrink-0
|
|
1545
|
+
<TickCircleIcon className="text-fm-positive mt-0.5 h-6 w-6 flex-shrink-0" />
|
|
1498
1546
|
<div>
|
|
1499
|
-
<h3 className="text-lg font-semibold
|
|
1547
|
+
<h3 className="text-fm-primary text-lg font-semibold">
|
|
1500
1548
|
Success State
|
|
1501
1549
|
</h3>
|
|
1502
|
-
<p className="text-
|
|
1550
|
+
<p className="text-fm-secondary">
|
|
1503
1551
|
Operation completed successfully!
|
|
1504
1552
|
</p>
|
|
1505
1553
|
</div>
|
|
1506
1554
|
</div>
|
|
1507
1555
|
|
|
1508
1556
|
<div className="space-y-3">
|
|
1509
|
-
<div className="
|
|
1510
|
-
<div className="text-
|
|
1557
|
+
<div className="border-fm-divider-positive bg-fm-surface-positive-sec rounded-lg border p-4">
|
|
1558
|
+
<div className="text-fm-positive text-sm">
|
|
1511
1559
|
✅ All systems are operational and running smoothly.
|
|
1512
1560
|
</div>
|
|
1513
1561
|
</div>
|
|
1514
1562
|
|
|
1515
1563
|
<div className="grid grid-cols-3 gap-3">
|
|
1516
|
-
<div className="rounded-lg
|
|
1517
|
-
<div className="text-lg font-semibold
|
|
1518
|
-
|
|
1564
|
+
<div className="bg-fm-surface-secondary rounded-lg p-3 text-center">
|
|
1565
|
+
<div className="text-fm-primary text-lg font-semibold">
|
|
1566
|
+
100%
|
|
1567
|
+
</div>
|
|
1568
|
+
<div className="text-fm-secondary text-xs">
|
|
1569
|
+
Success Rate
|
|
1570
|
+
</div>
|
|
1519
1571
|
</div>
|
|
1520
|
-
<div className="rounded-lg
|
|
1521
|
-
<div className="text-lg font-semibold
|
|
1522
|
-
|
|
1572
|
+
<div className="bg-fm-surface-secondary rounded-lg p-3 text-center">
|
|
1573
|
+
<div className="text-fm-primary text-lg font-semibold">
|
|
1574
|
+
0ms
|
|
1575
|
+
</div>
|
|
1576
|
+
<div className="text-fm-secondary text-xs">Error Rate</div>
|
|
1523
1577
|
</div>
|
|
1524
|
-
<div className="rounded-lg
|
|
1525
|
-
<div className="text-lg font-semibold
|
|
1526
|
-
|
|
1578
|
+
<div className="bg-fm-surface-secondary rounded-lg p-3 text-center">
|
|
1579
|
+
<div className="text-fm-primary text-lg font-semibold">
|
|
1580
|
+
Fast
|
|
1581
|
+
</div>
|
|
1582
|
+
<div className="text-fm-secondary text-xs">Performance</div>
|
|
1527
1583
|
</div>
|
|
1528
1584
|
</div>
|
|
1529
1585
|
</div>
|
|
@@ -1531,10 +1587,10 @@ export const InteractiveStates: Story = {
|
|
|
1531
1587
|
</TabsContent>
|
|
1532
1588
|
</Tabs>
|
|
1533
1589
|
|
|
1534
|
-
<div className="text-
|
|
1590
|
+
<div className="text-fm-secondary text-center text-xs">
|
|
1535
1591
|
<p>
|
|
1536
1592
|
Current active tab:{" "}
|
|
1537
|
-
<span className="
|
|
1593
|
+
<span className="bg-fm-surface-secondary rounded px-2 py-0.5 font-mono">
|
|
1538
1594
|
{activeTab}
|
|
1539
1595
|
</span>
|
|
1540
1596
|
</p>
|