@cere/cere-design-system 0.0.45 → 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 (164) hide show
  1. package/README.md +76 -0
  2. package/dist/buttons.d.mts +119 -0
  3. package/dist/buttons.d.ts +119 -0
  4. package/dist/buttons.js +19 -0
  5. package/dist/buttons.js.map +1 -0
  6. package/dist/buttons.mjs +19 -0
  7. package/dist/buttons.mjs.map +1 -0
  8. package/dist/carousel.d.mts +51 -0
  9. package/dist/carousel.d.ts +51 -0
  10. package/dist/carousel.js +185 -0
  11. package/dist/carousel.js.map +1 -0
  12. package/dist/carousel.mjs +185 -0
  13. package/dist/carousel.mjs.map +1 -0
  14. package/dist/charts.d.mts +187 -0
  15. package/dist/charts.d.ts +187 -0
  16. package/dist/charts.js +13 -0
  17. package/dist/charts.js.map +1 -0
  18. package/dist/charts.mjs +13 -0
  19. package/dist/charts.mjs.map +1 -0
  20. package/dist/chunk-2EBCST6X.js +25 -0
  21. package/dist/chunk-2EBCST6X.js.map +1 -0
  22. package/dist/chunk-2KDN37PQ.js +486 -0
  23. package/dist/chunk-2KDN37PQ.js.map +1 -0
  24. package/dist/chunk-34LFXT6C.mjs +486 -0
  25. package/dist/chunk-34LFXT6C.mjs.map +1 -0
  26. package/dist/chunk-3KCXCVOX.mjs +411 -0
  27. package/dist/chunk-3KCXCVOX.mjs.map +1 -0
  28. package/dist/chunk-4OKTICU5.js +374 -0
  29. package/dist/chunk-4OKTICU5.js.map +1 -0
  30. package/dist/chunk-5ASG6G6U.mjs +40 -0
  31. package/dist/chunk-5ASG6G6U.mjs.map +1 -0
  32. package/dist/chunk-72TQ56EP.js +280 -0
  33. package/dist/chunk-72TQ56EP.js.map +1 -0
  34. package/dist/chunk-7KXKK2RE.js +43 -0
  35. package/dist/chunk-7KXKK2RE.js.map +1 -0
  36. package/dist/chunk-ARSCL4ZZ.js +111 -0
  37. package/dist/chunk-ARSCL4ZZ.js.map +1 -0
  38. package/dist/chunk-AWVNEU6R.mjs +1478 -0
  39. package/dist/chunk-AWVNEU6R.mjs.map +1 -0
  40. package/dist/chunk-BH4FNZKK.mjs +1472 -0
  41. package/dist/chunk-BH4FNZKK.mjs.map +1 -0
  42. package/dist/chunk-BIZK6FUD.js +37 -0
  43. package/dist/chunk-BIZK6FUD.js.map +1 -0
  44. package/dist/chunk-BOQPWZIB.mjs +147 -0
  45. package/dist/chunk-BOQPWZIB.mjs.map +1 -0
  46. package/dist/chunk-BT7XUTT5.mjs +392 -0
  47. package/dist/chunk-BT7XUTT5.mjs.map +1 -0
  48. package/dist/chunk-D7D25O6E.mjs +280 -0
  49. package/dist/chunk-D7D25O6E.mjs.map +1 -0
  50. package/dist/chunk-DRGMEIPT.mjs +162 -0
  51. package/dist/chunk-DRGMEIPT.mjs.map +1 -0
  52. package/dist/chunk-DZXNYLVG.js +392 -0
  53. package/dist/chunk-DZXNYLVG.js.map +1 -0
  54. package/dist/chunk-GR52ENYI.mjs +527 -0
  55. package/dist/chunk-GR52ENYI.mjs.map +1 -0
  56. package/dist/chunk-GTBKQXXI.js +1472 -0
  57. package/dist/chunk-GTBKQXXI.js.map +1 -0
  58. package/dist/chunk-HJ24WKU4.js +120 -0
  59. package/dist/chunk-HJ24WKU4.js.map +1 -0
  60. package/dist/chunk-JBHRAAN3.js +31 -0
  61. package/dist/chunk-JBHRAAN3.js.map +1 -0
  62. package/dist/chunk-KKIKOIMP.js +1478 -0
  63. package/dist/chunk-KKIKOIMP.js.map +1 -0
  64. package/dist/chunk-LVJSKRX3.js +147 -0
  65. package/dist/chunk-LVJSKRX3.js.map +1 -0
  66. package/dist/chunk-OWWDNDF4.js +40 -0
  67. package/dist/chunk-OWWDNDF4.js.map +1 -0
  68. package/dist/chunk-PFZZJZ64.js +162 -0
  69. package/dist/chunk-PFZZJZ64.js.map +1 -0
  70. package/dist/chunk-PHMNZK2R.mjs +18 -0
  71. package/dist/chunk-PHMNZK2R.mjs.map +1 -0
  72. package/dist/chunk-POCAW2G4.mjs +111 -0
  73. package/dist/chunk-POCAW2G4.mjs.map +1 -0
  74. package/dist/chunk-QBCRH7YF.mjs +37 -0
  75. package/dist/chunk-QBCRH7YF.mjs.map +1 -0
  76. package/dist/chunk-QCFLZ7X3.js +527 -0
  77. package/dist/chunk-QCFLZ7X3.js.map +1 -0
  78. package/dist/chunk-SG2TD7FQ.mjs +374 -0
  79. package/dist/chunk-SG2TD7FQ.mjs.map +1 -0
  80. package/dist/chunk-SSFALO6S.mjs +120 -0
  81. package/dist/chunk-SSFALO6S.mjs.map +1 -0
  82. package/dist/chunk-U2QHFISG.js +18 -0
  83. package/dist/chunk-U2QHFISG.js.map +1 -0
  84. package/dist/chunk-UPGFBPFX.mjs +25 -0
  85. package/dist/chunk-UPGFBPFX.mjs.map +1 -0
  86. package/dist/chunk-WC2TCWXK.mjs +445 -0
  87. package/dist/chunk-WC2TCWXK.mjs.map +1 -0
  88. package/dist/chunk-XZZZ4MZV.js +445 -0
  89. package/dist/chunk-XZZZ4MZV.js.map +1 -0
  90. package/dist/chunk-YCDCQSYH.js +411 -0
  91. package/dist/chunk-YCDCQSYH.js.map +1 -0
  92. package/dist/chunk-ZDAZYIXB.mjs +43 -0
  93. package/dist/chunk-ZDAZYIXB.mjs.map +1 -0
  94. package/dist/chunk-ZP26PGMS.mjs +31 -0
  95. package/dist/chunk-ZP26PGMS.mjs.map +1 -0
  96. package/dist/feedback.d.mts +368 -0
  97. package/dist/feedback.d.ts +368 -0
  98. package/dist/feedback.js +43 -0
  99. package/dist/feedback.js.map +1 -0
  100. package/dist/feedback.mjs +43 -0
  101. package/dist/feedback.mjs.map +1 -0
  102. package/dist/fonts/HumanSans-BlackOblique.otf +0 -0
  103. package/dist/fonts/HumanSans-Thin.otf +0 -0
  104. package/dist/fonts/HumanSans-ThinOblique.otf +0 -0
  105. package/dist/fonts/human-sans-font.css +88 -0
  106. package/dist/fonts/human-sans.css +3 -0
  107. package/dist/fonts/inter.css +3 -0
  108. package/dist/icons.d.mts +21 -0
  109. package/dist/icons.d.ts +21 -0
  110. package/dist/icons.js +23 -0
  111. package/dist/icons.js.map +1 -0
  112. package/dist/icons.mjs +23 -0
  113. package/dist/icons.mjs.map +1 -0
  114. package/dist/index.d.mts +196 -3082
  115. package/dist/index.d.ts +196 -3082
  116. package/dist/index.js +253 -10082
  117. package/dist/index.js.map +1 -1
  118. package/dist/index.mjs +229 -10017
  119. package/dist/index.mjs.map +1 -1
  120. package/dist/inputs.d.mts +129 -0
  121. package/dist/inputs.d.ts +129 -0
  122. package/dist/inputs.js +43 -0
  123. package/dist/inputs.js.map +1 -0
  124. package/dist/inputs.mjs +43 -0
  125. package/dist/inputs.mjs.map +1 -0
  126. package/dist/layout.d.mts +681 -0
  127. package/dist/layout.d.ts +681 -0
  128. package/dist/layout.js +98 -0
  129. package/dist/layout.js.map +1 -0
  130. package/dist/layout.mjs +98 -0
  131. package/dist/layout.mjs.map +1 -0
  132. package/dist/navigation.d.mts +611 -0
  133. package/dist/navigation.d.ts +611 -0
  134. package/dist/navigation.js +54 -0
  135. package/dist/navigation.js.map +1 -0
  136. package/dist/navigation.mjs +54 -0
  137. package/dist/navigation.mjs.map +1 -0
  138. package/dist/third-party.d.mts +113 -0
  139. package/dist/third-party.d.ts +113 -0
  140. package/dist/third-party.js +7 -0
  141. package/dist/third-party.js.map +1 -0
  142. package/dist/third-party.mjs +7 -0
  143. package/dist/third-party.mjs.map +1 -0
  144. package/dist/tokens.css +45 -71
  145. package/dist/utilities.d.mts +39 -0
  146. package/dist/utilities.d.ts +39 -0
  147. package/dist/utilities.js +17 -0
  148. package/dist/utilities.js.map +1 -0
  149. package/dist/utilities.mjs +17 -0
  150. package/dist/utilities.mjs.map +1 -0
  151. package/package.json +76 -8
  152. package/dist/index.css +0 -79
  153. package/dist/index.css.map +0 -1
  154. /package/dist/{HumanSans-Black-C4YJONK7.otf → fonts/HumanSans-Black.otf} +0 -0
  155. /package/dist/{HumanSans-Bold-4EAJ3L3T.otf → fonts/HumanSans-Bold.otf} +0 -0
  156. /package/dist/{HumanSans-BoldOblique-4D325T4F.otf → fonts/HumanSans-BoldOblique.otf} +0 -0
  157. /package/dist/{HumanSans-ExtraLight-VL7DEKQ4.otf → fonts/HumanSans-ExtraLight.otf} +0 -0
  158. /package/dist/{HumanSans-ExtraLightOblique-VK2JTUXF.otf → fonts/HumanSans-ExtraLightOblique.otf} +0 -0
  159. /package/dist/{HumanSans-Light-YV7AFKRB.otf → fonts/HumanSans-Light.otf} +0 -0
  160. /package/dist/{HumanSans-LightOblique-VIXV7QA6.otf → fonts/HumanSans-LightOblique.otf} +0 -0
  161. /package/dist/{HumanSans-Medium-UULJ3PIR.otf → fonts/HumanSans-Medium.otf} +0 -0
  162. /package/dist/{HumanSans-MediumOblique-M7FHDZRS.otf → fonts/HumanSans-MediumOblique.otf} +0 -0
  163. /package/dist/{HumanSans-Regular-QMFEP3F6.otf → fonts/HumanSans-Regular.otf} +0 -0
  164. /package/dist/{HumanSans-RegularOblique-YPKQJAAM.otf → fonts/HumanSans-RegularOblique.otf} +0 -0
