@windstream/react-shared-components 0.1.20 → 0.1.21

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 (160) 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 +1 -1
  5. package/dist/contentful/index.js.map +1 -1
  6. package/dist/core.d.ts +1 -1
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.esm.js +6 -6
  9. package/dist/index.esm.js.map +1 -1
  10. package/dist/index.js +6 -6
  11. package/dist/index.js.map +1 -1
  12. package/package.json +182 -182
  13. package/src/components/accordion/Accordion.stories.tsx +230 -230
  14. package/src/components/accordion/types.ts +11 -11
  15. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  16. package/src/components/alert-card/index.tsx +41 -41
  17. package/src/components/alert-card/types.ts +13 -13
  18. package/src/components/brand-button/BrandButton.stories.tsx +223 -223
  19. package/src/components/brand-button/helpers.ts +35 -35
  20. package/src/components/brand-button/index.tsx +115 -115
  21. package/src/components/brand-button/types.ts +37 -37
  22. package/src/components/button/Button.stories.tsx +108 -108
  23. package/src/components/button/index.tsx +27 -27
  24. package/src/components/button/types.ts +14 -14
  25. package/src/components/call-button/CallButton.stories.tsx +324 -324
  26. package/src/components/call-button/index.tsx +86 -86
  27. package/src/components/call-button/types.ts +11 -11
  28. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  29. package/src/components/checkbox/index.tsx +197 -197
  30. package/src/components/checkbox/types.ts +27 -27
  31. package/src/components/checklist/Checklist.stories.tsx +150 -150
  32. package/src/components/checklist/index.tsx +59 -59
  33. package/src/components/checklist/types.ts +16 -16
  34. package/src/components/collapse/Collapse.stories.tsx +255 -255
  35. package/src/components/collapse/index.tsx +46 -46
  36. package/src/components/collapse/types.ts +6 -6
  37. package/src/components/divider/Divider.stories.tsx +205 -205
  38. package/src/components/divider/index.tsx +22 -22
  39. package/src/components/divider/type.ts +3 -3
  40. package/src/components/image/Image.stories.tsx +113 -113
  41. package/src/components/image/index.tsx +25 -25
  42. package/src/components/image/types.ts +40 -40
  43. package/src/components/input/Input.stories.tsx +325 -325
  44. package/src/components/input/index.tsx +177 -177
  45. package/src/components/input/types.ts +37 -37
  46. package/src/components/link/Link.stories.tsx +163 -163
  47. package/src/components/link/index.tsx +14 -2
  48. package/src/components/link/types.ts +25 -25
  49. package/src/components/list/List.stories.tsx +272 -272
  50. package/src/components/list/index.tsx +88 -88
  51. package/src/components/list/list-item/index.tsx +38 -38
  52. package/src/components/list/list-item/types.ts +13 -13
  53. package/src/components/list/types.ts +29 -29
  54. package/src/components/material-icon/MaterialIcon.stories.tsx +322 -322
  55. package/src/components/material-icon/constants.ts +98 -98
  56. package/src/components/material-icon/index.tsx +47 -47
  57. package/src/components/material-icon/types.ts +31 -31
  58. package/src/components/modal/Modal.stories.tsx +171 -171
  59. package/src/components/modal/index.tsx +164 -164
  60. package/src/components/modal/types.ts +24 -24
  61. package/src/components/next-image/index.tsx +54 -54
  62. package/src/components/next-image/types.ts +1 -1
  63. package/src/components/pagination/index.tsx +100 -100
  64. package/src/components/pagination/types.ts +6 -6
  65. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  66. package/src/components/radio-button/index.tsx +75 -75
  67. package/src/components/radio-button/types.ts +21 -21
  68. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  69. package/src/components/see-more/index.tsx +44 -44
  70. package/src/components/see-more/types.ts +4 -4
  71. package/src/components/select/Select.stories.tsx +411 -411
  72. package/src/components/select/index.tsx +155 -155
  73. package/src/components/select/types.ts +36 -36
  74. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  75. package/src/components/select-plan-button/index.tsx +57 -57
  76. package/src/components/select-plan-button/types.ts +14 -14
  77. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  78. package/src/components/skeleton/index.tsx +61 -61
  79. package/src/components/skeleton/types.ts +4 -4
  80. package/src/components/spinner/Spinner.stories.tsx +335 -335
  81. package/src/components/spinner/index.tsx +44 -44
  82. package/src/components/spinner/types.ts +5 -5
  83. package/src/components/text/Text.stories.tsx +321 -321
  84. package/src/components/text/index.tsx +25 -25
  85. package/src/components/text/types.ts +45 -45
  86. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  87. package/src/components/tooltip/index.tsx +74 -74
  88. package/src/components/tooltip/types.ts +7 -7
  89. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  90. package/src/components/view-cart-button/index.tsx +42 -42
  91. package/src/components/view-cart-button/types.ts +5 -5
  92. package/src/contentful/blocks/address-input-banner/index.tsx +52 -52
  93. package/src/contentful/blocks/address-input-banner/types.ts +14 -14
  94. package/src/contentful/blocks/blogs-grid/index.tsx +129 -129
  95. package/src/contentful/blocks/blogs-grid/types.ts +26 -26
  96. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  97. package/src/contentful/blocks/button/index.tsx +121 -121
  98. package/src/contentful/blocks/button/types.ts +36 -36
  99. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  100. package/src/contentful/blocks/callout/index.tsx +86 -86
  101. package/src/contentful/blocks/callout/types.ts +15 -15
  102. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  103. package/src/contentful/blocks/cards/blog-card/index.tsx +104 -104
  104. package/src/contentful/blocks/cards/blog-card/types.ts +15 -15
  105. package/src/contentful/blocks/cards/index.tsx +13 -13
  106. package/src/contentful/blocks/cards/product-card/index.tsx +208 -208
  107. package/src/contentful/blocks/cards/product-card/types.ts +28 -28
  108. package/src/contentful/blocks/cards/testimonial-card/index.tsx +88 -88
  109. package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
  110. package/src/contentful/blocks/cards/types.ts +1 -1
  111. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  112. package/src/contentful/blocks/carousel/helper.tsx +356 -356
  113. package/src/contentful/blocks/carousel/index.tsx +73 -73
  114. package/src/contentful/blocks/carousel/types.ts +143 -143
  115. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  116. package/src/contentful/blocks/cta-callout/index.tsx +60 -60
  117. package/src/contentful/blocks/cta-callout/types.ts +26 -26
  118. package/src/contentful/blocks/dynamic-tabs/index.tsx +204 -204
  119. package/src/contentful/blocks/dynamic-tabs/types.ts +21 -21
  120. package/src/contentful/blocks/find-kinetic/index.tsx +130 -130
  121. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  122. package/src/contentful/blocks/floating-banner/index.tsx +97 -97
  123. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  124. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  125. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  126. package/src/contentful/blocks/image-promo-bar/helper.tsx +28 -28
  127. package/src/contentful/blocks/image-promo-bar/types.ts +44 -44
  128. package/src/contentful/blocks/image-promo-bar/vimeo-embed.tsx +93 -93
  129. package/src/contentful/blocks/image-promo-bar/youtube-embed.tsx +46 -46
  130. package/src/contentful/blocks/modal/constants.ts +53 -53
  131. package/src/contentful/blocks/modal/index.tsx +91 -91
  132. package/src/contentful/blocks/modal/types.ts +12 -12
  133. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +113 -113
  134. package/src/contentful/blocks/navigation/index.tsx +394 -394
  135. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +82 -82
  136. package/src/contentful/blocks/navigation/types.ts +41 -41
  137. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  138. package/src/contentful/blocks/primary-hero/index.tsx +234 -234
  139. package/src/contentful/blocks/primary-hero/types.ts +35 -35
  140. package/src/contentful/blocks/search-block/index.tsx +90 -90
  141. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  142. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  143. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  144. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  145. package/src/contentful/blocks/text/index.tsx +12 -12
  146. package/src/contentful/blocks/text/types.ts +1 -1
  147. package/src/contentful/index.ts +75 -75
  148. package/src/hooks/use-body-scroll-lock.ts +34 -34
  149. package/src/hooks/use-outside-click.ts +17 -17
  150. package/src/index.ts +96 -96
  151. package/src/next/index.ts +5 -5
  152. package/src/setupTests.ts +46 -46
  153. package/src/stories/DocsTemplate.tsx +24 -24
  154. package/src/styles/globals.css +343 -343
  155. package/src/types/global.d.ts +9 -9
  156. package/src/types/micro-components.ts +99 -99
  157. package/src/types/utm.ts +49 -49
  158. package/src/utils/cookie.ts +58 -58
  159. package/src/utils/index.ts +65 -65
  160. 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
+ };