@windstream/react-shared-components 0.1.81 → 0.1.86

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 (203) hide show
  1. package/README.md +635 -635
  2. package/dist/contentful/index.d.ts +5 -0
  3. package/dist/contentful/index.esm.js +3 -3
  4. package/dist/contentful/index.esm.js.map +1 -1
  5. package/dist/contentful/index.js +2 -2
  6. package/dist/contentful/index.js.map +1 -1
  7. package/dist/core.d.ts +17 -4
  8. package/dist/index.d.ts +20 -7
  9. package/dist/index.esm.js +6 -6
  10. package/dist/index.esm.js.map +1 -1
  11. package/dist/index.js +6 -6
  12. package/dist/index.js.map +1 -1
  13. package/package.json +185 -185
  14. package/src/components/accordion/Accordion.stories.tsx +230 -230
  15. package/src/components/accordion/index.tsx +70 -70
  16. package/src/components/accordion/types.ts +12 -12
  17. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  18. package/src/components/alert-card/index.tsx +41 -41
  19. package/src/components/alert-card/types.ts +13 -13
  20. package/src/components/animation-wrapper/index.tsx +129 -0
  21. package/src/components/animation-wrapper/types.ts +11 -0
  22. package/src/components/brand-button/BrandButton.stories.tsx +223 -223
  23. package/src/components/brand-button/helpers.ts +35 -35
  24. package/src/components/brand-button/index.tsx +120 -120
  25. package/src/components/brand-button/types.ts +38 -38
  26. package/src/components/button/Button.stories.tsx +108 -108
  27. package/src/components/button/index.tsx +27 -27
  28. package/src/components/button/types.ts +14 -14
  29. package/src/components/call-button/CallButton.stories.tsx +324 -324
  30. package/src/components/call-button/index.tsx +106 -106
  31. package/src/components/call-button/types.ts +16 -16
  32. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  33. package/src/components/checkbox/index.tsx +197 -197
  34. package/src/components/checkbox/types.ts +27 -27
  35. package/src/components/checklist/Checklist.stories.tsx +150 -150
  36. package/src/components/checklist/index.tsx +61 -61
  37. package/src/components/checklist/types.ts +17 -17
  38. package/src/components/collapse/Collapse.stories.tsx +255 -255
  39. package/src/components/collapse/index.tsx +46 -46
  40. package/src/components/collapse/types.ts +6 -6
  41. package/src/components/divider/Divider.stories.tsx +205 -205
  42. package/src/components/divider/index.tsx +22 -22
  43. package/src/components/divider/type.ts +3 -3
  44. package/src/components/image/Image.stories.tsx +113 -113
  45. package/src/components/image/index.tsx +25 -25
  46. package/src/components/image/types.ts +40 -40
  47. package/src/components/input/Input.stories.tsx +325 -325
  48. package/src/components/input/index.tsx +177 -177
  49. package/src/components/input/types.ts +37 -37
  50. package/src/components/link/Link.stories.tsx +163 -163
  51. package/src/components/link/index.tsx +116 -116
  52. package/src/components/link/types.ts +25 -25
  53. package/src/components/list/List.stories.tsx +272 -272
  54. package/src/components/list/index.tsx +88 -88
  55. package/src/components/list/list-item/index.tsx +38 -38
  56. package/src/components/list/list-item/types.ts +13 -13
  57. package/src/components/list/types.ts +29 -29
  58. package/src/components/material-icon/MaterialIcon.stories.tsx +322 -322
  59. package/src/components/material-icon/constants.ts +99 -99
  60. package/src/components/material-icon/index.tsx +47 -47
  61. package/src/components/material-icon/types.ts +31 -31
  62. package/src/components/modal/Modal.stories.tsx +171 -171
  63. package/src/components/modal/index.tsx +164 -164
  64. package/src/components/modal/types.ts +24 -24
  65. package/src/components/next-image/index.tsx +74 -74
  66. package/src/components/next-image/types.ts +1 -1
  67. package/src/components/pagination/index.tsx +91 -91
  68. package/src/components/pagination/types.ts +6 -6
  69. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  70. package/src/components/radio-button/index.tsx +75 -75
  71. package/src/components/radio-button/types.ts +21 -21
  72. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  73. package/src/components/see-more/index.tsx +44 -44
  74. package/src/components/see-more/types.ts +4 -4
  75. package/src/components/select/Select.stories.tsx +411 -411
  76. package/src/components/select/index.tsx +155 -155
  77. package/src/components/select/types.ts +36 -36
  78. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  79. package/src/components/select-plan-button/index.tsx +63 -63
  80. package/src/components/select-plan-button/types.ts +17 -17
  81. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  82. package/src/components/skeleton/index.tsx +61 -61
  83. package/src/components/skeleton/types.ts +4 -4
  84. package/src/components/spinner/Spinner.stories.tsx +335 -335
  85. package/src/components/spinner/index.tsx +44 -44
  86. package/src/components/spinner/types.ts +5 -5
  87. package/src/components/text/Text.stories.tsx +321 -321
  88. package/src/components/text/index.tsx +25 -25
  89. package/src/components/text/types.ts +45 -45
  90. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  91. package/src/components/tooltip/index.tsx +74 -74
  92. package/src/components/tooltip/types.ts +7 -7
  93. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  94. package/src/components/view-cart-button/index.tsx +42 -42
  95. package/src/components/view-cart-button/types.ts +5 -5
  96. package/src/contentful/blocks/accordion/Accordion.stories.mocks.tsx +128 -128
  97. package/src/contentful/blocks/accordion/Accordion.stories.tsx +98 -98
  98. package/src/contentful/blocks/accordion/index.tsx +112 -112
  99. package/src/contentful/blocks/accordion/types.ts +34 -34
  100. package/src/contentful/blocks/address-input-banner/index.tsx +52 -52
  101. package/src/contentful/blocks/address-input-banner/types.ts +14 -14
  102. package/src/contentful/blocks/anchored-bottom-banner/index.tsx +181 -181
  103. package/src/contentful/blocks/anchored-bottom-banner/types.ts +13 -13
  104. package/src/contentful/blocks/blogs-grid/BlogGrid.stories.mocks.tsx +144 -144
  105. package/src/contentful/blocks/blogs-grid/BlogGrid.stories.tsx +156 -156
  106. package/src/contentful/blocks/blogs-grid/index.tsx +134 -134
  107. package/src/contentful/blocks/blogs-grid/types.ts +26 -26
  108. package/src/contentful/blocks/blogs-grid-base/index.tsx +119 -119
  109. package/src/contentful/blocks/blogs-grid-base/types.ts +36 -36
  110. package/src/contentful/blocks/breadcrumbs/BreadcrumbNavigation.stories.tsx +147 -147
  111. package/src/contentful/blocks/breadcrumbs/index.tsx +95 -95
  112. package/src/contentful/blocks/breadcrumbs/types.ts +8 -8
  113. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  114. package/src/contentful/blocks/button/index.tsx +131 -131
  115. package/src/contentful/blocks/button/types.ts +39 -39
  116. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  117. package/src/contentful/blocks/callout/index.tsx +279 -265
  118. package/src/contentful/blocks/callout/types.ts +78 -72
  119. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  120. package/src/contentful/blocks/cards/blog-card/index.tsx +129 -129
  121. package/src/contentful/blocks/cards/blog-card/types.ts +34 -34
  122. package/src/contentful/blocks/cards/floating-image-card/index.tsx +119 -119
  123. package/src/contentful/blocks/cards/floating-image-card/types.ts +30 -30
  124. package/src/contentful/blocks/cards/full-image-card/index.tsx +130 -130
  125. package/src/contentful/blocks/cards/full-image-card/types.ts +29 -29
  126. package/src/contentful/blocks/cards/index.tsx +13 -13
  127. package/src/contentful/blocks/cards/product-card/index.tsx +251 -251
  128. package/src/contentful/blocks/cards/product-card/types.ts +28 -28
  129. package/src/contentful/blocks/cards/simple-card/index.tsx +325 -325
  130. package/src/contentful/blocks/cards/simple-card/types.ts +71 -71
  131. package/src/contentful/blocks/cards/testimonial-card/index.tsx +90 -90
  132. package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
  133. package/src/contentful/blocks/cards/types.ts +1 -1
  134. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  135. package/src/contentful/blocks/carousel/helper.tsx +494 -494
  136. package/src/contentful/blocks/carousel/index.tsx +87 -87
  137. package/src/contentful/blocks/carousel/types.ts +145 -145
  138. package/src/contentful/blocks/cart-retention-banner/index.tsx +105 -105
  139. package/src/contentful/blocks/cart-retention-banner/types.ts +11 -11
  140. package/src/contentful/blocks/comparison-table/index.tsx +29 -29
  141. package/src/contentful/blocks/comparison-table/types.ts +6 -6
  142. package/src/contentful/blocks/cookiebanner/index.tsx +146 -146
  143. package/src/contentful/blocks/cookiebanner/type.ts +7 -7
  144. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  145. package/src/contentful/blocks/cta-callout/index.tsx +71 -71
  146. package/src/contentful/blocks/cta-callout/types.ts +26 -26
  147. package/src/contentful/blocks/dynamic-tabs/index.tsx +204 -204
  148. package/src/contentful/blocks/dynamic-tabs/types.ts +21 -21
  149. package/src/contentful/blocks/email-input-block/index.tsx +116 -116
  150. package/src/contentful/blocks/email-input-block/types.ts +16 -16
  151. package/src/contentful/blocks/find-kinetic/FindKinetic.stories.tsx +23 -23
  152. package/src/contentful/blocks/find-kinetic/index.tsx +130 -130
  153. package/src/contentful/blocks/find-kinetic/types.ts +19 -19
  154. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  155. package/src/contentful/blocks/floating-banner/index.tsx +97 -97
  156. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  157. package/src/contentful/blocks/footer/Footer.stories.tsx +317 -317
  158. package/src/contentful/blocks/footer/index.tsx +91 -91
  159. package/src/contentful/blocks/footer/types.ts +13 -13
  160. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  161. package/src/contentful/blocks/image-promo-bar/helper.tsx +28 -28
  162. package/src/contentful/blocks/image-promo-bar/index.tsx +246 -246
  163. package/src/contentful/blocks/image-promo-bar/types.ts +44 -44
  164. package/src/contentful/blocks/image-promo-bar/vimeo-embed.tsx +93 -93
  165. package/src/contentful/blocks/image-promo-bar/youtube-embed.tsx +46 -46
  166. package/src/contentful/blocks/modal/constants.ts +53 -53
  167. package/src/contentful/blocks/modal/index.tsx +107 -107
  168. package/src/contentful/blocks/modal/types.ts +12 -12
  169. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +139 -139
  170. package/src/contentful/blocks/navigation/index.tsx +568 -568
  171. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +82 -82
  172. package/src/contentful/blocks/navigation/types.ts +71 -71
  173. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  174. package/src/contentful/blocks/primary-hero/index.tsx +236 -236
  175. package/src/contentful/blocks/primary-hero/types.ts +37 -37
  176. package/src/contentful/blocks/search-block/index.tsx +90 -90
  177. package/src/contentful/blocks/search-block/types.ts +15 -15
  178. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  179. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  180. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  181. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  182. package/src/contentful/blocks/text/index.tsx +12 -12
  183. package/src/contentful/blocks/text/types.ts +1 -1
  184. package/src/contentful/index.ts +105 -105
  185. package/src/hooks/contentful/use-contentful-rich-text.tsx +309 -309
  186. package/src/hooks/contentful/use-processed-check-list.ts +63 -63
  187. package/src/hooks/use-body-scroll-lock.ts +34 -34
  188. package/src/hooks/use-carousel-swipe.ts +264 -264
  189. package/src/hooks/use-outside-click.ts +17 -17
  190. package/src/index.ts +107 -101
  191. package/src/next/index.ts +5 -5
  192. package/src/setupTests.ts +46 -46
  193. package/src/stories/DocsTemplate.tsx +24 -24
  194. package/src/styles/globals.css +343 -343
  195. package/src/types/global.d.ts +9 -9
  196. package/src/types/micro-components.ts +99 -99
  197. package/src/types/utm.ts +49 -49
  198. package/src/utils/contentful/to-document.ts +24 -24
  199. package/src/utils/cookie.ts +84 -84
  200. package/src/utils/cx.ts +49 -49
  201. package/src/utils/index.ts +41 -41
  202. package/src/utils/speed-card-bg.ts +24 -24
  203. package/src/utils/utm.ts +221 -221
