@cere/cere-design-system 0.1.0 → 0.2.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 (165) hide show
  1. package/README.md +76 -0
  2. package/dist/buttons.d.mts +27 -22
  3. package/dist/buttons.d.ts +27 -22
  4. package/dist/buttons.js +5 -5
  5. package/dist/buttons.mjs +4 -4
  6. package/dist/charts.d.mts +1 -23
  7. package/dist/charts.d.ts +1 -23
  8. package/dist/charts.js +2 -9
  9. package/dist/charts.js.map +1 -1
  10. package/dist/charts.mjs +1 -8
  11. package/dist/{chunk-THQKYTQE.js → chunk-2KDN37PQ.js} +28 -32
  12. package/dist/chunk-2KDN37PQ.js.map +1 -0
  13. package/dist/{chunk-3WCMINE5.mjs → chunk-34LFXT6C.mjs} +25 -29
  14. package/dist/chunk-34LFXT6C.mjs.map +1 -0
  15. package/dist/chunk-3KCXCVOX.mjs +411 -0
  16. package/dist/chunk-3KCXCVOX.mjs.map +1 -0
  17. package/dist/{chunk-NXTVJ6PY.js → chunk-4OKTICU5.js} +10 -10
  18. package/dist/chunk-4OKTICU5.js.map +1 -0
  19. package/dist/{chunk-FN5YL4BK.js → chunk-72TQ56EP.js} +47 -45
  20. package/dist/chunk-72TQ56EP.js.map +1 -0
  21. package/dist/{chunk-QYYQYZHV.js → chunk-7KXKK2RE.js} +3 -5
  22. package/dist/chunk-7KXKK2RE.js.map +1 -0
  23. package/dist/{chunk-CCN6M4LI.js → chunk-ARSCL4ZZ.js} +18 -10
  24. package/dist/chunk-ARSCL4ZZ.js.map +1 -0
  25. package/dist/chunk-AWVNEU6R.mjs +1478 -0
  26. package/dist/chunk-AWVNEU6R.mjs.map +1 -0
  27. package/dist/{chunk-CUCKULYC.mjs → chunk-BH4FNZKK.mjs} +74 -1260
  28. package/dist/chunk-BH4FNZKK.mjs.map +1 -0
  29. package/dist/{chunk-FFZ5S7PQ.mjs → chunk-BOQPWZIB.mjs} +6 -5
  30. package/dist/chunk-BOQPWZIB.mjs.map +1 -0
  31. package/dist/chunk-BT7XUTT5.mjs +392 -0
  32. package/dist/chunk-BT7XUTT5.mjs.map +1 -0
  33. package/dist/{chunk-ATIFLPH6.mjs → chunk-D7D25O6E.mjs} +4 -2
  34. package/dist/{chunk-ATIFLPH6.mjs.map → chunk-D7D25O6E.mjs.map} +1 -1
  35. package/dist/{chunk-JS4IB5IU.mjs → chunk-DRGMEIPT.mjs} +2 -2
  36. package/dist/chunk-DRGMEIPT.mjs.map +1 -0
  37. package/dist/{chunk-KF2Y7HO3.js → chunk-DZXNYLVG.js} +43 -246
  38. package/dist/chunk-DZXNYLVG.js.map +1 -0
  39. package/dist/{chunk-IE6GCHDI.mjs → chunk-GR52ENYI.mjs} +26 -29
  40. package/dist/chunk-GR52ENYI.mjs.map +1 -0
  41. package/dist/chunk-GTBKQXXI.js +1472 -0
  42. package/dist/chunk-GTBKQXXI.js.map +1 -0
  43. package/dist/{chunk-463SRKKD.js → chunk-HJ24WKU4.js} +14 -5
  44. package/dist/chunk-HJ24WKU4.js.map +1 -0
  45. package/dist/{chunk-EOF3QNPF.js → chunk-KKIKOIMP.js} +140 -1028
  46. package/dist/chunk-KKIKOIMP.js.map +1 -0
  47. package/dist/{chunk-MNM6HE72.js → chunk-LVJSKRX3.js} +16 -15
  48. package/dist/chunk-LVJSKRX3.js.map +1 -0
  49. package/dist/{chunk-KPDYKK3V.js → chunk-PFZZJZ64.js} +8 -8
  50. package/dist/{chunk-KPDYKK3V.js.map → chunk-PFZZJZ64.js.map} +1 -1
  51. package/dist/{chunk-KVBMZNWT.mjs → chunk-POCAW2G4.mjs} +18 -10
  52. package/dist/chunk-POCAW2G4.mjs.map +1 -0
  53. package/dist/{chunk-L2TIGA7I.js → chunk-QCFLZ7X3.js} +39 -42
  54. package/dist/chunk-QCFLZ7X3.js.map +1 -0
  55. package/dist/{chunk-6EUAU67C.mjs → chunk-SG2TD7FQ.mjs} +8 -8
  56. package/dist/chunk-SG2TD7FQ.mjs.map +1 -0
  57. package/dist/{chunk-QY65OUAC.mjs → chunk-SSFALO6S.mjs} +13 -4
  58. package/dist/chunk-SSFALO6S.mjs.map +1 -0
  59. package/dist/{chunk-PWF2NJDB.mjs → chunk-WC2TCWXK.mjs} +82 -14
  60. package/dist/chunk-WC2TCWXK.mjs.map +1 -0
  61. package/dist/{chunk-ZGCN5WCG.js → chunk-XZZZ4MZV.js} +83 -15
  62. package/dist/chunk-XZZZ4MZV.js.map +1 -0
  63. package/dist/chunk-YCDCQSYH.js +411 -0
  64. package/dist/chunk-YCDCQSYH.js.map +1 -0
  65. package/dist/{chunk-CWJ4OU6W.mjs → chunk-ZDAZYIXB.mjs} +2 -4
  66. package/dist/chunk-ZDAZYIXB.mjs.map +1 -0
  67. package/dist/feedback.d.mts +20 -8
  68. package/dist/feedback.d.ts +20 -8
  69. package/dist/feedback.js +5 -5
  70. package/dist/feedback.mjs +4 -4
  71. package/dist/fonts/HumanSans-BlackOblique.otf +0 -0
  72. package/dist/fonts/HumanSans-Thin.otf +0 -0
  73. package/dist/fonts/HumanSans-ThinOblique.otf +0 -0
  74. package/dist/fonts/human-sans-font.css +88 -0
  75. package/dist/fonts/human-sans.css +3 -0
  76. package/dist/fonts/inter.css +3 -0
  77. package/dist/icons.d.mts +2 -3
  78. package/dist/icons.d.ts +2 -3
  79. package/dist/icons.js +2 -2
  80. package/dist/icons.mjs +1 -1
  81. package/dist/index.d.mts +37 -8
  82. package/dist/index.d.ts +37 -8
  83. package/dist/index.js +23 -90
  84. package/dist/index.js.map +1 -1
  85. package/dist/index.mjs +46 -113
  86. package/dist/index.mjs.map +1 -1
  87. package/dist/inputs.d.mts +23 -3
  88. package/dist/inputs.d.ts +23 -3
  89. package/dist/inputs.js +5 -5
  90. package/dist/inputs.js.map +1 -1
  91. package/dist/inputs.mjs +15 -15
  92. package/dist/layout.d.mts +37 -283
  93. package/dist/layout.d.ts +37 -283
  94. package/dist/layout.js +8 -32
  95. package/dist/layout.js.map +1 -1
  96. package/dist/layout.mjs +16 -40
  97. package/dist/navigation.d.mts +9 -114
  98. package/dist/navigation.d.ts +9 -114
  99. package/dist/navigation.js +5 -9
  100. package/dist/navigation.js.map +1 -1
  101. package/dist/navigation.mjs +6 -10
  102. package/dist/third-party.d.mts +3 -527
  103. package/dist/third-party.d.ts +3 -527
  104. package/dist/third-party.js +2 -40
  105. package/dist/third-party.js.map +1 -1
  106. package/dist/third-party.mjs +3 -41
  107. package/dist/tokens.css +45 -71
  108. package/dist/utilities.js +2 -4
  109. package/dist/utilities.js.map +1 -1
  110. package/dist/utilities.mjs +2 -4
  111. package/package.json +23 -9
  112. package/dist/WorkflowNode-BnxXO6t_.d.mts +0 -46
  113. package/dist/WorkflowNode-BnxXO6t_.d.ts +0 -46
  114. package/dist/chunk-27JEWSWA.mjs +0 -233
  115. package/dist/chunk-27JEWSWA.mjs.map +0 -1
  116. package/dist/chunk-3WCMINE5.mjs.map +0 -1
  117. package/dist/chunk-463SRKKD.js.map +0 -1
  118. package/dist/chunk-6EUAU67C.mjs.map +0 -1
  119. package/dist/chunk-AIY6222Q.js +0 -11
  120. package/dist/chunk-AIY6222Q.js.map +0 -1
  121. package/dist/chunk-AJBM7IE6.mjs +0 -2366
  122. package/dist/chunk-AJBM7IE6.mjs.map +0 -1
  123. package/dist/chunk-CCN6M4LI.js.map +0 -1
  124. package/dist/chunk-CUCKULYC.mjs.map +0 -1
  125. package/dist/chunk-CWJ4OU6W.mjs.map +0 -1
  126. package/dist/chunk-EOF3QNPF.js.map +0 -1
  127. package/dist/chunk-FFZ5S7PQ.mjs.map +0 -1
  128. package/dist/chunk-FN5YL4BK.js.map +0 -1
  129. package/dist/chunk-HLH2VWXL.js +0 -2658
  130. package/dist/chunk-HLH2VWXL.js.map +0 -1
  131. package/dist/chunk-IE6GCHDI.mjs.map +0 -1
  132. package/dist/chunk-JS4IB5IU.mjs.map +0 -1
  133. package/dist/chunk-KF2Y7HO3.js.map +0 -1
  134. package/dist/chunk-KVBMZNWT.mjs.map +0 -1
  135. package/dist/chunk-L2TIGA7I.js.map +0 -1
  136. package/dist/chunk-MNM6HE72.js.map +0 -1
  137. package/dist/chunk-NXTVJ6PY.js.map +0 -1
  138. package/dist/chunk-PWF2NJDB.mjs.map +0 -1
  139. package/dist/chunk-QD6RLAO2.mjs +0 -11
  140. package/dist/chunk-QD6RLAO2.mjs.map +0 -1
  141. package/dist/chunk-QY65OUAC.mjs.map +0 -1
  142. package/dist/chunk-QYYQYZHV.js.map +0 -1
  143. package/dist/chunk-T7LPABOL.mjs +0 -595
  144. package/dist/chunk-T7LPABOL.mjs.map +0 -1
  145. package/dist/chunk-THQKYTQE.js.map +0 -1
  146. package/dist/chunk-X7E6GMFL.js +0 -233
  147. package/dist/chunk-X7E6GMFL.js.map +0 -1
  148. package/dist/chunk-XF66WQZE.mjs +0 -1535
  149. package/dist/chunk-XF66WQZE.mjs.map +0 -1
  150. package/dist/chunk-YQOZPLTY.js +0 -1535
  151. package/dist/chunk-YQOZPLTY.js.map +0 -1
  152. package/dist/chunk-ZGCN5WCG.js.map +0 -1
  153. package/dist/index.css +0 -79
  154. package/dist/index.css.map +0 -1
  155. /package/dist/{HumanSans-Black-C4YJONK7.otf → fonts/HumanSans-Black.otf} +0 -0
  156. /package/dist/{HumanSans-Bold-4EAJ3L3T.otf → fonts/HumanSans-Bold.otf} +0 -0
  157. /package/dist/{HumanSans-BoldOblique-4D325T4F.otf → fonts/HumanSans-BoldOblique.otf} +0 -0
  158. /package/dist/{HumanSans-ExtraLight-VL7DEKQ4.otf → fonts/HumanSans-ExtraLight.otf} +0 -0
  159. /package/dist/{HumanSans-ExtraLightOblique-VK2JTUXF.otf → fonts/HumanSans-ExtraLightOblique.otf} +0 -0
  160. /package/dist/{HumanSans-Light-YV7AFKRB.otf → fonts/HumanSans-Light.otf} +0 -0
  161. /package/dist/{HumanSans-LightOblique-VIXV7QA6.otf → fonts/HumanSans-LightOblique.otf} +0 -0
  162. /package/dist/{HumanSans-Medium-UULJ3PIR.otf → fonts/HumanSans-Medium.otf} +0 -0
  163. /package/dist/{HumanSans-MediumOblique-M7FHDZRS.otf → fonts/HumanSans-MediumOblique.otf} +0 -0
  164. /package/dist/{HumanSans-Regular-QMFEP3F6.otf → fonts/HumanSans-Regular.otf} +0 -0
  165. /package/dist/{HumanSans-RegularOblique-YPKQJAAM.otf → fonts/HumanSans-RegularOblique.otf} +0 -0
