@windstream/react-shared-components 0.0.63 → 0.0.64

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 (143) hide show
  1. package/README.md +629 -629
  2. package/dist/contentful/index.d.ts +34 -28
  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 +2 -2
  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/next/index.esm.js +1 -1
  14. package/dist/next/index.esm.js.map +1 -1
  15. package/dist/next/index.js +1 -1
  16. package/dist/next/index.js.map +1 -1
  17. package/dist/styles.css +1 -1
  18. package/package.json +175 -175
  19. package/src/components/accordion/Accordion.stories.tsx +230 -230
  20. package/src/components/accordion/types.ts +10 -10
  21. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  22. package/src/components/alert-card/index.tsx +32 -32
  23. package/src/components/alert-card/types.ts +9 -9
  24. package/src/components/brand-button/BrandButton.stories.tsx +219 -219
  25. package/src/components/brand-button/helpers.ts +35 -35
  26. package/src/components/brand-button/index.tsx +93 -93
  27. package/src/components/brand-button/types.ts +25 -25
  28. package/src/components/button/Button.stories.tsx +108 -108
  29. package/src/components/button/index.tsx +27 -27
  30. package/src/components/button/types.ts +14 -14
  31. package/src/components/call-button/CallButton.stories.tsx +324 -324
  32. package/src/components/call-button/index.tsx +79 -79
  33. package/src/components/call-button/types.ts +10 -10
  34. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  35. package/src/components/checkbox/index.tsx +197 -197
  36. package/src/components/checkbox/types.ts +27 -27
  37. package/src/components/checklist/Checklist.stories.tsx +150 -150
  38. package/src/components/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/types.ts +25 -25
  52. package/src/components/list/List.stories.tsx +272 -272
  53. package/src/components/list/index.tsx +88 -88
  54. package/src/components/list/list-item/index.tsx +38 -38
  55. package/src/components/list/list-item/types.ts +13 -13
  56. package/src/components/list/types.ts +29 -29
  57. package/src/components/material-icon/MaterialIcon.stories.tsx +330 -330
  58. package/src/components/material-icon/constants.ts +96 -96
  59. package/src/components/material-icon/index.tsx +44 -44
  60. package/src/components/material-icon/types.ts +31 -31
  61. package/src/components/modal/Modal.stories.tsx +171 -171
  62. package/src/components/modal/index.tsx +164 -164
  63. package/src/components/modal/types.ts +24 -24
  64. package/src/components/next-image/index.tsx +32 -18
  65. package/src/components/next-image/types.ts +1 -1
  66. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  67. package/src/components/radio-button/index.tsx +75 -75
  68. package/src/components/radio-button/types.ts +21 -21
  69. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  70. package/src/components/see-more/index.tsx +44 -44
  71. package/src/components/see-more/types.ts +4 -4
  72. package/src/components/select/Select.stories.tsx +411 -411
  73. package/src/components/select/index.tsx +150 -150
  74. package/src/components/select/types.ts +35 -35
  75. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  76. package/src/components/select-plan-button/index.tsx +31 -31
  77. package/src/components/select-plan-button/types.ts +5 -5
  78. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  79. package/src/components/skeleton/index.tsx +61 -61
  80. package/src/components/skeleton/types.ts +4 -4
  81. package/src/components/spinner/Spinner.stories.tsx +335 -335
  82. package/src/components/spinner/index.tsx +44 -44
  83. package/src/components/spinner/types.ts +5 -5
  84. package/src/components/text/Text.stories.tsx +321 -321
  85. package/src/components/text/index.tsx +25 -25
  86. package/src/components/text/types.ts +45 -45
  87. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  88. package/src/components/tooltip/index.tsx +74 -74
  89. package/src/components/tooltip/types.ts +7 -7
  90. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  91. package/src/components/view-cart-button/index.tsx +44 -44
  92. package/src/components/view-cart-button/types.ts +5 -5
  93. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  94. package/src/contentful/blocks/button/index.tsx +64 -64
  95. package/src/contentful/blocks/button/types.ts +24 -24
  96. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  97. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  98. package/src/contentful/blocks/cards/index.tsx +13 -13
  99. package/src/contentful/blocks/cards/product-card/index.tsx +198 -198
  100. package/src/contentful/blocks/cards/product-card/types.ts +18 -18
  101. package/src/contentful/blocks/cards/testimonial-card/index.tsx +86 -86
  102. package/src/contentful/blocks/cards/testimonial-card/types.tsx +10 -10
  103. package/src/contentful/blocks/cards/types.ts +1 -1
  104. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  105. package/src/contentful/blocks/carousel/index.tsx +13 -13
  106. package/src/contentful/blocks/carousel/types.ts +1 -1
  107. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  108. package/src/contentful/blocks/cta-callout/index.tsx +54 -54
  109. package/src/contentful/blocks/cta-callout/types.ts +22 -22
  110. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  111. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  112. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  113. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  114. package/src/contentful/blocks/image-promo-bar/types.ts +27 -27
  115. package/src/contentful/blocks/modal/Modal.stories.tsx +23 -23
  116. package/src/contentful/blocks/modal/index.tsx +12 -12
  117. package/src/contentful/blocks/modal/types.ts +1 -1
  118. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +111 -0
  119. package/src/contentful/blocks/navigation/index.tsx +366 -56
  120. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +80 -0
  121. package/src/contentful/blocks/navigation/types.ts +39 -21
  122. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  123. package/src/contentful/blocks/primary-hero/index.tsx +160 -160
  124. package/src/contentful/blocks/primary-hero/types.ts +30 -30
  125. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  126. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  127. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  128. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  129. package/src/contentful/blocks/text/index.tsx +12 -12
  130. package/src/contentful/blocks/text/types.ts +1 -1
  131. package/src/contentful/index.ts +54 -54
  132. package/src/hooks/use-body-scroll-lock.ts +34 -34
  133. package/src/hooks/use-outside-click.ts +17 -0
  134. package/src/index.ts +96 -96
  135. package/src/next/index.ts +5 -5
  136. package/src/setupTests.ts +46 -46
  137. package/src/stories/DocsTemplate.tsx +24 -24
  138. package/src/styles/globals.css +307 -307
  139. package/src/types/global.d.ts +9 -9
  140. package/src/types/micro-components.ts +80 -0
  141. package/src/utils/index.ts +49 -49
  142. package/src/contentful/blocks/navigation/Navigation.stories.tsx +0 -23
  143. package/src/contentful/blocks/navigation/link-groups.tsx/index.tsx +0 -62
@@ -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
+ };