@windstream/react-shared-components 0.1.45 → 0.1.46

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 (196) hide show
  1. package/README.md +635 -635
  2. package/dist/contentful/index.esm.js +3 -3
  3. package/dist/contentful/index.esm.js.map +1 -1
  4. package/dist/contentful/index.js +3 -3
  5. package/dist/contentful/index.js.map +1 -1
  6. package/dist/core.d.ts +1 -1
  7. package/dist/index.d.ts +3 -3
  8. package/dist/index.esm.js +5 -13
  9. package/dist/index.esm.js.map +1 -1
  10. package/dist/index.js +5 -13
  11. package/dist/index.js.map +1 -1
  12. package/dist/next/index.esm.js +2 -2
  13. package/dist/next/index.esm.js.map +1 -1
  14. package/dist/next/index.js +2 -2
  15. package/dist/next/index.js.map +1 -1
  16. package/dist/styles.css +1 -1
  17. package/dist/utils/index.esm.js +1 -1
  18. package/dist/utils/index.esm.js.map +1 -1
  19. package/dist/utils/index.js +1 -1
  20. package/dist/utils/index.js.map +1 -1
  21. package/package.json +185 -185
  22. package/src/components/accordion/Accordion.stories.tsx +230 -230
  23. package/src/components/accordion/index.tsx +70 -70
  24. package/src/components/accordion/types.ts +12 -12
  25. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  26. package/src/components/alert-card/index.tsx +41 -41
  27. package/src/components/alert-card/types.ts +13 -13
  28. package/src/components/brand-button/BrandButton.stories.tsx +223 -223
  29. package/src/components/brand-button/helpers.ts +35 -35
  30. package/src/components/brand-button/index.tsx +120 -120
  31. package/src/components/brand-button/types.ts +38 -38
  32. package/src/components/button/Button.stories.tsx +108 -108
  33. package/src/components/button/index.tsx +27 -27
  34. package/src/components/button/types.ts +14 -14
  35. package/src/components/call-button/CallButton.stories.tsx +324 -324
  36. package/src/components/call-button/index.tsx +86 -86
  37. package/src/components/call-button/types.ts +11 -11
  38. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  39. package/src/components/checkbox/index.tsx +197 -197
  40. package/src/components/checkbox/types.ts +27 -27
  41. package/src/components/checklist/Checklist.stories.tsx +150 -150
  42. package/src/components/checklist/index.tsx +61 -61
  43. package/src/components/checklist/types.ts +17 -17
  44. package/src/components/collapse/Collapse.stories.tsx +255 -255
  45. package/src/components/collapse/index.tsx +46 -46
  46. package/src/components/collapse/types.ts +6 -6
  47. package/src/components/divider/Divider.stories.tsx +205 -205
  48. package/src/components/divider/index.tsx +22 -22
  49. package/src/components/divider/type.ts +3 -3
  50. package/src/components/image/Image.stories.tsx +113 -113
  51. package/src/components/image/index.tsx +25 -25
  52. package/src/components/image/types.ts +40 -40
  53. package/src/components/input/Input.stories.tsx +325 -325
  54. package/src/components/input/index.tsx +177 -177
  55. package/src/components/input/types.ts +37 -37
  56. package/src/components/link/Link.stories.tsx +163 -163
  57. package/src/components/link/index.tsx +109 -109
  58. package/src/components/link/types.ts +25 -25
  59. package/src/components/list/List.stories.tsx +272 -272
  60. package/src/components/list/index.tsx +88 -88
  61. package/src/components/list/list-item/index.tsx +38 -38
  62. package/src/components/list/list-item/types.ts +13 -13
  63. package/src/components/list/types.ts +29 -29
  64. package/src/components/material-icon/MaterialIcon.stories.tsx +322 -322
  65. package/src/components/material-icon/constants.ts +98 -98
  66. package/src/components/material-icon/index.tsx +47 -47
  67. package/src/components/material-icon/types.ts +31 -31
  68. package/src/components/modal/Modal.stories.tsx +171 -171
  69. package/src/components/modal/index.tsx +164 -164
  70. package/src/components/modal/types.ts +24 -24
  71. package/src/components/next-image/index.tsx +54 -54
  72. package/src/components/next-image/types.ts +1 -1
  73. package/src/components/pagination/index.tsx +100 -100
  74. package/src/components/pagination/types.ts +6 -6
  75. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  76. package/src/components/radio-button/index.tsx +75 -75
  77. package/src/components/radio-button/types.ts +21 -21
  78. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  79. package/src/components/see-more/index.tsx +44 -44
  80. package/src/components/see-more/types.ts +4 -4
  81. package/src/components/select/Select.stories.tsx +411 -411
  82. package/src/components/select/index.tsx +155 -155
  83. package/src/components/select/types.ts +36 -36
  84. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  85. package/src/components/select-plan-button/index.tsx +63 -63
  86. package/src/components/select-plan-button/types.ts +17 -17
  87. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  88. package/src/components/skeleton/index.tsx +61 -61
  89. package/src/components/skeleton/types.ts +4 -4
  90. package/src/components/spinner/Spinner.stories.tsx +335 -335
  91. package/src/components/spinner/index.tsx +44 -44
  92. package/src/components/spinner/types.ts +5 -5
  93. package/src/components/text/Text.stories.tsx +321 -321
  94. package/src/components/text/index.tsx +25 -25
  95. package/src/components/text/types.ts +45 -45
  96. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  97. package/src/components/tooltip/index.tsx +74 -74
  98. package/src/components/tooltip/types.ts +7 -7
  99. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  100. package/src/components/view-cart-button/index.tsx +42 -42
  101. package/src/components/view-cart-button/types.ts +5 -5
  102. package/src/contentful/blocks/accordion/Accordion.stories.tsx +34 -34
  103. package/src/contentful/blocks/accordion/index.tsx +112 -112
  104. package/src/contentful/blocks/accordion/types.ts +34 -34
  105. package/src/contentful/blocks/address-input-banner/index.tsx +52 -52
  106. package/src/contentful/blocks/address-input-banner/types.ts +14 -14
  107. package/src/contentful/blocks/anchored-bottom-banner/index.tsx +70 -70
  108. package/src/contentful/blocks/anchored-bottom-banner/types.ts +10 -10
  109. package/src/contentful/blocks/blogs-grid/index.tsx +134 -134
  110. package/src/contentful/blocks/blogs-grid/types.ts +26 -26
  111. package/src/contentful/blocks/breadcrumbs/index.tsx +51 -51
  112. package/src/contentful/blocks/breadcrumbs/types.ts +5 -5
  113. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  114. package/src/contentful/blocks/button/index.tsx +130 -130
  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 +88 -88
  118. package/src/contentful/blocks/callout/types.ts +15 -15
  119. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  120. package/src/contentful/blocks/cards/blog-card/index.tsx +110 -110
  121. package/src/contentful/blocks/cards/blog-card/types.ts +18 -18
  122. package/src/contentful/blocks/cards/index.tsx +13 -13
  123. package/src/contentful/blocks/cards/product-card/index.tsx +251 -251
  124. package/src/contentful/blocks/cards/product-card/types.ts +28 -28
  125. package/src/contentful/blocks/cards/simple-card/index.tsx +89 -89
  126. package/src/contentful/blocks/cards/simple-card/types.ts +28 -28
  127. package/src/contentful/blocks/cards/testimonial-card/index.tsx +90 -90
  128. package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
  129. package/src/contentful/blocks/cards/types.ts +1 -1
  130. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  131. package/src/contentful/blocks/carousel/helper.tsx +440 -440
  132. package/src/contentful/blocks/carousel/index.tsx +85 -85
  133. package/src/contentful/blocks/carousel/types.ts +144 -144
  134. package/src/contentful/blocks/comparison-table/index.tsx +27 -27
  135. package/src/contentful/blocks/comparison-table/types.ts +6 -6
  136. package/src/contentful/blocks/cookiebanner/index.tsx +146 -146
  137. package/src/contentful/blocks/cookiebanner/type.ts +7 -7
  138. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  139. package/src/contentful/blocks/cta-callout/index.tsx +71 -71
  140. package/src/contentful/blocks/cta-callout/types.ts +26 -26
  141. package/src/contentful/blocks/dynamic-tabs/index.tsx +204 -204
  142. package/src/contentful/blocks/dynamic-tabs/types.ts +21 -21
  143. package/src/contentful/blocks/email-input-block/index.tsx +117 -117
  144. package/src/contentful/blocks/email-input-block/types.ts +16 -16
  145. package/src/contentful/blocks/find-kinetic/FindKinetic.stories.tsx +23 -23
  146. package/src/contentful/blocks/find-kinetic/index.tsx +130 -130
  147. package/src/contentful/blocks/find-kinetic/types.ts +19 -19
  148. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  149. package/src/contentful/blocks/floating-banner/index.tsx +97 -97
  150. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  151. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  152. package/src/contentful/blocks/footer/index.tsx +91 -91
  153. package/src/contentful/blocks/footer/types.ts +13 -13
  154. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  155. package/src/contentful/blocks/image-promo-bar/helper.tsx +28 -28
  156. package/src/contentful/blocks/image-promo-bar/index.tsx +246 -246
  157. package/src/contentful/blocks/image-promo-bar/types.ts +44 -44
  158. package/src/contentful/blocks/image-promo-bar/vimeo-embed.tsx +93 -93
  159. package/src/contentful/blocks/image-promo-bar/youtube-embed.tsx +46 -46
  160. package/src/contentful/blocks/modal/constants.ts +53 -53
  161. package/src/contentful/blocks/modal/index.tsx +107 -107
  162. package/src/contentful/blocks/modal/types.ts +12 -12
  163. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +113 -113
  164. package/src/contentful/blocks/navigation/index.tsx +394 -394
  165. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +82 -82
  166. package/src/contentful/blocks/navigation/types.ts +41 -41
  167. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  168. package/src/contentful/blocks/primary-hero/index.tsx +236 -236
  169. package/src/contentful/blocks/primary-hero/types.ts +37 -37
  170. package/src/contentful/blocks/search-block/index.tsx +90 -90
  171. package/src/contentful/blocks/search-block/types.ts +15 -15
  172. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  173. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  174. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  175. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  176. package/src/contentful/blocks/text/index.tsx +12 -12
  177. package/src/contentful/blocks/text/types.ts +1 -1
  178. package/src/contentful/index.ts +99 -99
  179. package/src/hooks/contentful/use-contentful-rich-text.tsx +310 -310
  180. package/src/hooks/contentful/use-processed-check-list.ts +63 -63
  181. package/src/hooks/use-body-scroll-lock.ts +34 -34
  182. package/src/hooks/use-carousel-swipe.ts +264 -264
  183. package/src/hooks/use-outside-click.ts +17 -17
  184. package/src/index.ts +101 -101
  185. package/src/next/index.ts +5 -5
  186. package/src/setupTests.ts +46 -46
  187. package/src/stories/DocsTemplate.tsx +24 -24
  188. package/src/styles/globals.css +343 -343
  189. package/src/types/global.d.ts +9 -9
  190. package/src/types/micro-components.ts +99 -99
  191. package/src/types/utm.ts +49 -49
  192. package/src/utils/contentful/to-document.ts +24 -24
  193. package/src/utils/cookie.ts +84 -84
  194. package/src/utils/cx.ts +49 -49
  195. package/src/utils/index.ts +38 -38
  196. package/src/utils/utm.ts +221 -221
