@windstream/react-shared-components 0.0.93 → 0.0.94

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 (150) hide show
  1. package/README.md +635 -635
  2. package/dist/contentful/index.d.ts +28 -31
  3. package/dist/contentful/index.esm.js +1 -1
  4. package/dist/contentful/index.esm.js.map +1 -1
  5. package/dist/contentful/index.js +1 -1
  6. package/dist/contentful/index.js.map +1 -1
  7. package/dist/core.d.ts +1 -1
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.esm.js +1 -1
  10. package/dist/index.esm.js.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/styles.css +1 -1
  14. package/package.json +177 -177
  15. package/src/components/accordion/Accordion.stories.tsx +230 -230
  16. package/src/components/accordion/index.tsx +9 -2
  17. package/src/components/accordion/types.ts +11 -10
  18. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  19. package/src/components/alert-card/index.tsx +33 -33
  20. package/src/components/alert-card/types.ts +11 -11
  21. package/src/components/brand-button/BrandButton.stories.tsx +223 -223
  22. package/src/components/brand-button/helpers.ts +35 -35
  23. package/src/components/brand-button/index.tsx +115 -115
  24. package/src/components/brand-button/types.ts +37 -37
  25. package/src/components/button/Button.stories.tsx +108 -108
  26. package/src/components/button/index.tsx +27 -27
  27. package/src/components/button/types.ts +14 -14
  28. package/src/components/call-button/CallButton.stories.tsx +324 -324
  29. package/src/components/call-button/index.tsx +86 -86
  30. package/src/components/call-button/types.ts +11 -11
  31. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  32. package/src/components/checkbox/index.tsx +197 -197
  33. package/src/components/checkbox/types.ts +27 -27
  34. package/src/components/checklist/Checklist.stories.tsx +150 -150
  35. package/src/components/checklist/index.tsx +55 -55
  36. package/src/components/checklist/types.ts +14 -14
  37. package/src/components/collapse/Collapse.stories.tsx +255 -255
  38. package/src/components/collapse/index.tsx +46 -46
  39. package/src/components/collapse/types.ts +6 -6
  40. package/src/components/divider/Divider.stories.tsx +205 -205
  41. package/src/components/divider/index.tsx +22 -22
  42. package/src/components/divider/type.ts +3 -3
  43. package/src/components/image/Image.stories.tsx +113 -113
  44. package/src/components/image/index.tsx +25 -25
  45. package/src/components/image/types.ts +40 -40
  46. package/src/components/input/Input.stories.tsx +325 -325
  47. package/src/components/input/index.tsx +177 -177
  48. package/src/components/input/types.ts +37 -37
  49. package/src/components/link/Link.stories.tsx +163 -163
  50. package/src/components/link/types.ts +25 -25
  51. package/src/components/list/List.stories.tsx +272 -272
  52. package/src/components/list/index.tsx +88 -88
  53. package/src/components/list/list-item/index.tsx +38 -38
  54. package/src/components/list/list-item/types.ts +13 -13
  55. package/src/components/list/types.ts +29 -29
  56. package/src/components/material-icon/MaterialIcon.stories.tsx +322 -322
  57. package/src/components/material-icon/constants.ts +98 -98
  58. package/src/components/material-icon/index.tsx +47 -47
  59. package/src/components/material-icon/types.ts +31 -31
  60. package/src/components/modal/Modal.stories.tsx +171 -171
  61. package/src/components/modal/index.tsx +164 -164
  62. package/src/components/modal/types.ts +24 -24
  63. package/src/components/next-image/index.tsx +32 -32
  64. package/src/components/next-image/types.ts +1 -1
  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 +150 -150
  73. package/src/components/select/types.ts +35 -35
  74. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  75. package/src/components/select-plan-button/index.tsx +31 -31
  76. package/src/components/select-plan-button/types.ts +5 -5
  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/accordion/index.tsx +3 -1
  93. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  94. package/src/contentful/blocks/button/index.tsx +3 -1
  95. package/src/contentful/blocks/button/types.ts +32 -31
  96. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  97. package/src/contentful/blocks/callout/index.tsx +66 -66
  98. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  99. package/src/contentful/blocks/cards/index.tsx +13 -13
  100. package/src/contentful/blocks/cards/product-card/index.tsx +199 -199
  101. package/src/contentful/blocks/cards/product-card/types.ts +21 -21
  102. package/src/contentful/blocks/cards/simple-card/index.tsx +12 -1
  103. package/src/contentful/blocks/cards/simple-card/types.ts +2 -5
  104. package/src/contentful/blocks/cards/testimonial-card/index.tsx +88 -88
  105. package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
  106. package/src/contentful/blocks/cards/types.ts +1 -1
  107. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  108. package/src/contentful/blocks/carousel/helper.tsx +348 -349
  109. package/src/contentful/blocks/carousel/index.tsx +68 -68
  110. package/src/contentful/blocks/carousel/types.ts +139 -139
  111. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  112. package/src/contentful/blocks/cta-callout/index.tsx +54 -54
  113. package/src/contentful/blocks/cta-callout/types.ts +22 -22
  114. package/src/contentful/blocks/find-kinetic/index.tsx +124 -124
  115. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  116. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  117. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  118. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  119. package/src/contentful/blocks/image-promo-bar/helper.tsx +28 -28
  120. package/src/contentful/blocks/image-promo-bar/index.tsx +231 -231
  121. package/src/contentful/blocks/image-promo-bar/types.ts +44 -44
  122. package/src/contentful/blocks/image-promo-bar/vimeo-embed.tsx +93 -93
  123. package/src/contentful/blocks/image-promo-bar/youtube-embed.tsx +46 -46
  124. package/src/contentful/blocks/modal/constants.ts +53 -53
  125. package/src/contentful/blocks/modal/index.tsx +91 -91
  126. package/src/contentful/blocks/modal/types.ts +12 -12
  127. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +111 -111
  128. package/src/contentful/blocks/navigation/index.tsx +385 -385
  129. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +80 -80
  130. package/src/contentful/blocks/navigation/types.ts +41 -41
  131. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  132. package/src/contentful/blocks/primary-hero/index.tsx +228 -228
  133. package/src/contentful/blocks/primary-hero/types.ts +35 -35
  134. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  135. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  136. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  137. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  138. package/src/contentful/blocks/text/index.tsx +12 -12
  139. package/src/contentful/blocks/text/types.ts +1 -1
  140. package/src/contentful/index.ts +57 -57
  141. package/src/hooks/use-body-scroll-lock.ts +34 -34
  142. package/src/hooks/use-outside-click.ts +17 -17
  143. package/src/index.ts +96 -96
  144. package/src/next/index.ts +5 -5
  145. package/src/setupTests.ts +46 -46
  146. package/src/stories/DocsTemplate.tsx +24 -24
  147. package/src/styles/globals.css +343 -343
  148. package/src/types/global.d.ts +9 -9
  149. package/src/types/micro-components.ts +89 -89
  150. package/src/utils/index.ts +49 -49
@@ -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
+ };