@windstream/react-shared-components 0.0.97 → 0.0.99

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.
Files changed (139) hide show
  1. package/README.md +635 -635
  2. package/dist/contentful/index.esm.js +1 -1
  3. package/dist/contentful/index.esm.js.map +1 -1
  4. package/dist/contentful/index.js +1 -1
  5. package/dist/contentful/index.js.map +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/package.json +177 -177
  8. package/src/components/accordion/Accordion.stories.tsx +230 -230
  9. package/src/components/accordion/types.ts +11 -11
  10. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  11. package/src/components/alert-card/index.tsx +38 -38
  12. package/src/components/alert-card/types.ts +12 -12
  13. package/src/components/brand-button/BrandButton.stories.tsx +223 -223
  14. package/src/components/brand-button/helpers.ts +35 -35
  15. package/src/components/brand-button/index.tsx +115 -115
  16. package/src/components/brand-button/types.ts +37 -37
  17. package/src/components/button/Button.stories.tsx +108 -108
  18. package/src/components/button/index.tsx +27 -27
  19. package/src/components/button/types.ts +14 -14
  20. package/src/components/call-button/CallButton.stories.tsx +324 -324
  21. package/src/components/call-button/index.tsx +86 -86
  22. package/src/components/call-button/types.ts +11 -11
  23. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  24. package/src/components/checkbox/index.tsx +197 -197
  25. package/src/components/checkbox/types.ts +27 -27
  26. package/src/components/checklist/Checklist.stories.tsx +150 -150
  27. package/src/components/checklist/index.tsx +55 -55
  28. package/src/components/checklist/types.ts +14 -14
  29. package/src/components/collapse/Collapse.stories.tsx +255 -255
  30. package/src/components/collapse/index.tsx +46 -46
  31. package/src/components/collapse/types.ts +6 -6
  32. package/src/components/divider/Divider.stories.tsx +205 -205
  33. package/src/components/divider/index.tsx +22 -22
  34. package/src/components/divider/type.ts +3 -3
  35. package/src/components/image/Image.stories.tsx +113 -113
  36. package/src/components/image/index.tsx +25 -25
  37. package/src/components/image/types.ts +40 -40
  38. package/src/components/input/Input.stories.tsx +325 -325
  39. package/src/components/input/index.tsx +177 -177
  40. package/src/components/input/types.ts +37 -37
  41. package/src/components/link/Link.stories.tsx +163 -163
  42. package/src/components/link/types.ts +25 -25
  43. package/src/components/list/List.stories.tsx +272 -272
  44. package/src/components/list/index.tsx +88 -88
  45. package/src/components/list/list-item/index.tsx +38 -38
  46. package/src/components/list/list-item/types.ts +13 -13
  47. package/src/components/list/types.ts +29 -29
  48. package/src/components/material-icon/MaterialIcon.stories.tsx +322 -322
  49. package/src/components/material-icon/constants.ts +98 -98
  50. package/src/components/material-icon/index.tsx +47 -47
  51. package/src/components/material-icon/types.ts +31 -31
  52. package/src/components/modal/Modal.stories.tsx +171 -171
  53. package/src/components/modal/index.tsx +164 -164
  54. package/src/components/modal/types.ts +24 -24
  55. package/src/components/next-image/index.tsx +32 -32
  56. package/src/components/next-image/types.ts +1 -1
  57. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  58. package/src/components/radio-button/index.tsx +75 -75
  59. package/src/components/radio-button/types.ts +21 -21
  60. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  61. package/src/components/see-more/index.tsx +44 -44
  62. package/src/components/see-more/types.ts +4 -4
  63. package/src/components/select/Select.stories.tsx +411 -411
  64. package/src/components/select/index.tsx +150 -150
  65. package/src/components/select/types.ts +35 -35
  66. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  67. package/src/components/select-plan-button/index.tsx +57 -57
  68. package/src/components/select-plan-button/types.ts +14 -14
  69. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  70. package/src/components/skeleton/index.tsx +61 -61
  71. package/src/components/skeleton/types.ts +4 -4
  72. package/src/components/spinner/Spinner.stories.tsx +335 -335
  73. package/src/components/spinner/index.tsx +44 -44
  74. package/src/components/spinner/types.ts +5 -5
  75. package/src/components/text/Text.stories.tsx +321 -321
  76. package/src/components/text/index.tsx +25 -25
  77. package/src/components/text/types.ts +45 -45
  78. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  79. package/src/components/tooltip/index.tsx +74 -74
  80. package/src/components/tooltip/types.ts +7 -7
  81. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  82. package/src/components/view-cart-button/index.tsx +42 -42
  83. package/src/components/view-cart-button/types.ts +5 -5
  84. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  85. package/src/contentful/blocks/button/index.tsx +107 -107
  86. package/src/contentful/blocks/button/types.ts +34 -34
  87. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  88. package/src/contentful/blocks/callout/index.tsx +66 -66
  89. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  90. package/src/contentful/blocks/cards/index.tsx +13 -13
  91. package/src/contentful/blocks/cards/product-card/index.tsx +206 -206
  92. package/src/contentful/blocks/cards/product-card/types.ts +28 -28
  93. package/src/contentful/blocks/cards/testimonial-card/index.tsx +88 -88
  94. package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
  95. package/src/contentful/blocks/cards/types.ts +1 -1
  96. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  97. package/src/contentful/blocks/carousel/helper.tsx +356 -356
  98. package/src/contentful/blocks/carousel/index.tsx +74 -74
  99. package/src/contentful/blocks/carousel/types.ts +143 -143
  100. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  101. package/src/contentful/blocks/cta-callout/index.tsx +60 -60
  102. package/src/contentful/blocks/cta-callout/types.ts +26 -26
  103. package/src/contentful/blocks/find-kinetic/index.tsx +124 -124
  104. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  105. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  106. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  107. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  108. package/src/contentful/blocks/image-promo-bar/helper.tsx +28 -28
  109. package/src/contentful/blocks/image-promo-bar/index.tsx +234 -234
  110. package/src/contentful/blocks/image-promo-bar/types.ts +44 -44
  111. package/src/contentful/blocks/image-promo-bar/vimeo-embed.tsx +93 -93
  112. package/src/contentful/blocks/image-promo-bar/youtube-embed.tsx +46 -46
  113. package/src/contentful/blocks/modal/constants.ts +53 -53
  114. package/src/contentful/blocks/modal/index.tsx +91 -91
  115. package/src/contentful/blocks/modal/types.ts +12 -12
  116. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +111 -111
  117. package/src/contentful/blocks/navigation/index.tsx +385 -385
  118. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +80 -80
  119. package/src/contentful/blocks/navigation/types.ts +41 -41
  120. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  121. package/src/contentful/blocks/primary-hero/index.tsx +229 -229
  122. package/src/contentful/blocks/primary-hero/types.ts +35 -35
  123. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  124. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  125. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  126. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  127. package/src/contentful/blocks/text/index.tsx +12 -12
  128. package/src/contentful/blocks/text/types.ts +1 -1
  129. package/src/contentful/index.ts +57 -57
  130. package/src/hooks/use-body-scroll-lock.ts +34 -34
  131. package/src/hooks/use-outside-click.ts +17 -17
  132. package/src/index.ts +96 -96
  133. package/src/next/index.ts +5 -5
  134. package/src/setupTests.ts +46 -46
  135. package/src/stories/DocsTemplate.tsx +24 -24
  136. package/src/styles/globals.css +343 -343
  137. package/src/types/global.d.ts +9 -9
  138. package/src/types/micro-components.ts +99 -99
  139. package/src/utils/index.ts +49 -49
