aural-ui 4.0.1 → 4.2.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/README.md +8 -1
- 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 +90 -90
- package/dist/index.js +90 -90
- package/package.json +8 -3
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import React from "react"
|
|
2
2
|
import type { Meta, StoryObj } from "@storybook/react-vite"
|
|
3
3
|
|
|
4
|
+
import { CoinToonsIcon } from "src/ui/icons/coin-toons-icon"
|
|
5
|
+
import { HeartIcon } from "src/ui/icons/heart-icon"
|
|
6
|
+
import { StarIcon } from "src/ui/icons/star-icon"
|
|
7
|
+
import { StoreCoinIcon } from "src/ui/icons/store-coin-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 { CoinIcon } from "."
|
|
5
19
|
|
|
6
20
|
const meta: Meta<typeof CoinIcon> = {
|
|
@@ -18,1219 +32,72 @@ const meta: Meta<typeof CoinIcon> = {
|
|
|
18
32
|
},
|
|
19
33
|
docs: {
|
|
20
34
|
page: () => (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
padding: 0 ;
|
|
33
|
-
margin: 0 ;
|
|
34
|
-
background: transparent ;
|
|
35
|
-
}
|
|
36
|
-
.docs-story {
|
|
37
|
-
background: transparent ;
|
|
38
|
-
}
|
|
39
|
-
.sbdocs {
|
|
40
|
-
background: transparent ;
|
|
41
|
-
}
|
|
42
|
-
body {
|
|
43
|
-
background: 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
|
-
`}
|
|
81
|
-
</style>
|
|
82
|
-
|
|
83
|
-
<div className="from-fm-surface-primary via-fm-icon-warning/5 to-fm-surface-primary min-h-screen bg-linear-to-br">
|
|
84
|
-
{/* Header */}
|
|
85
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary relative overflow-hidden border-b backdrop-blur-xl">
|
|
86
|
-
<div className="from-fm-icon-warning/10 to-fm-icon-warning/10 absolute inset-0 bg-linear-to-r via-transparent" />
|
|
87
|
-
<div className="relative !mx-auto max-w-7xl px-6 py-16">
|
|
88
|
-
<div className="!space-y-6 text-center">
|
|
89
|
-
<div className="border-fm-icon-warning/30 from-fm-icon-warning/20 to-fm-icon-warning/20 !mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border bg-linear-to-br">
|
|
90
|
-
<CoinIcon className="h-12 w-12" />
|
|
91
|
-
</div>
|
|
92
|
-
<h1 className="text-fm-icon-active! text-5xl font-bold">
|
|
93
|
-
CoinIcon
|
|
94
|
-
</h1>
|
|
95
|
-
<p className="text-fm-secondary! !mx-auto max-w-3xl text-xl leading-relaxed">
|
|
96
|
-
A golden coin icon with authentic metallic shine and
|
|
97
|
-
dimensional depth. Perfect for financial applications,
|
|
98
|
-
reward systems, gaming interfaces, e-commerce platforms, and
|
|
99
|
-
any interface where currency, earnings, or value
|
|
100
|
-
representation is needed.
|
|
101
|
-
</p>
|
|
102
|
-
|
|
103
|
-
{/* Stats */}
|
|
104
|
-
<div className="flex items-center justify-center gap-8 pt-8">
|
|
105
|
-
<div className="text-center">
|
|
106
|
-
<div className="text-fm-icon-warning text-3xl font-bold">
|
|
107
|
-
Currency
|
|
108
|
-
</div>
|
|
109
|
-
<div className="text-fm-tertiary text-sm">
|
|
110
|
-
Financial value
|
|
111
|
-
</div>
|
|
112
|
-
</div>
|
|
113
|
-
<div className="bg-fm-divider-primary h-8 w-px" />
|
|
114
|
-
<div className="text-center">
|
|
115
|
-
<div className="text-fm-icon-warning text-3xl font-bold">
|
|
116
|
-
Rewards
|
|
117
|
-
</div>
|
|
118
|
-
<div className="text-fm-tertiary text-sm">
|
|
119
|
-
Achievement system
|
|
120
|
-
</div>
|
|
121
|
-
</div>
|
|
122
|
-
<div className="bg-fm-divider-primary h-8 w-px" />
|
|
123
|
-
<div className="text-center">
|
|
124
|
-
<div className="text-fm-icon-warning text-3xl font-bold">
|
|
125
|
-
Premium
|
|
126
|
-
</div>
|
|
127
|
-
<div className="text-fm-tertiary text-sm">
|
|
128
|
-
Golden standard
|
|
129
|
-
</div>
|
|
130
|
-
</div>
|
|
131
|
-
</div>
|
|
132
|
-
</div>
|
|
133
|
-
</div>
|
|
134
|
-
</div>
|
|
135
|
-
|
|
136
|
-
{/* Content */}
|
|
137
|
-
<div className="!mx-auto max-w-7xl !space-y-16 px-6 py-12">
|
|
138
|
-
{/* Quick Usage */}
|
|
139
|
-
<div className="!space-y-8">
|
|
140
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
141
|
-
Quick Start
|
|
142
|
-
</h2>
|
|
143
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
144
|
-
<div className="!space-y-4">
|
|
145
|
-
<h3 className="text-fm-icon-warning! text-xl font-semibold">
|
|
146
|
-
Basic Usage
|
|
147
|
-
</h3>
|
|
148
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
149
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
150
|
-
{`import { CoinIcon } from "@icons/coin-icon"
|
|
151
|
-
|
|
152
|
-
function WalletBalance() {
|
|
35
|
+
<AuralIconDocsPage
|
|
36
|
+
accentToken="warning"
|
|
37
|
+
features={[
|
|
38
|
+
{ title: "Currency", description: "In-app coin / token icon" },
|
|
39
|
+
{ title: "Rewards", description: "Earnings and balance display" },
|
|
40
|
+
{ title: "Accessible", description: "ARIA-ready by default" },
|
|
41
|
+
]}
|
|
42
|
+
quickStart={{
|
|
43
|
+
codeExample: `import { CoinIcon } from "src/ui/icons/coin-icon"
|
|
44
|
+
|
|
45
|
+
function CoinBalance() {
|
|
153
46
|
return (
|
|
154
|
-
<div className="flex items-center gap-
|
|
155
|
-
<CoinIcon className="h-5 w-5" />
|
|
156
|
-
<span
|
|
47
|
+
<div className="flex items-center gap-1">
|
|
48
|
+
<CoinIcon className="h-5 w-5 text-fm-icon-warning" />
|
|
49
|
+
<span>1,200</span>
|
|
157
50
|
</div>
|
|
158
51
|
)
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
Live Preview
|
|
167
|
-
</h3>
|
|
168
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex h-32 items-center justify-center rounded-lg border">
|
|
169
|
-
<div className="border-fm-icon-warning/20 bg-fm-icon-warning/10 flex items-center gap-3 rounded-lg border px-4 py-2">
|
|
170
|
-
<CoinIcon className="h-5 w-5" />
|
|
171
|
-
<span className="text-fm-icon-warning font-medium">
|
|
172
|
-
1,247 coins
|
|
173
|
-
</span>
|
|
174
|
-
</div>
|
|
175
|
-
</div>
|
|
176
|
-
</div>
|
|
177
|
-
</div>
|
|
178
|
-
</div>
|
|
179
|
-
|
|
180
|
-
{/* Props Documentation */}
|
|
181
|
-
<div className="!space-y-8">
|
|
182
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
183
|
-
Props & Configuration
|
|
184
|
-
</h2>
|
|
185
|
-
|
|
186
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary overflow-hidden rounded-lg border">
|
|
187
|
-
<div className="bg-fm-surface-secondary p-4">
|
|
188
|
-
<h3 className="text-fm-icon-active! text-xl font-semibold">
|
|
189
|
-
Props
|
|
190
|
-
</h3>
|
|
191
|
-
</div>
|
|
192
|
-
<table className="!my-0 w-full">
|
|
193
|
-
<thead className="bg-fm-surface-secondary">
|
|
194
|
-
<tr className="border-fm-divider-secondary border-b">
|
|
195
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
196
|
-
Prop
|
|
197
|
-
</th>
|
|
198
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
199
|
-
Type
|
|
200
|
-
</th>
|
|
201
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
202
|
-
Default
|
|
203
|
-
</th>
|
|
204
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
205
|
-
Description
|
|
206
|
-
</th>
|
|
207
|
-
</tr>
|
|
208
|
-
</thead>
|
|
209
|
-
<tbody>
|
|
210
|
-
{" "}
|
|
211
|
-
<tr className="bg-fm-surface-secondary!">
|
|
212
|
-
<td className="text-fm-icon-info! px-6 py-4 font-mono text-sm">
|
|
213
|
-
withAccessibility
|
|
214
|
-
</td>
|
|
215
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
216
|
-
boolean
|
|
217
|
-
</td>
|
|
218
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
219
|
-
true
|
|
220
|
-
</td>
|
|
221
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
222
|
-
Whether to wrap the icon with accessibility feature
|
|
223
|
-
</td>
|
|
224
|
-
</tr>
|
|
225
|
-
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
226
|
-
<td className="text-fm-icon-warning! px-6 py-4 font-mono text-sm">
|
|
227
|
-
height
|
|
228
|
-
</td>
|
|
229
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
230
|
-
number | string
|
|
231
|
-
</td>
|
|
232
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
233
|
-
24
|
|
234
|
-
</td>
|
|
235
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
236
|
-
Height of the icon in pixels
|
|
237
|
-
</td>
|
|
238
|
-
</tr>
|
|
239
|
-
<tr className="border-fm-divider-tertiary border-b">
|
|
240
|
-
<td className="text-fm-icon-warning! px-6 py-4 font-mono text-sm">
|
|
241
|
-
className
|
|
242
|
-
</td>
|
|
243
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
244
|
-
string
|
|
245
|
-
</td>
|
|
246
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
247
|
-
-
|
|
248
|
-
</td>
|
|
249
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
250
|
-
CSS classes for styling (use for size overrides)
|
|
251
|
-
</td>
|
|
252
|
-
</tr>
|
|
253
|
-
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
254
|
-
<td className="text-fm-icon-warning! px-6 py-4 font-mono text-sm">
|
|
255
|
-
style
|
|
256
|
-
</td>
|
|
257
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
258
|
-
CSSProperties
|
|
259
|
-
</td>
|
|
260
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
261
|
-
-
|
|
262
|
-
</td>
|
|
263
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
264
|
-
Inline styles (avoid changing fill colors)
|
|
265
|
-
</td>
|
|
266
|
-
</tr>
|
|
267
|
-
<tr className="border-fm-divider-tertiary border-b">
|
|
268
|
-
<td className="text-fm-icon-warning! px-6 py-4 font-mono text-sm">
|
|
269
|
-
onClick
|
|
270
|
-
</td>
|
|
271
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
272
|
-
function
|
|
273
|
-
</td>
|
|
274
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
275
|
-
-
|
|
276
|
-
</td>
|
|
277
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
278
|
-
Click handler for interactive use
|
|
279
|
-
</td>
|
|
280
|
-
</tr>
|
|
281
|
-
<tr className="bg-fm-surface-secondary!">
|
|
282
|
-
<td className="text-fm-icon-warning! px-6 py-4 font-mono text-sm">
|
|
283
|
-
...svgProps
|
|
284
|
-
</td>
|
|
285
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
286
|
-
SVGProps
|
|
287
|
-
</td>
|
|
288
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
289
|
-
-
|
|
290
|
-
</td>
|
|
291
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
292
|
-
All standard SVG element props
|
|
293
|
-
</td>
|
|
294
|
-
</tr>
|
|
295
|
-
</tbody>
|
|
296
|
-
</table>
|
|
297
|
-
</div>
|
|
298
|
-
|
|
299
|
-
<div className="border-fm-icon-warning/20 bg-fm-icon-warning/10 rounded-lg border p-4">
|
|
300
|
-
<div className="text-fm-icon-warning flex items-center gap-2 text-sm">
|
|
301
|
-
<CoinIcon className="h-4 w-4" />
|
|
302
|
-
<span>
|
|
303
|
-
<strong>Note:</strong> CoinIcon uses predefined fill
|
|
304
|
-
colors for authentic golden appearance. Avoid overriding
|
|
305
|
-
fill colors to maintain visual consistency.
|
|
306
|
-
</span>
|
|
307
|
-
</div>
|
|
308
|
-
</div>
|
|
309
|
-
</div>
|
|
310
|
-
|
|
311
|
-
{/* Size Variations */}
|
|
312
|
-
<div className="!space-y-8">
|
|
313
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
314
|
-
Size Variations
|
|
315
|
-
</h2>
|
|
316
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-8">
|
|
317
|
-
<div className="!space-y-6">
|
|
318
|
-
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
319
|
-
<div className="!space-y-4">
|
|
320
|
-
<h3 className="text-fm-icon-warning! text-lg font-semibold">
|
|
321
|
-
Standard Sizes
|
|
322
|
-
</h3>
|
|
323
|
-
<div className="bg-fm-surface-secondary flex items-end gap-6 rounded-lg p-6">
|
|
324
|
-
<div className="text-center">
|
|
325
|
-
<CoinIcon className="!mx-auto mb-2 h-3 w-3" />
|
|
326
|
-
<span className="text-fm-tertiary text-xs">
|
|
327
|
-
12px
|
|
328
|
-
</span>
|
|
329
|
-
</div>
|
|
330
|
-
<div className="text-center">
|
|
331
|
-
<CoinIcon className="!mx-auto mb-2 h-4 w-4" />
|
|
332
|
-
<span className="text-fm-tertiary text-xs">
|
|
333
|
-
16px
|
|
334
|
-
</span>
|
|
335
|
-
</div>
|
|
336
|
-
<div className="text-center">
|
|
337
|
-
<CoinIcon className="!mx-auto mb-2 h-5 w-5" />
|
|
338
|
-
<span className="text-fm-tertiary text-xs">
|
|
339
|
-
20px
|
|
340
|
-
</span>
|
|
341
|
-
</div>
|
|
342
|
-
<div className="text-center">
|
|
343
|
-
<CoinIcon className="!mx-auto mb-2 h-6 w-6" />
|
|
344
|
-
<span className="text-fm-tertiary text-xs">
|
|
345
|
-
24px
|
|
346
|
-
</span>
|
|
347
|
-
</div>
|
|
348
|
-
<div className="text-center">
|
|
349
|
-
<CoinIcon className="!mx-auto mb-2 h-8 w-8" />
|
|
350
|
-
<span className="text-fm-tertiary text-xs">
|
|
351
|
-
32px
|
|
352
|
-
</span>
|
|
353
|
-
</div>
|
|
354
|
-
<div className="text-center">
|
|
355
|
-
<CoinIcon className="!mx-auto mb-2 h-12 w-12" />
|
|
356
|
-
<span className="text-fm-tertiary text-xs">
|
|
357
|
-
48px
|
|
358
|
-
</span>
|
|
359
|
-
</div>
|
|
360
|
-
</div>
|
|
361
|
-
</div>
|
|
362
|
-
|
|
363
|
-
<div className="!space-y-4">
|
|
364
|
-
<h3 className="text-fm-icon-warning! text-lg font-semibold">
|
|
365
|
-
Code Example
|
|
366
|
-
</h3>
|
|
367
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
368
|
-
<pre className="text-fm-icon-info! overflow-x-auto text-sm">
|
|
369
|
-
{`// Small (16px) - inline currency
|
|
370
|
-
<CoinIcon className="h-4 w-4" />
|
|
371
|
-
|
|
372
|
-
// Medium (24px) - standard interface
|
|
373
|
-
<CoinIcon className="h-6 w-6" />
|
|
374
|
-
|
|
375
|
-
// Large (32px) - prominent displays
|
|
376
|
-
<CoinIcon className="h-8 w-8" />
|
|
377
|
-
|
|
378
|
-
// Custom size
|
|
379
|
-
<CoinIcon width={40} height={40} />`}
|
|
380
|
-
</pre>
|
|
381
|
-
</div>
|
|
382
|
-
</div>
|
|
383
|
-
</div>
|
|
384
|
-
</div>
|
|
385
|
-
</div>
|
|
386
|
-
</div>
|
|
387
|
-
|
|
388
|
-
{/* Color & Design */}
|
|
389
|
-
<div className="!space-y-8">
|
|
390
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
391
|
-
Design & Styling
|
|
392
|
-
</h2>
|
|
393
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
394
|
-
<div className="!space-y-4">
|
|
395
|
-
<h3 className="text-fm-icon-warning! text-lg font-semibold">
|
|
396
|
-
Built-in Golden Design
|
|
397
|
-
</h3>
|
|
398
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
399
|
-
<div className="flex items-center gap-4">
|
|
400
|
-
<div className="bg-fm-surface-secondary flex h-12 w-12 items-center justify-center rounded-lg">
|
|
401
|
-
<CoinIcon className="h-8 w-8" />
|
|
402
|
-
</div>
|
|
403
|
-
<div>
|
|
404
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
405
|
-
Authentic Golden Color
|
|
406
|
-
</div>
|
|
407
|
-
<div className="text-fm-tertiary text-xs">
|
|
408
|
-
#FFB340 base with shine overlay
|
|
409
|
-
</div>
|
|
410
|
-
</div>
|
|
411
|
-
</div>
|
|
412
|
-
<div className="flex items-center gap-4">
|
|
413
|
-
<div className="bg-fm-surface-secondary flex h-12 w-12 items-center justify-center rounded-lg">
|
|
414
|
-
<CoinIcon className="h-8 w-8" />
|
|
415
|
-
</div>
|
|
416
|
-
<div>
|
|
417
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
418
|
-
Dimensional Shine
|
|
419
|
-
</div>
|
|
420
|
-
<div className="text-fm-tertiary text-xs">
|
|
421
|
-
#FFF5C6 highlight for depth
|
|
422
|
-
</div>
|
|
423
|
-
</div>
|
|
424
|
-
</div>
|
|
425
|
-
<div className="flex items-center gap-4">
|
|
426
|
-
<div className="bg-fm-icon-warning/10 flex h-12 w-12 items-center justify-center rounded-lg">
|
|
427
|
-
<CoinIcon className="h-8 w-8" />
|
|
428
|
-
</div>
|
|
429
|
-
<div>
|
|
430
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
431
|
-
Currency Symbol
|
|
432
|
-
</div>
|
|
433
|
-
<div className="text-fm-tertiary text-xs">
|
|
434
|
-
#FFFAE8 detail for recognition
|
|
435
|
-
</div>
|
|
436
|
-
</div>
|
|
437
|
-
</div>
|
|
438
|
-
</div>
|
|
439
|
-
</div>
|
|
440
|
-
|
|
441
|
-
<div className="!space-y-4">
|
|
442
|
-
<h3 className="text-fm-icon-warning! text-lg font-semibold">
|
|
443
|
-
Usage Guidelines
|
|
444
|
-
</h3>
|
|
445
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
446
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
447
|
-
{`// Recommended usage
|
|
448
|
-
<CoinIcon className="h-5 w-5" />
|
|
449
|
-
|
|
450
|
-
// With balance display
|
|
451
|
-
<div className="flex items-center gap-2">
|
|
452
|
-
<CoinIcon className="h-4 w-4" />
|
|
453
|
-
<span className="text-yellow-400">1,247</span>
|
|
454
|
-
</div>
|
|
455
|
-
|
|
456
|
-
// Interactive coin button
|
|
457
|
-
<button
|
|
458
|
-
className="flex items-center gap-2 p-2 rounded-lg
|
|
459
|
-
hover:bg-yellow-500/10 transition-colors"
|
|
460
|
-
>
|
|
461
|
-
<CoinIcon className="h-5 w-5" />
|
|
462
|
-
<span>Earn Coins</span>
|
|
463
|
-
</button>
|
|
464
|
-
|
|
465
|
-
// Avoid overriding colors
|
|
466
|
-
// ❌ Don't do this:
|
|
467
|
-
<CoinIcon style={{ fill: 'red' }} />
|
|
468
|
-
|
|
469
|
-
// ✅ Use as designed:
|
|
470
|
-
<CoinIcon className="h-6 w-6" />`}
|
|
471
|
-
</pre>
|
|
472
|
-
</div>
|
|
473
|
-
</div>
|
|
474
|
-
</div>
|
|
52
|
+
}`,
|
|
53
|
+
livePreview: (
|
|
54
|
+
<div className="flex items-center gap-1">
|
|
55
|
+
<CoinIcon className="text-fm-icon-warning h-6 w-6" />
|
|
56
|
+
<span className="text-fm-primary font-fm-text text-sm">
|
|
57
|
+
1,200
|
|
58
|
+
</span>
|
|
475
59
|
</div>
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
<span className="text-fm-icon-warning text-xl font-bold">
|
|
505
|
-
2,847
|
|
506
|
-
</span>
|
|
507
|
-
</div>
|
|
508
|
-
</div>
|
|
509
|
-
</div>
|
|
510
|
-
<div className="space-y-4 p-4">
|
|
511
|
-
<div className="flex items-center justify-between">
|
|
512
|
-
<div className="flex items-center gap-3">
|
|
513
|
-
<div className="bg-fm-icon-positive/20 flex h-8 w-8 items-center justify-center rounded-lg">
|
|
514
|
-
<span className="text-fm-icon-positive text-sm">
|
|
515
|
-
+
|
|
516
|
-
</span>
|
|
517
|
-
</div>
|
|
518
|
-
<div>
|
|
519
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
520
|
-
Daily Bonus
|
|
521
|
-
</div>
|
|
522
|
-
<div className="text-fm-tertiary text-xs">
|
|
523
|
-
Earned today
|
|
524
|
-
</div>
|
|
525
|
-
</div>
|
|
526
|
-
</div>
|
|
527
|
-
<div className="flex items-center gap-1">
|
|
528
|
-
<CoinIcon className="h-4 w-4" />
|
|
529
|
-
<span className="text-fm-icon-positive font-medium">
|
|
530
|
-
+50
|
|
531
|
-
</span>
|
|
532
|
-
</div>
|
|
533
|
-
</div>
|
|
534
|
-
<div className="flex items-center justify-between">
|
|
535
|
-
<div className="flex items-center gap-3">
|
|
536
|
-
<div className="bg-fm-icon-info/20 flex h-8 w-8 items-center justify-center rounded-lg">
|
|
537
|
-
<span className="text-fm-icon-info text-sm">
|
|
538
|
-
🎯
|
|
539
|
-
</span>
|
|
540
|
-
</div>
|
|
541
|
-
<div>
|
|
542
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
543
|
-
Quest Reward
|
|
544
|
-
</div>
|
|
545
|
-
<div className="text-fm-tertiary text-xs">
|
|
546
|
-
Challenge completed
|
|
547
|
-
</div>
|
|
548
|
-
</div>
|
|
549
|
-
</div>
|
|
550
|
-
<div className="flex items-center gap-1">
|
|
551
|
-
<CoinIcon className="h-4 w-4" />
|
|
552
|
-
<span className="text-fm-icon-info font-medium">
|
|
553
|
-
+125
|
|
554
|
-
</span>
|
|
555
|
-
</div>
|
|
556
|
-
</div>
|
|
557
|
-
<div className="flex items-center justify-between">
|
|
558
|
-
<div className="flex items-center gap-3">
|
|
559
|
-
<div className="bg-fm-icon-negative/20 flex h-8 w-8 items-center justify-center rounded-lg">
|
|
560
|
-
<span className="text-fm-icon-negative text-sm">
|
|
561
|
-
-
|
|
562
|
-
</span>
|
|
563
|
-
</div>
|
|
564
|
-
<div>
|
|
565
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
566
|
-
Store Purchase
|
|
567
|
-
</div>
|
|
568
|
-
<div className="text-fm-tertiary text-xs">
|
|
569
|
-
Power-up bought
|
|
570
|
-
</div>
|
|
571
|
-
</div>
|
|
572
|
-
</div>
|
|
573
|
-
<div className="flex items-center gap-1">
|
|
574
|
-
<CoinIcon className="h-4 w-4" />
|
|
575
|
-
<span className="text-fm-icon-negative font-medium">
|
|
576
|
-
-75
|
|
577
|
-
</span>
|
|
578
|
-
</div>
|
|
579
|
-
</div>
|
|
580
|
-
</div>
|
|
581
|
-
</div>
|
|
582
|
-
</div>
|
|
583
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
584
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
585
|
-
{`// Digital wallet interface
|
|
586
|
-
<div className="wallet-header">
|
|
587
|
-
<div className="wallet-info">
|
|
588
|
-
<h3>My Wallet</h3>
|
|
589
|
-
<p>Digital currency balance</p>
|
|
590
|
-
</div>
|
|
591
|
-
<div className="balance-display">
|
|
592
|
-
<CoinIcon className="h-6 w-6" />
|
|
593
|
-
<span className="balance">{balance}</span>
|
|
594
|
-
</div>
|
|
595
|
-
</div>
|
|
596
|
-
<div className="transaction-list">
|
|
597
|
-
{transactions.map(transaction => (
|
|
598
|
-
<div key={transaction.id} className="transaction-item">
|
|
599
|
-
<TransactionIcon type={transaction.type} />
|
|
600
|
-
<TransactionDetails transaction={transaction} />
|
|
601
|
-
<div className="coin-amount">
|
|
602
|
-
<CoinIcon className="h-4 w-4" />
|
|
603
|
-
<span className={transaction.type === 'earned' ? 'text-green' : 'text-red'}>
|
|
604
|
-
{transaction.type === 'earned' ? '+' : '-'}{transaction.amount}
|
|
605
|
-
</span>
|
|
606
|
-
</div>
|
|
607
|
-
</div>
|
|
608
|
-
))}
|
|
609
|
-
</div>`}
|
|
610
|
-
</pre>
|
|
611
|
-
</div>
|
|
612
|
-
</div>
|
|
613
|
-
</div>
|
|
614
|
-
|
|
615
|
-
{/* Game Store */}
|
|
616
|
-
<div className="!space-y-4">
|
|
617
|
-
<h3 className="text-fm-icon-warning! text-lg font-semibold">
|
|
618
|
-
Game Store
|
|
619
|
-
</h3>
|
|
620
|
-
<div className="!space-y-4">
|
|
621
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
622
|
-
<div className="border-fm-divider-primary bg-fm-surface-secondary overflow-hidden rounded-lg border">
|
|
623
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary border-b p-4">
|
|
624
|
-
<div className="flex items-center justify-between">
|
|
625
|
-
<h4 className="text-fm-icon-active text-lg font-semibold">
|
|
626
|
-
Item Shop
|
|
627
|
-
</h4>
|
|
628
|
-
<div className="border-fm-icon-warning/30 bg-fm-icon-warning/20 flex items-center gap-2 rounded-lg border px-3 py-1">
|
|
629
|
-
<CoinIcon className="h-4 w-4" />
|
|
630
|
-
<span className="text-fm-icon-warning font-medium">
|
|
631
|
-
2,847
|
|
632
|
-
</span>
|
|
633
|
-
</div>
|
|
634
|
-
</div>
|
|
635
|
-
</div>
|
|
636
|
-
<div className="grid grid-cols-2 gap-3 p-4">
|
|
637
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-3">
|
|
638
|
-
<div className="bg-fm-secondary-500/20 mb-2 flex aspect-square w-full items-center justify-center rounded">
|
|
639
|
-
<span className="text-2xl">⚔️</span>
|
|
640
|
-
</div>
|
|
641
|
-
<div className="text-fm-icon-active mb-1 text-sm font-medium">
|
|
642
|
-
Epic Sword
|
|
643
|
-
</div>
|
|
644
|
-
<div className="flex items-center justify-between">
|
|
645
|
-
<div className="flex items-center gap-1">
|
|
646
|
-
<CoinIcon className="h-3 w-3" />
|
|
647
|
-
<span className="text-fm-icon-warning text-xs">
|
|
648
|
-
500
|
|
649
|
-
</span>
|
|
650
|
-
</div>
|
|
651
|
-
<button className="border-fm-icon-warning/30 bg-fm-icon-warning/20 text-fm-icon-warning hover:bg-fm-icon-warning/30 rounded border px-2 py-1 text-xs transition-colors">
|
|
652
|
-
Buy
|
|
653
|
-
</button>
|
|
654
|
-
</div>
|
|
655
|
-
</div>
|
|
656
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-3">
|
|
657
|
-
<div className="bg-fm-icon-info/20 mb-2 flex aspect-square w-full items-center justify-center rounded">
|
|
658
|
-
<span className="text-2xl">🛡️</span>
|
|
659
|
-
</div>
|
|
660
|
-
<div className="text-fm-icon-active mb-1 text-sm font-medium">
|
|
661
|
-
Magic Shield
|
|
662
|
-
</div>
|
|
663
|
-
<div className="flex items-center justify-between">
|
|
664
|
-
<div className="flex items-center gap-1">
|
|
665
|
-
<CoinIcon className="h-3 w-3" />
|
|
666
|
-
<span className="text-fm-icon-warning text-xs">
|
|
667
|
-
350
|
|
668
|
-
</span>
|
|
669
|
-
</div>
|
|
670
|
-
<button className="border-fm-icon-warning/30 bg-fm-icon-warning/20 text-fm-icon-warning hover:bg-fm-icon-warning/30 rounded border px-2 py-1 text-xs transition-colors">
|
|
671
|
-
Buy
|
|
672
|
-
</button>
|
|
673
|
-
</div>
|
|
674
|
-
</div>
|
|
675
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-3">
|
|
676
|
-
<div className="bg-fm-icon-positive/20 mb-2 flex aspect-square w-full items-center justify-center rounded">
|
|
677
|
-
<span className="text-2xl">🧪</span>
|
|
678
|
-
</div>
|
|
679
|
-
<div className="text-fm-icon-active mb-1 text-sm font-medium">
|
|
680
|
-
Health Potion
|
|
681
|
-
</div>
|
|
682
|
-
<div className="flex items-center justify-between">
|
|
683
|
-
<div className="flex items-center gap-1">
|
|
684
|
-
<CoinIcon className="h-3 w-3" />
|
|
685
|
-
<span className="text-fm-icon-warning text-xs">
|
|
686
|
-
25
|
|
687
|
-
</span>
|
|
688
|
-
</div>
|
|
689
|
-
<button className="border-fm-icon-warning/30 bg-fm-icon-warning/20 text-fm-icon-warning hover:bg-fm-icon-warning/30 rounded border px-2 py-1 text-xs transition-colors">
|
|
690
|
-
Buy
|
|
691
|
-
</button>
|
|
692
|
-
</div>
|
|
693
|
-
</div>
|
|
694
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-3">
|
|
695
|
-
<div className="bg-fm-icon-negative/20 mb-2 flex aspect-square w-full items-center justify-center rounded">
|
|
696
|
-
<span className="text-2xl">💎</span>
|
|
697
|
-
</div>
|
|
698
|
-
<div className="text-fm-icon-active mb-1 text-sm font-medium">
|
|
699
|
-
Rare Gem
|
|
700
|
-
</div>
|
|
701
|
-
<div className="flex items-center justify-between">
|
|
702
|
-
<div className="flex items-center gap-1">
|
|
703
|
-
<CoinIcon className="h-3 w-3" />
|
|
704
|
-
<span className="text-fm-icon-warning text-xs">
|
|
705
|
-
1,200
|
|
706
|
-
</span>
|
|
707
|
-
</div>
|
|
708
|
-
<button className="border-fm-icon-negative/30 bg-fm-icon-negative/20 text-fm-icon-negative rounded border px-2 py-1 text-xs">
|
|
709
|
-
Insufficient
|
|
710
|
-
</button>
|
|
711
|
-
</div>
|
|
712
|
-
</div>
|
|
713
|
-
</div>
|
|
714
|
-
</div>
|
|
715
|
-
</div>
|
|
716
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
717
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
718
|
-
{`// Game store with coin pricing
|
|
719
|
-
<div className="store-header">
|
|
720
|
-
<h3>Item Shop</h3>
|
|
721
|
-
<div className="player-balance">
|
|
722
|
-
<CoinIcon className="h-4 w-4" />
|
|
723
|
-
<span>{playerCoins}</span>
|
|
724
|
-
</div>
|
|
725
|
-
</div>
|
|
726
|
-
<div className="item-grid">
|
|
727
|
-
{storeItems.map(item => (
|
|
728
|
-
<div key={item.id} className="store-item">
|
|
729
|
-
<ItemIcon item={item} />
|
|
730
|
-
<div className="item-name">{item.name}</div>
|
|
731
|
-
<div className="item-footer">
|
|
732
|
-
<div className="item-price">
|
|
733
|
-
<CoinIcon className="h-3 w-3" />
|
|
734
|
-
<span>{item.price}</span>
|
|
735
|
-
</div>
|
|
736
|
-
<button
|
|
737
|
-
className={playerCoins >= item.price ? 'buy-btn' : 'insufficient-btn'}
|
|
738
|
-
disabled={playerCoins < item.price}
|
|
739
|
-
onClick={() => purchaseItem(item)}
|
|
740
|
-
>
|
|
741
|
-
{playerCoins >= item.price ? 'Buy' : 'Insufficient'}
|
|
742
|
-
</button>
|
|
743
|
-
</div>
|
|
744
|
-
</div>
|
|
745
|
-
))}
|
|
746
|
-
</div>`}
|
|
747
|
-
</pre>
|
|
748
|
-
</div>
|
|
749
|
-
</div>
|
|
750
|
-
</div>
|
|
751
|
-
|
|
752
|
-
{/* Rewards Dashboard */}
|
|
753
|
-
<div className="!space-y-4">
|
|
754
|
-
<h3 className="text-fm-icon-warning! text-lg font-semibold">
|
|
755
|
-
Rewards Dashboard
|
|
756
|
-
</h3>
|
|
757
|
-
<div className="!space-y-4">
|
|
758
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
759
|
-
<div className="border-fm-divider-primary bg-fm-surface-secondary overflow-hidden rounded-lg border">
|
|
760
|
-
<div className="border-fm-divider-secondary from-fm-secondary-500/20 to-fm-icon-warning/20 border-b bg-linear-to-r p-4">
|
|
761
|
-
<h4 className="text-fm-icon-active mb-2 text-lg font-semibold">
|
|
762
|
-
Daily Challenges
|
|
763
|
-
</h4>
|
|
764
|
-
<div className="text-fm-tertiary text-sm">
|
|
765
|
-
Complete tasks to earn coins
|
|
766
|
-
</div>
|
|
767
|
-
</div>
|
|
768
|
-
<div className="space-y-3 p-4">
|
|
769
|
-
<div className="border-fm-icon-positive/20 bg-fm-icon-positive/10 flex items-center justify-between rounded-lg border p-3">
|
|
770
|
-
<div className="flex items-center gap-3">
|
|
771
|
-
<div className="bg-fm-icon-positive/20 flex h-8 w-8 items-center justify-center rounded-lg">
|
|
772
|
-
<span className="text-fm-icon-positive text-sm">
|
|
773
|
-
✓
|
|
774
|
-
</span>
|
|
775
|
-
</div>
|
|
776
|
-
<div>
|
|
777
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
778
|
-
Login Streak
|
|
779
|
-
</div>
|
|
780
|
-
<div className="text-fm-icon-positive text-xs">
|
|
781
|
-
Completed
|
|
782
|
-
</div>
|
|
783
|
-
</div>
|
|
784
|
-
</div>
|
|
785
|
-
<div className="flex items-center gap-1">
|
|
786
|
-
<CoinIcon className="h-4 w-4" />
|
|
787
|
-
<span className="text-fm-icon-positive font-medium">
|
|
788
|
-
+10
|
|
789
|
-
</span>
|
|
790
|
-
</div>
|
|
791
|
-
</div>
|
|
792
|
-
<div className="border-fm-icon-info/20 bg-fm-icon-info/10 flex items-center justify-between rounded-lg border p-3">
|
|
793
|
-
<div className="flex items-center gap-3">
|
|
794
|
-
<div className="bg-fm-icon-info/20 flex h-8 w-8 items-center justify-center rounded-lg">
|
|
795
|
-
<span className="text-fm-icon-info text-sm">
|
|
796
|
-
2/3
|
|
797
|
-
</span>
|
|
798
|
-
</div>
|
|
799
|
-
<div>
|
|
800
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
801
|
-
Share Content
|
|
802
|
-
</div>
|
|
803
|
-
<div className="text-fm-icon-info text-xs">
|
|
804
|
-
2 of 3 shares
|
|
805
|
-
</div>
|
|
806
|
-
</div>
|
|
807
|
-
</div>
|
|
808
|
-
<div className="flex items-center gap-1">
|
|
809
|
-
<CoinIcon className="h-4 w-4" />
|
|
810
|
-
<span className="text-fm-icon-warning font-medium">
|
|
811
|
-
25
|
|
812
|
-
</span>
|
|
813
|
-
</div>
|
|
814
|
-
</div>
|
|
815
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center justify-between rounded-lg border p-3">
|
|
816
|
-
<div className="flex items-center gap-3">
|
|
817
|
-
<div className="bg-fm-surface-secondary flex h-8 w-8 items-center justify-center rounded-lg">
|
|
818
|
-
<span className="text-fm-tertiary text-sm">
|
|
819
|
-
0/5
|
|
820
|
-
</span>
|
|
821
|
-
</div>
|
|
822
|
-
<div>
|
|
823
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
824
|
-
Invite Friends
|
|
825
|
-
</div>
|
|
826
|
-
<div className="text-fm-tertiary text-xs">
|
|
827
|
-
0 of 5 invites
|
|
828
|
-
</div>
|
|
829
|
-
</div>
|
|
830
|
-
</div>
|
|
831
|
-
<div className="flex items-center gap-1">
|
|
832
|
-
<CoinIcon className="h-4 w-4" />
|
|
833
|
-
<span className="text-fm-icon-warning font-medium">
|
|
834
|
-
100
|
|
835
|
-
</span>
|
|
836
|
-
</div>
|
|
837
|
-
</div>
|
|
838
|
-
</div>
|
|
839
|
-
</div>
|
|
840
|
-
</div>
|
|
841
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
842
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
843
|
-
{`// Rewards and challenges dashboard
|
|
844
|
-
<div className="challenges-dashboard">
|
|
845
|
-
<div className="dashboard-header">
|
|
846
|
-
<h3>Daily Challenges</h3>
|
|
847
|
-
<p>Complete tasks to earn coins</p>
|
|
848
|
-
</div>
|
|
849
|
-
<div className="challenges-list">
|
|
850
|
-
{challenges.map(challenge => (
|
|
851
|
-
<div
|
|
852
|
-
key={challenge.id}
|
|
853
|
-
className={challenge.completed ? 'challenge-completed' : 'challenge-active'}
|
|
854
|
-
>
|
|
855
|
-
<ChallengeIcon
|
|
856
|
-
progress={challenge.progress}
|
|
857
|
-
total={challenge.total}
|
|
858
|
-
completed={challenge.completed}
|
|
60
|
+
),
|
|
61
|
+
}}
|
|
62
|
+
relatedIcons={[
|
|
63
|
+
{
|
|
64
|
+
name: "CoinToonsIcon",
|
|
65
|
+
description: "Toon-styled coin icon",
|
|
66
|
+
icon: CoinToonsIcon,
|
|
67
|
+
accentToken: "info",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: "StoreCoinIcon",
|
|
71
|
+
description: "Store / shop coin icon",
|
|
72
|
+
icon: StoreCoinIcon,
|
|
73
|
+
accentToken: "positive",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: "StarIcon",
|
|
77
|
+
description: "Star / rating icon",
|
|
78
|
+
icon: StarIcon,
|
|
79
|
+
accentToken: "warning",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "HeartIcon",
|
|
83
|
+
description: "Heart / favourite icon",
|
|
84
|
+
icon: HeartIcon,
|
|
85
|
+
accentToken: "negative",
|
|
86
|
+
},
|
|
87
|
+
]}
|
|
859
88
|
/>
|
|
860
|
-
<div className="challenge-info">
|
|
861
|
-
<div className="challenge-title">{challenge.title}</div>
|
|
862
|
-
<div className="challenge-progress">
|
|
863
|
-
{challenge.progress} of {challenge.total} {challenge.unit}
|
|
864
|
-
</div>
|
|
865
|
-
</div>
|
|
866
|
-
<div className="challenge-reward">
|
|
867
|
-
<CoinIcon className="h-4 w-4" />
|
|
868
|
-
<span className="reward-amount">{challenge.reward}</span>
|
|
869
|
-
</div>
|
|
870
|
-
</div>
|
|
871
|
-
))}
|
|
872
|
-
</div>
|
|
873
|
-
</div>`}
|
|
874
|
-
</pre>
|
|
875
|
-
</div>
|
|
876
|
-
</div>
|
|
877
|
-
</div>
|
|
878
|
-
|
|
879
|
-
{/* E-commerce Pricing */}
|
|
880
|
-
<div className="!space-y-4">
|
|
881
|
-
<h3 className="text-fm-icon-warning! text-lg font-semibold">
|
|
882
|
-
E-commerce Integration
|
|
883
|
-
</h3>
|
|
884
|
-
<div className="!space-y-4">
|
|
885
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
886
|
-
<div className="border-fm-divider-primary bg-fm-surface-secondary overflow-hidden rounded-lg border">
|
|
887
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary border-b p-4">
|
|
888
|
-
<h4 className="text-fm-icon-active text-lg font-semibold">
|
|
889
|
-
Premium Membership
|
|
890
|
-
</h4>
|
|
891
|
-
<p className="text-fm-tertiary text-sm">
|
|
892
|
-
Unlock exclusive features and benefits
|
|
893
|
-
</p>
|
|
894
|
-
</div>
|
|
895
|
-
<div className="space-y-4 p-6">
|
|
896
|
-
<div className="grid grid-cols-3 gap-4">
|
|
897
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-4 text-center">
|
|
898
|
-
<div className="text-fm-icon-active mb-1 text-2xl font-bold">
|
|
899
|
-
Basic
|
|
900
|
-
</div>
|
|
901
|
-
<div className="mb-2 flex items-center justify-center gap-1">
|
|
902
|
-
<CoinIcon className="h-4 w-4" />
|
|
903
|
-
<span className="text-fm-icon-warning font-medium">
|
|
904
|
-
Free
|
|
905
|
-
</span>
|
|
906
|
-
</div>
|
|
907
|
-
<ul className="text-fm-tertiary space-y-1 text-xs">
|
|
908
|
-
<li>Limited features</li>
|
|
909
|
-
<li>Basic support</li>
|
|
910
|
-
</ul>
|
|
911
|
-
</div>
|
|
912
|
-
<div className="border-fm-icon-warning/30 bg-fm-icon-warning/10 rounded-lg border p-4 text-center">
|
|
913
|
-
<div className="text-fm-icon-active mb-1 text-2xl font-bold">
|
|
914
|
-
Pro
|
|
915
|
-
</div>
|
|
916
|
-
<div className="mb-2 flex items-center justify-center gap-1">
|
|
917
|
-
<CoinIcon className="h-4 w-4" />
|
|
918
|
-
<span className="text-fm-icon-warning font-medium">
|
|
919
|
-
299/mo
|
|
920
|
-
</span>
|
|
921
|
-
</div>
|
|
922
|
-
<ul className="text-fm-tertiary space-y-1 text-xs">
|
|
923
|
-
<li>Advanced features</li>
|
|
924
|
-
<li>Priority support</li>
|
|
925
|
-
</ul>
|
|
926
|
-
</div>
|
|
927
|
-
<div className="border-fm-secondary-500/30 bg-fm-secondary-500/10 rounded-lg border p-4 text-center">
|
|
928
|
-
<div className="text-fm-icon-active mb-1 text-2xl font-bold">
|
|
929
|
-
Enterprise
|
|
930
|
-
</div>
|
|
931
|
-
<div className="mb-2 flex items-center justify-center gap-1">
|
|
932
|
-
<CoinIcon className="h-4 w-4" />
|
|
933
|
-
<span className="text-fm-icon-warning font-medium">
|
|
934
|
-
999/mo
|
|
935
|
-
</span>
|
|
936
|
-
</div>
|
|
937
|
-
<ul className="text-fm-tertiary space-y-1 text-xs">
|
|
938
|
-
<li>All features</li>
|
|
939
|
-
<li>24/7 support</li>
|
|
940
|
-
</ul>
|
|
941
|
-
</div>
|
|
942
|
-
</div>
|
|
943
|
-
<div className="text-center">
|
|
944
|
-
<button className="border-fm-icon-warning/30 bg-fm-icon-warning/20 text-fm-icon-warning hover:bg-fm-icon-warning/30 rounded-lg border px-6 py-2 transition-colors">
|
|
945
|
-
Choose Plan
|
|
946
|
-
</button>
|
|
947
|
-
</div>
|
|
948
|
-
</div>
|
|
949
|
-
</div>
|
|
950
|
-
</div>
|
|
951
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
952
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
953
|
-
{`// E-commerce pricing with coin display
|
|
954
|
-
<div className="pricing-plans">
|
|
955
|
-
<div className="pricing-header">
|
|
956
|
-
<h3>Premium Membership</h3>
|
|
957
|
-
<p>Unlock exclusive features and benefits</p>
|
|
958
|
-
</div>
|
|
959
|
-
<div className="plans-grid">
|
|
960
|
-
{pricingPlans.map(plan => (
|
|
961
|
-
<div
|
|
962
|
-
key={plan.id}
|
|
963
|
-
className={plan.featured ? 'plan-featured' : 'plan-standard'}
|
|
964
|
-
>
|
|
965
|
-
<div className="plan-name">{plan.name}</div>
|
|
966
|
-
<div className="plan-price">
|
|
967
|
-
<CoinIcon className="h-4 w-4" />
|
|
968
|
-
<span className="price-amount">
|
|
969
|
-
{plan.price === 0 ? 'Free' : plan.price + '/mo'}
|
|
970
|
-
</span>
|
|
971
|
-
</div>
|
|
972
|
-
<ul className="plan-features">
|
|
973
|
-
{plan.features.map(feature => (
|
|
974
|
-
<li key={feature}>{feature}</li>
|
|
975
|
-
))}
|
|
976
|
-
</ul>
|
|
977
|
-
<button
|
|
978
|
-
className="plan-cta"
|
|
979
|
-
onClick={() => selectPlan(plan)}
|
|
980
|
-
>
|
|
981
|
-
Choose Plan
|
|
982
|
-
</button>
|
|
983
|
-
</div>
|
|
984
|
-
))}
|
|
985
|
-
</div>
|
|
986
|
-
</div>`}
|
|
987
|
-
</pre>
|
|
988
|
-
</div>
|
|
989
|
-
</div>
|
|
990
|
-
</div>
|
|
991
|
-
</div>
|
|
992
|
-
</div>
|
|
993
|
-
|
|
994
|
-
{/* Accessibility */}
|
|
995
|
-
<div className="!space-y-8">
|
|
996
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
997
|
-
Accessibility Features
|
|
998
|
-
</h2>
|
|
999
|
-
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
1000
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
1001
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
1002
|
-
✅ Built-in Features
|
|
1003
|
-
</h3>
|
|
1004
|
-
<ul className="text-fm-secondary! !space-y-2 text-sm">
|
|
1005
|
-
<li className="text-fm-secondary!">
|
|
1006
|
-
Uses Radix UI AccessibleIcon wrapper
|
|
1007
|
-
</li>
|
|
1008
|
-
<li className="text-fm-secondary!">
|
|
1009
|
-
Provides screen reader label "Coin icon"
|
|
1010
|
-
</li>
|
|
1011
|
-
<li className="text-fm-secondary!">
|
|
1012
|
-
Supports keyboard navigation when interactive
|
|
1013
|
-
</li>
|
|
1014
|
-
<li className="text-fm-secondary!">
|
|
1015
|
-
High contrast golden colors for visibility
|
|
1016
|
-
</li>
|
|
1017
|
-
<li className="text-fm-secondary!">
|
|
1018
|
-
Consistent visual design across all sizes
|
|
1019
|
-
</li>
|
|
1020
|
-
</ul>
|
|
1021
|
-
</div>
|
|
1022
|
-
|
|
1023
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
1024
|
-
<h3 className="text-fm-icon-warning! text-lg font-semibold">
|
|
1025
|
-
💡 Best Practices
|
|
1026
|
-
</h3>
|
|
1027
|
-
<ul className="text-fm-secondary !space-y-2 text-sm">
|
|
1028
|
-
<li className="text-fm-secondary!">
|
|
1029
|
-
Always pair with numerical values for context
|
|
1030
|
-
</li>
|
|
1031
|
-
<li className="text-fm-secondary!">
|
|
1032
|
-
Use consistent coin terminology across the interface
|
|
1033
|
-
</li>
|
|
1034
|
-
<li className="text-fm-secondary!">
|
|
1035
|
-
Provide clear labels for coin-based interactions
|
|
1036
|
-
</li>
|
|
1037
|
-
<li className="text-fm-secondary!">
|
|
1038
|
-
Consider currency exchange rates for international users
|
|
1039
|
-
</li>
|
|
1040
|
-
<li className="text-fm-secondary!">
|
|
1041
|
-
Implement proper error handling for insufficient funds
|
|
1042
|
-
</li>
|
|
1043
|
-
</ul>
|
|
1044
|
-
</div>
|
|
1045
|
-
</div>
|
|
1046
|
-
|
|
1047
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1048
|
-
<h3 className="text-fm-icon-info! mb-4 text-lg font-semibold">
|
|
1049
|
-
Proper ARIA Implementation
|
|
1050
|
-
</h3>
|
|
1051
|
-
<div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
|
1052
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
1053
|
-
<pre className="text-fm-icon-info! overflow-x-auto text-sm">
|
|
1054
|
-
{`// Wallet balance display
|
|
1055
|
-
<div className="balance-display">
|
|
1056
|
-
<CoinIcon
|
|
1057
|
-
className="h-5 w-5"
|
|
1058
|
-
aria-hidden="true"
|
|
1059
|
-
/>
|
|
1060
|
-
<span
|
|
1061
|
-
aria-label={balance + " coins in wallet"}
|
|
1062
|
-
className="balance-amount"
|
|
1063
|
-
>
|
|
1064
|
-
{balance}
|
|
1065
|
-
</span>
|
|
1066
|
-
</div>
|
|
1067
|
-
|
|
1068
|
-
// Interactive coin button
|
|
1069
|
-
<button
|
|
1070
|
-
aria-label={"Purchase item for " + price + " coins"}
|
|
1071
|
-
aria-describedby="coin-balance"
|
|
1072
|
-
onClick={handlePurchase}
|
|
1073
|
-
disabled={balance < price}
|
|
1074
|
-
>
|
|
1075
|
-
<CoinIcon className="h-4 w-4" />
|
|
1076
|
-
<span>{price}</span>
|
|
1077
|
-
</button>
|
|
1078
|
-
<div id="coin-balance" className="sr-only">
|
|
1079
|
-
Current balance: {balance} coins
|
|
1080
|
-
</div>
|
|
1081
|
-
|
|
1082
|
-
// Reward notification
|
|
1083
|
-
<div
|
|
1084
|
-
role="alert"
|
|
1085
|
-
aria-live="polite"
|
|
1086
|
-
className="reward-notification"
|
|
1087
|
-
>
|
|
1088
|
-
<CoinIcon className="h-4 w-4" />
|
|
1089
|
-
<span>You earned {rewardAmount} coins!</span>
|
|
1090
|
-
</div>
|
|
1091
|
-
|
|
1092
|
-
// Store item pricing
|
|
1093
|
-
<div className="store-item">
|
|
1094
|
-
<ItemImage />
|
|
1095
|
-
<div className="item-details">
|
|
1096
|
-
<h3>{item.name}</h3>
|
|
1097
|
-
<div
|
|
1098
|
-
className="item-price"
|
|
1099
|
-
aria-label={"Price: " + item.price + " coins"}
|
|
1100
|
-
>
|
|
1101
|
-
<CoinIcon className="h-3 w-3" />
|
|
1102
|
-
<span>{item.price}</span>
|
|
1103
|
-
</div>
|
|
1104
|
-
</div>
|
|
1105
|
-
</div>`}
|
|
1106
|
-
</pre>
|
|
1107
|
-
</div>
|
|
1108
|
-
<div className="!space-y-4">
|
|
1109
|
-
<p className="text-fm-secondary! text-sm">
|
|
1110
|
-
When using CoinIcon for financial displays, always
|
|
1111
|
-
provide clear context about the currency value and
|
|
1112
|
-
ensure users understand the monetary implications of
|
|
1113
|
-
their actions.
|
|
1114
|
-
</p>
|
|
1115
|
-
<div className="border-fm-icon-warning/20 bg-fm-icon-warning/10 rounded-lg border p-4">
|
|
1116
|
-
<div className="text-fm-icon-warning flex items-center gap-2 text-sm">
|
|
1117
|
-
<CoinIcon className="h-4 w-4" />
|
|
1118
|
-
<span>
|
|
1119
|
-
Always announce balance changes and transaction
|
|
1120
|
-
results to screen readers
|
|
1121
|
-
</span>
|
|
1122
|
-
</div>
|
|
1123
|
-
</div>
|
|
1124
|
-
</div>
|
|
1125
|
-
</div>
|
|
1126
|
-
</div>
|
|
1127
|
-
</div>
|
|
1128
|
-
|
|
1129
|
-
{/* Related Icons */}
|
|
1130
|
-
<div className="!space-y-8">
|
|
1131
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
1132
|
-
Related Icons
|
|
1133
|
-
</h2>
|
|
1134
|
-
<div className="grid grid-cols-2 gap-6 md:grid-cols-4">
|
|
1135
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
1136
|
-
<div className="bg-fm-icon-positive/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1137
|
-
<span className="text-fm-icon-active! !text-2xl">💳</span>
|
|
1138
|
-
</div>
|
|
1139
|
-
<div>
|
|
1140
|
-
<div className="text-fm-icon-active font-medium">
|
|
1141
|
-
CreditCardIcon
|
|
1142
|
-
</div>
|
|
1143
|
-
<div className="text-fm-tertiary text-xs">
|
|
1144
|
-
Payment method
|
|
1145
|
-
</div>
|
|
1146
|
-
</div>
|
|
1147
|
-
</div>
|
|
1148
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
1149
|
-
<div className="bg-fm-icon-info/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1150
|
-
<span className="text-fm-icon-active! !text-2xl">💰</span>
|
|
1151
|
-
</div>
|
|
1152
|
-
<div>
|
|
1153
|
-
<div className="text-fm-icon-active font-medium">
|
|
1154
|
-
WalletIcon
|
|
1155
|
-
</div>
|
|
1156
|
-
<div className="text-fm-tertiary text-xs">
|
|
1157
|
-
Digital wallet
|
|
1158
|
-
</div>
|
|
1159
|
-
</div>
|
|
1160
|
-
</div>
|
|
1161
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
1162
|
-
<div className="bg-fm-secondary-500/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1163
|
-
<span className="text-fm-icon-active! !text-2xl">🏆</span>
|
|
1164
|
-
</div>
|
|
1165
|
-
<div>
|
|
1166
|
-
<div className="text-fm-icon-active font-medium">
|
|
1167
|
-
TrophyIcon
|
|
1168
|
-
</div>
|
|
1169
|
-
<div className="text-fm-tertiary text-xs">
|
|
1170
|
-
Achievement reward
|
|
1171
|
-
</div>
|
|
1172
|
-
</div>
|
|
1173
|
-
</div>
|
|
1174
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
1175
|
-
<div className="bg-fm-icon-warning/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1176
|
-
<span className="text-fm-icon-active! !text-2xl">🛒</span>
|
|
1177
|
-
</div>
|
|
1178
|
-
<div>
|
|
1179
|
-
<div className="text-fm-icon-active font-medium">
|
|
1180
|
-
ShoppingIcon
|
|
1181
|
-
</div>
|
|
1182
|
-
<div className="text-fm-tertiary text-xs">
|
|
1183
|
-
Purchase items
|
|
1184
|
-
</div>
|
|
1185
|
-
</div>
|
|
1186
|
-
</div>
|
|
1187
|
-
</div>
|
|
1188
|
-
</div>
|
|
1189
|
-
</div>
|
|
1190
|
-
|
|
1191
|
-
{/* Footer */}
|
|
1192
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary border-t backdrop-blur-xl">
|
|
1193
|
-
<div className="!mx-auto max-w-7xl px-6 py-8">
|
|
1194
|
-
<div className="!space-y-4 text-center">
|
|
1195
|
-
<p className="text-fm-tertiary!">
|
|
1196
|
-
CoinIcon is part of the Aural UI icon library, built with
|
|
1197
|
-
accessibility and financial interface best practices in
|
|
1198
|
-
mind.
|
|
1199
|
-
</p>
|
|
1200
|
-
<p className="text-fm-placeholder! text-sm">
|
|
1201
|
-
All icons use Radix UI's AccessibleIcon for screen reader
|
|
1202
|
-
compatibility and follow WCAG guidelines for monetary
|
|
1203
|
-
displays and transaction interfaces.
|
|
1204
|
-
</p>
|
|
1205
|
-
</div>
|
|
1206
|
-
</div>
|
|
1207
|
-
</div>
|
|
1208
|
-
</div>
|
|
1209
|
-
</>
|
|
1210
89
|
),
|
|
1211
90
|
},
|
|
1212
91
|
},
|
|
1213
92
|
tags: ["autodocs"],
|
|
1214
93
|
argTypes: {
|
|
1215
|
-
width: {
|
|
1216
|
-
control: { type: "range", min: 8, max: 96, step: 2 },
|
|
1217
|
-
description: "Width of the icon in pixels",
|
|
1218
|
-
},
|
|
1219
|
-
withAccessibility: {
|
|
1220
|
-
control: "boolean",
|
|
1221
|
-
description: "Whether to wrap the icon with accessibility features",
|
|
1222
|
-
},
|
|
1223
|
-
height: {
|
|
1224
|
-
control: { type: "range", min: 8, max: 96, step: 2 },
|
|
1225
|
-
description: "Height of the icon in pixels",
|
|
1226
|
-
},
|
|
1227
94
|
className: {
|
|
1228
95
|
control: "text",
|
|
1229
|
-
description: "CSS classes
|
|
96
|
+
description: "CSS classes including color token",
|
|
1230
97
|
},
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
description: "
|
|
98
|
+
withAccessibility: {
|
|
99
|
+
control: "boolean",
|
|
100
|
+
description: "Wrap with accessibility label",
|
|
1234
101
|
},
|
|
1235
102
|
},
|
|
1236
103
|
}
|
|
@@ -1238,199 +105,88 @@ function WalletBalance() {
|
|
|
1238
105
|
export default meta
|
|
1239
106
|
type Story = StoryObj<typeof CoinIcon>
|
|
1240
107
|
|
|
1241
|
-
// Story parameters for consistent dark theme
|
|
1242
|
-
const storyParameters = {
|
|
1243
|
-
backgrounds: {
|
|
1244
|
-
default: "dark",
|
|
1245
|
-
values: [
|
|
1246
|
-
{ name: "dark", value: "var(--color-fm-surface-primary)" },
|
|
1247
|
-
{ name: "darker", value: "var(--color-fm-neutral-0)" },
|
|
1248
|
-
],
|
|
1249
|
-
},
|
|
1250
|
-
}
|
|
1251
|
-
|
|
1252
108
|
export const Default: Story = {
|
|
1253
109
|
args: {
|
|
1254
|
-
className: "h-
|
|
110
|
+
className: "h-6 w-6 text-fm-icon-warning",
|
|
1255
111
|
withAccessibility: true,
|
|
1256
112
|
},
|
|
1257
|
-
parameters: storyParameters,
|
|
1258
113
|
render: (args) => (
|
|
1259
|
-
<
|
|
114
|
+
<IconDefaultCanvas>
|
|
1260
115
|
<CoinIcon {...args} />
|
|
1261
|
-
</
|
|
116
|
+
</IconDefaultCanvas>
|
|
1262
117
|
),
|
|
1263
118
|
}
|
|
1264
119
|
|
|
1265
120
|
export const SizeVariations: Story = {
|
|
1266
|
-
|
|
1267
|
-
...storyParameters,
|
|
1268
|
-
docs: {
|
|
1269
|
-
description: {
|
|
1270
|
-
story:
|
|
1271
|
-
"CoinIcon in different sizes, from small inline currency displays to large wallet interfaces.",
|
|
1272
|
-
},
|
|
1273
|
-
},
|
|
1274
|
-
},
|
|
1275
|
-
render: () => (
|
|
1276
|
-
<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">
|
|
1277
|
-
<div className="text-center">
|
|
1278
|
-
<CoinIcon className="!mx-auto mb-2 h-3 w-3" />
|
|
1279
|
-
<span className="text-fm-tertiary text-xs">12px</span>
|
|
1280
|
-
</div>
|
|
1281
|
-
<div className="text-center">
|
|
1282
|
-
<CoinIcon className="!mx-auto mb-2 h-4 w-4" />
|
|
1283
|
-
<span className="text-fm-tertiary text-xs">16px</span>
|
|
1284
|
-
</div>
|
|
1285
|
-
<div className="text-center">
|
|
1286
|
-
<CoinIcon className="!mx-auto mb-2 h-5 w-5" />
|
|
1287
|
-
<span className="text-fm-tertiary text-xs">20px</span>
|
|
1288
|
-
</div>
|
|
1289
|
-
<div className="text-center">
|
|
1290
|
-
<CoinIcon className="!mx-auto mb-2 h-6 w-6" />
|
|
1291
|
-
<span className="text-fm-tertiary text-xs">24px</span>
|
|
1292
|
-
</div>
|
|
1293
|
-
<div className="text-center">
|
|
1294
|
-
<CoinIcon className="!mx-auto mb-2 h-8 w-8" />
|
|
1295
|
-
<span className="text-fm-tertiary text-xs">32px</span>
|
|
1296
|
-
</div>
|
|
1297
|
-
<div className="text-center">
|
|
1298
|
-
<CoinIcon className="!mx-auto mb-2 h-12 w-12" />
|
|
1299
|
-
<span className="text-fm-tertiary text-xs">48px</span>
|
|
1300
|
-
</div>
|
|
1301
|
-
</div>
|
|
1302
|
-
),
|
|
121
|
+
render: () => <IconSizeVariations icon={CoinIcon} />,
|
|
1303
122
|
}
|
|
1304
123
|
|
|
1305
|
-
export const
|
|
1306
|
-
|
|
1307
|
-
...storyParameters,
|
|
1308
|
-
docs: {
|
|
1309
|
-
description: {
|
|
1310
|
-
story:
|
|
1311
|
-
"CoinIcon in different contextual applications showing its built-in golden design.",
|
|
1312
|
-
},
|
|
1313
|
-
},
|
|
1314
|
-
},
|
|
1315
|
-
render: () => (
|
|
1316
|
-
<div className="from-fm-surface-primary to-fm-surface-secondary grid min-h-dvh grid-cols-1 items-center justify-center gap-6 rounded-lg bg-linear-to-br p-8 md:grid-cols-3">
|
|
1317
|
-
<div className="text-center">
|
|
1318
|
-
<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">
|
|
1319
|
-
<CoinIcon className="h-8 w-8" />
|
|
1320
|
-
</div>
|
|
1321
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
1322
|
-
Wallet Balance
|
|
1323
|
-
</div>
|
|
1324
|
-
<div className="text-fm-icon-warning text-xs">Currency display</div>
|
|
1325
|
-
</div>
|
|
1326
|
-
<div className="text-center">
|
|
1327
|
-
<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">
|
|
1328
|
-
<CoinIcon className="h-8 w-8" />
|
|
1329
|
-
</div>
|
|
1330
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
1331
|
-
Store Pricing
|
|
1332
|
-
</div>
|
|
1333
|
-
<div className="text-fm-icon-warning text-xs">E-commerce value</div>
|
|
1334
|
-
</div>
|
|
1335
|
-
<div className="text-center">
|
|
1336
|
-
<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">
|
|
1337
|
-
<CoinIcon className="h-8 w-8" />
|
|
1338
|
-
</div>
|
|
1339
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
1340
|
-
Game Rewards
|
|
1341
|
-
</div>
|
|
1342
|
-
<div className="text-fm-icon-warning text-xs">Achievement system</div>
|
|
1343
|
-
</div>
|
|
1344
|
-
</div>
|
|
1345
|
-
),
|
|
124
|
+
export const ColorVariations: Story = {
|
|
125
|
+
render: () => <IconColorVariations icon={CoinIcon} />,
|
|
1346
126
|
}
|
|
1347
127
|
|
|
1348
128
|
export const UsageExamples: Story = {
|
|
1349
|
-
parameters: {
|
|
1350
|
-
...storyParameters,
|
|
1351
|
-
docs: {
|
|
1352
|
-
description: {
|
|
1353
|
-
story:
|
|
1354
|
-
"Real-world usage examples showing CoinIcon in different financial and gaming contexts.",
|
|
1355
|
-
},
|
|
1356
|
-
},
|
|
1357
|
-
},
|
|
1358
129
|
render: () => (
|
|
1359
|
-
<
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
<span className="text-fm-
|
|
1368
|
-
|
|
130
|
+
<IconUsageCanvas>
|
|
131
|
+
<IconUsageSection title="Coin Balance">
|
|
132
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex w-full max-w-sm items-center justify-between rounded-xl border px-4 py-3">
|
|
133
|
+
<span className="text-fm-secondary font-fm-text text-sm">
|
|
134
|
+
Your balance
|
|
135
|
+
</span>
|
|
136
|
+
<div className="flex items-center gap-1.5">
|
|
137
|
+
<CoinIcon className="text-fm-icon-warning h-5 w-5" />
|
|
138
|
+
<span className="text-fm-primary font-fm-text text-sm font-medium">
|
|
139
|
+
1,200
|
|
1369
140
|
</span>
|
|
1370
|
-
<div className="flex items-center gap-2">
|
|
1371
|
-
<CoinIcon className="h-5 w-5" />
|
|
1372
|
-
<span className="text-fm-icon-warning text-lg font-bold">
|
|
1373
|
-
2,847
|
|
1374
|
-
</span>
|
|
1375
|
-
</div>
|
|
1376
141
|
</div>
|
|
1377
142
|
</div>
|
|
1378
|
-
</
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
<div
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
<
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
</div>
|
|
1395
|
-
<div className="text-fm-tertiary text-xs">Legendary weapon</div>
|
|
1396
|
-
</div>
|
|
1397
|
-
</div>
|
|
1398
|
-
<div className="flex items-center gap-2">
|
|
143
|
+
</IconUsageSection>
|
|
144
|
+
|
|
145
|
+
<IconUsageSection title="Earn Coins Row">
|
|
146
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary w-full max-w-sm overflow-hidden rounded-xl border">
|
|
147
|
+
{[
|
|
148
|
+
{ label: "Listen daily", reward: "+50" },
|
|
149
|
+
{ label: "Complete episode", reward: "+100" },
|
|
150
|
+
{ label: "Share story", reward: "+20" },
|
|
151
|
+
].map(({ label, reward }) => (
|
|
152
|
+
<div
|
|
153
|
+
key={label}
|
|
154
|
+
className="border-fm-divider-secondary flex items-center border-b px-4 py-3 last:border-b-0"
|
|
155
|
+
>
|
|
156
|
+
<span className="text-fm-primary font-fm-text flex-1 text-sm">
|
|
157
|
+
{label}
|
|
158
|
+
</span>
|
|
1399
159
|
<div className="flex items-center gap-1">
|
|
1400
|
-
<CoinIcon className="h-4 w-4" />
|
|
1401
|
-
<span className="text-fm-
|
|
160
|
+
<CoinIcon className="text-fm-icon-warning h-4 w-4" />
|
|
161
|
+
<span className="text-fm-secondary font-fm-text text-xs">
|
|
162
|
+
{reward}
|
|
163
|
+
</span>
|
|
1402
164
|
</div>
|
|
1403
|
-
<button className="border-fm-icon-warning/30 bg-fm-icon-warning/20 text-fm-icon-warning hover:bg-fm-icon-warning/30 rounded border px-3 py-1 text-sm transition-colors">
|
|
1404
|
-
Buy
|
|
1405
|
-
</button>
|
|
1406
165
|
</div>
|
|
1407
|
-
|
|
166
|
+
))}
|
|
1408
167
|
</div>
|
|
1409
|
-
</
|
|
1410
|
-
|
|
168
|
+
</IconUsageSection>
|
|
169
|
+
|
|
170
|
+
<IconUsageSection title="Unlock with Coins">
|
|
171
|
+
<button className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center gap-2 rounded-xl border px-4 py-2">
|
|
172
|
+
<CoinIcon className="text-fm-icon-warning h-4 w-4" />
|
|
173
|
+
<span className="text-fm-primary font-fm-text text-sm">
|
|
174
|
+
Unlock for 200 coins
|
|
175
|
+
</span>
|
|
176
|
+
</button>
|
|
177
|
+
</IconUsageSection>
|
|
178
|
+
</IconUsageCanvas>
|
|
1411
179
|
),
|
|
1412
180
|
}
|
|
1413
181
|
|
|
1414
182
|
export const Playground: Story = {
|
|
1415
|
-
parameters: {
|
|
1416
|
-
...storyParameters,
|
|
1417
|
-
docs: {
|
|
1418
|
-
description: {
|
|
1419
|
-
story:
|
|
1420
|
-
"Interactive playground to experiment with different CoinIcon configurations.",
|
|
1421
|
-
},
|
|
1422
|
-
},
|
|
1423
|
-
},
|
|
1424
183
|
args: {
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
className: "",
|
|
184
|
+
className: "h-8 w-8 text-fm-icon-warning",
|
|
185
|
+
withAccessibility: true,
|
|
1428
186
|
},
|
|
1429
187
|
render: (args) => (
|
|
1430
|
-
<
|
|
1431
|
-
<
|
|
1432
|
-
|
|
1433
|
-
</div>
|
|
1434
|
-
</div>
|
|
188
|
+
<IconPlaygroundCanvas>
|
|
189
|
+
<CoinIcon {...args} />
|
|
190
|
+
</IconPlaygroundCanvas>
|
|
1435
191
|
),
|
|
1436
192
|
}
|