@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,40 @@
|
|
|
1
|
+
.installation {
|
|
2
|
+
&__code-block-wrapper {
|
|
3
|
+
position: relative;
|
|
4
|
+
margin: var(--uds-spacing-16) 0;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
&__code-block {
|
|
8
|
+
background: var(--uds-code-bg);
|
|
9
|
+
border: var(--uds-border-width-1) solid var(--uds-border-primary);
|
|
10
|
+
border-radius: var(--uds-radius-8);
|
|
11
|
+
padding: var(--uds-spacing-16);
|
|
12
|
+
overflow-x: auto;
|
|
13
|
+
max-width: 100%;
|
|
14
|
+
word-break: break-word;
|
|
15
|
+
|
|
16
|
+
// Override Prism base styles to use our custom variables
|
|
17
|
+
pre[class*="language-"] {
|
|
18
|
+
background: transparent;
|
|
19
|
+
margin: 0;
|
|
20
|
+
padding: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
code[class*="language-"] {
|
|
24
|
+
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
|
|
25
|
+
font-size: var(--uds-font-size-14);
|
|
26
|
+
line-height: var(--uds-line-20);
|
|
27
|
+
white-space: pre;
|
|
28
|
+
word-wrap: normal;
|
|
29
|
+
display: block;
|
|
30
|
+
overflow-x: auto;
|
|
31
|
+
background: transparent;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Show copy button on hover of code block container
|
|
37
|
+
.installation__code-block-wrapper:hover .copy-button {
|
|
38
|
+
opacity: 1;
|
|
39
|
+
pointer-events: auto;
|
|
40
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Link } from "react-router-dom";
|
|
3
|
+
import Key from "../ui/Key/Key";
|
|
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
|
+
* Key Component Demo & Documentation
|
|
11
|
+
*
|
|
12
|
+
* This page demonstrates the Key component and its various configurations.
|
|
13
|
+
*
|
|
14
|
+
* ## Key Component Props:
|
|
15
|
+
*
|
|
16
|
+
* ### Required Props:
|
|
17
|
+
* - `label` (string): The text or symbol to display on the key (e.g., "Esc", "⌘", "Ctrl")
|
|
18
|
+
*
|
|
19
|
+
* ### Optional Props:
|
|
20
|
+
* - `appearance` (string): Visual style variant
|
|
21
|
+
* - Options: 'light', 'dark'
|
|
22
|
+
* - Default: 'light'
|
|
23
|
+
*
|
|
24
|
+
* ## Usage Examples:
|
|
25
|
+
*
|
|
26
|
+
* Basic key:
|
|
27
|
+
* ```jsx
|
|
28
|
+
* <Key label="Esc" />
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* Dark key:
|
|
32
|
+
* ```jsx
|
|
33
|
+
* <Key label="⌘" appearance="dark" />
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* Keyboard shortcut display:
|
|
37
|
+
* ```jsx
|
|
38
|
+
* <div>
|
|
39
|
+
* <Key label="Ctrl" /> + <Key label="K" />
|
|
40
|
+
* </div>
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
// Common keyboard keys and symbols
|
|
45
|
+
const commonKeys = [
|
|
46
|
+
"Esc",
|
|
47
|
+
"⌘",
|
|
48
|
+
"Ctrl",
|
|
49
|
+
"Alt",
|
|
50
|
+
"Shift",
|
|
51
|
+
"Enter",
|
|
52
|
+
"Tab",
|
|
53
|
+
"Space",
|
|
54
|
+
"Delete",
|
|
55
|
+
"Backspace",
|
|
56
|
+
"↑",
|
|
57
|
+
"↓",
|
|
58
|
+
"←",
|
|
59
|
+
"→",
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
export default function KeyDemo() {
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<section className="page">
|
|
66
|
+
<header className="page__header">
|
|
67
|
+
<div className="page__header-container">
|
|
68
|
+
<Breadcrumb />
|
|
69
|
+
<div className="page__header-info">
|
|
70
|
+
<div className="page__header-content">
|
|
71
|
+
<h1 className="page__header-title">Key</h1>
|
|
72
|
+
<p className="page__header-description">
|
|
73
|
+
The Key component displays keyboard key representations, perfect for
|
|
74
|
+
showing keyboard shortcuts, hotkeys, or keyboard instructions.
|
|
75
|
+
Supports both light and dark appearance styles to match your design
|
|
76
|
+
theme.
|
|
77
|
+
</p>
|
|
78
|
+
</div>
|
|
79
|
+
<div className="page__header-metadata">
|
|
80
|
+
<div className="page__metadata-row">
|
|
81
|
+
<p className="page__metadata-label">Author</p>
|
|
82
|
+
<a
|
|
83
|
+
href="https://chgit.slack.com/team/U06V9C0K06S"
|
|
84
|
+
className="page__metadata-link"
|
|
85
|
+
target="_blank"
|
|
86
|
+
rel="noopener noreferrer"
|
|
87
|
+
>
|
|
88
|
+
@Michael-Stevens
|
|
89
|
+
</a>
|
|
90
|
+
</div>
|
|
91
|
+
<div className="page__metadata-row">
|
|
92
|
+
<p className="page__metadata-label">Last updated</p>
|
|
93
|
+
<p className="page__metadata-value">{formatLastUpdated()}</p>
|
|
94
|
+
</div>
|
|
95
|
+
<div className="page__metadata-row">
|
|
96
|
+
<p className="page__metadata-label">Version</p>
|
|
97
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
98
|
+
<p className="page__metadata-value">1.0.0</p>
|
|
99
|
+
<span className="page__version-badge">BETA</span>
|
|
100
|
+
</Flex>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
</header>
|
|
106
|
+
<main className="page__content">
|
|
107
|
+
<div className="page__examples-section">
|
|
108
|
+
<div className="demo-group">
|
|
109
|
+
<h2 className="demo-group__heading">Common Keys</h2>
|
|
110
|
+
<p className="demo-group__description">
|
|
111
|
+
Display keyboard key representations for shortcuts, hotkeys, or keyboard instructions. The default appearance is light.
|
|
112
|
+
</p>
|
|
113
|
+
<Flex direction="row" gap="8" wrap={true} alignItems="center" className="demo-content">
|
|
114
|
+
{commonKeys.map((key) => (
|
|
115
|
+
<Key key={key} label={key} />
|
|
116
|
+
))}
|
|
117
|
+
</Flex>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
<div className="demo-group">
|
|
121
|
+
<h2 className="demo-group__heading">Appearances</h2>
|
|
122
|
+
<p className="demo-group__description">
|
|
123
|
+
Keys support both light and dark appearance styles to match your design theme.
|
|
124
|
+
</p>
|
|
125
|
+
<Flex direction="row" gap="16" wrap={true} alignItems="center" className="demo-content">
|
|
126
|
+
<Flex direction="column" gap="8" alignItems="center">
|
|
127
|
+
<Key label="Esc" appearance="light" />
|
|
128
|
+
<span style={{ fontSize: '12px', color: 'var(--uds-text-secondary)' }}>Light</span>
|
|
129
|
+
</Flex>
|
|
130
|
+
<Flex direction="column" gap="8" alignItems="center">
|
|
131
|
+
<Key label="Esc" appearance="dark" />
|
|
132
|
+
<span style={{ fontSize: '12px', color: 'var(--uds-text-secondary)' }}>Dark</span>
|
|
133
|
+
</Flex>
|
|
134
|
+
</Flex>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<div className="demo-group">
|
|
138
|
+
<h2 className="demo-group__heading">Keyboard Shortcuts</h2>
|
|
139
|
+
<p className="demo-group__description">
|
|
140
|
+
Combine multiple keys to display keyboard shortcuts. This is useful for showing command combinations.
|
|
141
|
+
</p>
|
|
142
|
+
<Flex direction="column" gap="16" className="demo-content">
|
|
143
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
144
|
+
<Key label="Ctrl" /> + <Key label="K" />
|
|
145
|
+
</Flex>
|
|
146
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
147
|
+
<Key label="⌘" /> + <Key label="C" />
|
|
148
|
+
</Flex>
|
|
149
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
150
|
+
<Key label="Alt" /> + <Key label="Tab" />
|
|
151
|
+
</Flex>
|
|
152
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
153
|
+
<Key label="Shift" /> + <Key label="Enter" />
|
|
154
|
+
</Flex>
|
|
155
|
+
</Flex>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<Divider variant="solid" />
|
|
160
|
+
|
|
161
|
+
<div className="page__tabs-content-container">
|
|
162
|
+
<div className="demo-group">
|
|
163
|
+
<div className="page__navigation">
|
|
164
|
+
<Link
|
|
165
|
+
to="/input"
|
|
166
|
+
className="page__nav-link page__nav-link--prev"
|
|
167
|
+
>
|
|
168
|
+
<span className="page__nav-label">Previous</span>
|
|
169
|
+
<span className="page__nav-title">Text Input</span>
|
|
170
|
+
</Link>
|
|
171
|
+
<Link
|
|
172
|
+
to="/micro-calendar"
|
|
173
|
+
className="page__nav-link page__nav-link--next"
|
|
174
|
+
>
|
|
175
|
+
<span className="page__nav-label">Next</span>
|
|
176
|
+
<span className="page__nav-title">Micro Calendar</span>
|
|
177
|
+
</Link>
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
</main>
|
|
182
|
+
</section>
|
|
183
|
+
);
|
|
184
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Link } from "react-router-dom";
|
|
3
|
+
import Menu from "../ui/Menu/Menu";
|
|
4
|
+
import Breadcrumb from "../ui/Breadcrumb/Breadcrumb";
|
|
5
|
+
import Flex from "../ui/Flex/Flex";
|
|
6
|
+
import { formatLastUpdated } from "../utils/formatDate";
|
|
7
|
+
import Divider from "../ui/Divider/Divider";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Menu Component Demo & Documentation
|
|
11
|
+
*
|
|
12
|
+
* This page demonstrates the Menu component and its various configurations.
|
|
13
|
+
*/
|
|
14
|
+
export default function MenuDemo() {
|
|
15
|
+
const [activeBrand, setActiveBrand] = useState("locumsmart");
|
|
16
|
+
const [activeMode, setActiveMode] = useState("light");
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<section className="page">
|
|
23
|
+
<header className="page__header">
|
|
24
|
+
<div className="page__header-container">
|
|
25
|
+
<Breadcrumb />
|
|
26
|
+
<div className="page__header-info">
|
|
27
|
+
<div className="page__header-content">
|
|
28
|
+
<h1 className="page__header-title">Menu</h1>
|
|
29
|
+
<p className="page__header-description">
|
|
30
|
+
The Menu component provides a collapsible navigation sidebar
|
|
31
|
+
with accordion sections for organizing navigation items. It
|
|
32
|
+
supports both expanded and collapsed states, with automatic
|
|
33
|
+
expansion of sections when child items are active.
|
|
34
|
+
</p>
|
|
35
|
+
</div>
|
|
36
|
+
<div className="page__header-metadata">
|
|
37
|
+
<div className="page__metadata-row">
|
|
38
|
+
<p className="page__metadata-label">Author</p>
|
|
39
|
+
<a
|
|
40
|
+
href="https://chgit.slack.com/team/U06V9C0K06S"
|
|
41
|
+
className="page__metadata-link"
|
|
42
|
+
target="_blank"
|
|
43
|
+
rel="noopener noreferrer"
|
|
44
|
+
>
|
|
45
|
+
@Michael-Stevens
|
|
46
|
+
</a>
|
|
47
|
+
</div>
|
|
48
|
+
<div className="page__metadata-row">
|
|
49
|
+
<p className="page__metadata-label">Last updated</p>
|
|
50
|
+
<p className="page__metadata-value">{formatLastUpdated()}</p>
|
|
51
|
+
</div>
|
|
52
|
+
<div className="page__metadata-row">
|
|
53
|
+
<p className="page__metadata-label">Version</p>
|
|
54
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
55
|
+
<p className="page__metadata-value">1.0.0</p>
|
|
56
|
+
<span className="page__version-badge">BETA</span>
|
|
57
|
+
</Flex>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</header>
|
|
63
|
+
<main className="page__content">
|
|
64
|
+
{/* Component Examples Section - Above Tabs */}
|
|
65
|
+
<div className="page__examples-section">
|
|
66
|
+
<div className="demo-group">
|
|
67
|
+
<h2 className="demo-group__heading">Basic Usage</h2>
|
|
68
|
+
<p className="demo-group__description">
|
|
69
|
+
The Menu component provides a navigation sidebar with
|
|
70
|
+
collapsible sections. It automatically expands sections when
|
|
71
|
+
their child routes are active.
|
|
72
|
+
</p>
|
|
73
|
+
<div className="demo-content">
|
|
74
|
+
<div className="demo-card">
|
|
75
|
+
<h3>Menu Component</h3>
|
|
76
|
+
<p>
|
|
77
|
+
The menu is typically used as a fixed sidebar in the
|
|
78
|
+
application layout. It includes:
|
|
79
|
+
</p>
|
|
80
|
+
<ul>
|
|
81
|
+
<li>Collapsible/expandable state</li>
|
|
82
|
+
<li>
|
|
83
|
+
Accordion sections for Foundations, Components, and
|
|
84
|
+
Patterns
|
|
85
|
+
</li>
|
|
86
|
+
<li>
|
|
87
|
+
Auto-expansion of sections when child routes are active
|
|
88
|
+
</li>
|
|
89
|
+
<li>Search functionality (placeholder)</li>
|
|
90
|
+
<li>Brand and mode selection controls</li>
|
|
91
|
+
</ul>
|
|
92
|
+
<div
|
|
93
|
+
style={{
|
|
94
|
+
position: "relative",
|
|
95
|
+
height: "600px",
|
|
96
|
+
border: "1px solid var(--uds-border-primary)",
|
|
97
|
+
borderRadius: "var(--uds-radius-8)",
|
|
98
|
+
overflow: "hidden",
|
|
99
|
+
marginTop: "var(--uds-gap-24)",
|
|
100
|
+
}}
|
|
101
|
+
>
|
|
102
|
+
<Menu
|
|
103
|
+
activeBrand={activeBrand}
|
|
104
|
+
activeMode={activeMode}
|
|
105
|
+
onBrandChange={setActiveBrand}
|
|
106
|
+
onModeChange={setActiveMode}
|
|
107
|
+
/>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<Divider variant="solid" />
|
|
115
|
+
|
|
116
|
+
<div className="page__tabs-content-container">
|
|
117
|
+
<div className="demo-group">
|
|
118
|
+
<div className="page__navigation">
|
|
119
|
+
<Link
|
|
120
|
+
to="/key"
|
|
121
|
+
className="page__nav-link page__nav-link--prev"
|
|
122
|
+
>
|
|
123
|
+
<span className="page__nav-label">Previous</span>
|
|
124
|
+
<span className="page__nav-title">Key</span>
|
|
125
|
+
</Link>
|
|
126
|
+
<Link
|
|
127
|
+
to="/pill-toggle"
|
|
128
|
+
className="page__nav-link page__nav-link--next"
|
|
129
|
+
>
|
|
130
|
+
<span className="page__nav-label">Next</span>
|
|
131
|
+
<span className="page__nav-title">Pill Toggle</span>
|
|
132
|
+
</Link>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
</main>
|
|
137
|
+
</section>
|
|
138
|
+
);
|
|
139
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Link } from "react-router-dom";
|
|
3
|
+
import MicroCalendar from "../ui/MicroCalendar/MicroCalendar";
|
|
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 MicroCalendarDemo() {
|
|
10
|
+
const [selectedDate, setSelectedDate] = useState(new Date(2026, 0, 1)); // January 1, 2026
|
|
11
|
+
const [selectedDate2, setSelectedDate2] = useState(null);
|
|
12
|
+
|
|
13
|
+
// Example unavailable dates (matching the design: days 4, 5, 6, 7)
|
|
14
|
+
const unavailableDates = [
|
|
15
|
+
new Date(2026, 0, 4), // January 4
|
|
16
|
+
new Date(2026, 0, 5), // January 5
|
|
17
|
+
new Date(2026, 0, 6), // January 6
|
|
18
|
+
new Date(2026, 0, 7), // January 7
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
// Example date data with travel and assignment flags (matching the design)
|
|
22
|
+
const dateData = {
|
|
23
|
+
"2026-01-01": { travel: false, onAssignment: false }, // Selected - light blue
|
|
24
|
+
"2026-01-08": { travel: false, onAssignment: true }, // On Assignment - dark blue
|
|
25
|
+
"2026-01-25": { travel: true, onAssignment: false }, // Travel - green triangle
|
|
26
|
+
"2026-01-26": { travel: false, onAssignment: true }, // On Assignment - blue circle
|
|
27
|
+
"2026-01-27": { travel: false, onAssignment: true }, // On Assignment - blue circle
|
|
28
|
+
"2026-01-28": { travel: false, onAssignment: true }, // On Assignment - blue circle
|
|
29
|
+
"2026-01-29": { travel: false, onAssignment: true }, // On Assignment - blue circle
|
|
30
|
+
"2026-01-30": { travel: false, onAssignment: true }, // On Assignment - blue circle
|
|
31
|
+
"2026-01-31": { travel: true, onAssignment: true }, // Both - green triangle and blue circle
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<section className="page">
|
|
36
|
+
<header className="page__header">
|
|
37
|
+
<div className="page__header-container">
|
|
38
|
+
<Breadcrumb />
|
|
39
|
+
<div className="page__header-info">
|
|
40
|
+
<div className="page__header-content">
|
|
41
|
+
<h1 className="page__header-title">Micro Calendar</h1>
|
|
42
|
+
<p className="page__header-description">
|
|
43
|
+
A compact, minimal calendar component perfect for inline date selection
|
|
44
|
+
or displaying dates in small spaces. The micro calendar shows a single
|
|
45
|
+
month view without navigation controls.
|
|
46
|
+
</p>
|
|
47
|
+
</div>
|
|
48
|
+
<div className="page__header-metadata">
|
|
49
|
+
<div className="page__metadata-row">
|
|
50
|
+
<p className="page__metadata-label">Author</p>
|
|
51
|
+
<a
|
|
52
|
+
href="https://chgit.slack.com/team/U06V9C0K06S"
|
|
53
|
+
className="page__metadata-link"
|
|
54
|
+
target="_blank"
|
|
55
|
+
rel="noopener noreferrer"
|
|
56
|
+
>
|
|
57
|
+
@Michael-Stevens
|
|
58
|
+
</a>
|
|
59
|
+
</div>
|
|
60
|
+
<div className="page__metadata-row">
|
|
61
|
+
<p className="page__metadata-label">Last updated</p>
|
|
62
|
+
<p className="page__metadata-value">{formatLastUpdated()}</p>
|
|
63
|
+
</div>
|
|
64
|
+
<div className="page__metadata-row">
|
|
65
|
+
<p className="page__metadata-label">Version</p>
|
|
66
|
+
<Flex direction="row" gap="8" alignItems="center">
|
|
67
|
+
<p className="page__metadata-value">1.0.0</p>
|
|
68
|
+
<span className="page__version-badge">BETA</span>
|
|
69
|
+
</Flex>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</header>
|
|
75
|
+
|
|
76
|
+
<main className="page__content">
|
|
77
|
+
<div className="page__examples-section">
|
|
78
|
+
<div className="demo-group">
|
|
79
|
+
<h2 className="demo-group__heading">Basic Usage</h2>
|
|
80
|
+
<p className="demo-group__description">
|
|
81
|
+
A micro calendar with month navigation, date selection, and expand/collapse functionality. Click on any date to select it.
|
|
82
|
+
</p>
|
|
83
|
+
<div className="demo-content">
|
|
84
|
+
<MicroCalendar
|
|
85
|
+
value={selectedDate}
|
|
86
|
+
onDateSelect={setSelectedDate}
|
|
87
|
+
month={new Date(2026, 0, 1)} // January 2026
|
|
88
|
+
showExpandCollapse={false}
|
|
89
|
+
/>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<div className="demo-group">
|
|
94
|
+
<h2 className="demo-group__heading">With Date States</h2>
|
|
95
|
+
<p className="demo-group__description">
|
|
96
|
+
The calendar supports multiple date states: Available (white), Selected (light blue), On Assignment (dark blue with circle icon), Unavailable (red line), and Travel (green triangle icon).
|
|
97
|
+
</p>
|
|
98
|
+
<div className="demo-content">
|
|
99
|
+
<MicroCalendar
|
|
100
|
+
value={selectedDate}
|
|
101
|
+
onDateSelect={setSelectedDate}
|
|
102
|
+
unavailableDates={unavailableDates}
|
|
103
|
+
dateData={dateData}
|
|
104
|
+
month={new Date(2026, 0, 1)} // January 2026
|
|
105
|
+
/>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
|
|
109
|
+
<div className="demo-group">
|
|
110
|
+
<h2 className="demo-group__heading">Collapsed State</h2>
|
|
111
|
+
<p className="demo-group__description">
|
|
112
|
+
The calendar can start in a collapsed state, showing only the first row of days. Click the expand button to show all days.
|
|
113
|
+
</p>
|
|
114
|
+
<div className="demo-content">
|
|
115
|
+
<MicroCalendar
|
|
116
|
+
value={selectedDate2}
|
|
117
|
+
onDateSelect={setSelectedDate2}
|
|
118
|
+
defaultExpanded={false}
|
|
119
|
+
month={new Date(2026, 0, 1)} // January 2026
|
|
120
|
+
/>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<div className="demo-group">
|
|
125
|
+
<h2 className="demo-group__heading">Without Legend</h2>
|
|
126
|
+
<p className="demo-group__description">
|
|
127
|
+
The legend can be hidden if you prefer a more compact display.
|
|
128
|
+
</p>
|
|
129
|
+
<div className="demo-content">
|
|
130
|
+
<MicroCalendar
|
|
131
|
+
value={selectedDate}
|
|
132
|
+
onDateSelect={setSelectedDate}
|
|
133
|
+
showLegend={false}
|
|
134
|
+
month={new Date(2026, 0, 1)} // January 2026
|
|
135
|
+
/>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
<Divider variant="solid" />
|
|
141
|
+
|
|
142
|
+
<div className="page__tabs-content-container">
|
|
143
|
+
<div className="demo-group">
|
|
144
|
+
<div className="page__navigation">
|
|
145
|
+
<Link
|
|
146
|
+
to="/datepicker"
|
|
147
|
+
className="page__nav-link page__nav-link--prev"
|
|
148
|
+
>
|
|
149
|
+
<span className="page__nav-label">Previous</span>
|
|
150
|
+
<span className="page__nav-title">Datepicker</span>
|
|
151
|
+
</Link>
|
|
152
|
+
<Link
|
|
153
|
+
to="/divider"
|
|
154
|
+
className="page__nav-link page__nav-link--next"
|
|
155
|
+
>
|
|
156
|
+
<span className="page__nav-label">Next</span>
|
|
157
|
+
<span className="page__nav-title">Divider</span>
|
|
158
|
+
</Link>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
</main>
|
|
163
|
+
</section>
|
|
164
|
+
);
|
|
165
|
+
}
|