@@ -1,75 +1,75 @@
1
- import React from "react";
2
- import { RadioButtonProps } from "./types";
3
-
4
- import { Button } from "@shared/components/button";
5
- import { cx } from "@shared/utils";
6
-
7
- export const RadioButton: React.FC<RadioButtonProps> = props => {
8
- const {
9
- name,
10
- value,
11
- label,
12
- subText,
13
- checked,
14
- onChange,
15
- className,
16
- variant = "circle",
17
- hasError = false,
18
- labelProps = {},
19
- "data-cy": dataCy,
20
- labelClassName = "",
21
- disabled,
22
- ...rest
23
- } = props;
24
-
25
- const handleChange = () => onChange?.(value || name);
26
-
27
- return (
28
- <label
29
- htmlFor={name}
30
- className={cx("flex items-center", className)}
31
- data-cy={dataCy}
32
- {...labelProps}
33
- >
34
- <input
35
- className="hidden"
36
- type="radio"
37
- name={name}
38
- value={value}
39
- checked={checked}
40
- readOnly
41
- disabled={disabled}
42
- {...rest}
43
- />
44
- <Button
45
- type="button"
46
- onClick={handleChange}
47
- disabled={disabled}
48
- className={cx(
49
- "mr-3 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full border-[1px] border-solid border-border-secondary-on-bg-fill bg-bg outline-offset-4",
50
- checked && "border-[1px] border-solid border-border-brand",
51
- disabled && "opacity-50"
52
- )}
53
- >
54
- {checked && (
55
- <div className="h-[0.875rem] w-[0.875rem] rounded-full bg-bg-fill-brand" />
56
- )}
57
- </Button>
58
- <Button
59
- type="button"
60
- onClick={handleChange}
61
- disabled={disabled}
62
- tabIndex={label ? 0 : -1}
63
- >
64
- <div className={cx("text-body2 font-normal", labelClassName)}>
65
- {label}
66
- </div>
67
- <div className="text-body1 text-text-info">{subText}</div>
68
- </Button>
69
- </label>
70
- );
71
- };
72
-
73
- RadioButton.displayName = "RadioButton";
74
-
75
- export type { RadioButtonProps };
1
+ import React from "react";
2
+ import { RadioButtonProps } from "./types";
3
+
4
+ import { Button } from "@shared/components/button";
5
+ import { cx } from "@shared/utils";
6
+
7
+ export const RadioButton: React.FC<RadioButtonProps> = props => {
8
+ const {
9
+ name,
10
+ value,
11
+ label,
12
+ subText,
13
+ checked,
14
+ onChange,
15
+ className,
16
+ variant = "circle",
17
+ hasError = false,
18
+ labelProps = {},
19
+ "data-cy": dataCy,
20
+ labelClassName = "",
21
+ disabled,
22
+ ...rest
23
+ } = props;
24
+
25
+ const handleChange = () => onChange?.(value || name);
26
+
27
+ return (
28
+ <label
29
+ htmlFor={name}
30
+ className={cx("flex items-center", className)}
31
+ data-cy={dataCy}
32
+ {...labelProps}
33
+ >
34
+ <input
35
+ className="hidden"
36
+ type="radio"
37
+ name={name}
38
+ value={value}
39
+ checked={checked}
40
+ readOnly
41
+ disabled={disabled}
42
+ {...rest}
43
+ />
44
+ <Button
45
+ type="button"
46
+ onClick={handleChange}
47
+ disabled={disabled}
48
+ className={cx(
49
+ "mr-3 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full border-[1px] border-solid border-border-secondary-on-bg-fill bg-bg outline-offset-4",
50
+ checked && "border-[1px] border-solid border-border-brand",
51
+ disabled && "opacity-50"
52
+ )}
53
+ >
54
+ {checked && (
55
+ <div className="h-[0.875rem] w-[0.875rem] rounded-full bg-bg-fill-brand" />
56
+ )}
57
+ </Button>
58
+ <Button
59
+ type="button"
60
+ onClick={handleChange}
61
+ disabled={disabled}
62
+ tabIndex={label ? 0 : -1}
63
+ >
64
+ <div className={cx("text-body2 font-normal", labelClassName)}>
65
+ {label}
66
+ </div>
67
+ <div className="text-body1 text-text-info">{subText}</div>
68
+ </Button>
69
+ </label>
70
+ );
71
+ };
72
+
73
+ RadioButton.displayName = "RadioButton";
74
+
75
+ export type { RadioButtonProps };
@@ -1,21 +1,21 @@
1
- import { InputHTMLAttributes, LabelHTMLAttributes, ReactNode } from "react";
2
-
3
- type OwnProps = {
4
- name: string;
5
- value?: string | number;
6
- checked?: boolean;
7
- onChange?: (newVal?: string | number) => void;
8
- label?: string | ReactNode;
9
- subText?: string;
10
- className?: string;
11
- labelProps?: LabelHTMLAttributes<HTMLLabelElement>;
12
- variant?: "circle";
13
- hasError?: boolean;
14
- "data-cy"?: string;
15
- labelClassName?: string;
16
- };
17
- export type RadioButtonProps = OwnProps &
18
- Omit<
19
- InputHTMLAttributes<HTMLInputElement>,
20
- "onChange" | "value" | "name" | "checked"
21
- >;
1
+ import { InputHTMLAttributes, LabelHTMLAttributes, ReactNode } from "react";
2
+
3
+ type OwnProps = {
4
+ name: string;
5
+ value?: string | number;
6
+ checked?: boolean;
7
+ onChange?: (newVal?: string | number) => void;
8
+ label?: string | ReactNode;
9
+ subText?: string;
10
+ className?: string;
11
+ labelProps?: LabelHTMLAttributes<HTMLLabelElement>;
12
+ variant?: "circle";
13
+ hasError?: boolean;
14
+ "data-cy"?: string;
15
+ labelClassName?: string;
16
+ };
17
+ export type RadioButtonProps = OwnProps &
18
+ Omit<
19
+ InputHTMLAttributes<HTMLInputElement>,
20
+ "onChange" | "value" | "name" | "checked"
21
+ >;
@@ -1,181 +1,181 @@
1
- import { SeeMore } from "./index";
2
-
3
- import { DocsPage } from "@shared/stories/DocsTemplate";
4
- import type { Meta, StoryObj } from "@storybook/react";
5
-
6
- const meta: Meta<typeof SeeMore> = {
7
- title: "Components/SeeMore",
8
- component: SeeMore,
9
- tags: ["autodocs"],
10
- parameters: {
11
- layout: "centered",
12
- docs: {
13
- page: DocsPage,
14
- description: {
15
- component:
16
- "An expandable component that shows/hides a checklist of items with a toggle button.",
17
- },
18
- },
19
- },
20
- argTypes: {
21
- list: {
22
- control: { type: "object" },
23
- description: "Array of strings to display in the checklist",
24
- },
25
- text: {
26
- control: { type: "text" },
27
- description: "Text for the toggle button",
28
- },
29
- },
30
- args: {
31
- list: ["Feature 1", "Feature 2", "Feature 3"],
32
- text: "See details",
33
- },
34
- };
35
-
36
- export default meta;
37
- type Story = StoryObj<typeof meta>;
38
-
39
- // Default see more
40
- export const Default: Story = {
41
- args: {},
42
- };
43
-
44
- // Expanded by default
45
- export const Expanded: Story = {
46
- args: {
47
- list: [
48
- "High-speed internet connection",
49
- "24/7 customer support",
50
- "No data caps",
51
- "Free installation",
52
- ],
53
- text: "See details",
54
- },
55
- render: args => (
56
- <div className="max-w-md w-full">
57
- <SeeMore {...args} />
58
- </div>
59
- ),
60
- };
61
-
62
- // Collapsed by default
63
- export const Collapsed: Story = {
64
- args: {
65
- list: ["Item 1", "Item 2", "Item 3"],
66
- text: "Show more",
67
- },
68
- render: args => (
69
- <div className="max-w-md w-full">
70
- <SeeMore {...args} />
71
- </div>
72
- ),
73
- };
74
-
75
- // With checklist items
76
- export const WithChecklistItems: Story = {
77
- args: {
78
- list: [
79
- "Unlimited data usage",
80
- "Free router included",
81
- "24/7 technical support",
82
- "No long-term contract",
83
- "30-day money-back guarantee",
84
- ],
85
- text: "View all features",
86
- },
87
- render: args => (
88
- <div className="max-w-md w-full">
89
- <SeeMore {...args} />
90
- </div>
91
- ),
92
- };
93
-
94
- // Custom button text
95
- export const CustomButtonText: Story = {
96
- args: {
97
- list: ["Detail 1", "Detail 2", "Detail 3"],
98
- text: "Learn more",
99
- },
100
- render: args => (
101
- <div className="max-w-md w-full">
102
- <SeeMore {...args} />
103
- </div>
104
- ),
105
- };
106
-
107
- // Long list
108
- export const LongList: Story = {
109
- args: {
110
- list: [
111
- "Feature one with detailed description",
112
- "Feature two",
113
- "Feature three",
114
- "Feature four",
115
- "Feature five",
116
- "Feature six",
117
- "Feature seven",
118
- "Feature eight",
119
- "Feature nine",
120
- "Feature ten",
121
- ],
122
- text: "See all features",
123
- },
124
- render: args => (
125
- <div className="max-w-md w-full">
126
- <SeeMore {...args} />
127
- </div>
128
- ),
129
- };
130
-
131
- // Single item
132
- export const SingleItem: Story = {
133
- args: {
134
- list: ["Single checklist item"],
135
- text: "See details",
136
- },
137
- render: args => (
138
- <div className="max-w-md w-full">
139
- <SeeMore {...args} />
140
- </div>
141
- ),
142
- };
143
-
144
- // All variants showcase
145
- export const AllVariants: Story = {
146
- render: () => (
147
- <div className="max-w-2xl w-full space-y-8">
148
- <div>
149
- <h3 className="mb-3 text-lg font-semibold">Default</h3>
150
- <SeeMore list={["Item 1", "Item 2", "Item 3"]} />
151
- </div>
152
- <div>
153
- <h3 className="mb-3 text-lg font-semibold">Custom Button Text</h3>
154
- <SeeMore
155
- list={["Feature 1", "Feature 2", "Feature 3"]}
156
- text="View all features"
157
- />
158
- </div>
159
- <div>
160
- <h3 className="mb-3 text-lg font-semibold">Long List</h3>
161
- <SeeMore
162
- list={[
163
- "Feature one",
164
- "Feature two",
165
- "Feature three",
166
- "Feature four",
167
- "Feature five",
168
- ]}
169
- text="See all details"
170
- />
171
- </div>
172
- </div>
173
- ),
174
- parameters: {
175
- docs: {
176
- description: {
177
- story: "Showcase of all SeeMore variants and configurations.",
178
- },
179
- },
180
- },
181
- };
1
+ import { SeeMore } from "./index";
2
+
3
+ import { DocsPage } from "@shared/stories/DocsTemplate";
4
+ import type { Meta, StoryObj } from "@storybook/react";
5
+
6
+ const meta: Meta<typeof SeeMore> = {
7
+ title: "Components/SeeMore",
8
+ component: SeeMore,
9
+ tags: ["autodocs"],
10
+ parameters: {
11
+ layout: "centered",
12
+ docs: {
13
+ page: DocsPage,
14
+ description: {
15
+ component:
16
+ "An expandable component that shows/hides a checklist of items with a toggle button.",
17
+ },
18
+ },
19
+ },
20
+ argTypes: {
21
+ list: {
22
+ control: { type: "object" },
23
+ description: "Array of strings to display in the checklist",
24
+ },
25
+ text: {
26
+ control: { type: "text" },
27
+ description: "Text for the toggle button",
28
+ },
29
+ },
30
+ args: {
31
+ list: ["Feature 1", "Feature 2", "Feature 3"],
32
+ text: "See details",
33
+ },
34
+ };
35
+
36
+ export default meta;
37
+ type Story = StoryObj<typeof meta>;
38
+
39
+ // Default see more
40
+ export const Default: Story = {
41
+ args: {},
42
+ };
43
+
44
+ // Expanded by default
45
+ export const Expanded: Story = {
46
+ args: {
47
+ list: [
48
+ "High-speed internet connection",
49
+ "24/7 customer support",
50
+ "No data caps",
51
+ "Free installation",
52
+ ],
53
+ text: "See details",
54
+ },
55
+ render: args => (
56
+ <div className="max-w-md w-full">
57
+ <SeeMore {...args} />
58
+ </div>
59
+ ),
60
+ };
61
+
62
+ // Collapsed by default
63
+ export const Collapsed: Story = {
64
+ args: {
65
+ list: ["Item 1", "Item 2", "Item 3"],
66
+ text: "Show more",
67
+ },
68
+ render: args => (
69
+ <div className="max-w-md w-full">
70
+ <SeeMore {...args} />
71
+ </div>
72
+ ),
73
+ };
74
+
75
+ // With checklist items
76
+ export const WithChecklistItems: Story = {
77
+ args: {
78
+ list: [
79
+ "Unlimited data usage",
80
+ "Free router included",
81
+ "24/7 technical support",
82
+ "No long-term contract",
83
+ "30-day money-back guarantee",
84
+ ],
85
+ text: "View all features",
86
+ },
87
+ render: args => (
88
+ <div className="max-w-md w-full">
89
+ <SeeMore {...args} />
90
+ </div>
91
+ ),
92
+ };
93
+
94
+ // Custom button text
95
+ export const CustomButtonText: Story = {
96
+ args: {
97
+ list: ["Detail 1", "Detail 2", "Detail 3"],
98
+ text: "Learn more",
99
+ },
100
+ render: args => (
101
+ <div className="max-w-md w-full">
102
+ <SeeMore {...args} />
103
+ </div>
104
+ ),
105
+ };
106
+
107
+ // Long list
108
+ export const LongList: Story = {
109
+ args: {
110
+ list: [
111
+ "Feature one with detailed description",
112
+ "Feature two",
113
+ "Feature three",
114
+ "Feature four",
115
+ "Feature five",
116
+ "Feature six",
117
+ "Feature seven",
118
+ "Feature eight",
119
+ "Feature nine",
120
+ "Feature ten",
121
+ ],
122
+ text: "See all features",
123
+ },
124
+ render: args => (
125
+ <div className="max-w-md w-full">
126
+ <SeeMore {...args} />
127
+ </div>
128
+ ),
129
+ };
130
+
131
+ // Single item
132
+ export const SingleItem: Story = {
133
+ args: {
134
+ list: ["Single checklist item"],
135
+ text: "See details",
136
+ },
137
+ render: args => (
138
+ <div className="max-w-md w-full">
139
+ <SeeMore {...args} />
140
+ </div>
141
+ ),
142
+ };
143
+
144
+ // All variants showcase
145
+ export const AllVariants: Story = {
146
+ render: () => (
147
+ <div className="max-w-2xl w-full space-y-8">
148
+ <div>
149
+ <h3 className="mb-3 text-lg font-semibold">Default</h3>
150
+ <SeeMore list={["Item 1", "Item 2", "Item 3"]} />
151
+ </div>
152
+ <div>
153
+ <h3 className="mb-3 text-lg font-semibold">Custom Button Text</h3>
154
+ <SeeMore
155
+ list={["Feature 1", "Feature 2", "Feature 3"]}
156
+ text="View all features"
157
+ />
158
+ </div>
159
+ <div>
160
+ <h3 className="mb-3 text-lg font-semibold">Long List</h3>
161
+ <SeeMore
162
+ list={[
163
+ "Feature one",
164
+ "Feature two",
165
+ "Feature three",
166
+ "Feature four",
167
+ "Feature five",
168
+ ]}
169
+ text="See all details"
170
+ />
171
+ </div>
172
+ </div>
173
+ ),
174
+ parameters: {
175
+ docs: {
176
+ description: {
177
+ story: "Showcase of all SeeMore variants and configurations.",
178
+ },
179
+ },
180
+ },
181
+ };
@@ -1,44 +1,44 @@
1
- "use client";
2
-
3
- import { useState } from "react";
4
-
5
- import { Button } from "@shared/components/button";
6
- import { Checklist } from "@shared/components/checklist";
7
- import { Collapse } from "@shared/components/collapse";
8
- import { MaterialIcon } from "@shared/components/material-icon";
9
- import { SeeMoreProps } from "@shared/components/see-more/types";
10
-
11
- export const SeeMore: React.FC<SeeMoreProps> = props => {
12
- const { list, text } = props;
13
- const [showDetails, setShowDetails] = useState<boolean>(true);
14
- return (
15
- <div className="mt-3">
16
- <Button
17
- type="button"
18
- className="flex items-center gap-2 text-base font-semibold text-gray-900"
19
- aria-expanded={showDetails}
20
- onClick={e => {
21
- e.stopPropagation();
22
- setShowDetails(v => !v);
23
- }}
24
- >
25
- <span>{text || "See details"}</span>
26
- <MaterialIcon
27
- name={showDetails ? "keyboard_arrow_down" : "keyboard_arrow_up"}
28
- fill={1}
29
- size={24}
30
- />
31
- </Button>
32
-
33
- <Collapse open={showDetails}>
34
- <div className="pt-1">
35
- <Checklist listItemClassName="body3" items={list} />
36
- </div>
37
- </Collapse>
38
- </div>
39
- );
40
- };
41
-
42
- SeeMore.displayName = "SeeMore";
43
-
44
- export type { SeeMoreProps };
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+
5
+ import { Button } from "@shared/components/button";
6
+ import { Checklist } from "@shared/components/checklist";
7
+ import { Collapse } from "@shared/components/collapse";
8
+ import { MaterialIcon } from "@shared/components/material-icon";
9
+ import { SeeMoreProps } from "@shared/components/see-more/types";
10
+
11
+ export const SeeMore: React.FC<SeeMoreProps> = props => {
12
+ const { list, text } = props;
13
+ const [showDetails, setShowDetails] = useState<boolean>(true);
14
+ return (
15
+ <div className="mt-3">
16
+ <Button
17
+ type="button"
18
+ className="flex items-center gap-2 text-base font-semibold text-gray-900"
19
+ aria-expanded={showDetails}
20
+ onClick={e => {
21
+ e.stopPropagation();
22
+ setShowDetails(v => !v);
23
+ }}
24
+ >
25
+ <span>{text || "See details"}</span>
26
+ <MaterialIcon
27
+ name={showDetails ? "keyboard_arrow_down" : "keyboard_arrow_up"}
28
+ fill={1}
29
+ size={24}
30
+ />
31
+ </Button>
32
+
33
+ <Collapse open={showDetails}>
34
+ <div className="pt-1">
35
+ <Checklist listItemClassName="body3" items={list} />
36
+ </div>
37
+ </Collapse>
38
+ </div>
39
+ );
40
+ };
41
+
42
+ SeeMore.displayName = "SeeMore";
43
+
44
+ export type { SeeMoreProps };
@@ -1,4 +1,4 @@
1
- export type SeeMoreProps = {
2
- list: string[];
3
- text?: string;
4
- };
1
+ export type SeeMoreProps = {
2
+ list: string[];
3
+ text?: string;
4
+ };