@@ -0,0 +1,1478 @@
1
+ import {
2
+ IconButton
3
+ } from "./chunk-5ASG6G6U.mjs";
4
+ import {
5
+ TextField
6
+ } from "./chunk-ZP26PGMS.mjs";
7
+ import {
8
+ Link
9
+ } from "./chunk-PHMNZK2R.mjs";
10
+ import {
11
+ Button
12
+ } from "./chunk-BOQPWZIB.mjs";
13
+ import {
14
+ Badge
15
+ } from "./chunk-QBCRH7YF.mjs";
16
+ import {
17
+ webSurfaceTokens
18
+ } from "./chunk-WC2TCWXK.mjs";
19
+
20
+ // src/components/navigation/Dropdown/Dropdown.tsx
21
+ import Popover from "@mui/material/Popover";
22
+ import { useCallback, useRef } from "react";
23
+
24
+ // src/components/navigation/Dropdown/DropdownAnchor.tsx
25
+ import { forwardRef } from "react";
26
+ import Stack from "@mui/material/Stack";
27
+ import { styled } from "@mui/material/styles";
28
+ import { avatarClasses } from "@mui/material/Avatar";
29
+ import Typography from "@mui/material/Typography";
30
+ import Button2 from "@mui/material/Button";
31
+ import { ArrowDropUp, ArrowDropDown } from "@mui/icons-material";
32
+ import { jsx, jsxs } from "react/jsx-runtime";
33
+ var Clickable = styled(Button2)({
34
+ padding: 0
35
+ });
36
+ var Anchor = styled(Stack)(({ theme, variant }) => ({
37
+ height: 40,
38
+ borderRadius: 25,
39
+ padding: theme.spacing(1),
40
+ color: theme.palette.text.secondary,
41
+ backgroundColor: variant !== "header" ? theme.palette.grey[200] : "transparent",
42
+ cursor: "pointer"
43
+ }));
44
+ var Left = styled("div")(({ theme }) => ({
45
+ [`& .${avatarClasses.root}`]: {
46
+ width: 30,
47
+ height: 30,
48
+ borderWidth: 2,
49
+ borderStyle: "solid",
50
+ borderColor: theme.palette.background.paper
51
+ }
52
+ }));
53
+ var Center = styled(Typography)(({ theme }) => ({
54
+ fontWeight: theme.typography.fontWeightBold,
55
+ color: theme.palette.text.primary
56
+ }));
57
+ var DropdownAnchor = forwardRef(
58
+ ({ open, label, leftElement, onOpen, variant, ...props }, ref) => /* @__PURE__ */ jsx(Clickable, { ref, ...props, color: "inherit", variant: "text", onClick: onOpen, children: /* @__PURE__ */ jsxs(Anchor, { variant, spacing: 1, direction: "row", alignItems: "stretch", children: [
59
+ /* @__PURE__ */ jsx(Left, { children: leftElement }),
60
+ /* @__PURE__ */ jsx(Center, { variant: "body1", children: label }),
61
+ variant !== "header" && (open ? /* @__PURE__ */ jsx(ArrowDropUp, {}) : /* @__PURE__ */ jsx(ArrowDropDown, {}))
62
+ ] }) })
63
+ );
64
+ DropdownAnchor.displayName = "DropdownAnchor";
65
+
66
+ // src/components/navigation/Dropdown/Dropdown.tsx
67
+ import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
68
+ var Dropdown = ({
69
+ open,
70
+ label,
71
+ leftElement,
72
+ direction = "left",
73
+ children,
74
+ onToggle,
75
+ dense = false,
76
+ disableGutters = false,
77
+ disablePaddings = false,
78
+ variant,
79
+ renderAnchor = ({ ref, open: open2, onOpen }) => /* @__PURE__ */ jsx2(DropdownAnchor, { ref, open: open2, label, leftElement, onOpen, variant })
80
+ }) => {
81
+ const anchorRef = useRef(null);
82
+ const horizontal = direction === "left" ? "right" : "left";
83
+ const onOpen = useCallback(() => onToggle?.(true), [onToggle]);
84
+ const padding = dense ? 1 : 2;
85
+ return /* @__PURE__ */ jsxs2(Fragment, { children: [
86
+ renderAnchor({ ref: anchorRef, onOpen, open }),
87
+ /* @__PURE__ */ jsx2(
88
+ Popover,
89
+ {
90
+ "aria-label": "Overlay",
91
+ open,
92
+ onClose: () => onToggle?.(false),
93
+ anchorEl: anchorRef.current,
94
+ anchorOrigin: {
95
+ horizontal,
96
+ vertical: "bottom"
97
+ },
98
+ transformOrigin: {
99
+ horizontal,
100
+ vertical: -8
101
+ },
102
+ slotProps: {
103
+ paper: {
104
+ elevation: 0,
105
+ sx: {
106
+ padding: disablePaddings ? 0 : padding,
107
+ paddingX: !disablePaddings && disableGutters ? 0 : padding,
108
+ borderRadius: 3,
109
+ border: "1px solid",
110
+ borderColor: "divider",
111
+ boxShadow: 2
112
+ }
113
+ }
114
+ },
115
+ children
116
+ }
117
+ )
118
+ ] });
119
+ };
120
+
121
+ // src/components/navigation/Sidebar.tsx
122
+ import Drawer from "@mui/material/Drawer";
123
+ import List from "@mui/material/List";
124
+ import Box from "@mui/material/Box";
125
+ import { styled as styled3 } from "@mui/material/styles";
126
+
127
+ // src/components/navigation/SidebarItem.tsx
128
+ import ListItemButton from "@mui/material/ListItemButton";
129
+ import ListItemIcon from "@mui/material/ListItemIcon";
130
+ import ListItemText from "@mui/material/ListItemText";
131
+ import { styled as styled2 } from "@mui/material/styles";
132
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
133
+ var StyledListItemButton = styled2(ListItemButton, {
134
+ shouldForwardProp: (prop) => prop !== "selected" && prop !== "size"
135
+ })(({ theme, selected, size = "medium" }) => {
136
+ const heightMap = {
137
+ small: "40px",
138
+ medium: "56px",
139
+ large: "64px"
140
+ };
141
+ return {
142
+ height: heightMap[size],
143
+ paddingLeft: "16px",
144
+ paddingRight: "16px",
145
+ borderRadius: "8px",
146
+ margin: "4px 8px",
147
+ color: selected ? theme.palette.primary.main : theme.palette.text.primary,
148
+ backgroundColor: selected ? theme.palette.background.selected : "transparent",
149
+ "&:hover": {
150
+ backgroundColor: selected ? theme.palette.background.selected : theme.palette.grey[50]
151
+ },
152
+ "& .MuiListItemIcon-root": {
153
+ color: selected ? theme.palette.primary.main : theme.palette.text.secondary,
154
+ minWidth: "40px"
155
+ },
156
+ "& .MuiListItemText-primary": {
157
+ fontWeight: selected ? 600 : 400,
158
+ color: selected ? theme.palette.primary.main : theme.palette.text.primary
159
+ }
160
+ };
161
+ });
162
+ var SidebarItem = ({
163
+ label,
164
+ icon,
165
+ selected = false,
166
+ onClick,
167
+ size = "medium",
168
+ endIcon,
169
+ children
170
+ }) => {
171
+ return /* @__PURE__ */ jsxs3(StyledListItemButton, { selected, size, onClick, children: [
172
+ icon && /* @__PURE__ */ jsx3(ListItemIcon, { children: icon }),
173
+ /* @__PURE__ */ jsx3(ListItemText, { primary: label }),
174
+ endIcon && /* @__PURE__ */ jsx3("div", { style: { marginLeft: "auto" }, children: endIcon }),
175
+ children
176
+ ] });
177
+ };
178
+
179
+ // src/components/navigation/Sidebar.tsx
180
+ import { jsx as jsx4 } from "react/jsx-runtime";
181
+ var StyledDrawer = styled3(Drawer)(({ theme }) => ({
182
+ "& .MuiDrawer-paper": {
183
+ backgroundColor: theme.palette.background.paper,
184
+ borderRight: `1px solid ${theme.palette.grey[200]}`,
185
+ boxShadow: "none"
186
+ }
187
+ }));
188
+ var Sidebar = ({
189
+ open = true,
190
+ width = 280,
191
+ items,
192
+ onClose,
193
+ variant = "permanent"
194
+ }) => {
195
+ return /* @__PURE__ */ jsx4(
196
+ StyledDrawer,
197
+ {
198
+ variant,
199
+ open,
200
+ onClose,
201
+ sx: {
202
+ width,
203
+ flexShrink: 0,
204
+ "& .MuiDrawer-paper": {
205
+ width,
206
+ boxSizing: "border-box"
207
+ }
208
+ },
209
+ children: /* @__PURE__ */ jsx4(Box, { sx: { overflow: "auto", padding: "8px 0" }, children: /* @__PURE__ */ jsx4(List, { children: items.map((item, index) => /* @__PURE__ */ jsx4(SidebarItem, { ...item }, index)) }) })
210
+ }
211
+ );
212
+ };
213
+
214
+ // src/components/navigation/Stepper.tsx
215
+ import MuiStepper from "@mui/material/Stepper";
216
+ import MuiStep from "@mui/material/Step";
217
+ import MuiStepLabel from "@mui/material/StepLabel";
218
+ import MuiStepContent from "@mui/material/StepContent";
219
+ import MuiStepButton from "@mui/material/StepButton";
220
+ import { jsx as jsx5 } from "react/jsx-runtime";
221
+ var Stepper = (props) => {
222
+ return /* @__PURE__ */ jsx5(MuiStepper, { ...props });
223
+ };
224
+ var Step = (props) => {
225
+ return /* @__PURE__ */ jsx5(MuiStep, { ...props });
226
+ };
227
+ var StepLabel = (props) => {
228
+ return /* @__PURE__ */ jsx5(MuiStepLabel, { ...props });
229
+ };
230
+ var StepContent = (props) => {
231
+ return /* @__PURE__ */ jsx5(MuiStepContent, { ...props });
232
+ };
233
+ var StepButton = (props) => {
234
+ return /* @__PURE__ */ jsx5(MuiStepButton, { ...props });
235
+ };
236
+
237
+ // src/components/navigation/NumberedStepper.tsx
238
+ import React from "react";
239
+ import { styled as styled4 } from "@mui/material/styles";
240
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
241
+ var Root = styled4("ol")({
242
+ listStyle: "none",
243
+ padding: 0,
244
+ margin: 0,
245
+ display: "flex",
246
+ flexDirection: "column",
247
+ gap: 8
248
+ });
249
+ var Row = styled4("li")({
250
+ display: "flex",
251
+ gap: 10,
252
+ alignItems: "center"
253
+ });
254
+ var Num = styled4("span", {
255
+ shouldForwardProp: (p) => p !== "state"
256
+ })(({ state }) => ({
257
+ width: 24,
258
+ height: 24,
259
+ flexShrink: 0,
260
+ borderRadius: "50%",
261
+ display: "flex",
262
+ alignItems: "center",
263
+ justifyContent: "center",
264
+ fontSize: 12,
265
+ fontWeight: 600,
266
+ border: `1px solid ${webSurfaceTokens.strokeOnMed}`,
267
+ background: webSurfaceTokens.surfaceContrast,
268
+ color: webSurfaceTokens.textSecondary,
269
+ ...state === "active" && {
270
+ background: webSurfaceTokens.cVioletLight,
271
+ borderColor: webSurfaceTokens.cViolet,
272
+ color: webSurfaceTokens.cVioletDark
273
+ },
274
+ ...state === "done" && {
275
+ background: webSurfaceTokens.cViolet,
276
+ borderColor: webSurfaceTokens.cViolet,
277
+ color: "white"
278
+ }
279
+ }));
280
+ var Label = styled4("span", {
281
+ shouldForwardProp: (p) => p !== "active"
282
+ })(({ active }) => ({
283
+ fontSize: 13,
284
+ color: active ? webSurfaceTokens.textPrimary : webSurfaceTokens.textSecondary,
285
+ fontWeight: active ? 500 : 400
286
+ }));
287
+ var NumberedStepper = React.forwardRef(
288
+ function NumberedStepper2({ steps, current, className }, ref) {
289
+ return /* @__PURE__ */ jsx6(Root, { ref, className, children: steps.map((s, i) => {
290
+ const state = i < current ? "done" : i === current ? "active" : "pending";
291
+ return /* @__PURE__ */ jsxs4(Row, { ...state === "active" ? { "aria-current": "step" } : {}, children: [
292
+ /* @__PURE__ */ jsx6(Num, { state, children: state === "done" ? "\u2713" : i + 1 }),
293
+ /* @__PURE__ */ jsx6(Label, { active: state === "active", children: s.label })
294
+ ] }, s.key);
295
+ }) });
296
+ }
297
+ );
298
+
299
+ // src/components/navigation/SideNav/SideNav.tsx
300
+ import React2, { useState, useCallback as useCallback2 } from "react";
301
+ import Box2 from "@mui/material/Box";
302
+ import { styled as styled5 } from "@mui/material/styles";
303
+
304
+ // src/components/navigation/SideNav/styles.ts
305
+ var scrollbarStyles = {
306
+ "&::-webkit-scrollbar": {
307
+ width: "8px"
308
+ },
309
+ "&::-webkit-scrollbar-track": {
310
+ backgroundColor: "transparent"
311
+ },
312
+ "&::-webkit-scrollbar-thumb": {
313
+ backgroundColor: "rgba(0, 0, 0, 0.2)",
314
+ borderRadius: "4px",
315
+ "&:hover": {
316
+ backgroundColor: "rgba(0, 0, 0, 0.3)"
317
+ }
318
+ }
319
+ };
320
+
321
+ // src/components/navigation/SideNav/SideNav.tsx
322
+ import { jsx as jsx7 } from "react/jsx-runtime";
323
+ var SideNavContext = React2.createContext({
324
+ collapsed: false,
325
+ showTooltips: true
326
+ });
327
+ var SideNavContainer = styled5(Box2, {
328
+ shouldForwardProp: (prop) => !["navWidth", "navPosition", "showBorder", "backgroundColor", "isCollapsed", "collapsedWidth", "transitionDuration"].includes(prop)
329
+ })(({ theme, navWidth = 280, navPosition = "left", showBorder = true, backgroundColor, isCollapsed = false, collapsedWidth = 68, transitionDuration = 300 }) => ({
330
+ width: isCollapsed ? collapsedWidth : navWidth,
331
+ height: "100%",
332
+ display: "flex",
333
+ flexDirection: "column",
334
+ backgroundColor: backgroundColor || theme.palette.background.paper,
335
+ overflow: "hidden",
336
+ transition: `width ${transitionDuration}ms ${theme.transitions.easing.easeInOut}`,
337
+ // Disable transition for reduced motion preference
338
+ "@media (prefers-reduced-motion: reduce)": {
339
+ transition: "none"
340
+ },
341
+ // Border on the appropriate side
342
+ ...showBorder && {
343
+ borderRight: navPosition === "left" ? `1px solid ${theme.palette.divider}` : "none",
344
+ borderLeft: navPosition === "right" ? `1px solid ${theme.palette.divider}` : "none"
345
+ }
346
+ }));
347
+ var HeaderSection = styled5(Box2)(({ theme }) => ({
348
+ flexShrink: 0,
349
+ backgroundColor: theme.palette.background.paper
350
+ }));
351
+ var NavigationSection = styled5(Box2)(() => ({
352
+ flexGrow: 1,
353
+ overflowY: "auto",
354
+ overflowX: "hidden",
355
+ ...scrollbarStyles
356
+ }));
357
+ var FooterSection = styled5(Box2)(({ theme }) => ({
358
+ flexShrink: 0,
359
+ backgroundColor: theme.palette.background.paper
360
+ }));
361
+ var Header = React2.memo(({ children, className }) => {
362
+ const { collapsed, onToggleCollapse } = React2.useContext(SideNavContext);
363
+ const enhancedChildren = React2.Children.map(children, (child) => {
364
+ if (React2.isValidElement(child)) {
365
+ return React2.cloneElement(child, {
366
+ collapsed,
367
+ onCollapse: onToggleCollapse
368
+ });
369
+ }
370
+ return child;
371
+ });
372
+ return /* @__PURE__ */ jsx7(HeaderSection, { className, "data-testid": "sidenav-header", children: enhancedChildren });
373
+ });
374
+ Header.displayName = "SideNav.Header";
375
+ var Navigation = React2.memo(({ children, className }) => {
376
+ const { collapsed, showTooltips } = React2.useContext(SideNavContext);
377
+ const enhancedChildren = React2.Children.map(children, (child) => {
378
+ if (React2.isValidElement(child)) {
379
+ return React2.cloneElement(child, {
380
+ collapsed,
381
+ showTooltips
382
+ });
383
+ }
384
+ return child;
385
+ });
386
+ return /* @__PURE__ */ jsx7(NavigationSection, { className, "data-testid": "sidenav-navigation", children: enhancedChildren });
387
+ });
388
+ Navigation.displayName = "SideNav.Navigation";
389
+ var Footer = React2.memo(({ children, className }) => {
390
+ const { collapsed } = React2.useContext(SideNavContext);
391
+ const enhancedChildren = React2.Children.map(children, (child) => {
392
+ if (React2.isValidElement(child)) {
393
+ return React2.cloneElement(child, {
394
+ compact: collapsed
395
+ });
396
+ }
397
+ return child;
398
+ });
399
+ return /* @__PURE__ */ jsx7(FooterSection, { className, "data-testid": "sidenav-footer", children: enhancedChildren });
400
+ });
401
+ Footer.displayName = "SideNav.Footer";
402
+ var SideNav = Object.assign(
403
+ React2.memo(({
404
+ width = 280,
405
+ collapsedWidth = 68,
406
+ collapsed: controlledCollapsed,
407
+ defaultCollapsed = false,
408
+ onCollapseChange,
409
+ transitionDuration = 300,
410
+ showTooltips = true,
411
+ position = "left",
412
+ showBorder = true,
413
+ backgroundColor,
414
+ children,
415
+ className,
416
+ ariaLabel = "Main navigation"
417
+ }) => {
418
+ const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);
419
+ const isControlled = controlledCollapsed !== void 0;
420
+ const collapsed = isControlled ? controlledCollapsed : internalCollapsed;
421
+ const handleToggleCollapse = useCallback2(() => {
422
+ const newCollapsed = !collapsed;
423
+ if (!isControlled) {
424
+ setInternalCollapsed(newCollapsed);
425
+ }
426
+ if (onCollapseChange) {
427
+ onCollapseChange(newCollapsed);
428
+ }
429
+ }, [collapsed, isControlled, onCollapseChange]);
430
+ const contextValue = {
431
+ collapsed,
432
+ showTooltips,
433
+ onToggleCollapse: handleToggleCollapse
434
+ };
435
+ return /* @__PURE__ */ jsx7(SideNavContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx7(
436
+ SideNavContainer,
437
+ {
438
+ role: "navigation",
439
+ "aria-label": ariaLabel,
440
+ navWidth: width,
441
+ collapsedWidth,
442
+ isCollapsed: collapsed,
443
+ transitionDuration,
444
+ navPosition: position,
445
+ showBorder,
446
+ backgroundColor,
447
+ className,
448
+ children
449
+ }
450
+ ) });
451
+ }),
452
+ {
453
+ Header,
454
+ Navigation,
455
+ Footer
456
+ }
457
+ );
458
+ SideNav.displayName = "SideNav";
459
+
460
+ // src/components/navigation/SideNav/SideNavHeader.tsx
461
+ import React3 from "react";
462
+ import Box3 from "@mui/material/Box";
463
+ import Typography2 from "@mui/material/Typography";
464
+ import IconButton2 from "@mui/material/IconButton";
465
+ import Tooltip from "@mui/material/Tooltip";
466
+ import ButtonBase from "@mui/material/ButtonBase";
467
+ import { styled as styled6 } from "@mui/material/styles";
468
+ import ChevronLeftIcon from "@mui/icons-material/ChevronLeft";
469
+ import ChevronRightIcon from "@mui/icons-material/ChevronRight";
470
+ import { Fragment as Fragment2, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
471
+ var HeaderContainer = styled6(Box3, {
472
+ shouldForwardProp: (prop) => prop !== "isCollapsed"
473
+ })(({ theme, isCollapsed }) => ({
474
+ display: "flex",
475
+ flexDirection: isCollapsed ? "column" : "row",
476
+ alignItems: "center",
477
+ justifyContent: isCollapsed ? "center" : "flex-start",
478
+ gap: isCollapsed ? theme.spacing(1) : theme.spacing(1.5),
479
+ padding: theme.spacing(2),
480
+ borderBottom: `1px solid ${theme.palette.divider}`,
481
+ transition: theme.transitions.create(["gap", "justify-content", "flex-direction"], {
482
+ duration: theme.transitions.duration.shorter
483
+ })
484
+ }));
485
+ var BrandingButton = styled6(ButtonBase)(({ theme }) => ({
486
+ display: "flex",
487
+ alignItems: "center",
488
+ gap: theme.spacing(1.5),
489
+ minWidth: 0,
490
+ padding: 0,
491
+ borderRadius: theme.shape.borderRadius,
492
+ // Subtle hover feedback only when clickable
493
+ "&:hover": {
494
+ opacity: 0.8
495
+ },
496
+ "&:focus-visible": {
497
+ outline: `2px solid ${theme.palette.primary.main}`,
498
+ outlineOffset: 2
499
+ }
500
+ }));
501
+ var SideNavHeader = React3.memo(({
502
+ logo,
503
+ title,
504
+ showCollapseButton = true,
505
+ onCollapse,
506
+ onLogoClick,
507
+ ariaLabel,
508
+ collapsed = false
509
+ }) => {
510
+ const headerAriaLabel = ariaLabel || `${title} navigation header`;
511
+ const brandingContent = /* @__PURE__ */ jsxs5(Fragment2, { children: [
512
+ logo && /* @__PURE__ */ jsx8(
513
+ Box3,
514
+ {
515
+ sx: {
516
+ display: "flex",
517
+ alignItems: "center",
518
+ justifyContent: "center",
519
+ flexShrink: 0
520
+ },
521
+ children: logo
522
+ }
523
+ ),
524
+ !collapsed && /* @__PURE__ */ jsx8(
525
+ Typography2,
526
+ {
527
+ variant: "subtitle1",
528
+ sx: {
529
+ fontWeight: 700,
530
+ overflow: "hidden",
531
+ textOverflow: "ellipsis",
532
+ whiteSpace: "nowrap",
533
+ minWidth: 0
534
+ },
535
+ children: title
536
+ }
537
+ )
538
+ ] });
539
+ return /* @__PURE__ */ jsxs5(
540
+ HeaderContainer,
541
+ {
542
+ "data-testid": "sidenav-header-content",
543
+ "aria-label": headerAriaLabel,
544
+ isCollapsed: collapsed,
545
+ children: [
546
+ onLogoClick ? /* @__PURE__ */ jsx8(
547
+ BrandingButton,
548
+ {
549
+ onClick: onLogoClick,
550
+ "aria-label": `Go to ${title} home`,
551
+ "data-testid": "sidenav-home-link",
552
+ children: brandingContent
553
+ }
554
+ ) : /* @__PURE__ */ jsx8(
555
+ Box3,
556
+ {
557
+ sx: {
558
+ display: "flex",
559
+ alignItems: "center",
560
+ gap: 1.5,
561
+ minWidth: 0
562
+ },
563
+ children: brandingContent
564
+ }
565
+ ),
566
+ showCollapseButton && /* @__PURE__ */ jsx8(
567
+ Tooltip,
568
+ {
569
+ title: collapsed ? "Expand navigation" : "Collapse navigation",
570
+ placement: "right",
571
+ arrow: true,
572
+ children: /* @__PURE__ */ jsx8(
573
+ IconButton2,
574
+ {
575
+ onClick: onCollapse,
576
+ "aria-label": collapsed ? "Expand navigation" : "Collapse navigation",
577
+ "aria-expanded": !collapsed,
578
+ size: "small",
579
+ sx: {
580
+ flexShrink: 0,
581
+ marginLeft: collapsed ? 0 : "auto",
582
+ color: "text.secondary",
583
+ "&:hover": {
584
+ backgroundColor: "action.hover",
585
+ color: "text.primary"
586
+ }
587
+ },
588
+ children: collapsed ? /* @__PURE__ */ jsx8(ChevronRightIcon, {}) : /* @__PURE__ */ jsx8(ChevronLeftIcon, {})
589
+ }
590
+ )
591
+ }
592
+ )
593
+ ]
594
+ }
595
+ );
596
+ });
597
+ SideNavHeader.displayName = "SideNavHeader";
598
+
599
+ // src/components/navigation/SideNav/NavigationList.tsx
600
+ import React5, { useState as useState2 } from "react";
601
+ import List2 from "@mui/material/List";
602
+ import ListItem from "@mui/material/ListItem";
603
+
604
+ // src/components/navigation/SideNav/NavigationItem.tsx
605
+ import React4 from "react";
606
+ import ListItemButton2 from "@mui/material/ListItemButton";
607
+ import ListItemIcon2 from "@mui/material/ListItemIcon";
608
+ import ListItemText2 from "@mui/material/ListItemText";
609
+ import Box4 from "@mui/material/Box";
610
+ import Tooltip2 from "@mui/material/Tooltip";
611
+ import { styled as styled7 } from "@mui/material/styles";
612
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
613
+ var StyledListItemButton2 = styled7(ListItemButton2, {
614
+ shouldForwardProp: (prop) => !["selected", "size", "iconPosition", "isCollapsed"].includes(prop)
615
+ })(({ theme, selected, size, isCollapsed }) => {
616
+ const heights = {
617
+ small: 40,
618
+ medium: 48,
619
+ large: 56
620
+ };
621
+ return {
622
+ minHeight: heights[size] || heights.medium,
623
+ padding: theme.spacing(1, 1.5),
624
+ // 8px 12px
625
+ margin: theme.spacing(0.5, 1),
626
+ // 4px 8px
627
+ borderRadius: theme.shape.borderRadius,
628
+ gap: isCollapsed ? 0 : theme.spacing(1),
629
+ // No gap in collapsed mode
630
+ justifyContent: isCollapsed ? "center" : "flex-start",
631
+ transition: theme.transitions.create(
632
+ ["background-color", "color", "justify-content"],
633
+ { duration: theme.transitions.duration.shortest }
634
+ ),
635
+ // Default state
636
+ color: theme.palette.text.primary,
637
+ backgroundColor: "transparent",
638
+ "& .MuiListItemIcon-root": {
639
+ minWidth: "auto",
640
+ color: theme.palette.text.secondary
641
+ },
642
+ // Hover state
643
+ "&:hover": {
644
+ backgroundColor: theme.palette.action.hover,
645
+ "& .MuiListItemIcon-root": {
646
+ color: theme.palette.text.primary
647
+ }
648
+ },
649
+ // Selected state
650
+ ...selected && {
651
+ color: theme.palette.primary.main,
652
+ backgroundColor: theme.palette.action.selected,
653
+ "& .MuiListItemIcon-root": {
654
+ minWidth: "auto",
655
+ color: theme.palette.primary.main
656
+ },
657
+ "&:hover": {
658
+ backgroundColor: theme.palette.action.selected,
659
+ "& .MuiListItemIcon-root": {
660
+ color: theme.palette.primary.main
661
+ }
662
+ }
663
+ },
664
+ // Disabled state
665
+ "&.Mui-disabled": {
666
+ opacity: 1,
667
+ color: theme.palette.text.disabled,
668
+ "& .MuiListItemIcon-root": {
669
+ color: theme.palette.action.disabled
670
+ }
671
+ }
672
+ };
673
+ });
674
+ var NavigationItem = React4.memo(
675
+ // Public ref typed `HTMLElement` because MuiListItemButton renders one of
676
+ // `<li>` (default), `<a>` (when `href` is set), or `<button>` (when
677
+ // `component="button"`). Pinning to HTMLDivElement would have misled
678
+ // consumers about the runtime element.
679
+ React4.forwardRef(function NavigationItem2({
680
+ id,
681
+ label,
682
+ icon,
683
+ iconPosition = "left",
684
+ selected = false,
685
+ disabled = false,
686
+ onClick,
687
+ endContent,
688
+ href,
689
+ ariaLabel,
690
+ size = "medium",
691
+ collapsed = false,
692
+ showTooltip = true,
693
+ tooltipPlacement = "right",
694
+ ...rest
695
+ }, ref) {
696
+ const handleClick = () => {
697
+ if (!disabled && onClick) {
698
+ onClick(id);
699
+ }
700
+ };
701
+ const iconElement = icon && /* @__PURE__ */ jsx9(
702
+ ListItemIcon2,
703
+ {
704
+ sx: {
705
+ fontSize: 24,
706
+ width: 24,
707
+ height: 24,
708
+ display: "flex",
709
+ alignItems: "center",
710
+ justifyContent: "center"
711
+ },
712
+ children: icon
713
+ }
714
+ );
715
+ const labelElement = /* @__PURE__ */ jsx9(
716
+ ListItemText2,
717
+ {
718
+ primary: label,
719
+ primaryTypographyProps: {
720
+ sx: {
721
+ fontWeight: 400,
722
+ fontSize: 16,
723
+ lineHeight: 1.5,
724
+ letterSpacing: "0.0168em",
725
+ display: collapsed ? "none" : "block",
726
+ opacity: collapsed ? 0 : 1,
727
+ transition: (theme) => theme.transitions.create(["opacity"], {
728
+ duration: theme.transitions.duration.shorter
729
+ })
730
+ }
731
+ }
732
+ }
733
+ );
734
+ const buttonContent = /* @__PURE__ */ jsxs6(
735
+ StyledListItemButton2,
736
+ {
737
+ ref,
738
+ selected,
739
+ disabled,
740
+ onClick: handleClick,
741
+ ...href && { component: "a", href },
742
+ "aria-label": ariaLabel || label,
743
+ "aria-current": selected ? "page" : void 0,
744
+ "aria-disabled": disabled,
745
+ size,
746
+ isCollapsed: collapsed,
747
+ ...rest,
748
+ children: [
749
+ icon && iconPosition === "left" && iconElement,
750
+ labelElement,
751
+ icon && iconPosition === "right" && iconElement,
752
+ endContent && !collapsed && /* @__PURE__ */ jsx9(
753
+ Box4,
754
+ {
755
+ sx: {
756
+ marginLeft: "auto",
757
+ display: "flex",
758
+ alignItems: "center"
759
+ },
760
+ children: endContent
761
+ }
762
+ )
763
+ ]
764
+ }
765
+ );
766
+ if (collapsed && showTooltip) {
767
+ return /* @__PURE__ */ jsx9(
768
+ Tooltip2,
769
+ {
770
+ title: label,
771
+ placement: tooltipPlacement,
772
+ enterDelay: 200,
773
+ leaveDelay: 0,
774
+ arrow: true,
775
+ children: buttonContent
776
+ }
777
+ );
778
+ }
779
+ return buttonContent;
780
+ })
781
+ );
782
+ NavigationItem.displayName = "NavigationItem";
783
+
784
+ // src/components/navigation/SideNav/NavigationList.tsx
785
+ import { jsx as jsx10 } from "react/jsx-runtime";
786
+ var NavigationList = React5.memo(({
787
+ items,
788
+ selectedId,
789
+ onSelectionChange,
790
+ maxHeight = "auto",
791
+ ariaLabel = "Navigation menu",
792
+ collapsed = false,
793
+ showTooltips = true
794
+ }) => {
795
+ const [internalSelectedId, setInternalSelectedId] = useState2(
796
+ selectedId
797
+ );
798
+ const isControlled = selectedId !== void 0;
799
+ const currentSelectedId = isControlled ? selectedId : internalSelectedId;
800
+ const handleItemClick = (id) => {
801
+ if (!isControlled) {
802
+ setInternalSelectedId(id);
803
+ }
804
+ if (onSelectionChange) {
805
+ onSelectionChange(id);
806
+ }
807
+ };
808
+ return /* @__PURE__ */ jsx10(
809
+ List2,
810
+ {
811
+ role: "list",
812
+ "aria-label": ariaLabel,
813
+ sx: {
814
+ padding: 0,
815
+ maxHeight,
816
+ overflowY: maxHeight !== "auto" ? "auto" : "visible",
817
+ overflowX: "hidden",
818
+ ...maxHeight !== "auto" ? scrollbarStyles : {}
819
+ },
820
+ children: items.map((item, index) => {
821
+ const isSelected = currentSelectedId === item.id;
822
+ return /* @__PURE__ */ jsx10(
823
+ ListItem,
824
+ {
825
+ role: "listitem",
826
+ sx: {
827
+ padding: 0,
828
+ display: "block"
829
+ },
830
+ children: /* @__PURE__ */ jsx10(
831
+ NavigationItem,
832
+ {
833
+ ...item,
834
+ selected: isSelected,
835
+ collapsed,
836
+ showTooltip: showTooltips,
837
+ onClick: (id) => {
838
+ if (item.disabled) {
839
+ return;
840
+ }
841
+ if (item.onClick) {
842
+ item.onClick(id);
843
+ }
844
+ handleItemClick(id);
845
+ }
846
+ }
847
+ )
848
+ },
849
+ `${item.id}-${index}`
850
+ );
851
+ })
852
+ }
853
+ );
854
+ });
855
+ NavigationList.displayName = "NavigationList";
856
+
857
+ // src/components/navigation/SideNav/ConnectionStatus.tsx
858
+ import React6 from "react";
859
+ import Box5 from "@mui/material/Box";
860
+ import Typography3 from "@mui/material/Typography";
861
+ import Tooltip3 from "@mui/material/Tooltip";
862
+ import { styled as styled8 } from "@mui/material/styles";
863
+ import PowerIcon from "@mui/icons-material/Power";
864
+ import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
865
+ var StatusPill = styled8(Box5, {
866
+ shouldForwardProp: (prop) => !["variant", "interactive"].includes(prop)
867
+ })(({ theme, variant = "info", interactive }) => {
868
+ const variantColors = {
869
+ success: {
870
+ background: theme.palette.success.light + "20",
871
+ text: theme.palette.success.dark
872
+ },
873
+ warning: {
874
+ background: theme.palette.warning.light + "20",
875
+ text: theme.palette.warning.dark
876
+ },
877
+ error: {
878
+ background: theme.palette.error.light + "20",
879
+ text: theme.palette.error.dark
880
+ },
881
+ info: {
882
+ background: theme.palette.grey[100],
883
+ text: theme.palette.text.primary
884
+ }
885
+ };
886
+ const colors = variantColors[variant] || variantColors.info;
887
+ return {
888
+ display: "inline-flex",
889
+ alignItems: "center",
890
+ justifyContent: "center",
891
+ gap: theme.spacing(1),
892
+ padding: theme.spacing(0.75, 1.5),
893
+ // 6px 12px
894
+ borderRadius: 16,
895
+ // Always pill-shaped
896
+ backgroundColor: colors.background,
897
+ cursor: interactive ? "pointer" : "default",
898
+ transition: theme.transitions.create(["background-color", "transform"], {
899
+ duration: theme.transitions.duration.shortest
900
+ }),
901
+ maxWidth: "100%",
902
+ ...interactive && {
903
+ "&:hover": {
904
+ backgroundColor: colors.background + "40",
905
+ // Slightly darker on hover
906
+ transform: "scale(1.02)"
907
+ },
908
+ "&:active": {
909
+ transform: "scale(0.98)"
910
+ }
911
+ },
912
+ "& .status-text": {
913
+ color: colors.text,
914
+ fontWeight: 500,
915
+ fontSize: 14,
916
+ lineHeight: 1.5,
917
+ whiteSpace: "nowrap",
918
+ overflow: "hidden",
919
+ textOverflow: "ellipsis",
920
+ minWidth: 0
921
+ // Allow text to shrink and truncate in flex container
922
+ }
923
+ };
924
+ });
925
+ var ConnectionStatus = React6.memo(({
926
+ status,
927
+ variant = "info",
928
+ icon,
929
+ onClick,
930
+ compact = false,
931
+ compactText
932
+ }) => {
933
+ const interactive = !!onClick;
934
+ const handleClick = () => {
935
+ if (onClick) {
936
+ onClick();
937
+ }
938
+ };
939
+ const statusContent = /* @__PURE__ */ jsxs7(
940
+ StatusPill,
941
+ {
942
+ role: "status",
943
+ "aria-live": "polite",
944
+ "aria-atomic": "true",
945
+ "aria-label": compact ? status : void 0,
946
+ variant,
947
+ interactive,
948
+ onClick: handleClick,
949
+ children: [
950
+ /* @__PURE__ */ jsx11(
951
+ Box5,
952
+ {
953
+ sx: {
954
+ display: "flex",
955
+ alignItems: "center",
956
+ fontSize: 16,
957
+ color: "inherit"
958
+ },
959
+ children: icon || /* @__PURE__ */ jsx11(PowerIcon, { fontSize: "small" })
960
+ }
961
+ ),
962
+ /* @__PURE__ */ jsx11(Typography3, { className: "status-text", variant: "body2", children: compact ? compactText ?? status : status })
963
+ ]
964
+ }
965
+ );
966
+ if (compact) {
967
+ return /* @__PURE__ */ jsx11(
968
+ Box5,
969
+ {
970
+ sx: {
971
+ display: "flex",
972
+ justifyContent: "center",
973
+ padding: 1
974
+ },
975
+ children: /* @__PURE__ */ jsx11(Tooltip3, { title: status, placement: "right", arrow: true, children: statusContent })
976
+ }
977
+ );
978
+ }
979
+ return /* @__PURE__ */ jsx11(
980
+ Box5,
981
+ {
982
+ sx: {
983
+ display: "flex",
984
+ justifyContent: "center",
985
+ padding: 1
986
+ },
987
+ children: statusContent
988
+ }
989
+ );
990
+ });
991
+ ConnectionStatus.displayName = "ConnectionStatus";
992
+
993
+ // src/components/navigation/SideNav/AccountSection.tsx
994
+ import React7 from "react";
995
+ import Box6 from "@mui/material/Box";
996
+ import Avatar from "@mui/material/Avatar";
997
+ import Typography4 from "@mui/material/Typography";
998
+ import Button3 from "@mui/material/Button";
999
+ import IconButton3 from "@mui/material/IconButton";
1000
+ import Tooltip4 from "@mui/material/Tooltip";
1001
+ import { styled as styled9 } from "@mui/material/styles";
1002
+ import LogoutIcon from "@mui/icons-material/Logout";
1003
+ import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
1004
+ var AccountContainer = styled9(Box6, {
1005
+ shouldForwardProp: (prop) => !["layout", "isCompact"].includes(prop)
1006
+ })(({ theme, layout = "horizontal", isCompact }) => ({
1007
+ display: "flex",
1008
+ flexDirection: isCompact ? "column" : "row",
1009
+ alignItems: "center",
1010
+ justifyContent: isCompact ? "center" : "flex-start",
1011
+ gap: isCompact ? theme.spacing(1) : theme.spacing(1.5),
1012
+ padding: theme.spacing(2),
1013
+ borderTop: `1px solid ${theme.palette.divider}`,
1014
+ transition: theme.transitions.create(["gap", "justify-content"], {
1015
+ duration: theme.transitions.duration.shorter
1016
+ }),
1017
+ ...layout === "vertical" && !isCompact && {
1018
+ flexDirection: "column",
1019
+ textAlign: "center"
1020
+ }
1021
+ }));
1022
+ var deriveInitials = (name) => {
1023
+ if (!name || name.trim() === "") {
1024
+ return "?";
1025
+ }
1026
+ const words = name.trim().split(/\s+/);
1027
+ if (words.length === 1) {
1028
+ return words[0][0].toUpperCase();
1029
+ }
1030
+ if (words.length === 2) {
1031
+ return (words[0][0] + words[1][0]).toUpperCase();
1032
+ }
1033
+ return (words[0][0] + words[words.length - 1][0]).toUpperCase();
1034
+ };
1035
+ var AccountSection = React7.memo(({
1036
+ user,
1037
+ onLogout,
1038
+ showEmail = false,
1039
+ layout = "horizontal",
1040
+ compact = false
1041
+ }) => {
1042
+ const initials = user.initials || deriveInitials(user.name);
1043
+ const avatarSrc = user.avatarUrl;
1044
+ if (compact) {
1045
+ return /* @__PURE__ */ jsxs8(AccountContainer, { layout, isCompact: true, "aria-label": "Account section", children: [
1046
+ /* @__PURE__ */ jsx12(
1047
+ Tooltip4,
1048
+ {
1049
+ title: `${user.name}${user.email ? ` (${user.email})` : ""}`,
1050
+ placement: "right",
1051
+ arrow: true,
1052
+ children: /* @__PURE__ */ jsx12(
1053
+ Avatar,
1054
+ {
1055
+ src: avatarSrc,
1056
+ alt: user.name,
1057
+ sx: {
1058
+ width: 40,
1059
+ height: 40,
1060
+ backgroundColor: "primary.main",
1061
+ fontSize: 16,
1062
+ fontWeight: 600,
1063
+ flexShrink: 0,
1064
+ cursor: "default"
1065
+ },
1066
+ children: initials
1067
+ }
1068
+ )
1069
+ }
1070
+ ),
1071
+ /* @__PURE__ */ jsx12(Tooltip4, { title: "Logout", placement: "right", arrow: true, children: /* @__PURE__ */ jsx12(
1072
+ IconButton3,
1073
+ {
1074
+ onClick: onLogout,
1075
+ "aria-label": "Logout",
1076
+ size: "small",
1077
+ sx: {
1078
+ color: "text.secondary",
1079
+ "&:hover": {
1080
+ backgroundColor: "action.hover",
1081
+ color: "text.primary"
1082
+ }
1083
+ },
1084
+ children: /* @__PURE__ */ jsx12(LogoutIcon, { fontSize: "small" })
1085
+ }
1086
+ ) })
1087
+ ] });
1088
+ }
1089
+ return /* @__PURE__ */ jsxs8(AccountContainer, { layout, isCompact: false, "aria-label": "Account section", children: [
1090
+ /* @__PURE__ */ jsx12(
1091
+ Avatar,
1092
+ {
1093
+ src: avatarSrc,
1094
+ alt: user.name,
1095
+ sx: {
1096
+ width: 40,
1097
+ height: 40,
1098
+ backgroundColor: "primary.main",
1099
+ fontSize: 16,
1100
+ fontWeight: 600,
1101
+ flexShrink: 0
1102
+ },
1103
+ children: initials
1104
+ }
1105
+ ),
1106
+ /* @__PURE__ */ jsxs8(
1107
+ Box6,
1108
+ {
1109
+ sx: {
1110
+ display: "flex",
1111
+ flexDirection: "column",
1112
+ gap: 0.5,
1113
+ flexGrow: 1,
1114
+ minWidth: 0
1115
+ // Allow text truncation
1116
+ },
1117
+ children: [
1118
+ /* @__PURE__ */ jsx12(
1119
+ Typography4,
1120
+ {
1121
+ variant: "body2",
1122
+ sx: {
1123
+ fontWeight: 600,
1124
+ lineHeight: 1.5,
1125
+ overflow: "hidden",
1126
+ textOverflow: "ellipsis",
1127
+ whiteSpace: "nowrap"
1128
+ },
1129
+ children: user.name
1130
+ }
1131
+ ),
1132
+ showEmail && user.email && /* @__PURE__ */ jsx12(
1133
+ Typography4,
1134
+ {
1135
+ variant: "caption",
1136
+ sx: {
1137
+ color: "text.secondary",
1138
+ lineHeight: 1.5,
1139
+ overflow: "hidden",
1140
+ textOverflow: "ellipsis",
1141
+ whiteSpace: "nowrap",
1142
+ display: "block"
1143
+ },
1144
+ children: user.email
1145
+ }
1146
+ ),
1147
+ /* @__PURE__ */ jsx12(
1148
+ Button3,
1149
+ {
1150
+ onClick: onLogout,
1151
+ "aria-label": "Logout",
1152
+ startIcon: /* @__PURE__ */ jsx12(LogoutIcon, { fontSize: "small" }),
1153
+ sx: {
1154
+ color: "text.secondary",
1155
+ textTransform: "none",
1156
+ fontSize: "14px",
1157
+ fontWeight: 400,
1158
+ padding: "4px 8px",
1159
+ justifyContent: "flex-start",
1160
+ alignSelf: "flex-start",
1161
+ minWidth: "auto",
1162
+ "&:hover": {
1163
+ backgroundColor: "action.hover",
1164
+ color: "text.primary"
1165
+ }
1166
+ },
1167
+ children: "Logout"
1168
+ }
1169
+ )
1170
+ ]
1171
+ }
1172
+ )
1173
+ ] });
1174
+ });
1175
+ AccountSection.displayName = "AccountSection";
1176
+
1177
+ // src/components/navigation/Tab.tsx
1178
+ import MuiTab from "@mui/material/Tab";
1179
+ import { styled as styled10 } from "@mui/material/styles";
1180
+ import { jsx as jsx13 } from "react/jsx-runtime";
1181
+ var StyledTab = styled10(MuiTab)(({ theme }) => ({
1182
+ textTransform: "none",
1183
+ minHeight: "48px",
1184
+ fontWeight: 400,
1185
+ color: theme.palette.text.primary,
1186
+ borderBottom: "2px solid transparent",
1187
+ "&:hover": {
1188
+ color: theme.palette.primary.main
1189
+ },
1190
+ "&.Mui-selected": {
1191
+ fontWeight: 600,
1192
+ color: theme.palette.primary.main,
1193
+ borderBottom: `2px solid ${theme.palette.primary.main}`
1194
+ }
1195
+ }));
1196
+ var Tab = ({
1197
+ badge,
1198
+ badgeVariant = "primary",
1199
+ label,
1200
+ ...props
1201
+ }) => {
1202
+ const tabLabel = badge !== void 0 ? /* @__PURE__ */ jsx13(Badge, { variant: badgeVariant, badgeContent: badge, children: label }) : label;
1203
+ return /* @__PURE__ */ jsx13(StyledTab, { label: tabLabel, ...props });
1204
+ };
1205
+
1206
+ // src/components/navigation/Menu.tsx
1207
+ import React8 from "react";
1208
+ import MuiMenu from "@mui/material/Menu";
1209
+ import MuiMenuItem from "@mui/material/MenuItem";
1210
+ import ListItemIcon3 from "@mui/material/ListItemIcon";
1211
+ import ListItemText3 from "@mui/material/ListItemText";
1212
+ import Divider from "@mui/material/Divider";
1213
+ import { styled as styled11 } from "@mui/material/styles";
1214
+ import { Fragment as Fragment3, jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
1215
+ var StyledMenu = styled11(MuiMenu)(({ theme }) => ({
1216
+ "& .MuiPaper-root": {
1217
+ borderRadius: 8,
1218
+ boxShadow: "0px 4px 12px rgba(0, 0, 0, 0.15)",
1219
+ minWidth: 200
1220
+ },
1221
+ "& .MuiMenuItem-root": {
1222
+ padding: "8px 16px",
1223
+ "&:hover": {
1224
+ backgroundColor: theme.palette.background.selected
1225
+ }
1226
+ }
1227
+ }));
1228
+ var Menu = React8.forwardRef(function Menu2({ anchorEl, onClose, children, ...props }, ref) {
1229
+ return /* @__PURE__ */ jsx14(
1230
+ StyledMenu,
1231
+ {
1232
+ ref,
1233
+ anchorEl,
1234
+ open: Boolean(anchorEl),
1235
+ onClose,
1236
+ anchorOrigin: {
1237
+ vertical: "bottom",
1238
+ horizontal: "left"
1239
+ },
1240
+ transformOrigin: {
1241
+ vertical: "top",
1242
+ horizontal: "left"
1243
+ },
1244
+ ...props,
1245
+ children
1246
+ }
1247
+ );
1248
+ });
1249
+ var MenuItem = React8.forwardRef(function MenuItem2({ icon, label, onClick, disabled = false, divider = false }, ref) {
1250
+ return /* @__PURE__ */ jsxs9(Fragment3, { children: [
1251
+ /* @__PURE__ */ jsxs9(MuiMenuItem, { ref, onClick, disabled, children: [
1252
+ icon && /* @__PURE__ */ jsx14(ListItemIcon3, { children: icon }),
1253
+ /* @__PURE__ */ jsx14(ListItemText3, { children: label })
1254
+ ] }),
1255
+ divider && /* @__PURE__ */ jsx14(Divider, {})
1256
+ ] });
1257
+ });
1258
+
1259
+ // src/components/navigation/Pagination.tsx
1260
+ import MuiPagination from "@mui/material/Pagination";
1261
+ import { styled as styled12 } from "@mui/material/styles";
1262
+ import { jsx as jsx15 } from "react/jsx-runtime";
1263
+ var StyledPagination = styled12(MuiPagination)(({ theme }) => ({
1264
+ "& .MuiPaginationItem-root": {
1265
+ "&.Mui-selected": {
1266
+ backgroundColor: theme.palette.primary.main,
1267
+ color: theme.palette.primary.contrastText,
1268
+ "&:hover": {
1269
+ backgroundColor: theme.palette.primary.light
1270
+ }
1271
+ },
1272
+ "&:hover": {
1273
+ backgroundColor: theme.palette.background.selected
1274
+ }
1275
+ }
1276
+ }));
1277
+ var Pagination = ({ color = "primary", ...props }) => {
1278
+ return /* @__PURE__ */ jsx15(StyledPagination, { color, ...props });
1279
+ };
1280
+
1281
+ // src/components/navigation/Selector.tsx
1282
+ import { useState as useState3 } from "react";
1283
+ import Box7 from "@mui/material/Box";
1284
+ import Typography5 from "@mui/material/Typography";
1285
+ import Avatar2 from "@mui/material/Avatar";
1286
+ import Menu3 from "@mui/material/Menu";
1287
+ import InputAdornment from "@mui/material/InputAdornment";
1288
+ import List3 from "@mui/material/List";
1289
+ import ListItemButton3 from "@mui/material/ListItemButton";
1290
+ import ListItemAvatar from "@mui/material/ListItemAvatar";
1291
+ import ListItemText4 from "@mui/material/ListItemText";
1292
+ import CircularProgress from "@mui/material/CircularProgress";
1293
+ import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown";
1294
+ import SearchIcon from "@mui/icons-material/Search";
1295
+ import AddIcon from "@mui/icons-material/Add";
1296
+ import { useTheme } from "@mui/material/styles";
1297
+ import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs10 } from "react/jsx-runtime";
1298
+ var Selector = ({
1299
+ options,
1300
+ selectedId,
1301
+ onSelect,
1302
+ onCreate,
1303
+ loading = false,
1304
+ placeholder = "Select...",
1305
+ emptyMessage = "No items found",
1306
+ compact = false,
1307
+ renderSelected,
1308
+ width = 350
1309
+ }) => {
1310
+ const theme = useTheme();
1311
+ const [anchorEl, setAnchorEl] = useState3(null);
1312
+ const [searchTerm, setSearchTerm] = useState3("");
1313
+ const open = Boolean(anchorEl);
1314
+ const selectedOption = options.find((opt) => opt.id === selectedId);
1315
+ const filteredOptions = options.filter(
1316
+ (opt) => opt.name.toLowerCase().includes(searchTerm.toLowerCase())
1317
+ );
1318
+ const handleOpen = (event) => {
1319
+ event.stopPropagation();
1320
+ setAnchorEl(event.currentTarget);
1321
+ };
1322
+ const handleClose = () => {
1323
+ setAnchorEl(null);
1324
+ setSearchTerm("");
1325
+ };
1326
+ const handleSelect = (id) => {
1327
+ onSelect(id);
1328
+ handleClose();
1329
+ };
1330
+ const defaultRenderSelected = (option) => /* @__PURE__ */ jsxs10(Box7, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
1331
+ option.avatar ? /* @__PURE__ */ jsx16(Avatar2, { src: option.avatar, sx: { width: 20, height: 20 } }) : option.icon ? option.icon : /* @__PURE__ */ jsx16(Avatar2, { sx: { width: 20, height: 20, bgcolor: theme.palette.primary.main, fontSize: "0.7rem" }, children: option.name.charAt(0) }),
1332
+ /* @__PURE__ */ jsx16(Typography5, { variant: "body2", children: option.name })
1333
+ ] });
1334
+ if (compact) {
1335
+ return /* @__PURE__ */ jsxs10(Fragment4, { children: [
1336
+ /* @__PURE__ */ jsx16(IconButton, { onClick: handleOpen, size: "small", children: selectedOption ? selectedOption.avatar ? /* @__PURE__ */ jsx16(Avatar2, { src: selectedOption.avatar, sx: { width: 32, height: 32 } }) : /* @__PURE__ */ jsx16(Avatar2, { sx: { width: 32, height: 32, bgcolor: theme.palette.primary.main }, children: selectedOption.name.charAt(0) }) : /* @__PURE__ */ jsx16(Avatar2, { sx: { width: 32, height: 32, bgcolor: theme.palette.grey[400] }, children: "?" }) }),
1337
+ /* @__PURE__ */ jsx16(
1338
+ Menu3,
1339
+ {
1340
+ anchorEl,
1341
+ open,
1342
+ onClose: handleClose,
1343
+ PaperProps: {
1344
+ sx: { width, maxHeight: 600, mt: 1 }
1345
+ },
1346
+ children: loading ? /* @__PURE__ */ jsx16(Box7, { sx: { display: "flex", justifyContent: "center", p: 2 }, children: /* @__PURE__ */ jsx16(CircularProgress, { size: 24 }) }) : /* @__PURE__ */ jsxs10(Fragment4, { children: [
1347
+ options.length > 5 && /* @__PURE__ */ jsx16(Box7, { sx: { p: 1, borderBottom: `1px solid ${theme.palette.grey[200]}` }, children: /* @__PURE__ */ jsx16(
1348
+ TextField,
1349
+ {
1350
+ size: "small",
1351
+ fullWidth: true,
1352
+ placeholder: "Search...",
1353
+ value: searchTerm,
1354
+ onChange: (e) => setSearchTerm(e.target.value),
1355
+ InputProps: {
1356
+ startAdornment: /* @__PURE__ */ jsx16(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx16(SearchIcon, { fontSize: "small" }) })
1357
+ }
1358
+ }
1359
+ ) }),
1360
+ /* @__PURE__ */ jsxs10(List3, { sx: { maxHeight: 400, overflow: "auto" }, children: [
1361
+ filteredOptions.map((option) => /* @__PURE__ */ jsxs10(
1362
+ ListItemButton3,
1363
+ {
1364
+ selected: option.id === selectedId,
1365
+ onClick: () => handleSelect(option.id),
1366
+ disabled: option.disabled,
1367
+ children: [
1368
+ option.avatar ? /* @__PURE__ */ jsx16(ListItemAvatar, { children: /* @__PURE__ */ jsx16(Avatar2, { src: option.avatar }) }) : option.icon ? /* @__PURE__ */ jsx16(ListItemAvatar, { children: option.icon }) : /* @__PURE__ */ jsx16(ListItemAvatar, { children: /* @__PURE__ */ jsx16(Avatar2, { sx: { bgcolor: theme.palette.primary.main }, children: option.name.charAt(0) }) }),
1369
+ /* @__PURE__ */ jsx16(ListItemText4, { primary: option.name, secondary: option.description })
1370
+ ]
1371
+ },
1372
+ option.id
1373
+ )),
1374
+ filteredOptions.length === 0 && /* @__PURE__ */ jsx16(Box7, { sx: { p: 2, textAlign: "center" }, children: /* @__PURE__ */ jsx16(Typography5, { variant: "body2", color: "text.secondary", children: emptyMessage }) })
1375
+ ] }),
1376
+ onCreate && /* @__PURE__ */ jsx16(Box7, { sx: { p: 1, borderTop: `1px solid ${theme.palette.grey[200]}` }, children: /* @__PURE__ */ jsx16(
1377
+ Button,
1378
+ {
1379
+ fullWidth: true,
1380
+ startIcon: /* @__PURE__ */ jsx16(AddIcon, {}),
1381
+ onClick: () => {
1382
+ onCreate();
1383
+ handleClose();
1384
+ },
1385
+ children: "Create New"
1386
+ }
1387
+ ) })
1388
+ ] })
1389
+ }
1390
+ )
1391
+ ] });
1392
+ }
1393
+ return /* @__PURE__ */ jsxs10(Fragment4, { children: [
1394
+ /* @__PURE__ */ jsxs10(Box7, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: [
1395
+ selectedOption ? renderSelected ? /* @__PURE__ */ jsx16(Link, { onClick: handleOpen, underline: "hover", children: renderSelected(selectedOption) }) : /* @__PURE__ */ jsx16(Link, { onClick: handleOpen, underline: "hover", children: defaultRenderSelected(selectedOption) }) : /* @__PURE__ */ jsx16(Typography5, { variant: "body2", color: "text.secondary", children: placeholder }),
1396
+ /* @__PURE__ */ jsx16(IconButton, { onClick: handleOpen, size: "small", sx: { p: 0.2, ml: 0.5 }, children: /* @__PURE__ */ jsx16(KeyboardArrowDownIcon, { fontSize: "small" }) })
1397
+ ] }),
1398
+ /* @__PURE__ */ jsx16(
1399
+ Menu3,
1400
+ {
1401
+ anchorEl,
1402
+ open,
1403
+ onClose: handleClose,
1404
+ PaperProps: {
1405
+ sx: { width, maxHeight: 600, mt: 1 }
1406
+ },
1407
+ children: loading ? /* @__PURE__ */ jsx16(Box7, { sx: { display: "flex", justifyContent: "center", p: 2 }, children: /* @__PURE__ */ jsx16(CircularProgress, { size: 24 }) }) : /* @__PURE__ */ jsxs10(Fragment4, { children: [
1408
+ options.length > 5 && /* @__PURE__ */ jsx16(Box7, { sx: { p: 1, borderBottom: `1px solid ${theme.palette.grey[200]}` }, children: /* @__PURE__ */ jsx16(
1409
+ TextField,
1410
+ {
1411
+ size: "small",
1412
+ fullWidth: true,
1413
+ placeholder: "Search...",
1414
+ value: searchTerm,
1415
+ onChange: (e) => setSearchTerm(e.target.value),
1416
+ InputProps: {
1417
+ startAdornment: /* @__PURE__ */ jsx16(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx16(SearchIcon, { fontSize: "small" }) })
1418
+ }
1419
+ }
1420
+ ) }),
1421
+ /* @__PURE__ */ jsxs10(List3, { sx: { maxHeight: 400, overflow: "auto" }, children: [
1422
+ filteredOptions.map((option) => /* @__PURE__ */ jsxs10(
1423
+ ListItemButton3,
1424
+ {
1425
+ selected: option.id === selectedId,
1426
+ onClick: () => handleSelect(option.id),
1427
+ disabled: option.disabled,
1428
+ children: [
1429
+ option.avatar ? /* @__PURE__ */ jsx16(ListItemAvatar, { children: /* @__PURE__ */ jsx16(Avatar2, { src: option.avatar }) }) : option.icon ? /* @__PURE__ */ jsx16(ListItemAvatar, { children: option.icon }) : /* @__PURE__ */ jsx16(ListItemAvatar, { children: /* @__PURE__ */ jsx16(Avatar2, { sx: { bgcolor: theme.palette.primary.main }, children: option.name.charAt(0) }) }),
1430
+ /* @__PURE__ */ jsx16(ListItemText4, { primary: option.name, secondary: option.description })
1431
+ ]
1432
+ },
1433
+ option.id
1434
+ )),
1435
+ filteredOptions.length === 0 && /* @__PURE__ */ jsx16(Box7, { sx: { p: 2, textAlign: "center" }, children: /* @__PURE__ */ jsx16(Typography5, { variant: "body2", color: "text.secondary", children: emptyMessage }) })
1436
+ ] }),
1437
+ onCreate && /* @__PURE__ */ jsx16(Box7, { sx: { p: 1, borderTop: `1px solid ${theme.palette.grey[200]}` }, children: /* @__PURE__ */ jsx16(
1438
+ Button,
1439
+ {
1440
+ fullWidth: true,
1441
+ startIcon: /* @__PURE__ */ jsx16(AddIcon, {}),
1442
+ onClick: () => {
1443
+ onCreate();
1444
+ handleClose();
1445
+ },
1446
+ children: "Create New"
1447
+ }
1448
+ ) })
1449
+ ] })
1450
+ }
1451
+ )
1452
+ ] });
1453
+ };
1454
+
1455
+ export {
1456
+ DropdownAnchor,
1457
+ Dropdown,
1458
+ SidebarItem,
1459
+ Sidebar,
1460
+ Stepper,
1461
+ Step,
1462
+ StepLabel,
1463
+ StepContent,
1464
+ StepButton,
1465
+ NumberedStepper,
1466
+ SideNav,
1467
+ SideNavHeader,
1468
+ NavigationItem,
1469
+ NavigationList,
1470
+ ConnectionStatus,
1471
+ AccountSection,
1472
+ Tab,
1473
+ Menu,
1474
+ MenuItem,
1475
+ Pagination,
1476
+ Selector
1477
+ };
1478
+ //# sourceMappingURL=chunk-AWVNEU6R.mjs.map