@windstream/react-shared-components 0.1.35 → 0.1.37

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 (186) hide show
  1. package/README.md +635 -635
  2. package/dist/contentful/index.d.ts +1 -0
  3. package/dist/contentful/index.esm.js +2 -4
  4. package/dist/contentful/index.esm.js.map +1 -1
  5. package/dist/contentful/index.js +2 -4
  6. package/dist/contentful/index.js.map +1 -1
  7. package/dist/core.d.ts +1 -1
  8. package/dist/index.esm.js +5 -7
  9. package/dist/index.esm.js.map +1 -1
  10. package/dist/index.js +5 -7
  11. package/dist/index.js.map +1 -1
  12. package/dist/next/index.esm.js +1 -3
  13. package/dist/next/index.esm.js.map +1 -1
  14. package/dist/next/index.js +1 -3
  15. package/dist/next/index.js.map +1 -1
  16. package/dist/utils/index.d.ts +0 -1
  17. package/package.json +182 -182
  18. package/src/components/accordion/Accordion.stories.tsx +230 -230
  19. package/src/components/accordion/index.tsx +70 -70
  20. package/src/components/accordion/types.ts +12 -12
  21. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  22. package/src/components/alert-card/index.tsx +41 -41
  23. package/src/components/alert-card/types.ts +13 -13
  24. package/src/components/brand-button/BrandButton.stories.tsx +223 -223
  25. package/src/components/brand-button/helpers.ts +35 -35
  26. package/src/components/brand-button/index.tsx +114 -114
  27. package/src/components/brand-button/types.ts +37 -37
  28. package/src/components/button/Button.stories.tsx +108 -108
  29. package/src/components/button/index.tsx +27 -27
  30. package/src/components/button/types.ts +14 -14
  31. package/src/components/call-button/CallButton.stories.tsx +324 -324
  32. package/src/components/call-button/index.tsx +86 -86
  33. package/src/components/call-button/types.ts +11 -11
  34. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  35. package/src/components/checkbox/index.tsx +197 -197
  36. package/src/components/checkbox/types.ts +27 -27
  37. package/src/components/checklist/Checklist.stories.tsx +150 -150
  38. package/src/components/checklist/index.tsx +61 -61
  39. package/src/components/checklist/types.ts +17 -17
  40. package/src/components/collapse/Collapse.stories.tsx +255 -255
  41. package/src/components/collapse/index.tsx +46 -46
  42. package/src/components/collapse/types.ts +6 -6
  43. package/src/components/divider/Divider.stories.tsx +205 -205
  44. package/src/components/divider/index.tsx +22 -22
  45. package/src/components/divider/type.ts +3 -3
  46. package/src/components/image/Image.stories.tsx +113 -113
  47. package/src/components/image/index.tsx +25 -25
  48. package/src/components/image/types.ts +40 -40
  49. package/src/components/input/Input.stories.tsx +325 -325
  50. package/src/components/input/index.tsx +177 -177
  51. package/src/components/input/types.ts +37 -37
  52. package/src/components/link/Link.stories.tsx +163 -163
  53. package/src/components/link/index.tsx +109 -109
  54. package/src/components/link/types.ts +25 -25
  55. package/src/components/list/List.stories.tsx +272 -272
  56. package/src/components/list/index.tsx +88 -88
  57. package/src/components/list/list-item/index.tsx +38 -38
  58. package/src/components/list/list-item/types.ts +13 -13
  59. package/src/components/list/types.ts +29 -29
  60. package/src/components/material-icon/MaterialIcon.stories.tsx +322 -322
  61. package/src/components/material-icon/constants.ts +98 -98
  62. package/src/components/material-icon/index.tsx +47 -47
  63. package/src/components/material-icon/types.ts +31 -31
  64. package/src/components/modal/Modal.stories.tsx +171 -171
  65. package/src/components/modal/index.tsx +164 -164
  66. package/src/components/modal/types.ts +24 -24
  67. package/src/components/next-image/index.tsx +54 -54
  68. package/src/components/next-image/types.ts +1 -1
  69. package/src/components/pagination/index.tsx +100 -100
  70. package/src/components/pagination/types.ts +6 -6
  71. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  72. package/src/components/radio-button/index.tsx +75 -75
  73. package/src/components/radio-button/types.ts +21 -21
  74. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  75. package/src/components/see-more/index.tsx +44 -44
  76. package/src/components/see-more/types.ts +4 -4
  77. package/src/components/select/Select.stories.tsx +411 -411
  78. package/src/components/select/index.tsx +155 -155
  79. package/src/components/select/types.ts +36 -36
  80. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  81. package/src/components/select-plan-button/index.tsx +63 -63
  82. package/src/components/select-plan-button/types.ts +17 -17
  83. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  84. package/src/components/skeleton/index.tsx +61 -61
  85. package/src/components/skeleton/types.ts +4 -4
  86. package/src/components/spinner/Spinner.stories.tsx +335 -335
  87. package/src/components/spinner/index.tsx +44 -44
  88. package/src/components/spinner/types.ts +5 -5
  89. package/src/components/text/Text.stories.tsx +321 -321
  90. package/src/components/text/index.tsx +25 -25
  91. package/src/components/text/types.ts +45 -45
  92. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  93. package/src/components/tooltip/index.tsx +74 -74
  94. package/src/components/tooltip/types.ts +7 -7
  95. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  96. package/src/components/view-cart-button/index.tsx +42 -42
  97. package/src/components/view-cart-button/types.ts +5 -5
  98. package/src/contentful/blocks/accordion/Accordion.stories.tsx +29 -29
  99. package/src/contentful/blocks/accordion/index.tsx +62 -62
  100. package/src/contentful/blocks/accordion/types.ts +17 -17
  101. package/src/contentful/blocks/address-input-banner/index.tsx +52 -52
  102. package/src/contentful/blocks/address-input-banner/types.ts +14 -14
  103. package/src/contentful/blocks/anchored-bottom-banner/index.tsx +70 -65
  104. package/src/contentful/blocks/anchored-bottom-banner/types.ts +10 -9
  105. package/src/contentful/blocks/blogs-grid/index.tsx +134 -134
  106. package/src/contentful/blocks/blogs-grid/types.ts +26 -26
  107. package/src/contentful/blocks/breadcrumbs/index.tsx +51 -51
  108. package/src/contentful/blocks/breadcrumbs/types.ts +5 -5
  109. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  110. package/src/contentful/blocks/button/index.tsx +129 -129
  111. package/src/contentful/blocks/button/types.ts +39 -39
  112. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  113. package/src/contentful/blocks/callout/index.tsx +88 -88
  114. package/src/contentful/blocks/callout/types.ts +15 -15
  115. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  116. package/src/contentful/blocks/cards/blog-card/index.tsx +110 -110
  117. package/src/contentful/blocks/cards/blog-card/types.ts +18 -18
  118. package/src/contentful/blocks/cards/index.tsx +13 -13
  119. package/src/contentful/blocks/cards/product-card/index.tsx +251 -251
  120. package/src/contentful/blocks/cards/product-card/types.ts +28 -28
  121. package/src/contentful/blocks/cards/simple-card/index.tsx +89 -89
  122. package/src/contentful/blocks/cards/simple-card/types.ts +28 -28
  123. package/src/contentful/blocks/cards/testimonial-card/index.tsx +90 -90
  124. package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
  125. package/src/contentful/blocks/cards/types.ts +1 -1
  126. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  127. package/src/contentful/blocks/carousel/helper.tsx +440 -440
  128. package/src/contentful/blocks/carousel/index.tsx +85 -85
  129. package/src/contentful/blocks/carousel/types.ts +144 -144
  130. package/src/contentful/blocks/comparison-table/index.tsx +27 -27
  131. package/src/contentful/blocks/comparison-table/types.ts +6 -6
  132. package/src/contentful/blocks/cookiebanner/index.tsx +146 -146
  133. package/src/contentful/blocks/cookiebanner/type.ts +7 -7
  134. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  135. package/src/contentful/blocks/cta-callout/index.tsx +60 -60
  136. package/src/contentful/blocks/cta-callout/types.ts +26 -26
  137. package/src/contentful/blocks/dynamic-tabs/index.tsx +204 -204
  138. package/src/contentful/blocks/dynamic-tabs/types.ts +21 -21
  139. package/src/contentful/blocks/find-kinetic/FindKinetic.stories.tsx +23 -23
  140. package/src/contentful/blocks/find-kinetic/index.tsx +130 -130
  141. package/src/contentful/blocks/find-kinetic/types.ts +19 -19
  142. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  143. package/src/contentful/blocks/floating-banner/index.tsx +97 -97
  144. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  145. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  146. package/src/contentful/blocks/footer/index.tsx +90 -90
  147. package/src/contentful/blocks/footer/types.ts +13 -13
  148. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  149. package/src/contentful/blocks/image-promo-bar/helper.tsx +28 -28
  150. package/src/contentful/blocks/image-promo-bar/index.tsx +240 -240
  151. package/src/contentful/blocks/image-promo-bar/types.ts +44 -44
  152. package/src/contentful/blocks/image-promo-bar/vimeo-embed.tsx +93 -93
  153. package/src/contentful/blocks/image-promo-bar/youtube-embed.tsx +46 -46
  154. package/src/contentful/blocks/modal/constants.ts +53 -53
  155. package/src/contentful/blocks/modal/index.tsx +103 -103
  156. package/src/contentful/blocks/modal/types.ts +12 -12
  157. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +113 -113
  158. package/src/contentful/blocks/navigation/index.tsx +394 -394
  159. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +82 -82
  160. package/src/contentful/blocks/navigation/types.ts +41 -41
  161. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  162. package/src/contentful/blocks/primary-hero/index.tsx +234 -234
  163. package/src/contentful/blocks/primary-hero/types.ts +35 -35
  164. package/src/contentful/blocks/search-block/index.tsx +90 -90
  165. package/src/contentful/blocks/search-block/types.ts +15 -15
  166. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  167. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  168. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  169. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  170. package/src/contentful/blocks/text/index.tsx +12 -12
  171. package/src/contentful/blocks/text/types.ts +1 -1
  172. package/src/contentful/index.ts +81 -81
  173. package/src/hooks/use-body-scroll-lock.ts +34 -34
  174. package/src/hooks/use-carousel-swipe.ts +264 -264
  175. package/src/hooks/use-outside-click.ts +17 -17
  176. package/src/index.ts +101 -101
  177. package/src/next/index.ts +5 -5
  178. package/src/setupTests.ts +46 -46
  179. package/src/stories/DocsTemplate.tsx +24 -24
  180. package/src/styles/globals.css +343 -343
  181. package/src/types/global.d.ts +9 -9
  182. package/src/types/micro-components.ts +99 -99
  183. package/src/types/utm.ts +49 -49
  184. package/src/utils/cookie.ts +80 -80
  185. package/src/utils/index.ts +65 -65
  186. package/src/utils/utm.ts +221 -221