@@ -0,0 +1,1478 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunkOWWDNDF4js = require('./chunk-OWWDNDF4.js');
4
+
5
+
6
+ var _chunkJBHRAAN3js = require('./chunk-JBHRAAN3.js');
7
+
8
+
9
+ var _chunkU2QHFISGjs = require('./chunk-U2QHFISG.js');
10
+
11
+
12
+ var _chunkLVJSKRX3js = require('./chunk-LVJSKRX3.js');
13
+
14
+
15
+ var _chunkBIZK6FUDjs = require('./chunk-BIZK6FUD.js');
16
+
17
+
18
+ var _chunkXZZZ4MZVjs = require('./chunk-XZZZ4MZV.js');
19
+
20
+ // src/components/navigation/Dropdown/Dropdown.tsx
21
+ var _Popover = require('@mui/material/Popover'); var _Popover2 = _interopRequireDefault(_Popover);
22
+ var _react = require('react'); var _react2 = _interopRequireDefault(_react);
23
+
24
+ // src/components/navigation/Dropdown/DropdownAnchor.tsx
25
+
26
+ var _Stack = require('@mui/material/Stack'); var _Stack2 = _interopRequireDefault(_Stack);
27
+ var _styles = require('@mui/material/styles');
28
+ var _Avatar = require('@mui/material/Avatar'); var _Avatar2 = _interopRequireDefault(_Avatar);
29
+ var _Typography = require('@mui/material/Typography'); var _Typography2 = _interopRequireDefault(_Typography);
30
+ var _Button = require('@mui/material/Button'); var _Button2 = _interopRequireDefault(_Button);
31
+ var _iconsmaterial = require('@mui/icons-material');
32
+ var _jsxruntime = require('react/jsx-runtime');
33
+ var Clickable = _styles.styled.call(void 0, (0, _Button2.default))({
34
+ padding: 0
35
+ });
36
+ var Anchor = _styles.styled.call(void 0, (0, _Stack2.default))(({ 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 = _styles.styled.call(void 0, "div")(({ theme }) => ({
45
+ [`& .${_Avatar.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 = _styles.styled.call(void 0, (0, _Typography2.default))(({ theme }) => ({
54
+ fontWeight: theme.typography.fontWeightBold,
55
+ color: theme.palette.text.primary
56
+ }));
57
+ var DropdownAnchor = _react.forwardRef.call(void 0,
58
+ ({ open, label, leftElement, onOpen, variant, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Clickable, { ref, ...props, color: "inherit", variant: "text", onClick: onOpen, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Anchor, { variant, spacing: 1, direction: "row", alignItems: "stretch", children: [
59
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Left, { children: leftElement }),
60
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Center, { variant: "body1", children: label }),
61
+ variant !== "header" && (open ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _iconsmaterial.ArrowDropUp, {}) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _iconsmaterial.ArrowDropDown, {}))
62
+ ] }) })
63
+ );
64
+ DropdownAnchor.displayName = "DropdownAnchor";
65
+
66
+ // src/components/navigation/Dropdown/Dropdown.tsx
67
+
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__ */ _jsxruntime.jsx.call(void 0, DropdownAnchor, { ref, open: open2, label, leftElement, onOpen, variant })
80
+ }) => {
81
+ const anchorRef = _react.useRef.call(void 0, null);
82
+ const horizontal = direction === "left" ? "right" : "left";
83
+ const onOpen = _react.useCallback.call(void 0, () => _optionalChain([onToggle, 'optionalCall', _ => _(true)]), [onToggle]);
84
+ const padding = dense ? 1 : 2;
85
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
86
+ renderAnchor({ ref: anchorRef, onOpen, open }),
87
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
88
+ _Popover2.default,
89
+ {
90
+ "aria-label": "Overlay",
91
+ open,
92
+ onClose: () => _optionalChain([onToggle, 'optionalCall', _2 => _2(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
+ var _Drawer = require('@mui/material/Drawer'); var _Drawer2 = _interopRequireDefault(_Drawer);
123
+ var _List = require('@mui/material/List'); var _List2 = _interopRequireDefault(_List);
124
+ var _Box = require('@mui/material/Box'); var _Box2 = _interopRequireDefault(_Box);
125
+
126
+
127
+ // src/components/navigation/SidebarItem.tsx
128
+ var _ListItemButton = require('@mui/material/ListItemButton'); var _ListItemButton2 = _interopRequireDefault(_ListItemButton);
129
+ var _ListItemIcon = require('@mui/material/ListItemIcon'); var _ListItemIcon2 = _interopRequireDefault(_ListItemIcon);
130
+ var _ListItemText = require('@mui/material/ListItemText'); var _ListItemText2 = _interopRequireDefault(_ListItemText);
131
+
132
+
133
+ var StyledListItemButton = _styles.styled.call(void 0, _ListItemButton2.default, {
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__ */ _jsxruntime.jsxs.call(void 0, StyledListItemButton, { selected, size, onClick, children: [
172
+ icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemIcon2.default, { children: icon }),
173
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemText2.default, { primary: label }),
174
+ endIcon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { style: { marginLeft: "auto" }, children: endIcon }),
175
+ children
176
+ ] });
177
+ };
178
+
179
+ // src/components/navigation/Sidebar.tsx
180
+
181
+ var StyledDrawer = _styles.styled.call(void 0, (0, _Drawer2.default))(({ 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__ */ _jsxruntime.jsx.call(void 0,
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__ */ _jsxruntime.jsx.call(void 0, _Box2.default, { sx: { overflow: "auto", padding: "8px 0" }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _List2.default, { children: items.map((item, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SidebarItem, { ...item }, index)) }) })
210
+ }
211
+ );
212
+ };
213
+
214
+ // src/components/navigation/Stepper.tsx
215
+ var _Stepper = require('@mui/material/Stepper'); var _Stepper2 = _interopRequireDefault(_Stepper);
216
+ var _Step = require('@mui/material/Step'); var _Step2 = _interopRequireDefault(_Step);
217
+ var _StepLabel = require('@mui/material/StepLabel'); var _StepLabel2 = _interopRequireDefault(_StepLabel);
218
+ var _StepContent = require('@mui/material/StepContent'); var _StepContent2 = _interopRequireDefault(_StepContent);
219
+ var _StepButton = require('@mui/material/StepButton'); var _StepButton2 = _interopRequireDefault(_StepButton);
220
+
221
+ var Stepper = (props) => {
222
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Stepper2.default, { ...props });
223
+ };
224
+ var Step = (props) => {
225
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Step2.default, { ...props });
226
+ };
227
+ var StepLabel = (props) => {
228
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _StepLabel2.default, { ...props });
229
+ };
230
+ var StepContent = (props) => {
231
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _StepContent2.default, { ...props });
232
+ };
233
+ var StepButton = (props) => {
234
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _StepButton2.default, { ...props });
235
+ };
236
+
237
+ // src/components/navigation/NumberedStepper.tsx
238
+
239
+
240
+
241
+ var Root = _styles.styled.call(void 0, "ol")({
242
+ listStyle: "none",
243
+ padding: 0,
244
+ margin: 0,
245
+ display: "flex",
246
+ flexDirection: "column",
247
+ gap: 8
248
+ });
249
+ var Row = _styles.styled.call(void 0, "li")({
250
+ display: "flex",
251
+ gap: 10,
252
+ alignItems: "center"
253
+ });
254
+ var Num = _styles.styled.call(void 0, "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 ${_chunkXZZZ4MZVjs.webSurfaceTokens.strokeOnMed}`,
267
+ background: _chunkXZZZ4MZVjs.webSurfaceTokens.surfaceContrast,
268
+ color: _chunkXZZZ4MZVjs.webSurfaceTokens.textSecondary,
269
+ ...state === "active" && {
270
+ background: _chunkXZZZ4MZVjs.webSurfaceTokens.cVioletLight,
271
+ borderColor: _chunkXZZZ4MZVjs.webSurfaceTokens.cViolet,
272
+ color: _chunkXZZZ4MZVjs.webSurfaceTokens.cVioletDark
273
+ },
274
+ ...state === "done" && {
275
+ background: _chunkXZZZ4MZVjs.webSurfaceTokens.cViolet,
276
+ borderColor: _chunkXZZZ4MZVjs.webSurfaceTokens.cViolet,
277
+ color: "white"
278
+ }
279
+ }));
280
+ var Label = _styles.styled.call(void 0, "span", {
281
+ shouldForwardProp: (p) => p !== "active"
282
+ })(({ active }) => ({
283
+ fontSize: 13,
284
+ color: active ? _chunkXZZZ4MZVjs.webSurfaceTokens.textPrimary : _chunkXZZZ4MZVjs.webSurfaceTokens.textSecondary,
285
+ fontWeight: active ? 500 : 400
286
+ }));
287
+ var NumberedStepper = _react2.default.forwardRef(
288
+ function NumberedStepper2({ steps, current, className }, ref) {
289
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Root, { ref, className, children: steps.map((s, i) => {
290
+ const state = i < current ? "done" : i === current ? "active" : "pending";
291
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Row, { ...state === "active" ? { "aria-current": "step" } : {}, children: [
292
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Num, { state, children: state === "done" ? "\u2713" : i + 1 }),
293
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Label, { active: state === "active", children: s.label })
294
+ ] }, s.key);
295
+ }) });
296
+ }
297
+ );
298
+
299
+ // src/components/navigation/SideNav/SideNav.tsx
300
+
301
+
302
+
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
+
323
+ var SideNavContext = _react2.default.createContext({
324
+ collapsed: false,
325
+ showTooltips: true
326
+ });
327
+ var SideNavContainer = _styles.styled.call(void 0, _Box2.default, {
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 = _styles.styled.call(void 0, (0, _Box2.default))(({ theme }) => ({
348
+ flexShrink: 0,
349
+ backgroundColor: theme.palette.background.paper
350
+ }));
351
+ var NavigationSection = _styles.styled.call(void 0, (0, _Box2.default))(() => ({
352
+ flexGrow: 1,
353
+ overflowY: "auto",
354
+ overflowX: "hidden",
355
+ ...scrollbarStyles
356
+ }));
357
+ var FooterSection = _styles.styled.call(void 0, (0, _Box2.default))(({ theme }) => ({
358
+ flexShrink: 0,
359
+ backgroundColor: theme.palette.background.paper
360
+ }));
361
+ var Header = _react2.default.memo(({ children, className }) => {
362
+ const { collapsed, onToggleCollapse } = _react2.default.useContext(SideNavContext);
363
+ const enhancedChildren = _react2.default.Children.map(children, (child) => {
364
+ if (_react2.default.isValidElement(child)) {
365
+ return _react2.default.cloneElement(child, {
366
+ collapsed,
367
+ onCollapse: onToggleCollapse
368
+ });
369
+ }
370
+ return child;
371
+ });
372
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderSection, { className, "data-testid": "sidenav-header", children: enhancedChildren });
373
+ });
374
+ Header.displayName = "SideNav.Header";
375
+ var Navigation = _react2.default.memo(({ children, className }) => {
376
+ const { collapsed, showTooltips } = _react2.default.useContext(SideNavContext);
377
+ const enhancedChildren = _react2.default.Children.map(children, (child) => {
378
+ if (_react2.default.isValidElement(child)) {
379
+ return _react2.default.cloneElement(child, {
380
+ collapsed,
381
+ showTooltips
382
+ });
383
+ }
384
+ return child;
385
+ });
386
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationSection, { className, "data-testid": "sidenav-navigation", children: enhancedChildren });
387
+ });
388
+ Navigation.displayName = "SideNav.Navigation";
389
+ var Footer = _react2.default.memo(({ children, className }) => {
390
+ const { collapsed } = _react2.default.useContext(SideNavContext);
391
+ const enhancedChildren = _react2.default.Children.map(children, (child) => {
392
+ if (_react2.default.isValidElement(child)) {
393
+ return _react2.default.cloneElement(child, {
394
+ compact: collapsed
395
+ });
396
+ }
397
+ return child;
398
+ });
399
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, FooterSection, { className, "data-testid": "sidenav-footer", children: enhancedChildren });
400
+ });
401
+ Footer.displayName = "SideNav.Footer";
402
+ var SideNav = Object.assign(
403
+ _react2.default.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] = _react.useState.call(void 0, defaultCollapsed);
419
+ const isControlled = controlledCollapsed !== void 0;
420
+ const collapsed = isControlled ? controlledCollapsed : internalCollapsed;
421
+ const handleToggleCollapse = _react.useCallback.call(void 0, () => {
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__ */ _jsxruntime.jsx.call(void 0, SideNavContext.Provider, { value: contextValue, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
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
+
462
+
463
+
464
+ var _IconButton = require('@mui/material/IconButton'); var _IconButton2 = _interopRequireDefault(_IconButton);
465
+ var _Tooltip = require('@mui/material/Tooltip'); var _Tooltip2 = _interopRequireDefault(_Tooltip);
466
+ var _ButtonBase = require('@mui/material/ButtonBase'); var _ButtonBase2 = _interopRequireDefault(_ButtonBase);
467
+
468
+ var _ChevronLeft = require('@mui/icons-material/ChevronLeft'); var _ChevronLeft2 = _interopRequireDefault(_ChevronLeft);
469
+ var _ChevronRight = require('@mui/icons-material/ChevronRight'); var _ChevronRight2 = _interopRequireDefault(_ChevronRight);
470
+
471
+ var HeaderContainer = _styles.styled.call(void 0, _Box2.default, {
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 = _styles.styled.call(void 0, (0, _ButtonBase2.default))(({ 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 = _react2.default.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__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
512
+ logo && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
513
+ _Box2.default,
514
+ {
515
+ sx: {
516
+ display: "flex",
517
+ alignItems: "center",
518
+ justifyContent: "center",
519
+ flexShrink: 0
520
+ },
521
+ children: logo
522
+ }
523
+ ),
524
+ !collapsed && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
525
+ _Typography2.default,
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__ */ _jsxruntime.jsxs.call(void 0,
540
+ HeaderContainer,
541
+ {
542
+ "data-testid": "sidenav-header-content",
543
+ "aria-label": headerAriaLabel,
544
+ isCollapsed: collapsed,
545
+ children: [
546
+ onLogoClick ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
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__ */ _jsxruntime.jsx.call(void 0,
555
+ _Box2.default,
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__ */ _jsxruntime.jsx.call(void 0,
567
+ _Tooltip2.default,
568
+ {
569
+ title: collapsed ? "Expand navigation" : "Collapse navigation",
570
+ placement: "right",
571
+ arrow: true,
572
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
573
+ _IconButton2.default,
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__ */ _jsxruntime.jsx.call(void 0, _ChevronRight2.default, {}) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ChevronLeft2.default, {})
589
+ }
590
+ )
591
+ }
592
+ )
593
+ ]
594
+ }
595
+ );
596
+ });
597
+ SideNavHeader.displayName = "SideNavHeader";
598
+
599
+ // src/components/navigation/SideNav/NavigationList.tsx
600
+
601
+
602
+ var _ListItem = require('@mui/material/ListItem'); var _ListItem2 = _interopRequireDefault(_ListItem);
603
+
604
+ // src/components/navigation/SideNav/NavigationItem.tsx
605
+
606
+
607
+
608
+
609
+
610
+
611
+
612
+
613
+ var StyledListItemButton2 = _styles.styled.call(void 0, _ListItemButton2.default, {
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 = _react2.default.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
+ _react2.default.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__ */ _jsxruntime.jsx.call(void 0,
702
+ _ListItemIcon2.default,
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__ */ _jsxruntime.jsx.call(void 0,
716
+ _ListItemText2.default,
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__ */ _jsxruntime.jsxs.call(void 0,
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__ */ _jsxruntime.jsx.call(void 0,
753
+ _Box2.default,
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__ */ _jsxruntime.jsx.call(void 0,
768
+ _Tooltip2.default,
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
+
786
+ var NavigationList = _react2.default.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] = _react.useState.call(void 0,
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__ */ _jsxruntime.jsx.call(void 0,
809
+ _List2.default,
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__ */ _jsxruntime.jsx.call(void 0,
823
+ _ListItem2.default,
824
+ {
825
+ role: "listitem",
826
+ sx: {
827
+ padding: 0,
828
+ display: "block"
829
+ },
830
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
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
+
859
+
860
+
861
+
862
+
863
+ var _Power = require('@mui/icons-material/Power'); var _Power2 = _interopRequireDefault(_Power);
864
+
865
+ var StatusPill = _styles.styled.call(void 0, _Box2.default, {
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 = _react2.default.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__ */ _jsxruntime.jsxs.call(void 0,
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__ */ _jsxruntime.jsx.call(void 0,
951
+ _Box2.default,
952
+ {
953
+ sx: {
954
+ display: "flex",
955
+ alignItems: "center",
956
+ fontSize: 16,
957
+ color: "inherit"
958
+ },
959
+ children: icon || /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Power2.default, { fontSize: "small" })
960
+ }
961
+ ),
962
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Typography2.default, { className: "status-text", variant: "body2", children: compact ? _nullishCoalesce(compactText, () => ( status)) : status })
963
+ ]
964
+ }
965
+ );
966
+ if (compact) {
967
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
968
+ _Box2.default,
969
+ {
970
+ sx: {
971
+ display: "flex",
972
+ justifyContent: "center",
973
+ padding: 1
974
+ },
975
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Tooltip2.default, { title: status, placement: "right", arrow: true, children: statusContent })
976
+ }
977
+ );
978
+ }
979
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
980
+ _Box2.default,
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
+
995
+
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+ var _Logout = require('@mui/icons-material/Logout'); var _Logout2 = _interopRequireDefault(_Logout);
1003
+
1004
+ var AccountContainer = _styles.styled.call(void 0, _Box2.default, {
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 = _react2.default.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__ */ _jsxruntime.jsxs.call(void 0, AccountContainer, { layout, isCompact: true, "aria-label": "Account section", children: [
1046
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1047
+ _Tooltip2.default,
1048
+ {
1049
+ title: `${user.name}${user.email ? ` (${user.email})` : ""}`,
1050
+ placement: "right",
1051
+ arrow: true,
1052
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1053
+ _Avatar2.default,
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__ */ _jsxruntime.jsx.call(void 0, _Tooltip2.default, { title: "Logout", placement: "right", arrow: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1072
+ _IconButton2.default,
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__ */ _jsxruntime.jsx.call(void 0, _Logout2.default, { fontSize: "small" })
1085
+ }
1086
+ ) })
1087
+ ] });
1088
+ }
1089
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, AccountContainer, { layout, isCompact: false, "aria-label": "Account section", children: [
1090
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1091
+ _Avatar2.default,
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__ */ _jsxruntime.jsxs.call(void 0,
1107
+ _Box2.default,
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__ */ _jsxruntime.jsx.call(void 0,
1119
+ _Typography2.default,
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__ */ _jsxruntime.jsx.call(void 0,
1133
+ _Typography2.default,
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__ */ _jsxruntime.jsx.call(void 0,
1148
+ _Button2.default,
1149
+ {
1150
+ onClick: onLogout,
1151
+ "aria-label": "Logout",
1152
+ startIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Logout2.default, { 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
+ var _Tab = require('@mui/material/Tab'); var _Tab2 = _interopRequireDefault(_Tab);
1179
+
1180
+
1181
+ var StyledTab = _styles.styled.call(void 0, (0, _Tab2.default))(({ 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__ */ _jsxruntime.jsx.call(void 0, _chunkBIZK6FUDjs.Badge, { variant: badgeVariant, badgeContent: badge, children: label }) : label;
1203
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, StyledTab, { label: tabLabel, ...props });
1204
+ };
1205
+
1206
+ // src/components/navigation/Menu.tsx
1207
+
1208
+ var _Menu = require('@mui/material/Menu'); var _Menu2 = _interopRequireDefault(_Menu);
1209
+ var _MenuItem = require('@mui/material/MenuItem'); var _MenuItem2 = _interopRequireDefault(_MenuItem);
1210
+
1211
+
1212
+ var _Divider = require('@mui/material/Divider'); var _Divider2 = _interopRequireDefault(_Divider);
1213
+
1214
+
1215
+ var StyledMenu = _styles.styled.call(void 0, (0, _Menu2.default))(({ 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 = _react2.default.forwardRef(function Menu2({ anchorEl, onClose, children, ...props }, ref) {
1229
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
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 = _react2.default.forwardRef(function MenuItem2({ icon, label, onClick, disabled = false, divider = false }, ref) {
1250
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1251
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _MenuItem2.default, { ref, onClick, disabled, children: [
1252
+ icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemIcon2.default, { children: icon }),
1253
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemText2.default, { children: label })
1254
+ ] }),
1255
+ divider && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Divider2.default, {})
1256
+ ] });
1257
+ });
1258
+
1259
+ // src/components/navigation/Pagination.tsx
1260
+ var _Pagination = require('@mui/material/Pagination'); var _Pagination2 = _interopRequireDefault(_Pagination);
1261
+
1262
+
1263
+ var StyledPagination = _styles.styled.call(void 0, (0, _Pagination2.default))(({ 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__ */ _jsxruntime.jsx.call(void 0, StyledPagination, { color, ...props });
1279
+ };
1280
+
1281
+ // src/components/navigation/Selector.tsx
1282
+
1283
+
1284
+
1285
+
1286
+
1287
+ var _InputAdornment = require('@mui/material/InputAdornment'); var _InputAdornment2 = _interopRequireDefault(_InputAdornment);
1288
+
1289
+
1290
+ var _ListItemAvatar = require('@mui/material/ListItemAvatar'); var _ListItemAvatar2 = _interopRequireDefault(_ListItemAvatar);
1291
+
1292
+ var _CircularProgress = require('@mui/material/CircularProgress'); var _CircularProgress2 = _interopRequireDefault(_CircularProgress);
1293
+ var _KeyboardArrowDown = require('@mui/icons-material/KeyboardArrowDown'); var _KeyboardArrowDown2 = _interopRequireDefault(_KeyboardArrowDown);
1294
+ var _Search = require('@mui/icons-material/Search'); var _Search2 = _interopRequireDefault(_Search);
1295
+ var _Add = require('@mui/icons-material/Add'); var _Add2 = _interopRequireDefault(_Add);
1296
+
1297
+
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 = _styles.useTheme.call(void 0, );
1311
+ const [anchorEl, setAnchorEl] = _react.useState.call(void 0, null);
1312
+ const [searchTerm, setSearchTerm] = _react.useState.call(void 0, "");
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__ */ _jsxruntime.jsxs.call(void 0, _Box2.default, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
1331
+ option.avatar ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Avatar2.default, { src: option.avatar, sx: { width: 20, height: 20 } }) : option.icon ? option.icon : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Avatar2.default, { sx: { width: 20, height: 20, bgcolor: theme.palette.primary.main, fontSize: "0.7rem" }, children: option.name.charAt(0) }),
1332
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Typography2.default, { variant: "body2", children: option.name })
1333
+ ] });
1334
+ if (compact) {
1335
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1336
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOWWDNDF4js.IconButton, { onClick: handleOpen, size: "small", children: selectedOption ? selectedOption.avatar ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Avatar2.default, { src: selectedOption.avatar, sx: { width: 32, height: 32 } }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Avatar2.default, { sx: { width: 32, height: 32, bgcolor: theme.palette.primary.main }, children: selectedOption.name.charAt(0) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Avatar2.default, { sx: { width: 32, height: 32, bgcolor: theme.palette.grey[400] }, children: "?" }) }),
1337
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1338
+ _Menu2.default,
1339
+ {
1340
+ anchorEl,
1341
+ open,
1342
+ onClose: handleClose,
1343
+ PaperProps: {
1344
+ sx: { width, maxHeight: 600, mt: 1 }
1345
+ },
1346
+ children: loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Box2.default, { sx: { display: "flex", justifyContent: "center", p: 2 }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _CircularProgress2.default, { size: 24 }) }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1347
+ options.length > 5 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Box2.default, { sx: { p: 1, borderBottom: `1px solid ${theme.palette.grey[200]}` }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1348
+ _chunkJBHRAAN3js.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__ */ _jsxruntime.jsx.call(void 0, _InputAdornment2.default, { position: "start", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Search2.default, { fontSize: "small" }) })
1357
+ }
1358
+ }
1359
+ ) }),
1360
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _List2.default, { sx: { maxHeight: 400, overflow: "auto" }, children: [
1361
+ filteredOptions.map((option) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1362
+ _ListItemButton2.default,
1363
+ {
1364
+ selected: option.id === selectedId,
1365
+ onClick: () => handleSelect(option.id),
1366
+ disabled: option.disabled,
1367
+ children: [
1368
+ option.avatar ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemAvatar2.default, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Avatar2.default, { src: option.avatar }) }) : option.icon ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemAvatar2.default, { children: option.icon }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemAvatar2.default, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Avatar2.default, { sx: { bgcolor: theme.palette.primary.main }, children: option.name.charAt(0) }) }),
1369
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemText2.default, { primary: option.name, secondary: option.description })
1370
+ ]
1371
+ },
1372
+ option.id
1373
+ )),
1374
+ filteredOptions.length === 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Box2.default, { sx: { p: 2, textAlign: "center" }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Typography2.default, { variant: "body2", color: "text.secondary", children: emptyMessage }) })
1375
+ ] }),
1376
+ onCreate && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Box2.default, { sx: { p: 1, borderTop: `1px solid ${theme.palette.grey[200]}` }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1377
+ _chunkLVJSKRX3js.Button,
1378
+ {
1379
+ fullWidth: true,
1380
+ startIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Add2.default, {}),
1381
+ onClick: () => {
1382
+ onCreate();
1383
+ handleClose();
1384
+ },
1385
+ children: "Create New"
1386
+ }
1387
+ ) })
1388
+ ] })
1389
+ }
1390
+ )
1391
+ ] });
1392
+ }
1393
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1394
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _Box2.default, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: [
1395
+ selectedOption ? renderSelected ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkU2QHFISGjs.Link, { onClick: handleOpen, underline: "hover", children: renderSelected(selectedOption) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkU2QHFISGjs.Link, { onClick: handleOpen, underline: "hover", children: defaultRenderSelected(selectedOption) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Typography2.default, { variant: "body2", color: "text.secondary", children: placeholder }),
1396
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOWWDNDF4js.IconButton, { onClick: handleOpen, size: "small", sx: { p: 0.2, ml: 0.5 }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _KeyboardArrowDown2.default, { fontSize: "small" }) })
1397
+ ] }),
1398
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1399
+ _Menu2.default,
1400
+ {
1401
+ anchorEl,
1402
+ open,
1403
+ onClose: handleClose,
1404
+ PaperProps: {
1405
+ sx: { width, maxHeight: 600, mt: 1 }
1406
+ },
1407
+ children: loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Box2.default, { sx: { display: "flex", justifyContent: "center", p: 2 }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _CircularProgress2.default, { size: 24 }) }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1408
+ options.length > 5 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Box2.default, { sx: { p: 1, borderBottom: `1px solid ${theme.palette.grey[200]}` }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1409
+ _chunkJBHRAAN3js.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__ */ _jsxruntime.jsx.call(void 0, _InputAdornment2.default, { position: "start", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Search2.default, { fontSize: "small" }) })
1418
+ }
1419
+ }
1420
+ ) }),
1421
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _List2.default, { sx: { maxHeight: 400, overflow: "auto" }, children: [
1422
+ filteredOptions.map((option) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1423
+ _ListItemButton2.default,
1424
+ {
1425
+ selected: option.id === selectedId,
1426
+ onClick: () => handleSelect(option.id),
1427
+ disabled: option.disabled,
1428
+ children: [
1429
+ option.avatar ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemAvatar2.default, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Avatar2.default, { src: option.avatar }) }) : option.icon ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemAvatar2.default, { children: option.icon }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemAvatar2.default, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Avatar2.default, { sx: { bgcolor: theme.palette.primary.main }, children: option.name.charAt(0) }) }),
1430
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ListItemText2.default, { primary: option.name, secondary: option.description })
1431
+ ]
1432
+ },
1433
+ option.id
1434
+ )),
1435
+ filteredOptions.length === 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Box2.default, { sx: { p: 2, textAlign: "center" }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Typography2.default, { variant: "body2", color: "text.secondary", children: emptyMessage }) })
1436
+ ] }),
1437
+ onCreate && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Box2.default, { sx: { p: 1, borderTop: `1px solid ${theme.palette.grey[200]}` }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1438
+ _chunkLVJSKRX3js.Button,
1439
+ {
1440
+ fullWidth: true,
1441
+ startIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Add2.default, {}),
1442
+ onClick: () => {
1443
+ onCreate();
1444
+ handleClose();
1445
+ },
1446
+ children: "Create New"
1447
+ }
1448
+ ) })
1449
+ ] })
1450
+ }
1451
+ )
1452
+ ] });
1453
+ };
1454
+
1455
+
1456
+
1457
+
1458
+
1459
+
1460
+
1461
+
1462
+
1463
+
1464
+
1465
+
1466
+
1467
+
1468
+
1469
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+
1476
+
1477
+ exports.DropdownAnchor = DropdownAnchor; exports.Dropdown = Dropdown; exports.SidebarItem = SidebarItem; exports.Sidebar = Sidebar; exports.Stepper = Stepper; exports.Step = Step; exports.StepLabel = StepLabel; exports.StepContent = StepContent; exports.StepButton = StepButton; exports.NumberedStepper = NumberedStepper; exports.SideNav = SideNav; exports.SideNavHeader = SideNavHeader; exports.NavigationItem = NavigationItem; exports.NavigationList = NavigationList; exports.ConnectionStatus = ConnectionStatus; exports.AccountSection = AccountSection; exports.Tab = Tab; exports.Menu = Menu; exports.MenuItem = MenuItem; exports.Pagination = Pagination; exports.Selector = Selector;
1478
+ //# sourceMappingURL=chunk-KKIKOIMP.js.map