@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,223 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Link } from "react-router-dom";
|
|
3
|
+
import DotStatus from "../ui/DotStatus/DotStatus";
|
|
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
|
+
* Dot Status Component Demo & Documentation
|
|
11
|
+
*
|
|
12
|
+
* This page demonstrates the Dot Status component and its various configurations.
|
|
13
|
+
*
|
|
14
|
+
* ## Dot Status Component Props:
|
|
15
|
+
*
|
|
16
|
+
* ### Optional Props:
|
|
17
|
+
* - `variant` (string): Color variant
|
|
18
|
+
* - Options: 'light-gray', 'red', 'orange', 'yellow', 'light-green', 'green', 'blue', 'dark-blue', 'teal', 'purple', 'pink', 'magenta', 'dark-red', 'dark-gray'
|
|
19
|
+
* - Default: 'blue'
|
|
20
|
+
*
|
|
21
|
+
* - `size` (string): Size variant
|
|
22
|
+
* - Options: 'small', 'medium', 'large'
|
|
23
|
+
* - Default: 'medium'
|
|
24
|
+
*
|
|
25
|
+
* - `outline` (boolean): Whether to show an outline/border around the dot
|
|
26
|
+
* - Default: false
|
|
27
|
+
*
|
|
28
|
+
* ## Usage Examples:
|
|
29
|
+
*
|
|
30
|
+
* Basic dot status:
|
|
31
|
+
* ```jsx
|
|
32
|
+
* <DotStatus variant="green" />
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* Dot status with outline:
|
|
36
|
+
* ```jsx
|
|
37
|
+
* <DotStatus variant="red" outline={true} />
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* Different sizes:
|
|
41
|
+
* ```jsx
|
|
42
|
+
* <DotStatus variant="blue" size="small" />
|
|
43
|
+
* <DotStatus variant="blue" size="medium" />
|
|
44
|
+
* <DotStatus variant="blue" size="large" />
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
const variants = [
|
|
49
|
+
"light-gray",
|
|
50
|
+
"red",
|
|
51
|
+
"orange",
|
|
52
|
+
"yellow",
|
|
53
|
+
"light-green",
|
|
54
|
+
"green",
|
|
55
|
+
"blue",
|
|
56
|
+
"dark-blue",
|
|
57
|
+
"teal",
|
|
58
|
+
"purple",
|
|
59
|
+
"pink",
|
|
60
|
+
"magenta",
|
|
61
|
+
"dark-red",
|
|
62
|
+
"dark-gray",
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const sizes = ["small", "medium", "large"];
|
|
66
|
+
|
|
67
|
+
export default function DotStatusDemo() {
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<section className="page">
|
|
71
|
+
<header className="page__header">
|
|
72
|
+
<div className="page__header-container">
|
|
73
|
+
<Breadcrumb />
|
|
74
|
+
<div className="page__header-info">
|
|
75
|
+
<div className="page__header-content">
|
|
76
|
+
<h1 className="page__header-title">Dot Status</h1>
|
|
77
|
+
<p className="page__header-description">
|
|
78
|
+
The Dot Status component provides visual status indicators using
|
|
79
|
+
colored circular dots. Perfect for showing online/offline status, task
|
|
80
|
+
states, or any categorical information. Supports multiple color
|
|
81
|
+
variants, sizes, and optional outline styling.
|
|
82
|
+
</p>
|
|
83
|
+
</div>
|
|
84
|
+
<div className="page__header-metadata">
|
|
85
|
+
<div className="page__metadata-row">
|
|
86
|
+
<p className="page__metadata-label">Author</p>
|
|
87
|
+
<a
|
|
88
|
+
href="https://chgit.slack.com/team/U06V9C0K06S"
|
|
89
|
+
className="page__metadata-link"
|
|
90
|
+
target="_blank"
|
|
91
|
+
rel="noopener noreferrer"
|
|
92
|
+
>
|
|
93
|
+
@Michael-Stevens
|
|
94
|
+
</a>
|
|
95
|
+
</div>
|
|
96
|
+
<div className="page__metadata-row">
|
|
97
|
+
<p className="page__metadata-label">Last updated</p>
|
|
98
|
+
<p className="page__metadata-value">{formatLastUpdated()}</p>
|
|
99
|
+
</div>
|
|
100
|
+
<div className="page__metadata-row">
|
|
101
|
+
<p className="page__metadata-label">Version</p>
|
|
102
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
103
|
+
<p className="page__metadata-value">1.0.0</p>
|
|
104
|
+
<span className="page__version-badge">BETA</span>
|
|
105
|
+
</Flex>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
</header>
|
|
111
|
+
<main className="page__content">
|
|
112
|
+
<div className="page__examples-section">
|
|
113
|
+
<div className="demo-group">
|
|
114
|
+
<h2 className="demo-group__heading">Color Variants</h2>
|
|
115
|
+
<p className="demo-group__description">
|
|
116
|
+
Dot Status supports multiple color variants to represent different states or categories. Each variant uses a distinct color to provide clear visual distinction.
|
|
117
|
+
</p>
|
|
118
|
+
<Flex direction="row" gap="16" wrap={true} alignItems="center" className="demo-content">
|
|
119
|
+
{variants.map((variant) => (
|
|
120
|
+
<Flex key={variant} direction="row" gap="8" alignItems="center">
|
|
121
|
+
<DotStatus variant={variant} />
|
|
122
|
+
<span>{variant}</span>
|
|
123
|
+
</Flex>
|
|
124
|
+
))}
|
|
125
|
+
</Flex>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<div className="demo-group">
|
|
129
|
+
<h2 className="demo-group__heading">Sizes</h2>
|
|
130
|
+
<p className="demo-group__description">
|
|
131
|
+
Dot Status comes in three sizes: small, medium (default), and large. Choose the size that best fits your layout and visual hierarchy.
|
|
132
|
+
</p>
|
|
133
|
+
<Flex direction="row" gap="24" wrap={true} alignItems="center" className="demo-content">
|
|
134
|
+
{sizes.map((size) => (
|
|
135
|
+
<Flex key={size} direction="row" gap="8" alignItems="center">
|
|
136
|
+
<DotStatus variant="blue" size={size} />
|
|
137
|
+
<span>{size}</span>
|
|
138
|
+
</Flex>
|
|
139
|
+
))}
|
|
140
|
+
</Flex>
|
|
141
|
+
</div>
|
|
142
|
+
|
|
143
|
+
<div className="demo-group">
|
|
144
|
+
<h2 className="demo-group__heading">With Outline</h2>
|
|
145
|
+
<p className="demo-group__description">
|
|
146
|
+
The outline variant adds a border around the dot, providing additional visual definition and making the status indicator more prominent.
|
|
147
|
+
</p>
|
|
148
|
+
<Flex direction="row" gap="16" wrap={true} alignItems="center" className="demo-content">
|
|
149
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
150
|
+
<DotStatus variant="green" outline />
|
|
151
|
+
<span>Green with outline</span>
|
|
152
|
+
</Flex>
|
|
153
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
154
|
+
<DotStatus variant="red" outline />
|
|
155
|
+
<span>Red with outline</span>
|
|
156
|
+
</Flex>
|
|
157
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
158
|
+
<DotStatus variant="blue" outline />
|
|
159
|
+
<span>Blue with outline</span>
|
|
160
|
+
</Flex>
|
|
161
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
162
|
+
<DotStatus variant="yellow" outline />
|
|
163
|
+
<span>Yellow with outline</span>
|
|
164
|
+
</Flex>
|
|
165
|
+
</Flex>
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
<div className="demo-group">
|
|
169
|
+
<h2 className="demo-group__heading">Usage Examples</h2>
|
|
170
|
+
<p className="demo-group__description">
|
|
171
|
+
Common use cases for Dot Status include showing online/offline status, task states, priority levels, or any categorical information.
|
|
172
|
+
</p>
|
|
173
|
+
<Flex direction="column" gap="16" className="demo-content">
|
|
174
|
+
<Flex direction="row" gap="12" alignItems="center">
|
|
175
|
+
<DotStatus variant="green" />
|
|
176
|
+
<span>Online</span>
|
|
177
|
+
</Flex>
|
|
178
|
+
<Flex direction="row" gap="12" alignItems="center">
|
|
179
|
+
<DotStatus variant="red" />
|
|
180
|
+
<span>Offline</span>
|
|
181
|
+
</Flex>
|
|
182
|
+
<Flex direction="row" gap="12" alignItems="center">
|
|
183
|
+
<DotStatus variant="yellow" />
|
|
184
|
+
<span>Away</span>
|
|
185
|
+
</Flex>
|
|
186
|
+
<Flex direction="row" gap="12" alignItems="center">
|
|
187
|
+
<DotStatus variant="blue" />
|
|
188
|
+
<span>Active</span>
|
|
189
|
+
</Flex>
|
|
190
|
+
<Flex direction="row" gap="12" alignItems="center">
|
|
191
|
+
<DotStatus variant="orange" />
|
|
192
|
+
<span>Pending</span>
|
|
193
|
+
</Flex>
|
|
194
|
+
</Flex>
|
|
195
|
+
</div>
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
<Divider variant="solid" />
|
|
199
|
+
|
|
200
|
+
<div className="page__tabs-content-container">
|
|
201
|
+
<div className="demo-group">
|
|
202
|
+
<div className="page__navigation">
|
|
203
|
+
<Link
|
|
204
|
+
to="/divider"
|
|
205
|
+
className="page__nav-link page__nav-link--prev"
|
|
206
|
+
>
|
|
207
|
+
<span className="page__nav-label">Previous</span>
|
|
208
|
+
<span className="page__nav-title">Divider</span>
|
|
209
|
+
</Link>
|
|
210
|
+
<Link
|
|
211
|
+
to="/dropdown"
|
|
212
|
+
className="page__nav-link page__nav-link--next"
|
|
213
|
+
>
|
|
214
|
+
<span className="page__nav-label">Next</span>
|
|
215
|
+
<span className="page__nav-title">Dropdown</span>
|
|
216
|
+
</Link>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
</main>
|
|
221
|
+
</section>
|
|
222
|
+
);
|
|
223
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Link } from "react-router-dom";
|
|
3
|
+
import Dropdown from "../ui/Dropdown/Dropdown";
|
|
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
|
+
* Dropdown Component Demo & Documentation
|
|
11
|
+
*
|
|
12
|
+
* This page demonstrates the Dropdown component and its various configurations.
|
|
13
|
+
*
|
|
14
|
+
* ## Dropdown Component Props:
|
|
15
|
+
*
|
|
16
|
+
* ### Required Props:
|
|
17
|
+
* - `options` (array): Array of option objects with { value, label } or array of strings
|
|
18
|
+
*
|
|
19
|
+
* ### Optional Props:
|
|
20
|
+
* - `value` (string|number): Currently selected value
|
|
21
|
+
* - `onChange` (function): Callback when selection changes (receives new value)
|
|
22
|
+
* - `placeholder` (string): Placeholder text when no option is selected (default: 'Select an option')
|
|
23
|
+
* - `state` (string): Visual state: 'default', 'focused', 'error', 'disabled'
|
|
24
|
+
* - `label` (string): Label text for the dropdown
|
|
25
|
+
* - `disabled` (boolean): Whether the dropdown is disabled
|
|
26
|
+
*
|
|
27
|
+
* ## Usage Examples:
|
|
28
|
+
*
|
|
29
|
+
* Basic dropdown:
|
|
30
|
+
* ```jsx
|
|
31
|
+
* <Dropdown
|
|
32
|
+
* options={['Option 1', 'Option 2', 'Option 3']}
|
|
33
|
+
* value={selectedValue}
|
|
34
|
+
* onChange={setSelectedValue}
|
|
35
|
+
* />
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* Dropdown with custom options:
|
|
39
|
+
* ```jsx
|
|
40
|
+
* <Dropdown
|
|
41
|
+
* options={[
|
|
42
|
+
* { value: '1', label: 'First Option' },
|
|
43
|
+
* { value: '2', label: 'Second Option' }
|
|
44
|
+
* ]}
|
|
45
|
+
* value={selectedValue}
|
|
46
|
+
* onChange={setSelectedValue}
|
|
47
|
+
* />
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
const simpleOptions = [
|
|
52
|
+
"Option 1",
|
|
53
|
+
"Option 2",
|
|
54
|
+
"Option 3",
|
|
55
|
+
"Option 4",
|
|
56
|
+
"Option 5",
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
const customOptions = [
|
|
60
|
+
{ value: "apple", label: "Apple" },
|
|
61
|
+
{ value: "banana", label: "Banana" },
|
|
62
|
+
{ value: "cherry", label: "Cherry" },
|
|
63
|
+
{ value: "date", label: "Date" },
|
|
64
|
+
{ value: "elderberry", label: "Elderberry" },
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
export default function DropdownDemo() {
|
|
68
|
+
const [defaultValue, setDefaultValue] = useState("");
|
|
69
|
+
const [focusedValue, setFocusedValue] = useState("");
|
|
70
|
+
const [errorValue, setErrorValue] = useState("");
|
|
71
|
+
const [customValue, setCustomValue] = useState("");
|
|
72
|
+
const [labeledValue, setLabeledValue] = useState("");
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<section className="page">
|
|
76
|
+
<header className="page__header">
|
|
77
|
+
<div className="page__header-container">
|
|
78
|
+
<Breadcrumb />
|
|
79
|
+
<div className="page__header-info">
|
|
80
|
+
<div className="page__header-content">
|
|
81
|
+
<h1 className="page__header-title">Dropdown</h1>
|
|
82
|
+
<p className="page__header-description">
|
|
83
|
+
The Dropdown component provides a custom select input with support for
|
|
84
|
+
different states, keyboard navigation, and accessibility features. It
|
|
85
|
+
can be used as a replacement for native select elements with enhanced
|
|
86
|
+
styling and functionality.
|
|
87
|
+
</p>
|
|
88
|
+
</div>
|
|
89
|
+
<div className="page__header-metadata">
|
|
90
|
+
<div className="page__metadata-row">
|
|
91
|
+
<p className="page__metadata-label">Author</p>
|
|
92
|
+
<a
|
|
93
|
+
href="https://chgit.slack.com/team/U06V9C0K06S"
|
|
94
|
+
className="page__metadata-link"
|
|
95
|
+
target="_blank"
|
|
96
|
+
rel="noopener noreferrer"
|
|
97
|
+
>
|
|
98
|
+
@Michael-Stevens
|
|
99
|
+
</a>
|
|
100
|
+
</div>
|
|
101
|
+
<div className="page__metadata-row">
|
|
102
|
+
<p className="page__metadata-label">Last updated</p>
|
|
103
|
+
<p className="page__metadata-value">{formatLastUpdated()}</p>
|
|
104
|
+
</div>
|
|
105
|
+
<div className="page__metadata-row">
|
|
106
|
+
<p className="page__metadata-label">Version</p>
|
|
107
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
108
|
+
<p className="page__metadata-value">1.0.0</p>
|
|
109
|
+
<span className="page__version-badge">BETA</span>
|
|
110
|
+
</Flex>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
</header>
|
|
116
|
+
<main className="page__content">
|
|
117
|
+
<div className="page__examples-section">
|
|
118
|
+
<div className="demo-group">
|
|
119
|
+
<h2 className="demo-group__heading">Basic Usage</h2>
|
|
120
|
+
<p className="demo-group__description">
|
|
121
|
+
A simple dropdown with string options. Click to open and select an option from the list.
|
|
122
|
+
</p>
|
|
123
|
+
<div className="demo-content">
|
|
124
|
+
<Dropdown
|
|
125
|
+
options={simpleOptions}
|
|
126
|
+
value={defaultValue}
|
|
127
|
+
onChange={setDefaultValue}
|
|
128
|
+
placeholder="Select an option"
|
|
129
|
+
/>
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
|
|
133
|
+
<div className="demo-group">
|
|
134
|
+
<h2 className="demo-group__heading">With Custom Options</h2>
|
|
135
|
+
<p className="demo-group__description">
|
|
136
|
+
Dropdowns can use custom option objects with separate value and label properties. This is useful when the display text differs from the underlying value.
|
|
137
|
+
</p>
|
|
138
|
+
<div className="demo-content">
|
|
139
|
+
<Dropdown
|
|
140
|
+
options={customOptions}
|
|
141
|
+
value={customValue}
|
|
142
|
+
onChange={setCustomValue}
|
|
143
|
+
placeholder="Choose a fruit"
|
|
144
|
+
/>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
|
|
148
|
+
<div className="demo-group">
|
|
149
|
+
<h2 className="demo-group__heading">With Label</h2>
|
|
150
|
+
<p className="demo-group__description">
|
|
151
|
+
Dropdowns can include a label above the control to provide context and improve accessibility.
|
|
152
|
+
</p>
|
|
153
|
+
<div className="demo-content">
|
|
154
|
+
<Dropdown
|
|
155
|
+
options={simpleOptions}
|
|
156
|
+
value={labeledValue}
|
|
157
|
+
onChange={setLabeledValue}
|
|
158
|
+
label="Select an option"
|
|
159
|
+
placeholder="Choose..."
|
|
160
|
+
/>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
|
|
164
|
+
<div className="demo-group">
|
|
165
|
+
<h2 className="demo-group__heading">States</h2>
|
|
166
|
+
<p className="demo-group__description">
|
|
167
|
+
Dropdowns support different visual states including default, focused, error, and disabled. The focused state is automatically applied when the dropdown is active.
|
|
168
|
+
</p>
|
|
169
|
+
<Flex direction="column" gap="16" className="demo-content">
|
|
170
|
+
<Dropdown
|
|
171
|
+
options={simpleOptions}
|
|
172
|
+
value={focusedValue}
|
|
173
|
+
onChange={setFocusedValue}
|
|
174
|
+
state="focused"
|
|
175
|
+
placeholder="Focused state"
|
|
176
|
+
/>
|
|
177
|
+
<Dropdown
|
|
178
|
+
options={simpleOptions}
|
|
179
|
+
value={errorValue}
|
|
180
|
+
onChange={setErrorValue}
|
|
181
|
+
state="error"
|
|
182
|
+
placeholder="Error state"
|
|
183
|
+
/>
|
|
184
|
+
</Flex>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
<div className="demo-group">
|
|
188
|
+
<h2 className="demo-group__heading">Disabled State</h2>
|
|
189
|
+
<p className="demo-group__description">
|
|
190
|
+
Disabled dropdowns prevent user interaction and are typically used when the selection is not applicable in the current context.
|
|
191
|
+
</p>
|
|
192
|
+
<div className="demo-content">
|
|
193
|
+
<Dropdown
|
|
194
|
+
options={simpleOptions}
|
|
195
|
+
value="Option 1"
|
|
196
|
+
onChange={() => {}}
|
|
197
|
+
disabled
|
|
198
|
+
placeholder="Disabled dropdown"
|
|
199
|
+
/>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
|
|
204
|
+
<Divider variant="solid" />
|
|
205
|
+
|
|
206
|
+
<div className="page__tabs-content-container">
|
|
207
|
+
<div className="demo-group">
|
|
208
|
+
<div className="page__navigation">
|
|
209
|
+
<Link
|
|
210
|
+
to="/dot-status"
|
|
211
|
+
className="page__nav-link page__nav-link--prev"
|
|
212
|
+
>
|
|
213
|
+
<span className="page__nav-label">Previous</span>
|
|
214
|
+
<span className="page__nav-title">Dot Status</span>
|
|
215
|
+
</Link>
|
|
216
|
+
<Link
|
|
217
|
+
to="/field"
|
|
218
|
+
className="page__nav-link page__nav-link--next"
|
|
219
|
+
>
|
|
220
|
+
<span className="page__nav-label">Next</span>
|
|
221
|
+
<span className="page__nav-title">Field</span>
|
|
222
|
+
</Link>
|
|
223
|
+
</div>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
</main>
|
|
227
|
+
</section>
|
|
228
|
+
);
|
|
229
|
+
}
|