@@ -1,325 +1,325 @@
1
- import { Input } from "./index";
2
-
3
- import { DocsPage } from "@shared/stories/DocsTemplate";
4
- import type { Meta, StoryObj } from "@storybook/react";
5
-
6
- const meta: Meta<typeof Input> = {
7
- title: "Components/Input",
8
- component: Input,
9
- tags: ["autodocs"],
10
- parameters: {
11
- layout: "centered",
12
- docs: {
13
- page: DocsPage,
14
- description: {
15
- component:
16
- "A comprehensive input component with support for labels, error states, icons, loading states, and multiple sizes.",
17
- },
18
- },
19
- },
20
- argTypes: {
21
- placeholder: {
22
- control: { type: "text" },
23
- description: "Placeholder text",
24
- },
25
- label: {
26
- control: { type: "text" },
27
- description: "Label text",
28
- },
29
- size: {
30
- control: { type: "select" },
31
- options: ["slim", "medium", "large"],
32
- description: "Input size",
33
- },
34
- state: {
35
- control: { type: "select" },
36
- options: ["default", "focus", "active", "hover", "filled", "error"],
37
- description: "Visual state",
38
- },
39
- hasError: {
40
- control: { type: "boolean" },
41
- description: "Show error state",
42
- },
43
- errorText: {
44
- control: { type: "text" },
45
- description: "Error message text",
46
- },
47
- disabled: {
48
- control: { type: "boolean" },
49
- description: "Disable the input",
50
- },
51
- loading: {
52
- control: { type: "boolean" },
53
- description: "Show loading state",
54
- },
55
- required: {
56
- control: { type: "boolean" },
57
- description: "Mark input as required",
58
- },
59
- type: {
60
- control: { type: "select" },
61
- options: ["text", "email", "password", "number", "tel"],
62
- description: "Input type",
63
- },
64
- prefixIconName: {
65
- control: { type: "select" },
66
- options: ["location_on", "search"],
67
- description: "Prefix icon name",
68
- },
69
- suffixIconName: {
70
- control: { type: "select" },
71
- options: ["visibility", "visibility_off", "lock"],
72
- description: "Suffix icon name",
73
- },
74
- },
75
- args: {
76
- placeholder: "Enter text...",
77
- size: "medium",
78
- },
79
- };
80
-
81
- export default meta;
82
- type Story = StoryObj<typeof meta>;
83
-
84
- // Default input
85
- export const Default: Story = {
86
- args: {},
87
- };
88
-
89
- // With label
90
- export const WithLabel: Story = {
91
- args: {
92
- label: "Email Address",
93
- placeholder: "Enter your email",
94
- },
95
- };
96
-
97
- // Required input
98
- export const Required: Story = {
99
- args: {
100
- label: "Required Field",
101
- placeholder: "This field is required",
102
- required: true,
103
- },
104
- };
105
-
106
- // Error state
107
- export const Error: Story = {
108
- args: {
109
- label: "Email Address",
110
- placeholder: "Enter your email",
111
- hasError: true,
112
- errorText: "Please enter a valid email address",
113
- },
114
- };
115
-
116
- // Different sizes
117
- export const Sizes: Story = {
118
- render: () => (
119
- <div className="max-w-md w-full space-y-4">
120
- <div>
121
- <Input size="slim" placeholder="Slim input" label="Slim Size" />
122
- </div>
123
- <div>
124
- <Input size="medium" placeholder="Medium input" label="Medium Size" />
125
- </div>
126
- <div>
127
- <Input size="large" placeholder="Large input" label="Large Size" />
128
- </div>
129
- </div>
130
- ),
131
- parameters: {
132
- docs: {
133
- description: {
134
- story: "All available input sizes: slim, medium, and large.",
135
- },
136
- },
137
- },
138
- };
139
-
140
- // With prefix icon
141
- export const WithPrefixIcon: Story = {
142
- args: {
143
- label: "Search",
144
- placeholder: "Search...",
145
- prefixIconName: "search",
146
- prefixIconSize: 24,
147
- },
148
- };
149
-
150
- // With suffix icon
151
- export const WithSuffixIcon: Story = {
152
- args: {
153
- label: "Password",
154
- placeholder: "Enter password",
155
- type: "password",
156
- suffixIconName: "visibility",
157
- suffixIconSize: 24,
158
- },
159
- };
160
-
161
- // Password input
162
- export const Password: Story = {
163
- args: {
164
- label: "Password",
165
- placeholder: "Enter your password",
166
- type: "password",
167
- suffixIconName: "visibility",
168
- },
169
- };
170
-
171
- // Loading state
172
- export const Loading: Story = {
173
- args: {
174
- label: "Loading Input",
175
- placeholder: "Loading...",
176
- loading: true,
177
- },
178
- };
179
-
180
- // Disabled state
181
- export const Disabled: Story = {
182
- args: {
183
- label: "Disabled Input",
184
- placeholder: "This input is disabled",
185
- disabled: true,
186
- },
187
- };
188
-
189
- // Different states
190
- export const States: Story = {
191
- render: () => (
192
- <div className="max-w-md w-full space-y-4">
193
- <div>
194
- <Input
195
- label="Default State"
196
- placeholder="Default input"
197
- state="default"
198
- />
199
- </div>
200
- <div>
201
- <Input label="Hover State" placeholder="Hover over me" state="hover" />
202
- </div>
203
- <div>
204
- <Input label="Focus State" placeholder="Focus on me" state="focus" />
205
- </div>
206
- <div>
207
- <Input
208
- label="Error State"
209
- placeholder="Error input"
210
- state="error"
211
- errorText="This field has an error"
212
- />
213
- </div>
214
- </div>
215
- ),
216
- parameters: {
217
- docs: {
218
- description: {
219
- story: "Different visual states of the input component.",
220
- },
221
- },
222
- },
223
- };
224
-
225
- // Email input
226
- export const Email: Story = {
227
- args: {
228
- label: "Email",
229
- placeholder: "example@email.com",
230
- type: "email",
231
- },
232
- };
233
-
234
- // Phone input
235
- export const Phone: Story = {
236
- args: {
237
- label: "Phone Number",
238
- placeholder: "(555) 123-4567",
239
- type: "tel",
240
- },
241
- };
242
-
243
- // Form example
244
- export const FormExample: Story = {
245
- render: () => (
246
- <form className="max-w-md w-full space-y-4">
247
- <Input label="First Name" placeholder="Enter your first name" required />
248
- <Input label="Last Name" placeholder="Enter your last name" required />
249
- <Input
250
- label="Email"
251
- placeholder="Enter your email"
252
- type="email"
253
- required
254
- />
255
- <Input
256
- label="Password"
257
- placeholder="Enter your password"
258
- type="password"
259
- suffixIconName="visibility"
260
- required
261
- />
262
- <Input label="Phone Number" placeholder="(555) 123-4567" type="tel" />
263
- </form>
264
- ),
265
- parameters: {
266
- docs: {
267
- description: {
268
- story: "Example of multiple inputs used together in a form.",
269
- },
270
- },
271
- },
272
- };
273
-
274
- // All variants showcase
275
- export const AllVariants: Story = {
276
- render: () => (
277
- <div className="max-w-2xl w-full space-y-6">
278
- <div>
279
- <h3 className="mb-3 text-lg font-semibold">Sizes</h3>
280
- <div className="space-y-3">
281
- <Input size="slim" placeholder="Slim" label="Slim" />
282
- <Input size="medium" placeholder="Medium" label="Medium" />
283
- <Input size="large" placeholder="Large" label="Large" />
284
- </div>
285
- </div>
286
- <div>
287
- <h3 className="mb-3 text-lg font-semibold">With Icons</h3>
288
- <div className="space-y-3">
289
- <Input
290
- placeholder="Search..."
291
- label="With Prefix Icon"
292
- prefixIconName="search"
293
- />
294
- <Input
295
- placeholder="Password"
296
- label="With Suffix Icon"
297
- type="password"
298
- suffixIconName="visibility"
299
- />
300
- </div>
301
- </div>
302
- <div>
303
- <h3 className="mb-3 text-lg font-semibold">States</h3>
304
- <div className="space-y-3">
305
- <Input placeholder="Default" label="Default" />
306
- <Input
307
- placeholder="Error"
308
- label="Error"
309
- hasError
310
- errorText="This field has an error"
311
- />
312
- <Input placeholder="Loading" label="Loading" loading />
313
- <Input placeholder="Disabled" label="Disabled" disabled />
314
- </div>
315
- </div>
316
- </div>
317
- ),
318
- parameters: {
319
- docs: {
320
- description: {
321
- story: "Complete showcase of all input variants, sizes, and states.",
322
- },
323
- },
324
- },
325
- };
1
+ import { Input } from "./index";
2
+
3
+ import { DocsPage } from "@shared/stories/DocsTemplate";
4
+ import type { Meta, StoryObj } from "@storybook/react";
5
+
6
+ const meta: Meta<typeof Input> = {
7
+ title: "Components/Input",
8
+ component: Input,
9
+ tags: ["autodocs"],
10
+ parameters: {
11
+ layout: "centered",
12
+ docs: {
13
+ page: DocsPage,
14
+ description: {
15
+ component:
16
+ "A comprehensive input component with support for labels, error states, icons, loading states, and multiple sizes.",
17
+ },
18
+ },
19
+ },
20
+ argTypes: {
21
+ placeholder: {
22
+ control: { type: "text" },
23
+ description: "Placeholder text",
24
+ },
25
+ label: {
26
+ control: { type: "text" },
27
+ description: "Label text",
28
+ },
29
+ size: {
30
+ control: { type: "select" },
31
+ options: ["slim", "medium", "large"],
32
+ description: "Input size",
33
+ },
34
+ state: {
35
+ control: { type: "select" },
36
+ options: ["default", "focus", "active", "hover", "filled", "error"],
37
+ description: "Visual state",
38
+ },
39
+ hasError: {
40
+ control: { type: "boolean" },
41
+ description: "Show error state",
42
+ },
43
+ errorText: {
44
+ control: { type: "text" },
45
+ description: "Error message text",
46
+ },
47
+ disabled: {
48
+ control: { type: "boolean" },
49
+ description: "Disable the input",
50
+ },
51
+ loading: {
52
+ control: { type: "boolean" },
53
+ description: "Show loading state",
54
+ },
55
+ required: {
56
+ control: { type: "boolean" },
57
+ description: "Mark input as required",
58
+ },
59
+ type: {
60
+ control: { type: "select" },
61
+ options: ["text", "email", "password", "number", "tel"],
62
+ description: "Input type",
63
+ },
64
+ prefixIconName: {
65
+ control: { type: "select" },
66
+ options: ["location_on", "search"],
67
+ description: "Prefix icon name",
68
+ },
69
+ suffixIconName: {
70
+ control: { type: "select" },
71
+ options: ["visibility", "visibility_off", "lock"],
72
+ description: "Suffix icon name",
73
+ },
74
+ },
75
+ args: {
76
+ placeholder: "Enter text...",
77
+ size: "medium",
78
+ },
79
+ };
80
+
81
+ export default meta;
82
+ type Story = StoryObj<typeof meta>;
83
+
84
+ // Default input
85
+ export const Default: Story = {
86
+ args: {},
87
+ };
88
+
89
+ // With label
90
+ export const WithLabel: Story = {
91
+ args: {
92
+ label: "Email Address",
93
+ placeholder: "Enter your email",
94
+ },
95
+ };
96
+
97
+ // Required input
98
+ export const Required: Story = {
99
+ args: {
100
+ label: "Required Field",
101
+ placeholder: "This field is required",
102
+ required: true,
103
+ },
104
+ };
105
+
106
+ // Error state
107
+ export const Error: Story = {
108
+ args: {
109
+ label: "Email Address",
110
+ placeholder: "Enter your email",
111
+ hasError: true,
112
+ errorText: "Please enter a valid email address",
113
+ },
114
+ };
115
+
116
+ // Different sizes
117
+ export const Sizes: Story = {
118
+ render: () => (
119
+ <div className="max-w-md w-full space-y-4">
120
+ <div>
121
+ <Input size="slim" placeholder="Slim input" label="Slim Size" />
122
+ </div>
123
+ <div>
124
+ <Input size="medium" placeholder="Medium input" label="Medium Size" />
125
+ </div>
126
+ <div>
127
+ <Input size="large" placeholder="Large input" label="Large Size" />
128
+ </div>
129
+ </div>
130
+ ),
131
+ parameters: {
132
+ docs: {
133
+ description: {
134
+ story: "All available input sizes: slim, medium, and large.",
135
+ },
136
+ },
137
+ },
138
+ };
139
+
140
+ // With prefix icon
141
+ export const WithPrefixIcon: Story = {
142
+ args: {
143
+ label: "Search",
144
+ placeholder: "Search...",
145
+ prefixIconName: "search",
146
+ prefixIconSize: 24,
147
+ },
148
+ };
149
+
150
+ // With suffix icon
151
+ export const WithSuffixIcon: Story = {
152
+ args: {
153
+ label: "Password",
154
+ placeholder: "Enter password",
155
+ type: "password",
156
+ suffixIconName: "visibility",
157
+ suffixIconSize: 24,
158
+ },
159
+ };
160
+
161
+ // Password input
162
+ export const Password: Story = {
163
+ args: {
164
+ label: "Password",
165
+ placeholder: "Enter your password",
166
+ type: "password",
167
+ suffixIconName: "visibility",
168
+ },
169
+ };
170
+
171
+ // Loading state
172
+ export const Loading: Story = {
173
+ args: {
174
+ label: "Loading Input",
175
+ placeholder: "Loading...",
176
+ loading: true,
177
+ },
178
+ };
179
+
180
+ // Disabled state
181
+ export const Disabled: Story = {
182
+ args: {
183
+ label: "Disabled Input",
184
+ placeholder: "This input is disabled",
185
+ disabled: true,
186
+ },
187
+ };
188
+
189
+ // Different states
190
+ export const States: Story = {
191
+ render: () => (
192
+ <div className="max-w-md w-full space-y-4">
193
+ <div>
194
+ <Input
195
+ label="Default State"
196
+ placeholder="Default input"
197
+ state="default"
198
+ />
199
+ </div>
200
+ <div>
201
+ <Input label="Hover State" placeholder="Hover over me" state="hover" />
202
+ </div>
203
+ <div>
204
+ <Input label="Focus State" placeholder="Focus on me" state="focus" />
205
+ </div>
206
+ <div>
207
+ <Input
208
+ label="Error State"
209
+ placeholder="Error input"
210
+ state="error"
211
+ errorText="This field has an error"
212
+ />
213
+ </div>
214
+ </div>
215
+ ),
216
+ parameters: {
217
+ docs: {
218
+ description: {
219
+ story: "Different visual states of the input component.",
220
+ },
221
+ },
222
+ },
223
+ };
224
+
225
+ // Email input
226
+ export const Email: Story = {
227
+ args: {
228
+ label: "Email",
229
+ placeholder: "example@email.com",
230
+ type: "email",
231
+ },
232
+ };
233
+
234
+ // Phone input
235
+ export const Phone: Story = {
236
+ args: {
237
+ label: "Phone Number",
238
+ placeholder: "(555) 123-4567",
239
+ type: "tel",
240
+ },
241
+ };
242
+
243
+ // Form example
244
+ export const FormExample: Story = {
245
+ render: () => (
246
+ <form className="max-w-md w-full space-y-4">
247
+ <Input label="First Name" placeholder="Enter your first name" required />
248
+ <Input label="Last Name" placeholder="Enter your last name" required />
249
+ <Input
250
+ label="Email"
251
+ placeholder="Enter your email"
252
+ type="email"
253
+ required
254
+ />
255
+ <Input
256
+ label="Password"
257
+ placeholder="Enter your password"
258
+ type="password"
259
+ suffixIconName="visibility"
260
+ required
261
+ />
262
+ <Input label="Phone Number" placeholder="(555) 123-4567" type="tel" />
263
+ </form>
264
+ ),
265
+ parameters: {
266
+ docs: {
267
+ description: {
268
+ story: "Example of multiple inputs used together in a form.",
269
+ },
270
+ },
271
+ },
272
+ };
273
+
274
+ // All variants showcase
275
+ export const AllVariants: Story = {
276
+ render: () => (
277
+ <div className="max-w-2xl w-full space-y-6">
278
+ <div>
279
+ <h3 className="mb-3 text-lg font-semibold">Sizes</h3>
280
+ <div className="space-y-3">
281
+ <Input size="slim" placeholder="Slim" label="Slim" />
282
+ <Input size="medium" placeholder="Medium" label="Medium" />
283
+ <Input size="large" placeholder="Large" label="Large" />
284
+ </div>
285
+ </div>
286
+ <div>
287
+ <h3 className="mb-3 text-lg font-semibold">With Icons</h3>
288
+ <div className="space-y-3">
289
+ <Input
290
+ placeholder="Search..."
291
+ label="With Prefix Icon"
292
+ prefixIconName="search"
293
+ />
294
+ <Input
295
+ placeholder="Password"
296
+ label="With Suffix Icon"
297
+ type="password"
298
+ suffixIconName="visibility"
299
+ />
300
+ </div>
301
+ </div>
302
+ <div>
303
+ <h3 className="mb-3 text-lg font-semibold">States</h3>
304
+ <div className="space-y-3">
305
+ <Input placeholder="Default" label="Default" />
306
+ <Input
307
+ placeholder="Error"
308
+ label="Error"
309
+ hasError
310
+ errorText="This field has an error"
311
+ />
312
+ <Input placeholder="Loading" label="Loading" loading />
313
+ <Input placeholder="Disabled" label="Disabled" disabled />
314
+ </div>
315
+ </div>
316
+ </div>
317
+ ),
318
+ parameters: {
319
+ docs: {
320
+ description: {
321
+ story: "Complete showcase of all input variants, sizes, and states.",
322
+ },
323
+ },
324
+ },
325
+ };