@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,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
|
+
}
|