@@ -1,247 +1,247 @@
1
- import { useState } from "react";
2
- import { Checkbox } from "./index";
3
-
4
- import { DocsPage } from "@shared/stories/DocsTemplate";
5
- import type { Meta, StoryObj } from "@storybook/react";
6
-
7
- const meta: Meta<typeof Checkbox> = {
8
- title: "Components/Checkbox",
9
- component: Checkbox,
10
- tags: ["autodocs"],
11
- parameters: {
12
- layout: "centered",
13
- docs: {
14
- page: DocsPage,
15
- description: {
16
- component:
17
- "A checkbox component with support for checked/unchecked states, labels, error states, and info icons.",
18
- },
19
- },
20
- },
21
- argTypes: {
22
- checked: {
23
- control: { type: "boolean" },
24
- description: "Whether the checkbox is checked",
25
- },
26
- disabled: {
27
- control: { type: "boolean" },
28
- description: "Disable the checkbox",
29
- },
30
- label: {
31
- control: { type: "text" },
32
- description: "Label text for the checkbox",
33
- },
34
- error: {
35
- control: { type: "boolean" },
36
- description: "Show error state",
37
- },
38
- required: {
39
- control: { type: "boolean" },
40
- description: "Mark checkbox as required",
41
- },
42
- state: {
43
- control: { type: "select" },
44
- options: ["default", "focus", "disabled"],
45
- description: "Visual state of the checkbox",
46
- },
47
- },
48
- args: {
49
- checked: false,
50
- disabled: false,
51
- label: "Checkbox Label",
52
- error: false,
53
- required: false,
54
- },
55
- };
56
-
57
- export default meta;
58
- type Story = StoryObj<typeof meta>;
59
-
60
- // Default checkbox
61
- export const Default: Story = {
62
- args: {},
63
- };
64
-
65
- // Checked checkbox
66
- export const Checked: Story = {
67
- args: {
68
- checked: true,
69
- label: "Checked Checkbox",
70
- },
71
- };
72
-
73
- // Unchecked checkbox
74
- export const Unchecked: Story = {
75
- args: {
76
- checked: false,
77
- label: "Unchecked Checkbox",
78
- },
79
- };
80
-
81
- // With label
82
- export const WithLabel: Story = {
83
- args: {
84
- checked: false,
85
- label: "I agree to the terms and conditions",
86
- },
87
- };
88
-
89
- // Disabled checkbox
90
- export const Disabled: Story = {
91
- args: {
92
- checked: false,
93
- label: "Disabled Checkbox",
94
- disabled: true,
95
- },
96
- };
97
-
98
- // Disabled checked
99
- export const DisabledChecked: Story = {
100
- args: {
101
- checked: true,
102
- label: "Disabled Checked Checkbox",
103
- disabled: true,
104
- },
105
- };
106
-
107
- // Error state
108
- export const Error: Story = {
109
- args: {
110
- checked: false,
111
- label: "Checkbox with Error",
112
- error: true,
113
- },
114
- };
115
-
116
- // Required checkbox
117
- export const Required: Story = {
118
- args: {
119
- checked: false,
120
- label: "Required Field",
121
- required: true,
122
- },
123
- };
124
-
125
- // Focus state
126
- export const Focus: Story = {
127
- args: {
128
- checked: false,
129
- label: "Focused Checkbox",
130
- state: "focus",
131
- },
132
- };
133
-
134
- // With info icon
135
- export const WithInfoIcon: Story = {
136
- args: {
137
- checked: false,
138
- label: "Checkbox with Info",
139
- renderInfoIcon: {
140
- onClick: () => alert("Info clicked"),
141
- dataTestId: "info-icon",
142
- },
143
- },
144
- };
145
-
146
- // Interactive checkbox
147
- export const Interactive: Story = {
148
- render: () => {
149
- const [checked, setChecked] = useState(false);
150
- return (
151
- <Checkbox
152
- checked={checked}
153
- onChange={isChecked => setChecked(isChecked)}
154
- label="Click to toggle"
155
- />
156
- );
157
- },
158
- parameters: {
159
- docs: {
160
- description: {
161
- story: "Interactive checkbox that can be toggled by clicking.",
162
- },
163
- },
164
- },
165
- };
166
-
167
- // Multiple checkboxes
168
- export const Multiple: Story = {
169
- render: () => {
170
- const [items, setItems] = useState([
171
- { id: 1, label: "Option 1", checked: false },
172
- { id: 2, label: "Option 2", checked: true },
173
- { id: 3, label: "Option 3", checked: false },
174
- ]);
175
-
176
- const handleChange = (id: number, isChecked: boolean) => {
177
- setItems(
178
- items.map(item =>
179
- item.id === id ? { ...item, checked: isChecked } : item
180
- )
181
- );
182
- };
183
-
184
- return (
185
- <div className="space-y-3">
186
- {items.map(item => (
187
- <Checkbox
188
- key={item.id}
189
- checked={item.checked}
190
- onChange={isChecked => handleChange(item.id, isChecked)}
191
- label={item.label}
192
- />
193
- ))}
194
- </div>
195
- );
196
- },
197
- parameters: {
198
- docs: {
199
- description: {
200
- story: "Multiple checkboxes in a group.",
201
- },
202
- },
203
- },
204
- };
205
-
206
- // All variants showcase
207
- export const AllVariants: Story = {
208
- render: () => (
209
- <div className="space-y-6">
210
- <div>
211
- <h3 className="mb-3 text-lg font-semibold">States</h3>
212
- <div className="space-y-3">
213
- <Checkbox checked={false} label="Unchecked" />
214
- <Checkbox checked={true} label="Checked" />
215
- <Checkbox checked={false} label="Disabled" disabled />
216
- <Checkbox checked={true} label="Disabled Checked" disabled />
217
- </div>
218
- </div>
219
- <div>
220
- <h3 className="mb-3 text-lg font-semibold">With Error</h3>
221
- <Checkbox checked={false} label="Error State" error />
222
- </div>
223
- <div>
224
- <h3 className="mb-3 text-lg font-semibold">Required</h3>
225
- <Checkbox checked={false} label="Required Field" required />
226
- </div>
227
- <div>
228
- <h3 className="mb-3 text-lg font-semibold">With Info Icon</h3>
229
- <Checkbox
230
- checked={false}
231
- label="With Info Icon"
232
- renderInfoIcon={{
233
- onClick: () => {},
234
- dataTestId: "info",
235
- }}
236
- />
237
- </div>
238
- </div>
239
- ),
240
- parameters: {
241
- docs: {
242
- description: {
243
- story: "Showcase of all checkbox variants and states.",
244
- },
245
- },
246
- },
247
- };
1
+ import { useState } from "react";
2
+ import { Checkbox } from "./index";
3
+
4
+ import { DocsPage } from "@shared/stories/DocsTemplate";
5
+ import type { Meta, StoryObj } from "@storybook/react";
6
+
7
+ const meta: Meta<typeof Checkbox> = {
8
+ title: "Components/Checkbox",
9
+ component: Checkbox,
10
+ tags: ["autodocs"],
11
+ parameters: {
12
+ layout: "centered",
13
+ docs: {
14
+ page: DocsPage,
15
+ description: {
16
+ component:
17
+ "A checkbox component with support for checked/unchecked states, labels, error states, and info icons.",
18
+ },
19
+ },
20
+ },
21
+ argTypes: {
22
+ checked: {
23
+ control: { type: "boolean" },
24
+ description: "Whether the checkbox is checked",
25
+ },
26
+ disabled: {
27
+ control: { type: "boolean" },
28
+ description: "Disable the checkbox",
29
+ },
30
+ label: {
31
+ control: { type: "text" },
32
+ description: "Label text for the checkbox",
33
+ },
34
+ error: {
35
+ control: { type: "boolean" },
36
+ description: "Show error state",
37
+ },
38
+ required: {
39
+ control: { type: "boolean" },
40
+ description: "Mark checkbox as required",
41
+ },
42
+ state: {
43
+ control: { type: "select" },
44
+ options: ["default", "focus", "disabled"],
45
+ description: "Visual state of the checkbox",
46
+ },
47
+ },
48
+ args: {
49
+ checked: false,
50
+ disabled: false,
51
+ label: "Checkbox Label",
52
+ error: false,
53
+ required: false,
54
+ },
55
+ };
56
+
57
+ export default meta;
58
+ type Story = StoryObj<typeof meta>;
59
+
60
+ // Default checkbox
61
+ export const Default: Story = {
62
+ args: {},
63
+ };
64
+
65
+ // Checked checkbox
66
+ export const Checked: Story = {
67
+ args: {
68
+ checked: true,
69
+ label: "Checked Checkbox",
70
+ },
71
+ };
72
+
73
+ // Unchecked checkbox
74
+ export const Unchecked: Story = {
75
+ args: {
76
+ checked: false,
77
+ label: "Unchecked Checkbox",
78
+ },
79
+ };
80
+
81
+ // With label
82
+ export const WithLabel: Story = {
83
+ args: {
84
+ checked: false,
85
+ label: "I agree to the terms and conditions",
86
+ },
87
+ };
88
+
89
+ // Disabled checkbox
90
+ export const Disabled: Story = {
91
+ args: {
92
+ checked: false,
93
+ label: "Disabled Checkbox",
94
+ disabled: true,
95
+ },
96
+ };
97
+
98
+ // Disabled checked
99
+ export const DisabledChecked: Story = {
100
+ args: {
101
+ checked: true,
102
+ label: "Disabled Checked Checkbox",
103
+ disabled: true,
104
+ },
105
+ };
106
+
107
+ // Error state
108
+ export const Error: Story = {
109
+ args: {
110
+ checked: false,
111
+ label: "Checkbox with Error",
112
+ error: true,
113
+ },
114
+ };
115
+
116
+ // Required checkbox
117
+ export const Required: Story = {
118
+ args: {
119
+ checked: false,
120
+ label: "Required Field",
121
+ required: true,
122
+ },
123
+ };
124
+
125
+ // Focus state
126
+ export const Focus: Story = {
127
+ args: {
128
+ checked: false,
129
+ label: "Focused Checkbox",
130
+ state: "focus",
131
+ },
132
+ };
133
+
134
+ // With info icon
135
+ export const WithInfoIcon: Story = {
136
+ args: {
137
+ checked: false,
138
+ label: "Checkbox with Info",
139
+ renderInfoIcon: {
140
+ onClick: () => alert("Info clicked"),
141
+ dataTestId: "info-icon",
142
+ },
143
+ },
144
+ };
145
+
146
+ // Interactive checkbox
147
+ export const Interactive: Story = {
148
+ render: () => {
149
+ const [checked, setChecked] = useState(false);
150
+ return (
151
+ <Checkbox
152
+ checked={checked}
153
+ onChange={isChecked => setChecked(isChecked)}
154
+ label="Click to toggle"
155
+ />
156
+ );
157
+ },
158
+ parameters: {
159
+ docs: {
160
+ description: {
161
+ story: "Interactive checkbox that can be toggled by clicking.",
162
+ },
163
+ },
164
+ },
165
+ };
166
+
167
+ // Multiple checkboxes
168
+ export const Multiple: Story = {
169
+ render: () => {
170
+ const [items, setItems] = useState([
171
+ { id: 1, label: "Option 1", checked: false },
172
+ { id: 2, label: "Option 2", checked: true },
173
+ { id: 3, label: "Option 3", checked: false },
174
+ ]);
175
+
176
+ const handleChange = (id: number, isChecked: boolean) => {
177
+ setItems(
178
+ items.map(item =>
179
+ item.id === id ? { ...item, checked: isChecked } : item
180
+ )
181
+ );
182
+ };
183
+
184
+ return (
185
+ <div className="space-y-3">
186
+ {items.map(item => (
187
+ <Checkbox
188
+ key={item.id}
189
+ checked={item.checked}
190
+ onChange={isChecked => handleChange(item.id, isChecked)}
191
+ label={item.label}
192
+ />
193
+ ))}
194
+ </div>
195
+ );
196
+ },
197
+ parameters: {
198
+ docs: {
199
+ description: {
200
+ story: "Multiple checkboxes in a group.",
201
+ },
202
+ },
203
+ },
204
+ };
205
+
206
+ // All variants showcase
207
+ export const AllVariants: Story = {
208
+ render: () => (
209
+ <div className="space-y-6">
210
+ <div>
211
+ <h3 className="mb-3 text-lg font-semibold">States</h3>
212
+ <div className="space-y-3">
213
+ <Checkbox checked={false} label="Unchecked" />
214
+ <Checkbox checked={true} label="Checked" />
215
+ <Checkbox checked={false} label="Disabled" disabled />
216
+ <Checkbox checked={true} label="Disabled Checked" disabled />
217
+ </div>
218
+ </div>
219
+ <div>
220
+ <h3 className="mb-3 text-lg font-semibold">With Error</h3>
221
+ <Checkbox checked={false} label="Error State" error />
222
+ </div>
223
+ <div>
224
+ <h3 className="mb-3 text-lg font-semibold">Required</h3>
225
+ <Checkbox checked={false} label="Required Field" required />
226
+ </div>
227
+ <div>
228
+ <h3 className="mb-3 text-lg font-semibold">With Info Icon</h3>
229
+ <Checkbox
230
+ checked={false}
231
+ label="With Info Icon"
232
+ renderInfoIcon={{
233
+ onClick: () => {},
234
+ dataTestId: "info",
235
+ }}
236
+ />
237
+ </div>
238
+ </div>
239
+ ),
240
+ parameters: {
241
+ docs: {
242
+ description: {
243
+ story: "Showcase of all checkbox variants and states.",
244
+ },
245
+ },
246
+ },
247
+ };