@mich8060/chg-design-system 0.1.0

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