@@ -1,322 +1,322 @@
1
- import { iconNameList } from "./constants";
2
- import { MaterialIcon } from "./index";
3
-
4
- import { DocsPage } from "@shared/stories/DocsTemplate";
5
- import type { Meta, StoryObj } from "@storybook/react";
6
-
7
- const meta: Meta<typeof MaterialIcon> = {
8
- title: "Components/MaterialIcon",
9
- component: MaterialIcon,
10
- tags: ["autodocs"],
11
- parameters: {
12
- layout: "centered",
13
- docs: {
14
- page: DocsPage,
15
- description: {
16
- component:
17
- "Material Design icon component with customizable size, color, and styling.",
18
- },
19
- },
20
- },
21
- argTypes: {
22
- name: {
23
- control: { type: "select" },
24
- options: iconNameList,
25
- description: "Material icon name",
26
- },
27
- size: {
28
- control: { type: "select" },
29
- options: [20, 24, 32, 40, 48],
30
- description: "Icon size",
31
- },
32
- weight: {
33
- control: { type: "select" },
34
- options: [100, 200, 300, 400, 500, 600, 700],
35
- description: "Icon weight",
36
- },
37
- color: {
38
- control: { type: "color" },
39
- description: "Icon color",
40
- },
41
- className: {
42
- control: { type: "text" },
43
- description: "Additional CSS classes",
44
- },
45
- },
46
- args: {
47
- name: "home",
48
- size: 24,
49
- },
50
- };
51
-
52
- export default meta;
53
- type Story = StoryObj<typeof meta>;
54
-
55
- // Default icon
56
- export const Default: Story = {
57
- args: {},
58
- };
59
-
60
- // Different sizes
61
- export const Sizes: Story = {
62
- render: () => (
63
- <div className="flex items-center gap-6">
64
- <div className="text-center">
65
- <MaterialIcon name="home" size={20} />
66
- <p className="mt-1 text-xs">20px</p>
67
- </div>
68
- <div className="text-center">
69
- <MaterialIcon name="home" size={24} />
70
- <p className="mt-1 text-xs">24px</p>
71
- </div>
72
- <div className="text-center">
73
- <MaterialIcon name="home" size={40} />
74
- <p className="mt-1 text-xs">40px</p>
75
- </div>
76
- <div className="text-center">
77
- <MaterialIcon name="home" size={48} />
78
- <p className="mt-1 text-xs">48px</p>
79
- </div>
80
- </div>
81
- ),
82
- parameters: {
83
- docs: {
84
- description: {
85
- story: "All available icon sizes.",
86
- },
87
- },
88
- },
89
- };
90
-
91
- // Common icons
92
- export const CommonIcons: Story = {
93
- render: () => (
94
- <div className="grid grid-cols-4 gap-4">
95
- <div className="rounded-lg border p-4 text-center">
96
- <MaterialIcon name="home" size={40} />
97
- <p className="mt-2 text-sm">home</p>
98
- </div>
99
- <div className="rounded-lg border p-4 text-center">
100
- <MaterialIcon name="search" size={40} />
101
- <p className="mt-2 text-sm">search</p>
102
- </div>
103
- <div className="rounded-lg border p-4 text-center">
104
- <MaterialIcon name="check" size={40} />
105
- <p className="mt-2 text-sm">check</p>
106
- </div>
107
- <div className="rounded-lg border p-4 text-center">
108
- <MaterialIcon name="settings" size={40} />
109
- <p className="mt-2 text-sm">settings</p>
110
- </div>
111
- <div className="rounded-lg border p-4 text-center">
112
- <MaterialIcon name="groups" size={40} />
113
- <p className="mt-2 text-sm">groups</p>
114
- </div>
115
- <div className="rounded-lg border p-4 text-center">
116
- <MaterialIcon name="mail" size={40} />
117
- <p className="mt-2 text-sm">mail</p>
118
- </div>
119
- <div className="rounded-lg border p-4 text-center">
120
- <MaterialIcon name="call" size={40} />
121
- <p className="mt-2 text-sm">call</p>
122
- </div>
123
- <div className="rounded-lg border p-4 text-center">
124
- <MaterialIcon name="info" size={40} />
125
- <p className="mt-2 text-sm">info</p>
126
- </div>
127
- </div>
128
- ),
129
- parameters: {
130
- docs: {
131
- description: {
132
- story: "Common Material Design icons.",
133
- },
134
- },
135
- },
136
- };
137
-
138
- // Colored icons
139
- export const ColoredIcons: Story = {
140
- render: () => (
141
- <div className="grid grid-cols-4 gap-4">
142
- <div className="text-center">
143
- <MaterialIcon name="check" size={40} color="#ef4444" />
144
- <p className="mt-2 text-sm text-red-500">Red</p>
145
- </div>
146
- <div className="text-center">
147
- <MaterialIcon name="check_circle" size={40} color="#10b981" />
148
- <p className="mt-2 text-sm text-green-500">Green</p>
149
- </div>
150
- <div className="text-center">
151
- <MaterialIcon name="info" size={40} color="#3b82f6" />
152
- <p className="mt-2 text-sm text-blue-500">Blue</p>
153
- </div>
154
- <div className="text-center">
155
- <MaterialIcon name="error" size={40} color="#f59e0b" />
156
- <p className="mt-2 text-sm text-yellow-500">Yellow</p>
157
- </div>
158
- </div>
159
- ),
160
- parameters: {
161
- docs: {
162
- description: {
163
- story: "Icons with different colors.",
164
- },
165
- },
166
- },
167
- };
168
-
169
- // Icon with text
170
- export const IconWithText: Story = {
171
- render: () => (
172
- <div className="space-y-4">
173
- <div className="flex items-center gap-2">
174
- <MaterialIcon name="mail" />
175
- <span>Email notifications</span>
176
- </div>
177
- <div className="flex items-center gap-2">
178
- <MaterialIcon name="call" />
179
- <span>Phone support</span>
180
- </div>
181
- <div className="flex items-center gap-2">
182
- <MaterialIcon name="forum" />
183
- <span>Live chat</span>
184
- </div>
185
- <div className="flex items-center gap-2">
186
- <MaterialIcon name="help" />
187
- <span>Help center</span>
188
- </div>
189
- </div>
190
- ),
191
- parameters: {
192
- docs: {
193
- description: {
194
- story: "Icons used alongside text content.",
195
- },
196
- },
197
- },
198
- };
199
-
200
- // Interactive icons
201
- export const InteractiveIcons: Story = {
202
- render: () => (
203
- <div className="grid grid-cols-3 gap-4">
204
- <button className="rounded-lg border p-3 transition-colors hover:bg-gray-50">
205
- <MaterialIcon name="check_box_outline_blank" size={40} />
206
- <p className="mt-2 text-sm">Like</p>
207
- </button>
208
- <button className="rounded-lg border p-3 transition-colors hover:bg-gray-50">
209
- <MaterialIcon name="share" size={40} />
210
- <p className="mt-2 text-sm">Share</p>
211
- </button>
212
- <button className="rounded-lg border p-3 transition-colors hover:bg-gray-50">
213
- <MaterialIcon name="check" size={40} />
214
- <p className="mt-2 text-sm">Bookmark</p>
215
- </button>
216
- </div>
217
- ),
218
- parameters: {
219
- docs: {
220
- description: {
221
- story: "Interactive icon buttons.",
222
- },
223
- },
224
- },
225
- };
226
-
227
- // Status icons
228
- export const StatusIcons: Story = {
229
- render: () => (
230
- <div className="grid grid-cols-4 gap-4">
231
- <div className="text-center">
232
- <MaterialIcon name="check_circle" size={40} />
233
- <p className="mt-2 text-sm text-green-600">Success</p>
234
- </div>
235
- <div className="text-center">
236
- <MaterialIcon name="error" size={40} />
237
- <p className="mt-2 text-sm text-red-600">Error</p>
238
- </div>
239
- <div className="text-center">
240
- <MaterialIcon name="error" size={40} />
241
- <p className="mt-2 text-sm text-yellow-600">Warning</p>
242
- </div>
243
- <div className="text-center">
244
- <MaterialIcon name="info" size={40} />
245
- <p className="mt-2 text-sm text-blue-600">Info</p>
246
- </div>
247
- </div>
248
- ),
249
- parameters: {
250
- docs: {
251
- description: {
252
- story: "Status and feedback icons.",
253
- },
254
- },
255
- },
256
- };
257
-
258
- // All sizes showcase
259
- export const AllSizes: Story = {
260
- render: () => (
261
- <div className="space-y-6">
262
- <div>
263
- <h3 className="mb-3 text-lg font-semibold">Icon Sizes</h3>
264
- <div className="flex items-center gap-6">
265
- <div className="text-center">
266
- <MaterialIcon name="check" size={20} />
267
- <p className="mt-1 text-xs">Small</p>
268
- </div>
269
- <div className="text-center">
270
- <MaterialIcon name="check" size={24} />
271
- <p className="mt-1 text-xs">Medium</p>
272
- </div>
273
- <div className="text-center">
274
- <MaterialIcon name="check" size={40} />
275
- <p className="mt-1 text-xs">Large</p>
276
- </div>
277
- <div className="text-center">
278
- <MaterialIcon name="check" size={48} />
279
- <p className="mt-1 text-xs">XLarge</p>
280
- </div>
281
- </div>
282
- </div>
283
-
284
- <div>
285
- <h3 className="mb-3 text-lg font-semibold">Common Icons</h3>
286
- <div className="grid grid-cols-6 gap-4">
287
- <div className="text-center">
288
- <MaterialIcon name="home" />
289
- <p className="mt-1 text-xs">home</p>
290
- </div>
291
- <div className="text-center">
292
- <MaterialIcon name="search" />
293
- <p className="mt-1 text-xs">search</p>
294
- </div>
295
- <div className="text-center">
296
- <MaterialIcon name="check" />
297
- <p className="mt-1 text-xs">check</p>
298
- </div>
299
- <div className="text-center">
300
- <MaterialIcon name="settings" />
301
- <p className="mt-1 text-xs">settings</p>
302
- </div>
303
- <div className="text-center">
304
- <MaterialIcon name="groups" />
305
- <p className="mt-1 text-xs">groups</p>
306
- </div>
307
- <div className="text-center">
308
- <MaterialIcon name="mail" />
309
- <p className="mt-1 text-xs">mail</p>
310
- </div>
311
- </div>
312
- </div>
313
- </div>
314
- ),
315
- parameters: {
316
- docs: {
317
- description: {
318
- story: "Complete showcase of all icon sizes and common icons.",
319
- },
320
- },
321
- },
322
- };
1
+ import { iconNameList } from "./constants";
2
+ import { MaterialIcon } from "./index";
3
+
4
+ import { DocsPage } from "@shared/stories/DocsTemplate";
5
+ import type { Meta, StoryObj } from "@storybook/react";
6
+
7
+ const meta: Meta<typeof MaterialIcon> = {
8
+ title: "Components/MaterialIcon",
9
+ component: MaterialIcon,
10
+ tags: ["autodocs"],
11
+ parameters: {
12
+ layout: "centered",
13
+ docs: {
14
+ page: DocsPage,
15
+ description: {
16
+ component:
17
+ "Material Design icon component with customizable size, color, and styling.",
18
+ },
19
+ },
20
+ },
21
+ argTypes: {
22
+ name: {
23
+ control: { type: "select" },
24
+ options: iconNameList,
25
+ description: "Material icon name",
26
+ },
27
+ size: {
28
+ control: { type: "select" },
29
+ options: [20, 24, 32, 40, 48],
30
+ description: "Icon size",
31
+ },
32
+ weight: {
33
+ control: { type: "select" },
34
+ options: [100, 200, 300, 400, 500, 600, 700],
35
+ description: "Icon weight",
36
+ },
37
+ color: {
38
+ control: { type: "color" },
39
+ description: "Icon color",
40
+ },
41
+ className: {
42
+ control: { type: "text" },
43
+ description: "Additional CSS classes",
44
+ },
45
+ },
46
+ args: {
47
+ name: "home",
48
+ size: 24,
49
+ },
50
+ };
51
+
52
+ export default meta;
53
+ type Story = StoryObj<typeof meta>;
54
+
55
+ // Default icon
56
+ export const Default: Story = {
57
+ args: {},
58
+ };
59
+
60
+ // Different sizes
61
+ export const Sizes: Story = {
62
+ render: () => (
63
+ <div className="flex items-center gap-6">
64
+ <div className="text-center">
65
+ <MaterialIcon name="home" size={20} />
66
+ <p className="mt-1 text-xs">20px</p>
67
+ </div>
68
+ <div className="text-center">
69
+ <MaterialIcon name="home" size={24} />
70
+ <p className="mt-1 text-xs">24px</p>
71
+ </div>
72
+ <div className="text-center">
73
+ <MaterialIcon name="home" size={40} />
74
+ <p className="mt-1 text-xs">40px</p>
75
+ </div>
76
+ <div className="text-center">
77
+ <MaterialIcon name="home" size={48} />
78
+ <p className="mt-1 text-xs">48px</p>
79
+ </div>
80
+ </div>
81
+ ),
82
+ parameters: {
83
+ docs: {
84
+ description: {
85
+ story: "All available icon sizes.",
86
+ },
87
+ },
88
+ },
89
+ };
90
+
91
+ // Common icons
92
+ export const CommonIcons: Story = {
93
+ render: () => (
94
+ <div className="grid grid-cols-4 gap-4">
95
+ <div className="rounded-lg border p-4 text-center">
96
+ <MaterialIcon name="home" size={40} />
97
+ <p className="mt-2 text-sm">home</p>
98
+ </div>
99
+ <div className="rounded-lg border p-4 text-center">
100
+ <MaterialIcon name="search" size={40} />
101
+ <p className="mt-2 text-sm">search</p>
102
+ </div>
103
+ <div className="rounded-lg border p-4 text-center">
104
+ <MaterialIcon name="check" size={40} />
105
+ <p className="mt-2 text-sm">check</p>
106
+ </div>
107
+ <div className="rounded-lg border p-4 text-center">
108
+ <MaterialIcon name="settings" size={40} />
109
+ <p className="mt-2 text-sm">settings</p>
110
+ </div>
111
+ <div className="rounded-lg border p-4 text-center">
112
+ <MaterialIcon name="groups" size={40} />
113
+ <p className="mt-2 text-sm">groups</p>
114
+ </div>
115
+ <div className="rounded-lg border p-4 text-center">
116
+ <MaterialIcon name="mail" size={40} />
117
+ <p className="mt-2 text-sm">mail</p>
118
+ </div>
119
+ <div className="rounded-lg border p-4 text-center">
120
+ <MaterialIcon name="call" size={40} />
121
+ <p className="mt-2 text-sm">call</p>
122
+ </div>
123
+ <div className="rounded-lg border p-4 text-center">
124
+ <MaterialIcon name="info" size={40} />
125
+ <p className="mt-2 text-sm">info</p>
126
+ </div>
127
+ </div>
128
+ ),
129
+ parameters: {
130
+ docs: {
131
+ description: {
132
+ story: "Common Material Design icons.",
133
+ },
134
+ },
135
+ },
136
+ };
137
+
138
+ // Colored icons
139
+ export const ColoredIcons: Story = {
140
+ render: () => (
141
+ <div className="grid grid-cols-4 gap-4">
142
+ <div className="text-center">
143
+ <MaterialIcon name="check" size={40} color="#ef4444" />
144
+ <p className="mt-2 text-sm text-red-500">Red</p>
145
+ </div>
146
+ <div className="text-center">
147
+ <MaterialIcon name="check_circle" size={40} color="#10b981" />
148
+ <p className="mt-2 text-sm text-green-500">Green</p>
149
+ </div>
150
+ <div className="text-center">
151
+ <MaterialIcon name="info" size={40} color="#3b82f6" />
152
+ <p className="mt-2 text-sm text-blue-500">Blue</p>
153
+ </div>
154
+ <div className="text-center">
155
+ <MaterialIcon name="error" size={40} color="#f59e0b" />
156
+ <p className="mt-2 text-sm text-yellow-500">Yellow</p>
157
+ </div>
158
+ </div>
159
+ ),
160
+ parameters: {
161
+ docs: {
162
+ description: {
163
+ story: "Icons with different colors.",
164
+ },
165
+ },
166
+ },
167
+ };
168
+
169
+ // Icon with text
170
+ export const IconWithText: Story = {
171
+ render: () => (
172
+ <div className="space-y-4">
173
+ <div className="flex items-center gap-2">
174
+ <MaterialIcon name="mail" />
175
+ <span>Email notifications</span>
176
+ </div>
177
+ <div className="flex items-center gap-2">
178
+ <MaterialIcon name="call" />
179
+ <span>Phone support</span>
180
+ </div>
181
+ <div className="flex items-center gap-2">
182
+ <MaterialIcon name="forum" />
183
+ <span>Live chat</span>
184
+ </div>
185
+ <div className="flex items-center gap-2">
186
+ <MaterialIcon name="help" />
187
+ <span>Help center</span>
188
+ </div>
189
+ </div>
190
+ ),
191
+ parameters: {
192
+ docs: {
193
+ description: {
194
+ story: "Icons used alongside text content.",
195
+ },
196
+ },
197
+ },
198
+ };
199
+
200
+ // Interactive icons
201
+ export const InteractiveIcons: Story = {
202
+ render: () => (
203
+ <div className="grid grid-cols-3 gap-4">
204
+ <button className="rounded-lg border p-3 transition-colors hover:bg-gray-50">
205
+ <MaterialIcon name="check_box_outline_blank" size={40} />
206
+ <p className="mt-2 text-sm">Like</p>
207
+ </button>
208
+ <button className="rounded-lg border p-3 transition-colors hover:bg-gray-50">
209
+ <MaterialIcon name="share" size={40} />
210
+ <p className="mt-2 text-sm">Share</p>
211
+ </button>
212
+ <button className="rounded-lg border p-3 transition-colors hover:bg-gray-50">
213
+ <MaterialIcon name="check" size={40} />
214
+ <p className="mt-2 text-sm">Bookmark</p>
215
+ </button>
216
+ </div>
217
+ ),
218
+ parameters: {
219
+ docs: {
220
+ description: {
221
+ story: "Interactive icon buttons.",
222
+ },
223
+ },
224
+ },
225
+ };
226
+
227
+ // Status icons
228
+ export const StatusIcons: Story = {
229
+ render: () => (
230
+ <div className="grid grid-cols-4 gap-4">
231
+ <div className="text-center">
232
+ <MaterialIcon name="check_circle" size={40} />
233
+ <p className="mt-2 text-sm text-green-600">Success</p>
234
+ </div>
235
+ <div className="text-center">
236
+ <MaterialIcon name="error" size={40} />
237
+ <p className="mt-2 text-sm text-red-600">Error</p>
238
+ </div>
239
+ <div className="text-center">
240
+ <MaterialIcon name="error" size={40} />
241
+ <p className="mt-2 text-sm text-yellow-600">Warning</p>
242
+ </div>
243
+ <div className="text-center">
244
+ <MaterialIcon name="info" size={40} />
245
+ <p className="mt-2 text-sm text-blue-600">Info</p>
246
+ </div>
247
+ </div>
248
+ ),
249
+ parameters: {
250
+ docs: {
251
+ description: {
252
+ story: "Status and feedback icons.",
253
+ },
254
+ },
255
+ },
256
+ };
257
+
258
+ // All sizes showcase
259
+ export const AllSizes: Story = {
260
+ render: () => (
261
+ <div className="space-y-6">
262
+ <div>
263
+ <h3 className="mb-3 text-lg font-semibold">Icon Sizes</h3>
264
+ <div className="flex items-center gap-6">
265
+ <div className="text-center">
266
+ <MaterialIcon name="check" size={20} />
267
+ <p className="mt-1 text-xs">Small</p>
268
+ </div>
269
+ <div className="text-center">
270
+ <MaterialIcon name="check" size={24} />
271
+ <p className="mt-1 text-xs">Medium</p>
272
+ </div>
273
+ <div className="text-center">
274
+ <MaterialIcon name="check" size={40} />
275
+ <p className="mt-1 text-xs">Large</p>
276
+ </div>
277
+ <div className="text-center">
278
+ <MaterialIcon name="check" size={48} />
279
+ <p className="mt-1 text-xs">XLarge</p>
280
+ </div>
281
+ </div>
282
+ </div>
283
+
284
+ <div>
285
+ <h3 className="mb-3 text-lg font-semibold">Common Icons</h3>
286
+ <div className="grid grid-cols-6 gap-4">
287
+ <div className="text-center">
288
+ <MaterialIcon name="home" />
289
+ <p className="mt-1 text-xs">home</p>
290
+ </div>
291
+ <div className="text-center">
292
+ <MaterialIcon name="search" />
293
+ <p className="mt-1 text-xs">search</p>
294
+ </div>
295
+ <div className="text-center">
296
+ <MaterialIcon name="check" />
297
+ <p className="mt-1 text-xs">check</p>
298
+ </div>
299
+ <div className="text-center">
300
+ <MaterialIcon name="settings" />
301
+ <p className="mt-1 text-xs">settings</p>
302
+ </div>
303
+ <div className="text-center">
304
+ <MaterialIcon name="groups" />
305
+ <p className="mt-1 text-xs">groups</p>
306
+ </div>
307
+ <div className="text-center">
308
+ <MaterialIcon name="mail" />
309
+ <p className="mt-1 text-xs">mail</p>
310
+ </div>
311
+ </div>
312
+ </div>
313
+ </div>
314
+ ),
315
+ parameters: {
316
+ docs: {
317
+ description: {
318
+ story: "Complete showcase of all icon sizes and common icons.",
319
+ },
320
+ },
321
+ },
322
+ };