@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,196 @@
1
+ import React, { useState } from "react";
2
+ import { Link } from "react-router-dom";
3
+ import Status from "../ui/Status/Status";
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
+ /**
10
+ * Status Component Demo & Documentation
11
+ *
12
+ * This page demonstrates the Status component and its various configurations.
13
+ *
14
+ * ## Status Component Props:
15
+ *
16
+ * ### Required Props:
17
+ * - `label` (string): The text content of the status
18
+ *
19
+ * ### Optional Props:
20
+ * - `variant` (string): Color variant for the status dot
21
+ * - Options: 'light-gray', 'red', 'orange', 'yellow', 'light-green', 'green', 'blue', 'dark-blue', 'teal', 'purple', 'pink', 'magenta', 'dark-red', 'dark-gray'
22
+ * - Default: 'blue'
23
+ *
24
+ * - `appearance` (string): Background appearance variant
25
+ * - Options: 'light-gray', 'white'
26
+ * - Default: 'light-gray'
27
+ *
28
+ * - `shape` (string): Shape variant
29
+ * - Options: 'pill' (fully rounded) or 'rounded' (slightly rounded)
30
+ * - Default: 'pill'
31
+ *
32
+ * - `onClick` (function): Click handler function
33
+ *
34
+ * - `disabled` (boolean): Whether the status is disabled
35
+ * - Default: false
36
+ *
37
+ * ## Usage Examples:
38
+ *
39
+ * Basic status:
40
+ * ```jsx
41
+ * <Status label="Active" />
42
+ * ```
43
+ *
44
+ * With different variants:
45
+ * ```jsx
46
+ * <Status label="Success" variant="green" />
47
+ * <Status label="Warning" variant="orange" />
48
+ * <Status label="Error" variant="red" />
49
+ * ```
50
+ *
51
+ * Different shapes and appearances:
52
+ * ```jsx
53
+ * <Status label="Status" shape="pill" appearance="light-gray" />
54
+ * <Status label="Status" shape="rounded" appearance="white" />
55
+ * ```
56
+ */
57
+
58
+ export default function StatusDemo() {
59
+
60
+ return (
61
+ <section className="page">
62
+ <header className="page__header">
63
+ <div className="page__header-container">
64
+ <Breadcrumb />
65
+ <div className="page__header-info">
66
+ <div className="page__header-content">
67
+ <h1 className="page__header-title">Status</h1>
68
+ <p className="page__header-description">
69
+ The Status component displays status indicators with labels, perfect
70
+ for showing system status, task states, or categorical information.
71
+ Features a colored dot indicator and supports multiple color variants,
72
+ shapes, and background appearances.
73
+ </p>
74
+ </div>
75
+ <div className="page__header-metadata">
76
+ <div className="page__metadata-row">
77
+ <p className="page__metadata-label">Author</p>
78
+ <a
79
+ href="https://chgit.slack.com/team/U06V9C0K06S"
80
+ className="page__metadata-link"
81
+ target="_blank"
82
+ rel="noopener noreferrer"
83
+ >
84
+ @Michael-Stevens
85
+ </a>
86
+ </div>
87
+ <div className="page__metadata-row">
88
+ <p className="page__metadata-label">Last updated</p>
89
+ <p className="page__metadata-value">{formatLastUpdated()}</p>
90
+ </div>
91
+ <div className="page__metadata-row">
92
+ <p className="page__metadata-label">Version</p>
93
+ <Flex direction="row" gap="8" alignItems="center">
94
+ <p className="page__metadata-value">1.0.0</p>
95
+ <span className="page__version-badge">BETA</span>
96
+ </Flex>
97
+ </div>
98
+ </div>
99
+ </div>
100
+ </div>
101
+ </header>
102
+ <main className="page__content">
103
+ <div className="page__examples-section">
104
+ <div className="demo-group">
105
+ <h2 className="demo-group__heading">Color Variants</h2>
106
+ <p className="demo-group__description">
107
+ Status components support multiple color variants to indicate different states or categories.
108
+ </p>
109
+ <Flex direction="row" gap="16" wrap={true} className="demo-content">
110
+ <Status label="Active" variant="green" />
111
+ <Status label="Pending" variant="yellow" />
112
+ <Status label="Error" variant="red" />
113
+ <Status label="Info" variant="blue" />
114
+ <Status label="Warning" variant="orange" />
115
+ <Status label="Inactive" variant="light-gray" />
116
+ </Flex>
117
+ </div>
118
+
119
+ <div className="demo-group">
120
+ <h2 className="demo-group__heading">Appearances</h2>
121
+ <p className="demo-group__description">
122
+ Status components can have different background appearances: light-gray (default) or white.
123
+ </p>
124
+ <Flex direction="row" gap="16" wrap={true} className="demo-content">
125
+ <Status label="Light Gray" variant="blue" appearance="light-gray" />
126
+ <Status label="White" variant="blue" appearance="white" />
127
+ </Flex>
128
+ </div>
129
+
130
+ <div className="demo-group">
131
+ <h2 className="demo-group__heading">Shapes</h2>
132
+ <p className="demo-group__description">
133
+ Status components support two shape variants: pill (fully rounded, default) or rounded (slightly rounded).
134
+ </p>
135
+ <Flex direction="row" gap="16" wrap={true} className="demo-content">
136
+ <Status label="Pill Shape" variant="green" shape="pill" />
137
+ <Status label="Rounded Shape" variant="green" shape="rounded" />
138
+ </Flex>
139
+ </div>
140
+
141
+ <div className="demo-group">
142
+ <h2 className="demo-group__heading">Usage Examples</h2>
143
+ <p className="demo-group__description">
144
+ Common applications for the Status component in real-world scenarios.
145
+ </p>
146
+ <Flex direction="column" gap="16" className="demo-content">
147
+ <Flex direction="row" gap="8" alignItems="center">
148
+ <Status label="Online" variant="green" />
149
+ <Status label="Offline" variant="red" />
150
+ <Status label="Away" variant="yellow" />
151
+ </Flex>
152
+ <Flex direction="row" gap="8" alignItems="center">
153
+ <Status label="Published" variant="green" />
154
+ <Status label="Draft" variant="orange" />
155
+ <Status label="Archived" variant="light-gray" />
156
+ </Flex>
157
+ </Flex>
158
+ </div>
159
+
160
+ <div className="demo-group">
161
+ <h2 className="demo-group__heading">Disabled State</h2>
162
+ <p className="demo-group__description">
163
+ Disabled status components are non-interactive and visually indicate they cannot be used.
164
+ </p>
165
+ <Flex direction="row" gap="16" wrap={true} className="demo-content">
166
+ <Status label="Disabled" variant="blue" disabled />
167
+ </Flex>
168
+ </div>
169
+ </div>
170
+
171
+ <Divider variant="solid" />
172
+
173
+ <div className="page__tabs-content-container">
174
+ <div className="demo-group">
175
+ <div className="page__navigation">
176
+ <Link
177
+ to="/slider"
178
+ className="page__nav-link page__nav-link--prev"
179
+ >
180
+ <span className="page__nav-label">Previous</span>
181
+ <span className="page__nav-title">Slider</span>
182
+ </Link>
183
+ <Link
184
+ to="/steps"
185
+ className="page__nav-link page__nav-link--next"
186
+ >
187
+ <span className="page__nav-label">Next</span>
188
+ <span className="page__nav-title">Steps</span>
189
+ </Link>
190
+ </div>
191
+ </div>
192
+ </div>
193
+ </main>
194
+ </section>
195
+ );
196
+ }
@@ -0,0 +1,308 @@
1
+ import React, { useState } from "react";
2
+ import Steps from "../ui/Steps/Steps";
3
+ import Flex from "../ui/Flex/Flex";
4
+ import Button from "../ui/Button/Button";
5
+ import Breadcrumb from "../ui/Breadcrumb/Breadcrumb";
6
+ import Divider from "../ui/Divider/Divider";
7
+ import { Link } from "react-router-dom";
8
+ import { formatLastUpdated } from "../utils/formatDate";
9
+
10
+ /**
11
+ * Steps Component Demo & Documentation
12
+ *
13
+ * This page demonstrates the Steps component and its various configurations.
14
+ *
15
+ * ## Steps Component Props:
16
+ *
17
+ * ### Required Props:
18
+ * - `steps` (array): Array of step objects. Each step should have: { label, optionalLabel, status }
19
+ *
20
+ * ### Optional Props:
21
+ * - `orientation` (string): Orientation of the steps
22
+ * - Options: 'horizontal', 'vertical'
23
+ * - Default: 'horizontal'
24
+ *
25
+ * - `size` (string): Size variant
26
+ * - Options: 'default', 'compact'
27
+ * - Default: 'default'
28
+ *
29
+ * - `displayLabel` (boolean): Whether to display labels
30
+ * - Default: true
31
+ *
32
+ * ## Step Object Properties:
33
+ * - `label` (string): Main label text for the step
34
+ * - `optionalLabel` (string): Optional secondary label text
35
+ * - `status` (string): Status of the step: 'complete', 'active', 'incomplete', 'disabled', 'error', 'warning'
36
+ *
37
+ * ## Usage Examples:
38
+ *
39
+ * Basic steps:
40
+ * ```jsx
41
+ * const steps = [
42
+ * { label: 'Step 1', status: 'complete' },
43
+ * { label: 'Step 2', status: 'active' },
44
+ * { label: 'Step 3', status: 'incomplete' },
45
+ * ];
46
+ * <Steps steps={steps} />
47
+ * ```
48
+ *
49
+ * Vertical steps:
50
+ * ```jsx
51
+ * <Steps steps={steps} orientation="vertical" />
52
+ * ```
53
+ */
54
+
55
+ const basicSteps = [
56
+ { label: "Step 1", optionalLabel: "Optional", status: "complete" },
57
+ { label: "Step 2", optionalLabel: "Optional", status: "active" },
58
+ { label: "Step 3", optionalLabel: "Optional", status: "incomplete" },
59
+ ];
60
+
61
+ const multiStepExample = [
62
+ { label: "Step 1", status: "complete" },
63
+ { label: "Step 2", status: "complete" },
64
+ { label: "Step 3", status: "active" },
65
+ { label: "Step 4", status: "incomplete" },
66
+ { label: "Step 5", status: "incomplete" },
67
+ ];
68
+
69
+ export default function StepsDemo() {
70
+ const [currentStep, setCurrentStep] = useState(2);
71
+
72
+ const processSteps = [
73
+ { label: "Order Placed", optionalLabel: "Jan 15", status: "complete" },
74
+ { label: "Processing", optionalLabel: "Jan 16", status: "complete" },
75
+ { label: "Shipped", optionalLabel: "Jan 18", status: "active" },
76
+ { label: "Delivered", optionalLabel: "Jan 20", status: "incomplete" },
77
+ ];
78
+
79
+ const errorSteps = [
80
+ { label: "Step 1", status: "complete" },
81
+ { label: "Step 2", status: "complete" },
82
+ { label: "Step 3", status: "error" },
83
+ { label: "Step 4", status: "incomplete" },
84
+ ];
85
+
86
+ const warningSteps = [
87
+ { label: "Step 1", status: "complete" },
88
+ { label: "Step 2", status: "warning" },
89
+ { label: "Step 3", status: "incomplete" },
90
+ ];
91
+
92
+ const disabledSteps = [
93
+ { label: "Step 1", status: "complete" },
94
+ { label: "Step 2", status: "active" },
95
+ { label: "Step 3", status: "disabled" },
96
+ { label: "Step 4", status: "incomplete" },
97
+ ];
98
+
99
+ const dynamicSteps = [
100
+ { label: "Step 1", status: currentStep >= 1 ? "complete" : "incomplete" },
101
+ {
102
+ label: "Step 2",
103
+ status:
104
+ currentStep >= 2
105
+ ? "complete"
106
+ : currentStep === 2
107
+ ? "active"
108
+ : "incomplete",
109
+ },
110
+ {
111
+ label: "Step 3",
112
+ status:
113
+ currentStep >= 3
114
+ ? "complete"
115
+ : currentStep === 3
116
+ ? "active"
117
+ : "incomplete",
118
+ },
119
+ {
120
+ label: "Step 4",
121
+ status:
122
+ currentStep >= 4
123
+ ? "complete"
124
+ : currentStep === 4
125
+ ? "active"
126
+ : "incomplete",
127
+ },
128
+ ];
129
+
130
+ return (
131
+ <section className="page">
132
+ <header className="page__header">
133
+ <div className="page__header-container">
134
+ <Breadcrumb />
135
+ <div className="page__header-info">
136
+ <div className="page__header-content">
137
+ <h1 className="page__header-title">Steps</h1>
138
+ <p className="page__header-description">
139
+ The Steps component displays a multi-step process or timeline, showing
140
+ progress through a sequence of steps. Supports horizontal and vertical
141
+ orientations, multiple status states, and optional labels for each
142
+ step.
143
+ </p>
144
+ </div>
145
+ <div className="page__header-metadata">
146
+ <div className="page__metadata-row">
147
+ <p className="page__metadata-label">Author</p>
148
+ <a
149
+ href="https://chgit.slack.com/team/U06V9C0K06S"
150
+ className="page__metadata-link"
151
+ target="_blank"
152
+ rel="noopener noreferrer"
153
+ >
154
+ @Michael-Stevens
155
+ </a>
156
+ </div>
157
+ <div className="page__metadata-row">
158
+ <p className="page__metadata-label">Last updated</p>
159
+ <p className="page__metadata-value">{formatLastUpdated()}</p>
160
+ </div>
161
+ <div className="page__metadata-row">
162
+ <p className="page__metadata-label">Version</p>
163
+ <Flex direction="row" gap="8" alignItems="center">
164
+ <p className="page__metadata-value">1.0.0</p>
165
+ <span className="page__version-badge">BETA</span>
166
+ </Flex>
167
+ </div>
168
+ </div>
169
+ </div>
170
+ </div>
171
+ </header>
172
+ <main className="page__content">
173
+ <div className="page__examples-section">
174
+ <div className="demo-group">
175
+ <h2 className="demo-group__heading">Basic Steps</h2>
176
+ <p className="demo-group__description">
177
+ Steps display a multi-step process with different status states: complete, active, and incomplete.
178
+ </p>
179
+ <div className="demo-content">
180
+ <Steps steps={basicSteps} />
181
+ </div>
182
+ </div>
183
+
184
+ <div className="demo-group">
185
+ <h2 className="demo-group__heading">Multi-Step Process</h2>
186
+ <p className="demo-group__description">
187
+ Steps can display longer processes with multiple stages, showing progress through a sequence.
188
+ </p>
189
+ <div className="demo-content">
190
+ <Steps steps={multiStepExample} />
191
+ </div>
192
+ </div>
193
+
194
+ <div className="demo-group">
195
+ <h2 className="demo-group__heading">With Optional Labels</h2>
196
+ <p className="demo-group__description">
197
+ Steps can include optional secondary labels, such as dates or additional context.
198
+ </p>
199
+ <div className="demo-content">
200
+ <Steps steps={processSteps} />
201
+ </div>
202
+ </div>
203
+
204
+ <div className="demo-group">
205
+ <h2 className="demo-group__heading">Error State</h2>
206
+ <p className="demo-group__description">
207
+ Steps can display error states to indicate that a step has failed or encountered an issue.
208
+ </p>
209
+ <div className="demo-content">
210
+ <Steps steps={errorSteps} />
211
+ </div>
212
+ </div>
213
+
214
+ <div className="demo-group">
215
+ <h2 className="demo-group__heading">Warning State</h2>
216
+ <p className="demo-group__description">
217
+ Steps can display warning states to indicate that a step needs attention or has a non-critical issue.
218
+ </p>
219
+ <div className="demo-content">
220
+ <Steps steps={warningSteps} />
221
+ </div>
222
+ </div>
223
+
224
+ <div className="demo-group">
225
+ <h2 className="demo-group__heading">Disabled State</h2>
226
+ <p className="demo-group__description">
227
+ Steps can be disabled to indicate that certain steps are not yet available or cannot be accessed.
228
+ </p>
229
+ <div className="demo-content">
230
+ <Steps steps={disabledSteps} />
231
+ </div>
232
+ </div>
233
+
234
+ <div className="demo-group">
235
+ <h2 className="demo-group__heading">Vertical Orientation</h2>
236
+ <p className="demo-group__description">
237
+ Steps can be displayed vertically, which is useful for sidebars or when horizontal space is limited.
238
+ </p>
239
+ <div className="demo-content">
240
+ <Steps steps={basicSteps} orientation="vertical" />
241
+ </div>
242
+ </div>
243
+
244
+ <div className="demo-group">
245
+ <h2 className="demo-group__heading">Compact Size</h2>
246
+ <p className="demo-group__description">
247
+ Steps are available in a compact size variant for use in tighter spaces.
248
+ </p>
249
+ <div className="demo-content">
250
+ <Steps steps={multiStepExample} size="compact" />
251
+ </div>
252
+ </div>
253
+
254
+ <div className="demo-group">
255
+ <h2 className="demo-group__heading">Dynamic Steps</h2>
256
+ <p className="demo-group__description">
257
+ Steps can be controlled dynamically, updating their status based on user actions or process completion.
258
+ </p>
259
+ <div className="demo-content">
260
+ <Steps steps={dynamicSteps} />
261
+ <Flex direction="row" gap="8" style={{ marginTop: '16px' }}>
262
+ <Button
263
+ appearance="outline"
264
+ size="small"
265
+ onClick={() => setCurrentStep(Math.max(0, currentStep - 1))}
266
+ disabled={currentStep === 0}
267
+ >
268
+ Previous
269
+ </Button>
270
+ <Button
271
+ appearance="primary"
272
+ size="small"
273
+ onClick={() => setCurrentStep(Math.min(4, currentStep + 1))}
274
+ disabled={currentStep === 4}
275
+ >
276
+ Next
277
+ </Button>
278
+ </Flex>
279
+ </div>
280
+ </div>
281
+ </div>
282
+
283
+ <Divider variant="solid" />
284
+
285
+ <div className="page__tabs-content-container">
286
+ <div className="demo-group">
287
+ <div className="page__navigation">
288
+ <Link
289
+ to="/status"
290
+ className="page__nav-link page__nav-link--prev"
291
+ >
292
+ <span className="page__nav-label">Previous</span>
293
+ <span className="page__nav-title">Status</span>
294
+ </Link>
295
+ <Link
296
+ to="/table"
297
+ className="page__nav-link page__nav-link--next"
298
+ >
299
+ <span className="page__nav-label">Next</span>
300
+ <span className="page__nav-title">Table</span>
301
+ </Link>
302
+ </div>
303
+ </div>
304
+ </div>
305
+ </main>
306
+ </section>
307
+ );
308
+ }