@windstream/react-shared-components 0.0.67 → 0.0.68
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.
- package/README.md +629 -629
- package/dist/contentful/index.d.ts +31 -4
- package/dist/contentful/index.esm.js +1 -1
- package/dist/contentful/index.esm.js.map +1 -1
- package/dist/contentful/index.js +1 -1
- package/dist/contentful/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +175 -175
- package/src/components/accordion/Accordion.stories.tsx +230 -230
- package/src/components/accordion/types.ts +10 -10
- package/src/components/alert-card/AlertCard.stories.tsx +171 -171
- package/src/components/alert-card/index.tsx +32 -32
- package/src/components/alert-card/types.ts +9 -9
- package/src/components/brand-button/BrandButton.stories.tsx +219 -219
- package/src/components/brand-button/helpers.ts +35 -35
- package/src/components/brand-button/index.tsx +93 -93
- package/src/components/brand-button/types.ts +25 -25
- package/src/components/button/Button.stories.tsx +108 -108
- package/src/components/button/index.tsx +27 -27
- package/src/components/button/types.ts +14 -14
- package/src/components/call-button/CallButton.stories.tsx +324 -324
- package/src/components/call-button/index.tsx +79 -79
- package/src/components/call-button/types.ts +10 -10
- package/src/components/checkbox/Checkbox.stories.tsx +247 -247
- package/src/components/checkbox/index.tsx +197 -197
- package/src/components/checkbox/types.ts +27 -27
- package/src/components/checklist/Checklist.stories.tsx +150 -150
- package/src/components/collapse/Collapse.stories.tsx +255 -255
- package/src/components/collapse/index.tsx +46 -46
- package/src/components/collapse/types.ts +6 -6
- package/src/components/divider/Divider.stories.tsx +205 -205
- package/src/components/divider/index.tsx +22 -22
- package/src/components/divider/type.ts +3 -3
- package/src/components/image/Image.stories.tsx +113 -113
- package/src/components/image/index.tsx +25 -25
- package/src/components/image/types.ts +40 -40
- package/src/components/input/Input.stories.tsx +325 -325
- package/src/components/input/index.tsx +177 -177
- package/src/components/input/types.ts +37 -37
- package/src/components/link/Link.stories.tsx +163 -163
- package/src/components/link/types.ts +25 -25
- package/src/components/list/List.stories.tsx +272 -272
- package/src/components/list/index.tsx +88 -88
- package/src/components/list/list-item/index.tsx +38 -38
- package/src/components/list/list-item/types.ts +13 -13
- package/src/components/list/types.ts +29 -29
- package/src/components/material-icon/MaterialIcon.stories.tsx +330 -330
- package/src/components/material-icon/constants.ts +96 -96
- package/src/components/material-icon/index.tsx +44 -44
- package/src/components/material-icon/types.ts +31 -31
- package/src/components/modal/Modal.stories.tsx +171 -171
- package/src/components/modal/index.tsx +164 -164
- package/src/components/modal/types.ts +24 -24
- package/src/components/next-image/index.tsx +32 -32
- package/src/components/next-image/types.ts +1 -1
- package/src/components/radio-button/RadioButton.stories.tsx +307 -307
- package/src/components/radio-button/index.tsx +75 -75
- package/src/components/radio-button/types.ts +21 -21
- package/src/components/see-more/SeeMore.stories.tsx +181 -181
- package/src/components/see-more/index.tsx +44 -44
- package/src/components/see-more/types.ts +4 -4
- package/src/components/select/Select.stories.tsx +411 -411
- package/src/components/select/index.tsx +150 -150
- package/src/components/select/types.ts +35 -35
- package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
- package/src/components/select-plan-button/index.tsx +31 -31
- package/src/components/select-plan-button/types.ts +5 -5
- package/src/components/skeleton/Skeleton.stories.tsx +179 -179
- package/src/components/skeleton/index.tsx +61 -61
- package/src/components/skeleton/types.ts +4 -4
- package/src/components/spinner/Spinner.stories.tsx +335 -335
- package/src/components/spinner/index.tsx +44 -44
- package/src/components/spinner/types.ts +5 -5
- package/src/components/text/Text.stories.tsx +321 -321
- package/src/components/text/index.tsx +25 -25
- package/src/components/text/types.ts +45 -45
- package/src/components/tooltip/Tooltip.stories.tsx +219 -219
- package/src/components/tooltip/index.tsx +74 -74
- package/src/components/tooltip/types.ts +7 -7
- package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
- package/src/components/view-cart-button/index.tsx +44 -44
- package/src/components/view-cart-button/types.ts +5 -5
- package/src/contentful/blocks/button/Button.stories.tsx +40 -40
- package/src/contentful/blocks/button/index.tsx +64 -64
- package/src/contentful/blocks/button/types.ts +24 -24
- package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
- package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
- package/src/contentful/blocks/cards/index.tsx +13 -13
- package/src/contentful/blocks/cards/product-card/index.tsx +199 -198
- package/src/contentful/blocks/cards/product-card/types.ts +18 -18
- package/src/contentful/blocks/cards/testimonial-card/index.tsx +88 -86
- package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -10
- package/src/contentful/blocks/cards/types.ts +1 -1
- package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
- package/src/contentful/blocks/carousel/index.tsx +13 -13
- package/src/contentful/blocks/carousel/types.ts +1 -1
- package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
- package/src/contentful/blocks/cta-callout/index.tsx +54 -54
- package/src/contentful/blocks/cta-callout/types.ts +22 -22
- package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
- package/src/contentful/blocks/floating-banner/types.ts +22 -22
- package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
- package/src/contentful/blocks/footer/index.tsx +3 -1
- package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
- package/src/contentful/blocks/image-promo-bar/types.ts +27 -27
- package/src/contentful/blocks/modal/Modal.stories.tsx +23 -23
- package/src/contentful/blocks/modal/index.tsx +12 -12
- package/src/contentful/blocks/modal/types.ts +1 -1
- package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +111 -111
- package/src/contentful/blocks/navigation/index.tsx +366 -366
- package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +80 -80
- package/src/contentful/blocks/navigation/types.ts +39 -39
- package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
- package/src/contentful/blocks/primary-hero/index.tsx +160 -160
- package/src/contentful/blocks/primary-hero/types.ts +30 -30
- package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
- package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
- package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
- package/src/contentful/blocks/text/Text.stories.tsx +23 -23
- package/src/contentful/blocks/text/index.tsx +12 -12
- package/src/contentful/blocks/text/types.ts +1 -1
- package/src/contentful/index.ts +57 -54
- package/src/hooks/use-body-scroll-lock.ts +34 -34
- package/src/hooks/use-outside-click.ts +17 -17
- package/src/index.ts +96 -96
- package/src/next/index.ts +5 -5
- package/src/setupTests.ts +46 -46
- package/src/stories/DocsTemplate.tsx +24 -24
- package/src/styles/globals.css +307 -307
- package/src/types/global.d.ts +9 -9
- package/src/types/micro-components.ts +80 -80
- package/src/utils/index.ts +49 -49
|
@@ -1,184 +1,184 @@
|
|
|
1
|
-
import { SelectPlanButton } from "./index";
|
|
2
|
-
|
|
3
|
-
import { DocsPage } from "@shared/stories/DocsTemplate";
|
|
4
|
-
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
-
|
|
6
|
-
const meta: Meta<typeof SelectPlanButton> = {
|
|
7
|
-
title: "Components/SelectPlanButton",
|
|
8
|
-
component: SelectPlanButton,
|
|
9
|
-
tags: ["autodocs"],
|
|
10
|
-
parameters: {
|
|
11
|
-
layout: "centered",
|
|
12
|
-
docs: {
|
|
13
|
-
page: DocsPage,
|
|
14
|
-
description: {
|
|
15
|
-
component:
|
|
16
|
-
"A button component specifically designed for selecting plans, with speed information and interactive states.",
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
argTypes: {
|
|
21
|
-
speed: {
|
|
22
|
-
control: { type: "text" },
|
|
23
|
-
description: "Speed value for the plan",
|
|
24
|
-
},
|
|
25
|
-
onSelect: {
|
|
26
|
-
action: "selected",
|
|
27
|
-
description: "Callback function when button is clicked",
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
args: {
|
|
31
|
-
speed: "100 Mbps",
|
|
32
|
-
onSelect: () => {},
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export default meta;
|
|
37
|
-
type Story = StoryObj<typeof meta>;
|
|
38
|
-
|
|
39
|
-
// Default button
|
|
40
|
-
export const Default: Story = {
|
|
41
|
-
args: {},
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
// With speed prop
|
|
45
|
-
export const WithSpeed: Story = {
|
|
46
|
-
args: {
|
|
47
|
-
speed: "500 Mbps",
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
// Different speeds
|
|
52
|
-
export const DifferentSpeeds: Story = {
|
|
53
|
-
render: () => (
|
|
54
|
-
<div className="max-w-md w-full space-y-3">
|
|
55
|
-
<SelectPlanButton speed="100 Mbps" onSelect={() => {}} />
|
|
56
|
-
<SelectPlanButton speed="250 Mbps" onSelect={() => {}} />
|
|
57
|
-
<SelectPlanButton speed="500 Mbps" onSelect={() => {}} />
|
|
58
|
-
<SelectPlanButton speed="1 Gbps" onSelect={() => {}} />
|
|
59
|
-
</div>
|
|
60
|
-
),
|
|
61
|
-
parameters: {
|
|
62
|
-
docs: {
|
|
63
|
-
description: {
|
|
64
|
-
story: "SelectPlanButton with different speed values.",
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
// Interactive state
|
|
71
|
-
export const Interactive: Story = {
|
|
72
|
-
render: () => {
|
|
73
|
-
const handleSelect = (speed: string) => {
|
|
74
|
-
alert(`Selected plan: ${speed}`);
|
|
75
|
-
};
|
|
76
|
-
return (
|
|
77
|
-
<div className="max-w-md w-full space-y-3">
|
|
78
|
-
<SelectPlanButton
|
|
79
|
-
speed="100 Mbps"
|
|
80
|
-
onSelect={() => handleSelect("100 Mbps")}
|
|
81
|
-
/>
|
|
82
|
-
<SelectPlanButton
|
|
83
|
-
speed="500 Mbps"
|
|
84
|
-
onSelect={() => handleSelect("500 Mbps")}
|
|
85
|
-
/>
|
|
86
|
-
<SelectPlanButton
|
|
87
|
-
speed="1 Gbps"
|
|
88
|
-
onSelect={() => handleSelect("1 Gbps")}
|
|
89
|
-
/>
|
|
90
|
-
</div>
|
|
91
|
-
);
|
|
92
|
-
},
|
|
93
|
-
parameters: {
|
|
94
|
-
docs: {
|
|
95
|
-
description: {
|
|
96
|
-
story: "Interactive SelectPlanButton examples that trigger callbacks.",
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
// Selected State
|
|
103
|
-
export const SelectedState: Story = {
|
|
104
|
-
render: () => (
|
|
105
|
-
<div className="max-w-md w-full space-y-3">
|
|
106
|
-
<SelectPlanButton speed="1 Gbps" onSelect={() => {}} isSelected={true} />
|
|
107
|
-
</div>
|
|
108
|
-
),
|
|
109
|
-
parameters: {
|
|
110
|
-
docs: {
|
|
111
|
-
description: {
|
|
112
|
-
story: "SelectPlanButton with selected state.",
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
// In plan card
|
|
119
|
-
export const InPlanCard: Story = {
|
|
120
|
-
render: () => (
|
|
121
|
-
<div className="max-w-sm border-border-default w-full space-y-4 rounded-lg border p-6">
|
|
122
|
-
<div>
|
|
123
|
-
<h3 className="heading3 text-text">Standard Plan</h3>
|
|
124
|
-
<p className="body2 mt-1 text-text-secondary">Perfect for families</p>
|
|
125
|
-
</div>
|
|
126
|
-
<div>
|
|
127
|
-
<p className="heading2 text-text">$49.99</p>
|
|
128
|
-
<p className="body3 text-text-secondary">per month</p>
|
|
129
|
-
</div>
|
|
130
|
-
<ul className="space-y-2">
|
|
131
|
-
<li className="body3 text-text">Up to 500 Mbps</li>
|
|
132
|
-
<li className="body3 text-text">Unlimited data</li>
|
|
133
|
-
<li className="body3 text-text">Free installation</li>
|
|
134
|
-
</ul>
|
|
135
|
-
<SelectPlanButton speed="500 Mbps" onSelect={() => {}} />
|
|
136
|
-
</div>
|
|
137
|
-
),
|
|
138
|
-
parameters: {
|
|
139
|
-
docs: {
|
|
140
|
-
description: {
|
|
141
|
-
story: "SelectPlanButton used within a plan card layout.",
|
|
142
|
-
},
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
// All variants showcase
|
|
148
|
-
export const AllVariants: Story = {
|
|
149
|
-
render: () => (
|
|
150
|
-
<div className="max-w-2xl w-full space-y-6">
|
|
151
|
-
<div>
|
|
152
|
-
<h3 className="mb-3 text-lg font-semibold">Different Speeds</h3>
|
|
153
|
-
<div className="space-y-3">
|
|
154
|
-
<SelectPlanButton speed="100 Mbps" onSelect={() => {}} />
|
|
155
|
-
<SelectPlanButton speed="250 Mbps" onSelect={() => {}} />
|
|
156
|
-
<SelectPlanButton speed="500 Mbps" onSelect={() => {}} />
|
|
157
|
-
<SelectPlanButton speed="1 Gbps" onSelect={() => {}} />
|
|
158
|
-
</div>
|
|
159
|
-
</div>
|
|
160
|
-
<div>
|
|
161
|
-
<h3 className="mb-3 text-lg font-semibold">In Context</h3>
|
|
162
|
-
<div className="grid grid-cols-2 gap-4">
|
|
163
|
-
<div className="border-border-default space-y-3 rounded-lg border p-4">
|
|
164
|
-
<h4 className="subheading1 text-text">Basic Plan</h4>
|
|
165
|
-
<p className="body2 text-text-secondary">100 Mbps</p>
|
|
166
|
-
<SelectPlanButton speed="100 Mbps" onSelect={() => {}} />
|
|
167
|
-
</div>
|
|
168
|
-
<div className="border-border-default space-y-3 rounded-lg border p-4">
|
|
169
|
-
<h4 className="subheading1 text-text">Premium Plan</h4>
|
|
170
|
-
<p className="body2 text-text-secondary">1 Gbps</p>
|
|
171
|
-
<SelectPlanButton speed="1 Gbps" onSelect={() => {}} />
|
|
172
|
-
</div>
|
|
173
|
-
</div>
|
|
174
|
-
</div>
|
|
175
|
-
</div>
|
|
176
|
-
),
|
|
177
|
-
parameters: {
|
|
178
|
-
docs: {
|
|
179
|
-
description: {
|
|
180
|
-
story: "Showcase of all SelectPlanButton variants and use cases.",
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
},
|
|
184
|
-
};
|
|
1
|
+
import { SelectPlanButton } from "./index";
|
|
2
|
+
|
|
3
|
+
import { DocsPage } from "@shared/stories/DocsTemplate";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
|
|
6
|
+
const meta: Meta<typeof SelectPlanButton> = {
|
|
7
|
+
title: "Components/SelectPlanButton",
|
|
8
|
+
component: SelectPlanButton,
|
|
9
|
+
tags: ["autodocs"],
|
|
10
|
+
parameters: {
|
|
11
|
+
layout: "centered",
|
|
12
|
+
docs: {
|
|
13
|
+
page: DocsPage,
|
|
14
|
+
description: {
|
|
15
|
+
component:
|
|
16
|
+
"A button component specifically designed for selecting plans, with speed information and interactive states.",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
argTypes: {
|
|
21
|
+
speed: {
|
|
22
|
+
control: { type: "text" },
|
|
23
|
+
description: "Speed value for the plan",
|
|
24
|
+
},
|
|
25
|
+
onSelect: {
|
|
26
|
+
action: "selected",
|
|
27
|
+
description: "Callback function when button is clicked",
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
args: {
|
|
31
|
+
speed: "100 Mbps",
|
|
32
|
+
onSelect: () => {},
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export default meta;
|
|
37
|
+
type Story = StoryObj<typeof meta>;
|
|
38
|
+
|
|
39
|
+
// Default button
|
|
40
|
+
export const Default: Story = {
|
|
41
|
+
args: {},
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// With speed prop
|
|
45
|
+
export const WithSpeed: Story = {
|
|
46
|
+
args: {
|
|
47
|
+
speed: "500 Mbps",
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// Different speeds
|
|
52
|
+
export const DifferentSpeeds: Story = {
|
|
53
|
+
render: () => (
|
|
54
|
+
<div className="max-w-md w-full space-y-3">
|
|
55
|
+
<SelectPlanButton speed="100 Mbps" onSelect={() => {}} />
|
|
56
|
+
<SelectPlanButton speed="250 Mbps" onSelect={() => {}} />
|
|
57
|
+
<SelectPlanButton speed="500 Mbps" onSelect={() => {}} />
|
|
58
|
+
<SelectPlanButton speed="1 Gbps" onSelect={() => {}} />
|
|
59
|
+
</div>
|
|
60
|
+
),
|
|
61
|
+
parameters: {
|
|
62
|
+
docs: {
|
|
63
|
+
description: {
|
|
64
|
+
story: "SelectPlanButton with different speed values.",
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// Interactive state
|
|
71
|
+
export const Interactive: Story = {
|
|
72
|
+
render: () => {
|
|
73
|
+
const handleSelect = (speed: string) => {
|
|
74
|
+
alert(`Selected plan: ${speed}`);
|
|
75
|
+
};
|
|
76
|
+
return (
|
|
77
|
+
<div className="max-w-md w-full space-y-3">
|
|
78
|
+
<SelectPlanButton
|
|
79
|
+
speed="100 Mbps"
|
|
80
|
+
onSelect={() => handleSelect("100 Mbps")}
|
|
81
|
+
/>
|
|
82
|
+
<SelectPlanButton
|
|
83
|
+
speed="500 Mbps"
|
|
84
|
+
onSelect={() => handleSelect("500 Mbps")}
|
|
85
|
+
/>
|
|
86
|
+
<SelectPlanButton
|
|
87
|
+
speed="1 Gbps"
|
|
88
|
+
onSelect={() => handleSelect("1 Gbps")}
|
|
89
|
+
/>
|
|
90
|
+
</div>
|
|
91
|
+
);
|
|
92
|
+
},
|
|
93
|
+
parameters: {
|
|
94
|
+
docs: {
|
|
95
|
+
description: {
|
|
96
|
+
story: "Interactive SelectPlanButton examples that trigger callbacks.",
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// Selected State
|
|
103
|
+
export const SelectedState: Story = {
|
|
104
|
+
render: () => (
|
|
105
|
+
<div className="max-w-md w-full space-y-3">
|
|
106
|
+
<SelectPlanButton speed="1 Gbps" onSelect={() => {}} isSelected={true} />
|
|
107
|
+
</div>
|
|
108
|
+
),
|
|
109
|
+
parameters: {
|
|
110
|
+
docs: {
|
|
111
|
+
description: {
|
|
112
|
+
story: "SelectPlanButton with selected state.",
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// In plan card
|
|
119
|
+
export const InPlanCard: Story = {
|
|
120
|
+
render: () => (
|
|
121
|
+
<div className="max-w-sm border-border-default w-full space-y-4 rounded-lg border p-6">
|
|
122
|
+
<div>
|
|
123
|
+
<h3 className="heading3 text-text">Standard Plan</h3>
|
|
124
|
+
<p className="body2 mt-1 text-text-secondary">Perfect for families</p>
|
|
125
|
+
</div>
|
|
126
|
+
<div>
|
|
127
|
+
<p className="heading2 text-text">$49.99</p>
|
|
128
|
+
<p className="body3 text-text-secondary">per month</p>
|
|
129
|
+
</div>
|
|
130
|
+
<ul className="space-y-2">
|
|
131
|
+
<li className="body3 text-text">Up to 500 Mbps</li>
|
|
132
|
+
<li className="body3 text-text">Unlimited data</li>
|
|
133
|
+
<li className="body3 text-text">Free installation</li>
|
|
134
|
+
</ul>
|
|
135
|
+
<SelectPlanButton speed="500 Mbps" onSelect={() => {}} />
|
|
136
|
+
</div>
|
|
137
|
+
),
|
|
138
|
+
parameters: {
|
|
139
|
+
docs: {
|
|
140
|
+
description: {
|
|
141
|
+
story: "SelectPlanButton used within a plan card layout.",
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// All variants showcase
|
|
148
|
+
export const AllVariants: Story = {
|
|
149
|
+
render: () => (
|
|
150
|
+
<div className="max-w-2xl w-full space-y-6">
|
|
151
|
+
<div>
|
|
152
|
+
<h3 className="mb-3 text-lg font-semibold">Different Speeds</h3>
|
|
153
|
+
<div className="space-y-3">
|
|
154
|
+
<SelectPlanButton speed="100 Mbps" onSelect={() => {}} />
|
|
155
|
+
<SelectPlanButton speed="250 Mbps" onSelect={() => {}} />
|
|
156
|
+
<SelectPlanButton speed="500 Mbps" onSelect={() => {}} />
|
|
157
|
+
<SelectPlanButton speed="1 Gbps" onSelect={() => {}} />
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
<div>
|
|
161
|
+
<h3 className="mb-3 text-lg font-semibold">In Context</h3>
|
|
162
|
+
<div className="grid grid-cols-2 gap-4">
|
|
163
|
+
<div className="border-border-default space-y-3 rounded-lg border p-4">
|
|
164
|
+
<h4 className="subheading1 text-text">Basic Plan</h4>
|
|
165
|
+
<p className="body2 text-text-secondary">100 Mbps</p>
|
|
166
|
+
<SelectPlanButton speed="100 Mbps" onSelect={() => {}} />
|
|
167
|
+
</div>
|
|
168
|
+
<div className="border-border-default space-y-3 rounded-lg border p-4">
|
|
169
|
+
<h4 className="subheading1 text-text">Premium Plan</h4>
|
|
170
|
+
<p className="body2 text-text-secondary">1 Gbps</p>
|
|
171
|
+
<SelectPlanButton speed="1 Gbps" onSelect={() => {}} />
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
),
|
|
177
|
+
parameters: {
|
|
178
|
+
docs: {
|
|
179
|
+
description: {
|
|
180
|
+
story: "Showcase of all SelectPlanButton variants and use cases.",
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
};
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { Button } from "../button";
|
|
2
|
-
import { MaterialIcon } from "../material-icon";
|
|
3
|
-
import { SelectPlanButtonProps } from "./types";
|
|
4
|
-
|
|
5
|
-
import { cx } from "@shared/utils";
|
|
6
|
-
|
|
7
|
-
export const SelectPlanButton: React.FC<SelectPlanButtonProps> = ({
|
|
8
|
-
onSelect,
|
|
9
|
-
speed,
|
|
10
|
-
isSelected = false,
|
|
11
|
-
}) => {
|
|
12
|
-
const className = `btn-medium rounded-2xl pl-15 pr-15 inline-flex gap-2 items-center justify-center outline-none focus:ring-2 focus:ring-offset-2 cursor-pointer transition-colors duration-200 align-top ${isSelected ? " bg-bg-surface text-text focus:ring-bg-fill-surface-inverse" : " bg-bg-fill-brand text-text-brand-on-bg-fill enabled:hover:bg-bg-fill-brand-hover focus:ring-bg-fill-brand"} `;
|
|
13
|
-
return (
|
|
14
|
-
<Button
|
|
15
|
-
onClick={onSelect}
|
|
16
|
-
className={cx(className, `w-full justify-between pl-5 pr-5`)}
|
|
17
|
-
data-track-element-name="speed_plan_select_button"
|
|
18
|
-
data-track-click-text={`Select plan speed ${speed}`}
|
|
19
|
-
data-track-element-clicked="speed_plan_card"
|
|
20
|
-
>
|
|
21
|
-
<span>Select plan</span>
|
|
22
|
-
<span
|
|
23
|
-
className={`inline-flex h-6 w-6 items-center justify-center rounded-full ${isSelected ? "bg-bg-fill-surface-inverse text-text-inverse" : "bg-bg text-text"}`}
|
|
24
|
-
>
|
|
25
|
-
<MaterialIcon name="chevron_right" fill={1} size={24} />
|
|
26
|
-
</span>
|
|
27
|
-
</Button>
|
|
28
|
-
);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export type { SelectPlanButtonProps } from "./types";
|
|
1
|
+
import { Button } from "../button";
|
|
2
|
+
import { MaterialIcon } from "../material-icon";
|
|
3
|
+
import { SelectPlanButtonProps } from "./types";
|
|
4
|
+
|
|
5
|
+
import { cx } from "@shared/utils";
|
|
6
|
+
|
|
7
|
+
export const SelectPlanButton: React.FC<SelectPlanButtonProps> = ({
|
|
8
|
+
onSelect,
|
|
9
|
+
speed,
|
|
10
|
+
isSelected = false,
|
|
11
|
+
}) => {
|
|
12
|
+
const className = `btn-medium rounded-2xl pl-15 pr-15 inline-flex gap-2 items-center justify-center outline-none focus:ring-2 focus:ring-offset-2 cursor-pointer transition-colors duration-200 align-top ${isSelected ? " bg-bg-surface text-text focus:ring-bg-fill-surface-inverse" : " bg-bg-fill-brand text-text-brand-on-bg-fill enabled:hover:bg-bg-fill-brand-hover focus:ring-bg-fill-brand"} `;
|
|
13
|
+
return (
|
|
14
|
+
<Button
|
|
15
|
+
onClick={onSelect}
|
|
16
|
+
className={cx(className, `w-full justify-between pl-5 pr-5`)}
|
|
17
|
+
data-track-element-name="speed_plan_select_button"
|
|
18
|
+
data-track-click-text={`Select plan speed ${speed}`}
|
|
19
|
+
data-track-element-clicked="speed_plan_card"
|
|
20
|
+
>
|
|
21
|
+
<span>Select plan</span>
|
|
22
|
+
<span
|
|
23
|
+
className={`inline-flex h-6 w-6 items-center justify-center rounded-full ${isSelected ? "bg-bg-fill-surface-inverse text-text-inverse" : "bg-bg text-text"}`}
|
|
24
|
+
>
|
|
25
|
+
<MaterialIcon name="chevron_right" fill={1} size={24} />
|
|
26
|
+
</span>
|
|
27
|
+
</Button>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export type { SelectPlanButtonProps } from "./types";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export type SelectPlanButtonProps = {
|
|
2
|
-
onSelect: () => void;
|
|
3
|
-
speed: string;
|
|
4
|
-
isSelected?: boolean;
|
|
5
|
-
};
|
|
1
|
+
export type SelectPlanButtonProps = {
|
|
2
|
+
onSelect: () => void;
|
|
3
|
+
speed: string;
|
|
4
|
+
isSelected?: boolean;
|
|
5
|
+
};
|