@mich8060/chg-design-system 0.1.0
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/.github/workflows/figma-sync.yml +30 -0
- package/ARCHITECTURE_FIX.md +241 -0
- package/LICENSE +21 -0
- package/README.lib.md +103 -0
- package/README.md +177 -0
- package/figma.config.json +9 -0
- package/package.json +67 -0
- package/package.lib.json +49 -0
- package/public/data/figma-variables.json +40026 -0
- package/public/favicon.ico +0 -0
- package/public/index.html +46 -0
- package/public/logo192.png +0 -0
- package/public/logo512.png +0 -0
- package/public/manifest.json +25 -0
- package/public/robots.txt +3 -0
- package/public/styles/tokens.css +1994 -0
- package/scripts/index.js +896 -0
- package/scripts/publish-lib.js +150 -0
- package/scripts/validate.js +94 -0
- package/src/App.css +457 -0
- package/src/App.css.map +1 -0
- package/src/App.js +161 -0
- package/src/App.scss +548 -0
- package/src/App.test.js +8 -0
- package/src/assets/images/.gitkeep +0 -0
- package/src/assets/images/doctors/Avatar-1.png +0 -0
- package/src/assets/images/doctors/Avatar-10.png +0 -0
- package/src/assets/images/doctors/Avatar-11.png +0 -0
- package/src/assets/images/doctors/Avatar-12.png +0 -0
- package/src/assets/images/doctors/Avatar-13.png +0 -0
- package/src/assets/images/doctors/Avatar-14.png +0 -0
- package/src/assets/images/doctors/Avatar-15.png +0 -0
- package/src/assets/images/doctors/Avatar-16.png +0 -0
- package/src/assets/images/doctors/Avatar-17.png +0 -0
- package/src/assets/images/doctors/Avatar-18.png +0 -0
- package/src/assets/images/doctors/Avatar-19.png +0 -0
- package/src/assets/images/doctors/Avatar-2.png +0 -0
- package/src/assets/images/doctors/Avatar-20.png +0 -0
- package/src/assets/images/doctors/Avatar-21.png +0 -0
- package/src/assets/images/doctors/Avatar-3.png +0 -0
- package/src/assets/images/doctors/Avatar-4.png +0 -0
- package/src/assets/images/doctors/Avatar-5.png +0 -0
- package/src/assets/images/doctors/Avatar-6.png +0 -0
- package/src/assets/images/doctors/Avatar-7.png +0 -0
- package/src/assets/images/doctors/Avatar-8.png +0 -0
- package/src/assets/images/doctors/Avatar-9.png +0 -0
- package/src/assets/images/doctors/Avatar.png +0 -0
- package/src/assets/images/doctors/index.js +141 -0
- package/src/data/figma-variables.json +90305 -0
- package/src/index.js +20 -0
- package/src/index.scss +10 -0
- package/src/pages/AccordionDemo.jsx +206 -0
- package/src/pages/AccordionDemo.scss +34 -0
- package/src/pages/ActionMenuDemo.jsx +957 -0
- package/src/pages/ActionMenuDemo.scss +34 -0
- package/src/pages/AvatarDemo.jsx +328 -0
- package/src/pages/AvatarDemo.scss +40 -0
- package/src/pages/BadgeDemo.jsx +254 -0
- package/src/pages/BadgeDemo.scss +40 -0
- package/src/pages/BorderRadiusDemo.jsx +112 -0
- package/src/pages/BorderRadiusDemo.scss +50 -0
- package/src/pages/BrandingDemo.jsx +117 -0
- package/src/pages/BreadcrumbDemo.jsx +172 -0
- package/src/pages/ButtonDemo.jsx +708 -0
- package/src/pages/ButtonDemo.scss +34 -0
- package/src/pages/CheckboxDemo.jsx +194 -0
- package/src/pages/ChipDemo.jsx +359 -0
- package/src/pages/ChipDemo.scss +40 -0
- package/src/pages/ColorsDemo.jsx +566 -0
- package/src/pages/ColorsDemo.scss +243 -0
- package/src/pages/ComponentsUsage.jsx +401 -0
- package/src/pages/DatepickerDemo.jsx +223 -0
- package/src/pages/DividerDemo.jsx +337 -0
- package/src/pages/DotStatusDemo.jsx +223 -0
- package/src/pages/DropdownDemo.jsx +229 -0
- package/src/pages/FieldDemo.jsx +253 -0
- package/src/pages/FigmaVariablesDemo.jsx +426 -0
- package/src/pages/FigmaVariablesDemo.scss +316 -0
- package/src/pages/FileUploadDemo.jsx +186 -0
- package/src/pages/FlexDemo.jsx +144 -0
- package/src/pages/FlexDemo.scss +119 -0
- package/src/pages/FontInstallation.jsx +252 -0
- package/src/pages/FontInstallation.scss +40 -0
- package/src/pages/Home.jsx +3156 -0
- package/src/pages/IconDemo.jsx +1680 -0
- package/src/pages/ImageAspectDemo.jsx +152 -0
- package/src/pages/InputDemo.jsx +245 -0
- package/src/pages/Installation.jsx +257 -0
- package/src/pages/Installation.scss +40 -0
- package/src/pages/KeyDemo.jsx +184 -0
- package/src/pages/MenuDemo.jsx +139 -0
- package/src/pages/MicroCalendarDemo.jsx +165 -0
- package/src/pages/PaginationDemo.jsx +176 -0
- package/src/pages/PillToggleDemo.jsx +212 -0
- package/src/pages/ProgressCircleDemo.jsx +206 -0
- package/src/pages/ProgressIndicatorDemo.jsx +227 -0
- package/src/pages/RadioDemo.jsx +282 -0
- package/src/pages/ShadowsDemo.jsx +118 -0
- package/src/pages/ShadowsDemo.scss +93 -0
- package/src/pages/SliderDemo.jsx +226 -0
- package/src/pages/SpacingDemo.jsx +160 -0
- package/src/pages/SpacingDemo.scss +107 -0
- package/src/pages/StatusDemo.jsx +196 -0
- package/src/pages/StepsDemo.jsx +308 -0
- package/src/pages/TableDemo.jsx +376 -0
- package/src/pages/TabsDemo.jsx +221 -0
- package/src/pages/ToastDemo.jsx +195 -0
- package/src/pages/ToggleDemo.jsx +187 -0
- package/src/pages/TokensDemo.jsx +637 -0
- package/src/pages/TokensDemo.scss +270 -0
- package/src/pages/TokensUsage.jsx +220 -0
- package/src/pages/TooltipDemo.jsx +170 -0
- package/src/pages/TypographyDemo.jsx +229 -0
- package/src/pages/TypographyDemo.scss +105 -0
- package/src/pages/UtilitiesDemo.jsx +381 -0
- package/src/pages/UtilitiesDemo.scss +214 -0
- package/src/reportWebVitals.js +13 -0
- package/src/setupTests.js +5 -0
- package/src/styles/_typography.scss +932 -0
- package/src/styles/_utilities.scss +3635 -0
- package/src/styles/_variables.scss +887 -0
- package/src/styles/prism-custom.css +206 -0
- package/src/styles/prism-custom.css.map +1 -0
- package/src/styles/prism-custom.scss +205 -0
- package/src/styles/tokens.css +4416 -0
- package/src/styles/tokens.css.map +1 -0
- package/src/styles/tokens.scss +1456 -0
- package/src/ui/Accordion/Accordion.jsx +70 -0
- package/src/ui/Accordion/Accordion.scss +82 -0
- package/src/ui/Accordion/index.js +1 -0
- package/src/ui/ActionMenu/ActionMenu.jsx +383 -0
- package/src/ui/ActionMenu/ActionMenu.scss +198 -0
- package/src/ui/ActionMenu/index.js +1 -0
- package/src/ui/Avatar/Avatar.jsx +49 -0
- package/src/ui/Avatar/Avatar.scss +82 -0
- package/src/ui/Avatar/index.js +1 -0
- package/src/ui/Badge/Badge.jsx +64 -0
- package/src/ui/Badge/Badge.scss +84 -0
- package/src/ui/Badge/index.js +1 -0
- package/src/ui/Branding/Branding.jsx +65 -0
- package/src/ui/Branding/Branding.scss +116 -0
- package/src/ui/Branding/index.js +1 -0
- package/src/ui/Breadcrumb/Breadcrumb.jsx +162 -0
- package/src/ui/Breadcrumb/Breadcrumb.scss +46 -0
- package/src/ui/Breadcrumb/index.js +2 -0
- package/src/ui/Button/Button.figma.tsx +49 -0
- package/src/ui/Button/Button.jsx +135 -0
- package/src/ui/Button/Button.scss +188 -0
- package/src/ui/Button/index.js +1 -0
- package/src/ui/Card/Card.jsx +25 -0
- package/src/ui/Card/Card.scss +47 -0
- package/src/ui/Card/index.js +1 -0
- package/src/ui/Checkbox/Checkbox.jsx +70 -0
- package/src/ui/Checkbox/Checkbox.scss +96 -0
- package/src/ui/Checkbox/index.js +1 -0
- package/src/ui/Chip/Chip.jsx +104 -0
- package/src/ui/Chip/Chip.scss +118 -0
- package/src/ui/Chip/index.js +1 -0
- package/src/ui/CopyButton/CopyButton.jsx +102 -0
- package/src/ui/CopyButton/CopyButton.scss +56 -0
- package/src/ui/CopyButton/index.js +1 -0
- package/src/ui/Datepicker/Datepicker.jsx +326 -0
- package/src/ui/Datepicker/Datepicker.scss +187 -0
- package/src/ui/Datepicker/index.js +2 -0
- package/src/ui/Divider/Divider.jsx +89 -0
- package/src/ui/Divider/Divider.scss +112 -0
- package/src/ui/Divider/index.js +1 -0
- package/src/ui/DotStatus/DotStatus.jsx +64 -0
- package/src/ui/DotStatus/DotStatus.scss +87 -0
- package/src/ui/DotStatus/index.js +1 -0
- package/src/ui/Dropdown/Dropdown.jsx +200 -0
- package/src/ui/Dropdown/Dropdown.scss +156 -0
- package/src/ui/Dropdown/index.js +1 -0
- package/src/ui/Field/Field.jsx +89 -0
- package/src/ui/Field/Field.scss +119 -0
- package/src/ui/Field/index.js +1 -0
- package/src/ui/FileUpload/FileUpload.figma.tsx +28 -0
- package/src/ui/FileUpload/FileUpload.jsx +153 -0
- package/src/ui/FileUpload/FileUpload.scss +78 -0
- package/src/ui/FileUpload/index.js +2 -0
- package/src/ui/Flex/Flex.jsx +42 -0
- package/src/ui/Flex/Flex.scss +119 -0
- package/src/ui/Flex/index.js +1 -0
- package/src/ui/Icon/Icon.figma.tsx +22 -0
- package/src/ui/Icon/Icon.jsx +47 -0
- package/src/ui/Icon/index.js +1 -0
- package/src/ui/ImageAspect/ImageAspect.jsx +56 -0
- package/src/ui/ImageAspect/ImageAspect.scss +62 -0
- package/src/ui/ImageAspect/index.js +1 -0
- package/src/ui/Input/Input.figma.tsx +35 -0
- package/src/ui/Input/Input.jsx +68 -0
- package/src/ui/Input/Input.scss +64 -0
- package/src/ui/Input/index.js +2 -0
- package/src/ui/Key/Key.jsx +37 -0
- package/src/ui/Key/Key.scss +34 -0
- package/src/ui/Key/index.js +1 -0
- package/src/ui/Menu/Menu.jsx +389 -0
- package/src/ui/Menu/Menu.scss +382 -0
- package/src/ui/Menu/index.js +1 -0
- package/src/ui/MicroCalendar/MicroCalendar.jsx +392 -0
- package/src/ui/MicroCalendar/MicroCalendar.scss +277 -0
- package/src/ui/MicroCalendar/index.js +1 -0
- package/src/ui/Pagination/Pagination.jsx +237 -0
- package/src/ui/Pagination/Pagination.scss +182 -0
- package/src/ui/Pagination/index.js +1 -0
- package/src/ui/PillToggle/PillToggle.jsx +56 -0
- package/src/ui/PillToggle/PillToggle.scss +84 -0
- package/src/ui/PillToggle/index.js +1 -0
- package/src/ui/Playground/Playground.jsx +524 -0
- package/src/ui/Playground/Playground.scss +310 -0
- package/src/ui/Playground/index.js +2 -0
- package/src/ui/ProgressCircle/ProgressCircle.jsx +147 -0
- package/src/ui/ProgressCircle/ProgressCircle.scss +143 -0
- package/src/ui/ProgressCircle/index.js +1 -0
- package/src/ui/ProgressIndicator/ProgressIndicator.jsx +92 -0
- package/src/ui/ProgressIndicator/ProgressIndicator.scss +133 -0
- package/src/ui/ProgressIndicator/index.js +1 -0
- package/src/ui/Radio/Radio.jsx +57 -0
- package/src/ui/Radio/Radio.scss +84 -0
- package/src/ui/Radio/index.js +1 -0
- package/src/ui/Slider/Slider.jsx +283 -0
- package/src/ui/Slider/Slider.scss +156 -0
- package/src/ui/Slider/index.js +1 -0
- package/src/ui/Status/Status.jsx +66 -0
- package/src/ui/Status/Status.scss +90 -0
- package/src/ui/Status/index.js +1 -0
- package/src/ui/Steps/Steps.jsx +201 -0
- package/src/ui/Steps/Steps.scss +240 -0
- package/src/ui/Steps/index.js +1 -0
- package/src/ui/Table/Table.jsx +143 -0
- package/src/ui/Table/Table.scss +90 -0
- package/src/ui/Table/index.js +1 -0
- package/src/ui/Tabs/TabItem.jsx +86 -0
- package/src/ui/Tabs/Tabs.figma.tsx +30 -0
- package/src/ui/Tabs/Tabs.jsx +318 -0
- package/src/ui/Tabs/Tabs.scss +164 -0
- package/src/ui/Tabs/Untitled +1 -0
- package/src/ui/Tabs/index.js +3 -0
- package/src/ui/Tag/Tag.figma.tsx +29 -0
- package/src/ui/Tag/Tag.jsx +93 -0
- package/src/ui/Tag/Tag.scss +229 -0
- package/src/ui/Tag/index.js +2 -0
- package/src/ui/Textarea/Textarea.figma.tsx +35 -0
- package/src/ui/Textarea/Textarea.jsx +68 -0
- package/src/ui/Textarea/Textarea.scss +69 -0
- package/src/ui/Textarea/index.js +2 -0
- package/src/ui/Toast/Toast.jsx +75 -0
- package/src/ui/Toast/Toast.scss +132 -0
- package/src/ui/Toast/index.js +2 -0
- package/src/ui/Toggle/Toggle.jsx +73 -0
- package/src/ui/Toggle/Toggle.scss +139 -0
- package/src/ui/Toggle/index.js +1 -0
- package/src/ui/Tooltip/Tooltip.figma.tsx +24 -0
- package/src/ui/Tooltip/Tooltip.jsx +123 -0
- package/src/ui/Tooltip/Tooltip.scss +80 -0
- package/src/ui/Tooltip/index.js +2 -0
- package/src/ui/index.js +63 -0
- package/src/utils/formatDate.js +27 -0
- package/src/utils/headerVariants.js +69 -0
- package/vite.config.lib.js +55 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Link } from "react-router-dom";
|
|
3
|
+
import Toast from "../ui/Toast/Toast";
|
|
4
|
+
import Flex from "../ui/Flex/Flex";
|
|
5
|
+
import Button from "../ui/Button/Button";
|
|
6
|
+
import Breadcrumb from "../ui/Breadcrumb/Breadcrumb";
|
|
7
|
+
import Divider from "../ui/Divider/Divider";
|
|
8
|
+
import { formatLastUpdated } from "../utils/formatDate";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Toast Component Demo & Documentation
|
|
12
|
+
*
|
|
13
|
+
* This page demonstrates the Toast component and its various configurations.
|
|
14
|
+
*/
|
|
15
|
+
export default function ToastDemo() {
|
|
16
|
+
const [toasts, setToasts] = useState([]);
|
|
17
|
+
|
|
18
|
+
const addToast = (variant, title, message) => {
|
|
19
|
+
const id = Date.now();
|
|
20
|
+
const newToast = { id, variant, title, message };
|
|
21
|
+
setToasts([...toasts, newToast]);
|
|
22
|
+
|
|
23
|
+
// Auto-remove after 5 seconds
|
|
24
|
+
setTimeout(() => {
|
|
25
|
+
removeToast(id);
|
|
26
|
+
}, 5000);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const removeToast = (id) => {
|
|
30
|
+
setToasts(toasts.filter((toast) => toast.id !== id));
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const clearAll = () => {
|
|
34
|
+
setToasts([]);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<section className="page">
|
|
39
|
+
<header className="page__header">
|
|
40
|
+
<div className="page__header-container">
|
|
41
|
+
<Breadcrumb />
|
|
42
|
+
<div className="page__header-info">
|
|
43
|
+
<div className="page__header-content">
|
|
44
|
+
<h1 className="page__header-title">Toast</h1>
|
|
45
|
+
<p className="page__header-description">
|
|
46
|
+
Toast notifications provide feedback to users about actions or
|
|
47
|
+
system status. They appear temporarily and can be dismissed
|
|
48
|
+
manually or automatically.
|
|
49
|
+
</p>
|
|
50
|
+
</div>
|
|
51
|
+
<div className="page__header-metadata">
|
|
52
|
+
<div className="page__metadata-row">
|
|
53
|
+
<p className="page__metadata-label">Author</p>
|
|
54
|
+
<a
|
|
55
|
+
href="https://chgit.slack.com/team/U06V9C0K06S"
|
|
56
|
+
className="page__metadata-link"
|
|
57
|
+
target="_blank"
|
|
58
|
+
rel="noopener noreferrer"
|
|
59
|
+
>
|
|
60
|
+
@Michael-Stevens
|
|
61
|
+
</a>
|
|
62
|
+
</div>
|
|
63
|
+
<div className="page__metadata-row">
|
|
64
|
+
<p className="page__metadata-label">Last updated</p>
|
|
65
|
+
<p className="page__metadata-value">{formatLastUpdated()}</p>
|
|
66
|
+
</div>
|
|
67
|
+
<div className="page__metadata-row">
|
|
68
|
+
<p className="page__metadata-label">Version</p>
|
|
69
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
70
|
+
<p className="page__metadata-value">1.0.0</p>
|
|
71
|
+
<span className="page__version-badge">BETA</span>
|
|
72
|
+
</Flex>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</header>
|
|
78
|
+
|
|
79
|
+
<main className="page__content">
|
|
80
|
+
<div className="page__examples-section">
|
|
81
|
+
<div className="demo-group">
|
|
82
|
+
<h2 className="demo-group__heading">Toast Variants</h2>
|
|
83
|
+
<p className="demo-group__description">
|
|
84
|
+
Toast notifications support four variants: success, error, warning, and info. Each variant has a distinct color and icon.
|
|
85
|
+
</p>
|
|
86
|
+
<Flex direction="column" gap="16" className="demo-content">
|
|
87
|
+
<Button
|
|
88
|
+
appearance="primary"
|
|
89
|
+
onClick={() => addToast("success", "Success", "Operation completed successfully")}
|
|
90
|
+
>
|
|
91
|
+
Show Success Toast
|
|
92
|
+
</Button>
|
|
93
|
+
<Button
|
|
94
|
+
appearance="primary"
|
|
95
|
+
onClick={() => addToast("error", "Error", "Something went wrong")}
|
|
96
|
+
>
|
|
97
|
+
Show Error Toast
|
|
98
|
+
</Button>
|
|
99
|
+
<Button
|
|
100
|
+
appearance="primary"
|
|
101
|
+
onClick={() => addToast("warning", "Warning", "Please review your input")}
|
|
102
|
+
>
|
|
103
|
+
Show Warning Toast
|
|
104
|
+
</Button>
|
|
105
|
+
<Button
|
|
106
|
+
appearance="primary"
|
|
107
|
+
onClick={() => addToast("info", "Info", "Here's some helpful information")}
|
|
108
|
+
>
|
|
109
|
+
Show Info Toast
|
|
110
|
+
</Button>
|
|
111
|
+
</Flex>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<div className="demo-group">
|
|
115
|
+
<h2 className="demo-group__heading">With Title</h2>
|
|
116
|
+
<p className="demo-group__description">
|
|
117
|
+
Toast notifications can include both a title and a message for more detailed information.
|
|
118
|
+
</p>
|
|
119
|
+
<div className="demo-content">
|
|
120
|
+
<Button
|
|
121
|
+
appearance="primary"
|
|
122
|
+
onClick={() => addToast("success", "File Uploaded", "Your file has been successfully uploaded to the server.")}
|
|
123
|
+
>
|
|
124
|
+
Show Toast with Title
|
|
125
|
+
</Button>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
<div className="demo-group">
|
|
130
|
+
<h2 className="demo-group__heading">Multiple Toasts</h2>
|
|
131
|
+
<p className="demo-group__description">
|
|
132
|
+
Multiple toast notifications can be displayed simultaneously, stacking vertically.
|
|
133
|
+
</p>
|
|
134
|
+
<div className="demo-content">
|
|
135
|
+
<Flex direction="row" gap="8">
|
|
136
|
+
<Button
|
|
137
|
+
appearance="primary"
|
|
138
|
+
onClick={() => {
|
|
139
|
+
addToast("success", "Success", "First notification");
|
|
140
|
+
setTimeout(() => addToast("info", "Info", "Second notification"), 300);
|
|
141
|
+
setTimeout(() => addToast("warning", "Warning", "Third notification"), 600);
|
|
142
|
+
}}
|
|
143
|
+
>
|
|
144
|
+
Show Multiple Toasts
|
|
145
|
+
</Button>
|
|
146
|
+
<Button
|
|
147
|
+
appearance="outline"
|
|
148
|
+
onClick={clearAll}
|
|
149
|
+
>
|
|
150
|
+
Clear All
|
|
151
|
+
</Button>
|
|
152
|
+
</Flex>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
{/* Toast Container */}
|
|
158
|
+
<div style={{ position: 'fixed', top: '20px', right: '20px', zIndex: 9999, display: 'flex', flexDirection: 'column', gap: '8px' }}>
|
|
159
|
+
{toasts.map((toast) => (
|
|
160
|
+
<Toast
|
|
161
|
+
key={toast.id}
|
|
162
|
+
variant={toast.variant}
|
|
163
|
+
title={toast.title}
|
|
164
|
+
message={toast.message}
|
|
165
|
+
onClose={() => removeToast(toast.id)}
|
|
166
|
+
/>
|
|
167
|
+
))}
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
<Divider variant="solid" />
|
|
171
|
+
|
|
172
|
+
<div className="page__tabs-content-container">
|
|
173
|
+
<div className="demo-group">
|
|
174
|
+
<div className="page__navigation">
|
|
175
|
+
<Link
|
|
176
|
+
to="/tabs"
|
|
177
|
+
className="page__nav-link page__nav-link--prev"
|
|
178
|
+
>
|
|
179
|
+
<span className="page__nav-label">Previous</span>
|
|
180
|
+
<span className="page__nav-title">Tabs</span>
|
|
181
|
+
</Link>
|
|
182
|
+
<Link
|
|
183
|
+
to="/toggle"
|
|
184
|
+
className="page__nav-link page__nav-link--next"
|
|
185
|
+
>
|
|
186
|
+
<span className="page__nav-label">Next</span>
|
|
187
|
+
<span className="page__nav-title">Toggle</span>
|
|
188
|
+
</Link>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
</main>
|
|
193
|
+
</section>
|
|
194
|
+
);
|
|
195
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Link } from "react-router-dom";
|
|
3
|
+
import Toggle from "../ui/Toggle/Toggle";
|
|
4
|
+
import Flex from "../ui/Flex/Flex";
|
|
5
|
+
import Breadcrumb from "../ui/Breadcrumb/Breadcrumb";
|
|
6
|
+
import Divider from "../ui/Divider/Divider";
|
|
7
|
+
import { formatLastUpdated } from "../utils/formatDate";
|
|
8
|
+
|
|
9
|
+
export default function ToggleDemo() {
|
|
10
|
+
const [toggle1, setToggle1] = useState(false);
|
|
11
|
+
const [toggle2, setToggle2] = useState(true);
|
|
12
|
+
const [toggle3, setToggle3] = useState(false);
|
|
13
|
+
const [toggle4, setToggle4] = useState(true);
|
|
14
|
+
const [toggle5, setToggle5] = useState(false);
|
|
15
|
+
const [toggle6, setToggle6] = useState(true);
|
|
16
|
+
const [toggle7, setToggle7] = useState(false);
|
|
17
|
+
const [toggle8, setToggle8] = useState(true);
|
|
18
|
+
const [toggle9, setToggle9] = useState(false);
|
|
19
|
+
const [toggle10, setToggle10] = useState(true);
|
|
20
|
+
const [toggle11, setToggle11] = useState(false);
|
|
21
|
+
const [toggle12, setToggle12] = useState(true);
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<section className="page">
|
|
25
|
+
<header className="page__header">
|
|
26
|
+
<div className="page__header-container">
|
|
27
|
+
<Breadcrumb />
|
|
28
|
+
<div className="page__header-info">
|
|
29
|
+
<div className="page__header-content">
|
|
30
|
+
<h1 className="page__header-title">Toggle</h1>
|
|
31
|
+
<p className="page__header-description">
|
|
32
|
+
Toggle switches allow users to switch between two states: on and
|
|
33
|
+
off. Toggles come in different sizes and can be displayed with or
|
|
34
|
+
without borders.
|
|
35
|
+
</p>
|
|
36
|
+
</div>
|
|
37
|
+
<div className="page__header-metadata">
|
|
38
|
+
<div className="page__metadata-row">
|
|
39
|
+
<p className="page__metadata-label">Author</p>
|
|
40
|
+
<a
|
|
41
|
+
href="https://chgit.slack.com/team/U06V9C0K06S"
|
|
42
|
+
className="page__metadata-link"
|
|
43
|
+
target="_blank"
|
|
44
|
+
rel="noopener noreferrer"
|
|
45
|
+
>
|
|
46
|
+
@Michael-Stevens
|
|
47
|
+
</a>
|
|
48
|
+
</div>
|
|
49
|
+
<div className="page__metadata-row">
|
|
50
|
+
<p className="page__metadata-label">Last updated</p>
|
|
51
|
+
<p className="page__metadata-value">{formatLastUpdated()}</p>
|
|
52
|
+
</div>
|
|
53
|
+
<div className="page__metadata-row">
|
|
54
|
+
<p className="page__metadata-label">Version</p>
|
|
55
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
56
|
+
<p className="page__metadata-value">1.0.0</p>
|
|
57
|
+
<span className="page__version-badge">BETA</span>
|
|
58
|
+
</Flex>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</header>
|
|
64
|
+
|
|
65
|
+
<main className="page__content">
|
|
66
|
+
<div className="page__examples-section">
|
|
67
|
+
<div className="demo-group">
|
|
68
|
+
<h2 className="demo-group__heading">Basic Usage</h2>
|
|
69
|
+
<p className="demo-group__description">
|
|
70
|
+
Toggle switches allow users to switch between two states: on and off. The default size is large.
|
|
71
|
+
</p>
|
|
72
|
+
<Flex direction="row" gap="16" wrap={true} alignItems="center" className="demo-content">
|
|
73
|
+
<Flex direction="column" gap="8" alignItems="center">
|
|
74
|
+
<Toggle checked={toggle1} onChange={setToggle1} size="large" />
|
|
75
|
+
<span style={{ fontSize: '12px', color: 'var(--uds-text-secondary)' }}>Off</span>
|
|
76
|
+
</Flex>
|
|
77
|
+
<Flex direction="column" gap="8" alignItems="center">
|
|
78
|
+
<Toggle checked={toggle2} onChange={setToggle2} size="large" />
|
|
79
|
+
<span style={{ fontSize: '12px', color: 'var(--uds-text-secondary)' }}>On</span>
|
|
80
|
+
</Flex>
|
|
81
|
+
</Flex>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<div className="demo-group">
|
|
85
|
+
<h2 className="demo-group__heading">Sizes</h2>
|
|
86
|
+
<p className="demo-group__description">
|
|
87
|
+
Toggles are available in two sizes: large (default) and small.
|
|
88
|
+
</p>
|
|
89
|
+
<Flex direction="row" gap="24" wrap={true} alignItems="center" className="demo-content">
|
|
90
|
+
<Flex direction="column" gap="8" alignItems="center">
|
|
91
|
+
<Toggle checked={toggle3} onChange={setToggle3} size="small" />
|
|
92
|
+
<span style={{ fontSize: '12px', color: 'var(--uds-text-secondary)' }}>Small</span>
|
|
93
|
+
</Flex>
|
|
94
|
+
<Flex direction="column" gap="8" alignItems="center">
|
|
95
|
+
<Toggle checked={toggle4} onChange={setToggle4} size="large" />
|
|
96
|
+
<span style={{ fontSize: '12px', color: 'var(--uds-text-secondary)' }}>Large</span>
|
|
97
|
+
</Flex>
|
|
98
|
+
</Flex>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<div className="demo-group">
|
|
102
|
+
<h2 className="demo-group__heading">With Border</h2>
|
|
103
|
+
<p className="demo-group__description">
|
|
104
|
+
Toggles can display with a border for increased visibility or stylistic variation.
|
|
105
|
+
</p>
|
|
106
|
+
<Flex direction="row" gap="16" wrap={true} alignItems="center" className="demo-content">
|
|
107
|
+
<Toggle checked={toggle5} onChange={setToggle5} size="large" bordered />
|
|
108
|
+
<Toggle checked={toggle6} onChange={setToggle6} size="small" bordered />
|
|
109
|
+
</Flex>
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
<div className="demo-group">
|
|
113
|
+
<h2 className="demo-group__heading">Indeterminate State</h2>
|
|
114
|
+
<p className="demo-group__description">
|
|
115
|
+
Toggles can display an indeterminate state, typically used when a group of toggles has mixed states.
|
|
116
|
+
</p>
|
|
117
|
+
<Flex direction="row" gap="16" wrap={true} alignItems="center" className="demo-content">
|
|
118
|
+
<Toggle checked={false} state="indeterminate" size="large" />
|
|
119
|
+
<Toggle checked={false} state="indeterminate" size="small" />
|
|
120
|
+
</Flex>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<div className="demo-group">
|
|
124
|
+
<h2 className="demo-group__heading">Disabled State</h2>
|
|
125
|
+
<p className="demo-group__description">
|
|
126
|
+
Disabled toggles prevent user interaction and are typically used when the control is not applicable.
|
|
127
|
+
</p>
|
|
128
|
+
<Flex direction="row" gap="16" wrap={true} alignItems="center" className="demo-content">
|
|
129
|
+
<Toggle checked={false} disabled size="large" />
|
|
130
|
+
<Toggle checked={true} disabled size="large" />
|
|
131
|
+
<Toggle checked={false} disabled size="small" />
|
|
132
|
+
<Toggle checked={true} disabled size="small" />
|
|
133
|
+
</Flex>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<div className="demo-group">
|
|
137
|
+
<h2 className="demo-group__heading">Usage Examples</h2>
|
|
138
|
+
<p className="demo-group__description">
|
|
139
|
+
Common applications for toggle switches in real-world scenarios.
|
|
140
|
+
</p>
|
|
141
|
+
<Flex direction="column" gap="16" className="demo-content">
|
|
142
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
143
|
+
<Toggle checked={toggle7} onChange={setToggle7} size="large" />
|
|
144
|
+
<span>Enable notifications</span>
|
|
145
|
+
</Flex>
|
|
146
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
147
|
+
<Toggle checked={toggle8} onChange={setToggle8} size="large" />
|
|
148
|
+
<span>Dark mode</span>
|
|
149
|
+
</Flex>
|
|
150
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
151
|
+
<Toggle checked={toggle9} onChange={setToggle9} size="large" />
|
|
152
|
+
<span>Auto-save</span>
|
|
153
|
+
</Flex>
|
|
154
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
155
|
+
<Toggle checked={toggle10} onChange={setToggle10} size="large" />
|
|
156
|
+
<span>Public profile</span>
|
|
157
|
+
</Flex>
|
|
158
|
+
</Flex>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
|
|
162
|
+
<Divider variant="solid" />
|
|
163
|
+
|
|
164
|
+
<div className="page__tabs-content-container">
|
|
165
|
+
<div className="demo-group">
|
|
166
|
+
<div className="page__navigation">
|
|
167
|
+
<Link
|
|
168
|
+
to="/toast"
|
|
169
|
+
className="page__nav-link page__nav-link--prev"
|
|
170
|
+
>
|
|
171
|
+
<span className="page__nav-label">Previous</span>
|
|
172
|
+
<span className="page__nav-title">Toast</span>
|
|
173
|
+
</Link>
|
|
174
|
+
<Link
|
|
175
|
+
to="/tooltip"
|
|
176
|
+
className="page__nav-link page__nav-link--next"
|
|
177
|
+
>
|
|
178
|
+
<span className="page__nav-label">Next</span>
|
|
179
|
+
<span className="page__nav-title">Tooltip</span>
|
|
180
|
+
</Link>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
</main>
|
|
185
|
+
</section>
|
|
186
|
+
);
|
|
187
|
+
}
|