@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.
Files changed (260) hide show
  1. package/.github/workflows/figma-sync.yml +30 -0
  2. package/ARCHITECTURE_FIX.md +241 -0
  3. package/LICENSE +21 -0
  4. package/README.lib.md +103 -0
  5. package/README.md +177 -0
  6. package/figma.config.json +9 -0
  7. package/package.json +67 -0
  8. package/package.lib.json +49 -0
  9. package/public/data/figma-variables.json +40026 -0
  10. package/public/favicon.ico +0 -0
  11. package/public/index.html +46 -0
  12. package/public/logo192.png +0 -0
  13. package/public/logo512.png +0 -0
  14. package/public/manifest.json +25 -0
  15. package/public/robots.txt +3 -0
  16. package/public/styles/tokens.css +1994 -0
  17. package/scripts/index.js +896 -0
  18. package/scripts/publish-lib.js +150 -0
  19. package/scripts/validate.js +94 -0
  20. package/src/App.css +457 -0
  21. package/src/App.css.map +1 -0
  22. package/src/App.js +161 -0
  23. package/src/App.scss +548 -0
  24. package/src/App.test.js +8 -0
  25. package/src/assets/images/.gitkeep +0 -0
  26. package/src/assets/images/doctors/Avatar-1.png +0 -0
  27. package/src/assets/images/doctors/Avatar-10.png +0 -0
  28. package/src/assets/images/doctors/Avatar-11.png +0 -0
  29. package/src/assets/images/doctors/Avatar-12.png +0 -0
  30. package/src/assets/images/doctors/Avatar-13.png +0 -0
  31. package/src/assets/images/doctors/Avatar-14.png +0 -0
  32. package/src/assets/images/doctors/Avatar-15.png +0 -0
  33. package/src/assets/images/doctors/Avatar-16.png +0 -0
  34. package/src/assets/images/doctors/Avatar-17.png +0 -0
  35. package/src/assets/images/doctors/Avatar-18.png +0 -0
  36. package/src/assets/images/doctors/Avatar-19.png +0 -0
  37. package/src/assets/images/doctors/Avatar-2.png +0 -0
  38. package/src/assets/images/doctors/Avatar-20.png +0 -0
  39. package/src/assets/images/doctors/Avatar-21.png +0 -0
  40. package/src/assets/images/doctors/Avatar-3.png +0 -0
  41. package/src/assets/images/doctors/Avatar-4.png +0 -0
  42. package/src/assets/images/doctors/Avatar-5.png +0 -0
  43. package/src/assets/images/doctors/Avatar-6.png +0 -0
  44. package/src/assets/images/doctors/Avatar-7.png +0 -0
  45. package/src/assets/images/doctors/Avatar-8.png +0 -0
  46. package/src/assets/images/doctors/Avatar-9.png +0 -0
  47. package/src/assets/images/doctors/Avatar.png +0 -0
  48. package/src/assets/images/doctors/index.js +141 -0
  49. package/src/data/figma-variables.json +90305 -0
  50. package/src/index.js +20 -0
  51. package/src/index.scss +10 -0
  52. package/src/pages/AccordionDemo.jsx +206 -0
  53. package/src/pages/AccordionDemo.scss +34 -0
  54. package/src/pages/ActionMenuDemo.jsx +957 -0
  55. package/src/pages/ActionMenuDemo.scss +34 -0
  56. package/src/pages/AvatarDemo.jsx +328 -0
  57. package/src/pages/AvatarDemo.scss +40 -0
  58. package/src/pages/BadgeDemo.jsx +254 -0
  59. package/src/pages/BadgeDemo.scss +40 -0
  60. package/src/pages/BorderRadiusDemo.jsx +112 -0
  61. package/src/pages/BorderRadiusDemo.scss +50 -0
  62. package/src/pages/BrandingDemo.jsx +117 -0
  63. package/src/pages/BreadcrumbDemo.jsx +172 -0
  64. package/src/pages/ButtonDemo.jsx +708 -0
  65. package/src/pages/ButtonDemo.scss +34 -0
  66. package/src/pages/CheckboxDemo.jsx +194 -0
  67. package/src/pages/ChipDemo.jsx +359 -0
  68. package/src/pages/ChipDemo.scss +40 -0
  69. package/src/pages/ColorsDemo.jsx +566 -0
  70. package/src/pages/ColorsDemo.scss +243 -0
  71. package/src/pages/ComponentsUsage.jsx +401 -0
  72. package/src/pages/DatepickerDemo.jsx +223 -0
  73. package/src/pages/DividerDemo.jsx +337 -0
  74. package/src/pages/DotStatusDemo.jsx +223 -0
  75. package/src/pages/DropdownDemo.jsx +229 -0
  76. package/src/pages/FieldDemo.jsx +253 -0
  77. package/src/pages/FigmaVariablesDemo.jsx +426 -0
  78. package/src/pages/FigmaVariablesDemo.scss +316 -0
  79. package/src/pages/FileUploadDemo.jsx +186 -0
  80. package/src/pages/FlexDemo.jsx +144 -0
  81. package/src/pages/FlexDemo.scss +119 -0
  82. package/src/pages/FontInstallation.jsx +252 -0
  83. package/src/pages/FontInstallation.scss +40 -0
  84. package/src/pages/Home.jsx +3156 -0
  85. package/src/pages/IconDemo.jsx +1680 -0
  86. package/src/pages/ImageAspectDemo.jsx +152 -0
  87. package/src/pages/InputDemo.jsx +245 -0
  88. package/src/pages/Installation.jsx +257 -0
  89. package/src/pages/Installation.scss +40 -0
  90. package/src/pages/KeyDemo.jsx +184 -0
  91. package/src/pages/MenuDemo.jsx +139 -0
  92. package/src/pages/MicroCalendarDemo.jsx +165 -0
  93. package/src/pages/PaginationDemo.jsx +176 -0
  94. package/src/pages/PillToggleDemo.jsx +212 -0
  95. package/src/pages/ProgressCircleDemo.jsx +206 -0
  96. package/src/pages/ProgressIndicatorDemo.jsx +227 -0
  97. package/src/pages/RadioDemo.jsx +282 -0
  98. package/src/pages/ShadowsDemo.jsx +118 -0
  99. package/src/pages/ShadowsDemo.scss +93 -0
  100. package/src/pages/SliderDemo.jsx +226 -0
  101. package/src/pages/SpacingDemo.jsx +160 -0
  102. package/src/pages/SpacingDemo.scss +107 -0
  103. package/src/pages/StatusDemo.jsx +196 -0
  104. package/src/pages/StepsDemo.jsx +308 -0
  105. package/src/pages/TableDemo.jsx +376 -0
  106. package/src/pages/TabsDemo.jsx +221 -0
  107. package/src/pages/ToastDemo.jsx +195 -0
  108. package/src/pages/ToggleDemo.jsx +187 -0
  109. package/src/pages/TokensDemo.jsx +637 -0
  110. package/src/pages/TokensDemo.scss +270 -0
  111. package/src/pages/TokensUsage.jsx +220 -0
  112. package/src/pages/TooltipDemo.jsx +170 -0
  113. package/src/pages/TypographyDemo.jsx +229 -0
  114. package/src/pages/TypographyDemo.scss +105 -0
  115. package/src/pages/UtilitiesDemo.jsx +381 -0
  116. package/src/pages/UtilitiesDemo.scss +214 -0
  117. package/src/reportWebVitals.js +13 -0
  118. package/src/setupTests.js +5 -0
  119. package/src/styles/_typography.scss +932 -0
  120. package/src/styles/_utilities.scss +3635 -0
  121. package/src/styles/_variables.scss +887 -0
  122. package/src/styles/prism-custom.css +206 -0
  123. package/src/styles/prism-custom.css.map +1 -0
  124. package/src/styles/prism-custom.scss +205 -0
  125. package/src/styles/tokens.css +4416 -0
  126. package/src/styles/tokens.css.map +1 -0
  127. package/src/styles/tokens.scss +1456 -0
  128. package/src/ui/Accordion/Accordion.jsx +70 -0
  129. package/src/ui/Accordion/Accordion.scss +82 -0
  130. package/src/ui/Accordion/index.js +1 -0
  131. package/src/ui/ActionMenu/ActionMenu.jsx +383 -0
  132. package/src/ui/ActionMenu/ActionMenu.scss +198 -0
  133. package/src/ui/ActionMenu/index.js +1 -0
  134. package/src/ui/Avatar/Avatar.jsx +49 -0
  135. package/src/ui/Avatar/Avatar.scss +82 -0
  136. package/src/ui/Avatar/index.js +1 -0
  137. package/src/ui/Badge/Badge.jsx +64 -0
  138. package/src/ui/Badge/Badge.scss +84 -0
  139. package/src/ui/Badge/index.js +1 -0
  140. package/src/ui/Branding/Branding.jsx +65 -0
  141. package/src/ui/Branding/Branding.scss +116 -0
  142. package/src/ui/Branding/index.js +1 -0
  143. package/src/ui/Breadcrumb/Breadcrumb.jsx +162 -0
  144. package/src/ui/Breadcrumb/Breadcrumb.scss +46 -0
  145. package/src/ui/Breadcrumb/index.js +2 -0
  146. package/src/ui/Button/Button.figma.tsx +49 -0
  147. package/src/ui/Button/Button.jsx +135 -0
  148. package/src/ui/Button/Button.scss +188 -0
  149. package/src/ui/Button/index.js +1 -0
  150. package/src/ui/Card/Card.jsx +25 -0
  151. package/src/ui/Card/Card.scss +47 -0
  152. package/src/ui/Card/index.js +1 -0
  153. package/src/ui/Checkbox/Checkbox.jsx +70 -0
  154. package/src/ui/Checkbox/Checkbox.scss +96 -0
  155. package/src/ui/Checkbox/index.js +1 -0
  156. package/src/ui/Chip/Chip.jsx +104 -0
  157. package/src/ui/Chip/Chip.scss +118 -0
  158. package/src/ui/Chip/index.js +1 -0
  159. package/src/ui/CopyButton/CopyButton.jsx +102 -0
  160. package/src/ui/CopyButton/CopyButton.scss +56 -0
  161. package/src/ui/CopyButton/index.js +1 -0
  162. package/src/ui/Datepicker/Datepicker.jsx +326 -0
  163. package/src/ui/Datepicker/Datepicker.scss +187 -0
  164. package/src/ui/Datepicker/index.js +2 -0
  165. package/src/ui/Divider/Divider.jsx +89 -0
  166. package/src/ui/Divider/Divider.scss +112 -0
  167. package/src/ui/Divider/index.js +1 -0
  168. package/src/ui/DotStatus/DotStatus.jsx +64 -0
  169. package/src/ui/DotStatus/DotStatus.scss +87 -0
  170. package/src/ui/DotStatus/index.js +1 -0
  171. package/src/ui/Dropdown/Dropdown.jsx +200 -0
  172. package/src/ui/Dropdown/Dropdown.scss +156 -0
  173. package/src/ui/Dropdown/index.js +1 -0
  174. package/src/ui/Field/Field.jsx +89 -0
  175. package/src/ui/Field/Field.scss +119 -0
  176. package/src/ui/Field/index.js +1 -0
  177. package/src/ui/FileUpload/FileUpload.figma.tsx +28 -0
  178. package/src/ui/FileUpload/FileUpload.jsx +153 -0
  179. package/src/ui/FileUpload/FileUpload.scss +78 -0
  180. package/src/ui/FileUpload/index.js +2 -0
  181. package/src/ui/Flex/Flex.jsx +42 -0
  182. package/src/ui/Flex/Flex.scss +119 -0
  183. package/src/ui/Flex/index.js +1 -0
  184. package/src/ui/Icon/Icon.figma.tsx +22 -0
  185. package/src/ui/Icon/Icon.jsx +47 -0
  186. package/src/ui/Icon/index.js +1 -0
  187. package/src/ui/ImageAspect/ImageAspect.jsx +56 -0
  188. package/src/ui/ImageAspect/ImageAspect.scss +62 -0
  189. package/src/ui/ImageAspect/index.js +1 -0
  190. package/src/ui/Input/Input.figma.tsx +35 -0
  191. package/src/ui/Input/Input.jsx +68 -0
  192. package/src/ui/Input/Input.scss +64 -0
  193. package/src/ui/Input/index.js +2 -0
  194. package/src/ui/Key/Key.jsx +37 -0
  195. package/src/ui/Key/Key.scss +34 -0
  196. package/src/ui/Key/index.js +1 -0
  197. package/src/ui/Menu/Menu.jsx +389 -0
  198. package/src/ui/Menu/Menu.scss +382 -0
  199. package/src/ui/Menu/index.js +1 -0
  200. package/src/ui/MicroCalendar/MicroCalendar.jsx +392 -0
  201. package/src/ui/MicroCalendar/MicroCalendar.scss +277 -0
  202. package/src/ui/MicroCalendar/index.js +1 -0
  203. package/src/ui/Pagination/Pagination.jsx +237 -0
  204. package/src/ui/Pagination/Pagination.scss +182 -0
  205. package/src/ui/Pagination/index.js +1 -0
  206. package/src/ui/PillToggle/PillToggle.jsx +56 -0
  207. package/src/ui/PillToggle/PillToggle.scss +84 -0
  208. package/src/ui/PillToggle/index.js +1 -0
  209. package/src/ui/Playground/Playground.jsx +524 -0
  210. package/src/ui/Playground/Playground.scss +310 -0
  211. package/src/ui/Playground/index.js +2 -0
  212. package/src/ui/ProgressCircle/ProgressCircle.jsx +147 -0
  213. package/src/ui/ProgressCircle/ProgressCircle.scss +143 -0
  214. package/src/ui/ProgressCircle/index.js +1 -0
  215. package/src/ui/ProgressIndicator/ProgressIndicator.jsx +92 -0
  216. package/src/ui/ProgressIndicator/ProgressIndicator.scss +133 -0
  217. package/src/ui/ProgressIndicator/index.js +1 -0
  218. package/src/ui/Radio/Radio.jsx +57 -0
  219. package/src/ui/Radio/Radio.scss +84 -0
  220. package/src/ui/Radio/index.js +1 -0
  221. package/src/ui/Slider/Slider.jsx +283 -0
  222. package/src/ui/Slider/Slider.scss +156 -0
  223. package/src/ui/Slider/index.js +1 -0
  224. package/src/ui/Status/Status.jsx +66 -0
  225. package/src/ui/Status/Status.scss +90 -0
  226. package/src/ui/Status/index.js +1 -0
  227. package/src/ui/Steps/Steps.jsx +201 -0
  228. package/src/ui/Steps/Steps.scss +240 -0
  229. package/src/ui/Steps/index.js +1 -0
  230. package/src/ui/Table/Table.jsx +143 -0
  231. package/src/ui/Table/Table.scss +90 -0
  232. package/src/ui/Table/index.js +1 -0
  233. package/src/ui/Tabs/TabItem.jsx +86 -0
  234. package/src/ui/Tabs/Tabs.figma.tsx +30 -0
  235. package/src/ui/Tabs/Tabs.jsx +318 -0
  236. package/src/ui/Tabs/Tabs.scss +164 -0
  237. package/src/ui/Tabs/Untitled +1 -0
  238. package/src/ui/Tabs/index.js +3 -0
  239. package/src/ui/Tag/Tag.figma.tsx +29 -0
  240. package/src/ui/Tag/Tag.jsx +93 -0
  241. package/src/ui/Tag/Tag.scss +229 -0
  242. package/src/ui/Tag/index.js +2 -0
  243. package/src/ui/Textarea/Textarea.figma.tsx +35 -0
  244. package/src/ui/Textarea/Textarea.jsx +68 -0
  245. package/src/ui/Textarea/Textarea.scss +69 -0
  246. package/src/ui/Textarea/index.js +2 -0
  247. package/src/ui/Toast/Toast.jsx +75 -0
  248. package/src/ui/Toast/Toast.scss +132 -0
  249. package/src/ui/Toast/index.js +2 -0
  250. package/src/ui/Toggle/Toggle.jsx +73 -0
  251. package/src/ui/Toggle/Toggle.scss +139 -0
  252. package/src/ui/Toggle/index.js +1 -0
  253. package/src/ui/Tooltip/Tooltip.figma.tsx +24 -0
  254. package/src/ui/Tooltip/Tooltip.jsx +123 -0
  255. package/src/ui/Tooltip/Tooltip.scss +80 -0
  256. package/src/ui/Tooltip/index.js +2 -0
  257. package/src/ui/index.js +63 -0
  258. package/src/utils/formatDate.js +27 -0
  259. package/src/utils/headerVariants.js +69 -0
  260. 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
+ }