@tomny-dev/uzi 0.1.8 → 0.1.9-pr.2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -3
- package/dist/index.cjs +600 -261
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +405 -45
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +75 -15
- package/dist/index.d.ts +75 -15
- package/dist/index.js +586 -251
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
package/dist/index.cjs
CHANGED
|
@@ -58,8 +58,12 @@ __export(index_exports, {
|
|
|
58
58
|
Label: () => Label,
|
|
59
59
|
Modal: () => Modal,
|
|
60
60
|
ModalOverlay: () => ModalOverlay,
|
|
61
|
+
MultiSelect: () => MultiSelect,
|
|
61
62
|
Pill: () => Pill,
|
|
63
|
+
Progress: () => Progress,
|
|
64
|
+
Select: () => Select,
|
|
62
65
|
SidebarNav: () => SidebarNav,
|
|
66
|
+
Skeleton: () => Skeleton,
|
|
63
67
|
ThemeProvider: () => ThemeProvider,
|
|
64
68
|
ThemeToggleButton: () => ThemeToggleButton,
|
|
65
69
|
ToastProvider: () => ToastProvider,
|
|
@@ -220,36 +224,20 @@ function Pill({
|
|
|
220
224
|
}
|
|
221
225
|
|
|
222
226
|
// src/components/modal/Modal.tsx
|
|
223
|
-
var
|
|
227
|
+
var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
|
|
224
228
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
225
229
|
function ModalOverlay({ open, onClose, className, children }) {
|
|
226
|
-
const mouseDownOnBackdrop = (0, import_react.useRef)(false);
|
|
227
|
-
(0, import_react.useEffect)(() => {
|
|
228
|
-
if (!open) return;
|
|
229
|
-
const handleKeyDown = (e) => {
|
|
230
|
-
if (e.key === "Escape") {
|
|
231
|
-
e.stopPropagation();
|
|
232
|
-
onClose();
|
|
233
|
-
}
|
|
234
|
-
};
|
|
235
|
-
window.addEventListener("keydown", handleKeyDown, true);
|
|
236
|
-
return () => window.removeEventListener("keydown", handleKeyDown, true);
|
|
237
|
-
}, [open, onClose]);
|
|
238
|
-
if (!open) return null;
|
|
239
230
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
240
|
-
|
|
231
|
+
DialogPrimitive.Root,
|
|
241
232
|
{
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
onMouseDown: (e) => {
|
|
246
|
-
mouseDownOnBackdrop.current = e.target === e.currentTarget;
|
|
233
|
+
open,
|
|
234
|
+
onOpenChange: (nextOpen) => {
|
|
235
|
+
if (!nextOpen) onClose();
|
|
247
236
|
},
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
252
|
-
children
|
|
237
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DialogPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "portalLayer", children: [
|
|
238
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DialogPrimitive.Overlay, { className: cx("backdrop", className) }),
|
|
239
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DialogPrimitive.Content, { className: "overlayContent", children })
|
|
240
|
+
] }) })
|
|
253
241
|
}
|
|
254
242
|
);
|
|
255
243
|
}
|
|
@@ -257,13 +245,13 @@ function Modal({ open, onClose, title, subtitle, size = "md", children, footer }
|
|
|
257
245
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ModalOverlay, { open, onClose, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: cx("modal", `size-${size}`), children: [
|
|
258
246
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "header", children: [
|
|
259
247
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "titles", children: [
|
|
260
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
261
|
-
subtitle
|
|
248
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DialogPrimitive.Title, { className: "title", children: title }),
|
|
249
|
+
subtitle ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DialogPrimitive.Description, { className: "subtitle", children: subtitle }) : null
|
|
262
250
|
] }),
|
|
263
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { className: "closeButton",
|
|
251
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { className: "closeButton", "aria-label": "Close", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
264
252
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
265
253
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
266
|
-
] }) })
|
|
254
|
+
] }) }) })
|
|
267
255
|
] }),
|
|
268
256
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "body", children }),
|
|
269
257
|
footer && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "footer", children: footer })
|
|
@@ -283,7 +271,8 @@ function Alert({ tone, children, className }) {
|
|
|
283
271
|
}
|
|
284
272
|
|
|
285
273
|
// src/components/toast/ToastContext.tsx
|
|
286
|
-
var
|
|
274
|
+
var import_react = require("react");
|
|
275
|
+
var ToastPrimitive = __toESM(require("@radix-ui/react-toast"), 1);
|
|
287
276
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
288
277
|
var DEFAULT_CONFIG = {
|
|
289
278
|
position: "top-right",
|
|
@@ -292,17 +281,17 @@ var DEFAULT_CONFIG = {
|
|
|
292
281
|
pauseOnHover: true,
|
|
293
282
|
pauseOnFocusLoss: true
|
|
294
283
|
};
|
|
295
|
-
var ToastContext = (0,
|
|
284
|
+
var ToastContext = (0, import_react.createContext)(void 0);
|
|
296
285
|
var toastIdCounter = 0;
|
|
297
286
|
var generateToastId = () => `toast-${++toastIdCounter}-${Date.now()}`;
|
|
298
287
|
function ToastProvider({
|
|
299
288
|
children,
|
|
300
289
|
config
|
|
301
290
|
}) {
|
|
302
|
-
const [toasts, setToasts] = (0,
|
|
303
|
-
const [isPaused, setIsPaused] = (0,
|
|
304
|
-
const merged = (0,
|
|
305
|
-
const push = (0,
|
|
291
|
+
const [toasts, setToasts] = (0, import_react.useState)([]);
|
|
292
|
+
const [isPaused, setIsPaused] = (0, import_react.useState)(false);
|
|
293
|
+
const merged = (0, import_react.useMemo)(() => ({ ...DEFAULT_CONFIG, ...config }), [config]);
|
|
294
|
+
const push = (0, import_react.useCallback)(
|
|
306
295
|
(message, options = {}) => {
|
|
307
296
|
const id = generateToastId();
|
|
308
297
|
setToasts((prev) => {
|
|
@@ -324,37 +313,37 @@ function ToastProvider({
|
|
|
324
313
|
},
|
|
325
314
|
[merged.defaultDuration, merged.maxToasts]
|
|
326
315
|
);
|
|
327
|
-
const success = (0,
|
|
316
|
+
const success = (0, import_react.useCallback)(
|
|
328
317
|
(message, options) => push(message, { ...options, type: "success" }),
|
|
329
318
|
[push]
|
|
330
319
|
);
|
|
331
|
-
const error = (0,
|
|
320
|
+
const error = (0, import_react.useCallback)(
|
|
332
321
|
(message, options) => push(message, { ...options, type: "error", duration: options?.duration ?? 6e3 }),
|
|
333
322
|
[push]
|
|
334
323
|
);
|
|
335
|
-
const warning = (0,
|
|
324
|
+
const warning = (0, import_react.useCallback)(
|
|
336
325
|
(message, options) => push(message, { ...options, type: "warning" }),
|
|
337
326
|
[push]
|
|
338
327
|
);
|
|
339
|
-
const info = (0,
|
|
328
|
+
const info = (0, import_react.useCallback)(
|
|
340
329
|
(message, options) => push(message, { ...options, type: "info" }),
|
|
341
330
|
[push]
|
|
342
331
|
);
|
|
343
|
-
const dismiss = (0,
|
|
332
|
+
const dismiss = (0, import_react.useCallback)((id) => {
|
|
344
333
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
345
334
|
}, []);
|
|
346
|
-
const dismissAll = (0,
|
|
347
|
-
(0,
|
|
335
|
+
const dismissAll = (0, import_react.useCallback)(() => setToasts([]), []);
|
|
336
|
+
(0, import_react.useEffect)(() => {
|
|
348
337
|
if (!merged.pauseOnFocusLoss) return;
|
|
349
338
|
const handleVisibility = () => setIsPaused(document.visibilityState !== "visible");
|
|
350
339
|
document.addEventListener("visibilitychange", handleVisibility);
|
|
351
340
|
return () => document.removeEventListener("visibilitychange", handleVisibility);
|
|
352
341
|
}, [merged.pauseOnFocusLoss]);
|
|
353
|
-
const value = (0,
|
|
342
|
+
const value = (0, import_react.useMemo)(
|
|
354
343
|
() => ({ toasts, push, success, error, warning, info, dismiss, dismissAll }),
|
|
355
344
|
[toasts, push, success, error, warning, info, dismiss, dismissAll]
|
|
356
345
|
);
|
|
357
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.
|
|
346
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ToastContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(ToastPrimitive.Provider, { swipeDirection: "right", children: [
|
|
358
347
|
children,
|
|
359
348
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
360
349
|
ToastContainer,
|
|
@@ -367,10 +356,10 @@ function ToastProvider({
|
|
|
367
356
|
onPauseChange: setIsPaused
|
|
368
357
|
}
|
|
369
358
|
)
|
|
370
|
-
] });
|
|
359
|
+
] }) });
|
|
371
360
|
}
|
|
372
361
|
function useToast() {
|
|
373
|
-
const ctx = (0,
|
|
362
|
+
const ctx = (0, import_react.useContext)(ToastContext);
|
|
374
363
|
if (!ctx) throw new Error("useToast must be used within a ToastProvider");
|
|
375
364
|
return ctx;
|
|
376
365
|
}
|
|
@@ -399,26 +388,29 @@ function ToastContainer({
|
|
|
399
388
|
return "topRight";
|
|
400
389
|
}
|
|
401
390
|
})();
|
|
402
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
391
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
|
|
392
|
+
toasts.map((toast) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ToastItem, { toast, isPaused, onDismiss }, toast.id)),
|
|
393
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
394
|
+
ToastPrimitive.Viewport,
|
|
395
|
+
{
|
|
396
|
+
className: cx("stack", posClass),
|
|
397
|
+
label: "Notifications",
|
|
398
|
+
onMouseEnter: () => pauseOnHover && onPauseChange(true),
|
|
399
|
+
onMouseLeave: () => pauseOnHover && onPauseChange(false)
|
|
400
|
+
}
|
|
401
|
+
)
|
|
402
|
+
] });
|
|
412
403
|
}
|
|
413
404
|
function ToastItem({
|
|
414
405
|
toast,
|
|
415
406
|
isPaused,
|
|
416
407
|
onDismiss
|
|
417
408
|
}) {
|
|
418
|
-
const [
|
|
419
|
-
const timerRef = (0,
|
|
420
|
-
const startRef = (0,
|
|
421
|
-
const remainingRef = (0,
|
|
409
|
+
const [open, setOpen] = (0, import_react.useState)(true);
|
|
410
|
+
const timerRef = (0, import_react.useRef)(null);
|
|
411
|
+
const startRef = (0, import_react.useRef)(0);
|
|
412
|
+
const remainingRef = (0, import_react.useRef)(toast.duration ?? 0);
|
|
413
|
+
const closingRef = (0, import_react.useRef)(false);
|
|
422
414
|
const palette = getPalette(toast.type);
|
|
423
415
|
const styleVars = {
|
|
424
416
|
["--toast-bg"]: palette.background,
|
|
@@ -435,12 +427,14 @@ function ToastItem({
|
|
|
435
427
|
timerRef.current = null;
|
|
436
428
|
}
|
|
437
429
|
};
|
|
438
|
-
const triggerDismiss = (0,
|
|
439
|
-
|
|
430
|
+
const triggerDismiss = (0, import_react.useCallback)(() => {
|
|
431
|
+
if (closingRef.current) return;
|
|
432
|
+
closingRef.current = true;
|
|
433
|
+
setOpen(false);
|
|
440
434
|
stopTimer();
|
|
441
435
|
window.setTimeout(() => onDismiss(toast.id), 160);
|
|
442
436
|
}, [onDismiss, toast.id]);
|
|
443
|
-
const schedule = (0,
|
|
437
|
+
const schedule = (0, import_react.useCallback)(
|
|
444
438
|
(delay) => {
|
|
445
439
|
if (!delay || delay <= 0) {
|
|
446
440
|
triggerDismiss();
|
|
@@ -452,12 +446,12 @@ function ToastItem({
|
|
|
452
446
|
},
|
|
453
447
|
[triggerDismiss]
|
|
454
448
|
);
|
|
455
|
-
(0,
|
|
449
|
+
(0, import_react.useEffect)(() => {
|
|
456
450
|
if (!toast.duration || toast.duration <= 0) return void 0;
|
|
457
451
|
schedule(toast.duration);
|
|
458
452
|
return stopTimer;
|
|
459
453
|
}, [schedule, toast.duration]);
|
|
460
|
-
(0,
|
|
454
|
+
(0, import_react.useEffect)(() => {
|
|
461
455
|
if (!toast.duration || toast.duration <= 0) return;
|
|
462
456
|
if (isPaused) {
|
|
463
457
|
const elapsed = performance.now() - startRef.current;
|
|
@@ -468,42 +462,60 @@ function ToastItem({
|
|
|
468
462
|
}
|
|
469
463
|
}, [isPaused, schedule, toast.duration]);
|
|
470
464
|
const icon = getIcon(toast.type);
|
|
471
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
children: toast.
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
465
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
466
|
+
ToastPrimitive.Root,
|
|
467
|
+
{
|
|
468
|
+
open,
|
|
469
|
+
onOpenChange: (nextOpen) => {
|
|
470
|
+
if (!nextOpen) triggerDismiss();
|
|
471
|
+
},
|
|
472
|
+
duration: 2147483647,
|
|
473
|
+
className: "toast",
|
|
474
|
+
style: styleVars,
|
|
475
|
+
children: [
|
|
476
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "icon", "aria-hidden": true, children: icon }),
|
|
477
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "body", children: [
|
|
478
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ToastPrimitive.Description, { className: "message", children: toast.message }),
|
|
479
|
+
toast.action && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "actions", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
480
|
+
ToastPrimitive.Action,
|
|
481
|
+
{
|
|
482
|
+
asChild: true,
|
|
483
|
+
altText: toast.action.label,
|
|
484
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
485
|
+
"button",
|
|
486
|
+
{
|
|
487
|
+
type: "button",
|
|
488
|
+
className: "actionButton",
|
|
489
|
+
onClick: () => {
|
|
490
|
+
toast.action?.onClick();
|
|
491
|
+
triggerDismiss();
|
|
492
|
+
},
|
|
493
|
+
children: toast.action.label
|
|
494
|
+
}
|
|
495
|
+
)
|
|
496
|
+
}
|
|
497
|
+
) })
|
|
498
|
+
] }),
|
|
499
|
+
toast.dismissible !== false && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ToastPrimitive.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
500
|
+
"button",
|
|
497
501
|
{
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
+
type: "button",
|
|
503
|
+
className: "closeButton",
|
|
504
|
+
"aria-label": "Dismiss notification",
|
|
505
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
506
|
+
"path",
|
|
507
|
+
{
|
|
508
|
+
d: "M11 3L3 11M3 3l8 8",
|
|
509
|
+
stroke: "currentColor",
|
|
510
|
+
strokeWidth: "1.5",
|
|
511
|
+
strokeLinecap: "round"
|
|
512
|
+
}
|
|
513
|
+
) })
|
|
502
514
|
}
|
|
503
515
|
) })
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
516
|
+
]
|
|
517
|
+
}
|
|
518
|
+
);
|
|
507
519
|
}
|
|
508
520
|
function getPalette(type) {
|
|
509
521
|
switch (type) {
|
|
@@ -608,105 +620,376 @@ var Checkbox = React3.forwardRef(
|
|
|
608
620
|
);
|
|
609
621
|
Checkbox.displayName = "Checkbox";
|
|
610
622
|
|
|
611
|
-
// src/components/
|
|
612
|
-
var
|
|
623
|
+
// src/components/multi-select/MultiSelect.tsx
|
|
624
|
+
var React4 = __toESM(require("react"), 1);
|
|
625
|
+
var DropdownMenuPrimitive = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
|
|
613
626
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
627
|
+
var MultiSelect = React4.forwardRef(
|
|
628
|
+
({
|
|
629
|
+
options,
|
|
630
|
+
value,
|
|
631
|
+
onChange,
|
|
632
|
+
placeholder = "Select options",
|
|
633
|
+
fullWidth = true,
|
|
634
|
+
maxVisibleValues = 2,
|
|
635
|
+
className,
|
|
636
|
+
disabled = false,
|
|
637
|
+
name,
|
|
638
|
+
"aria-label": ariaLabel,
|
|
639
|
+
"aria-labelledby": ariaLabelledBy
|
|
640
|
+
}, ref) => {
|
|
641
|
+
const selectedSet = React4.useMemo(() => new Set(value), [value]);
|
|
642
|
+
const selectedOptions = React4.useMemo(
|
|
643
|
+
() => options.filter((opt) => selectedSet.has(opt.value)),
|
|
644
|
+
[options, selectedSet]
|
|
645
|
+
);
|
|
646
|
+
const toggleValue = React4.useCallback(
|
|
647
|
+
(nextValue) => {
|
|
648
|
+
if (selectedSet.has(nextValue)) {
|
|
649
|
+
onChange(value.filter((entry) => entry !== nextValue));
|
|
650
|
+
return;
|
|
651
|
+
}
|
|
652
|
+
onChange([...value, nextValue]);
|
|
653
|
+
},
|
|
654
|
+
[onChange, selectedSet, value]
|
|
655
|
+
);
|
|
656
|
+
const visibleCount = Math.max(1, maxVisibleValues);
|
|
657
|
+
const visibleOptions = selectedOptions.slice(0, visibleCount);
|
|
658
|
+
const overflowCount = Math.max(
|
|
659
|
+
0,
|
|
660
|
+
selectedOptions.length - visibleOptions.length
|
|
661
|
+
);
|
|
662
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuPrimitive.Root, { modal: false, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
663
|
+
"div",
|
|
664
|
+
{
|
|
665
|
+
className: cx("wrapper", fullWidth && "wrapper-fullWidth", className),
|
|
666
|
+
children: [
|
|
667
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuPrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
668
|
+
"button",
|
|
669
|
+
{
|
|
670
|
+
ref,
|
|
671
|
+
type: "button",
|
|
672
|
+
className: cx(
|
|
673
|
+
"trigger",
|
|
674
|
+
selectedOptions.length > 0 && "trigger-hasValue"
|
|
675
|
+
),
|
|
676
|
+
"aria-label": ariaLabel,
|
|
677
|
+
"aria-labelledby": ariaLabelledBy,
|
|
678
|
+
disabled,
|
|
679
|
+
children: [
|
|
680
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "value", children: selectedOptions.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "placeholder", children: placeholder }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
|
|
681
|
+
visibleOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "chip", children: option.label }, option.value)),
|
|
682
|
+
overflowCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: "chip chip-summary", children: [
|
|
683
|
+
"+",
|
|
684
|
+
overflowCount
|
|
685
|
+
] }) : null
|
|
686
|
+
] }) }),
|
|
687
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "chevron", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
688
|
+
"svg",
|
|
689
|
+
{
|
|
690
|
+
viewBox: "0 0 10 10",
|
|
691
|
+
fill: "none",
|
|
692
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
693
|
+
width: "10",
|
|
694
|
+
height: "10",
|
|
695
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
696
|
+
"path",
|
|
697
|
+
{
|
|
698
|
+
d: "M2 3.5L5 6.5L8 3.5",
|
|
699
|
+
stroke: "currentColor",
|
|
700
|
+
strokeWidth: "1.5",
|
|
701
|
+
strokeLinecap: "round",
|
|
702
|
+
strokeLinejoin: "round"
|
|
703
|
+
}
|
|
704
|
+
)
|
|
705
|
+
}
|
|
706
|
+
) })
|
|
707
|
+
]
|
|
708
|
+
}
|
|
709
|
+
) }),
|
|
710
|
+
name ? value.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("input", { type: "hidden", name, value: entry }, entry)) : null,
|
|
711
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
712
|
+
DropdownMenuPrimitive.Content,
|
|
713
|
+
{
|
|
714
|
+
className: "menu",
|
|
715
|
+
sideOffset: 4,
|
|
716
|
+
align: "start",
|
|
717
|
+
children: options.map((option) => {
|
|
718
|
+
const selected = selectedSet.has(option.value);
|
|
719
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
720
|
+
DropdownMenuPrimitive.CheckboxItem,
|
|
721
|
+
{
|
|
722
|
+
className: cx(
|
|
723
|
+
"option",
|
|
724
|
+
selected && "option-selected",
|
|
725
|
+
option.disabled && "option-disabled"
|
|
726
|
+
),
|
|
727
|
+
checked: selected,
|
|
728
|
+
disabled: option.disabled,
|
|
729
|
+
onCheckedChange: () => toggleValue(option.value),
|
|
730
|
+
onSelect: (event) => event.preventDefault(),
|
|
731
|
+
children: [
|
|
732
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
733
|
+
"span",
|
|
734
|
+
{
|
|
735
|
+
className: cx(
|
|
736
|
+
"indicator",
|
|
737
|
+
selected && "indicator-selected",
|
|
738
|
+
option.disabled && "indicator-disabled"
|
|
739
|
+
),
|
|
740
|
+
"aria-hidden": "true",
|
|
741
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuPrimitive.ItemIndicator, { forceMount: true, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
742
|
+
"svg",
|
|
743
|
+
{
|
|
744
|
+
viewBox: "0 0 16 16",
|
|
745
|
+
width: "16",
|
|
746
|
+
height: "16",
|
|
747
|
+
fill: "none",
|
|
748
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
749
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
750
|
+
"path",
|
|
751
|
+
{
|
|
752
|
+
d: "M3.5 8.5 6.5 11.5 12.5 4.5",
|
|
753
|
+
stroke: "currentColor",
|
|
754
|
+
strokeWidth: "1.8",
|
|
755
|
+
strokeLinecap: "round",
|
|
756
|
+
strokeLinejoin: "round"
|
|
757
|
+
}
|
|
758
|
+
)
|
|
759
|
+
}
|
|
760
|
+
) })
|
|
761
|
+
}
|
|
762
|
+
),
|
|
763
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "option-label", children: option.label })
|
|
764
|
+
]
|
|
765
|
+
},
|
|
766
|
+
option.value
|
|
767
|
+
);
|
|
768
|
+
})
|
|
769
|
+
}
|
|
770
|
+
) })
|
|
771
|
+
]
|
|
632
772
|
}
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
773
|
+
) });
|
|
774
|
+
}
|
|
775
|
+
);
|
|
776
|
+
MultiSelect.displayName = "MultiSelect";
|
|
777
|
+
|
|
778
|
+
// src/components/dropdown/Dropdown.tsx
|
|
779
|
+
var React6 = __toESM(require("react"), 1);
|
|
780
|
+
|
|
781
|
+
// src/components/select/Select.tsx
|
|
782
|
+
var React5 = __toESM(require("react"), 1);
|
|
783
|
+
var SelectPrimitive = __toESM(require("@radix-ui/react-select"), 1);
|
|
784
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
785
|
+
var EMPTY_OPTION_VALUE = "__uzi_select_empty__";
|
|
786
|
+
var Select = React5.forwardRef(
|
|
787
|
+
({
|
|
788
|
+
options,
|
|
789
|
+
value,
|
|
790
|
+
onChange,
|
|
791
|
+
placeholder,
|
|
792
|
+
allowEmptyOption = false,
|
|
793
|
+
fullWidth = true,
|
|
794
|
+
className,
|
|
795
|
+
id,
|
|
796
|
+
name,
|
|
797
|
+
disabled,
|
|
798
|
+
required,
|
|
799
|
+
autoComplete,
|
|
800
|
+
form,
|
|
801
|
+
title,
|
|
802
|
+
"aria-label": ariaLabel,
|
|
803
|
+
"aria-labelledby": ariaLabelledBy,
|
|
804
|
+
onBlur,
|
|
805
|
+
onFocus
|
|
806
|
+
}, ref) => {
|
|
807
|
+
const internalValue = value === "" && allowEmptyOption ? EMPTY_OPTION_VALUE : value;
|
|
808
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: cx("wrapper", fullWidth && "wrapper-fullWidth", className), children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
809
|
+
SelectPrimitive.Root,
|
|
640
810
|
{
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
811
|
+
value: internalValue,
|
|
812
|
+
onValueChange: (nextValue) => onChange(nextValue === EMPTY_OPTION_VALUE ? "" : nextValue),
|
|
813
|
+
name,
|
|
814
|
+
disabled,
|
|
815
|
+
required,
|
|
816
|
+
autoComplete,
|
|
646
817
|
children: [
|
|
647
|
-
|
|
648
|
-
|
|
818
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
819
|
+
SelectPrimitive.Trigger,
|
|
820
|
+
{
|
|
821
|
+
ref,
|
|
822
|
+
id,
|
|
823
|
+
className: "select",
|
|
824
|
+
form,
|
|
825
|
+
title,
|
|
826
|
+
"aria-label": ariaLabel,
|
|
827
|
+
"aria-labelledby": ariaLabelledBy,
|
|
828
|
+
onBlur,
|
|
829
|
+
onFocus,
|
|
830
|
+
children: [
|
|
831
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SelectPrimitive.Value, { placeholder }),
|
|
832
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SelectPrimitive.Icon, { className: "chevron", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
833
|
+
"svg",
|
|
834
|
+
{
|
|
835
|
+
viewBox: "0 0 10 10",
|
|
836
|
+
fill: "none",
|
|
837
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
838
|
+
width: "10",
|
|
839
|
+
height: "10",
|
|
840
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
841
|
+
"path",
|
|
842
|
+
{
|
|
843
|
+
d: "M2 3.5L5 6.5L8 3.5",
|
|
844
|
+
stroke: "currentColor",
|
|
845
|
+
strokeWidth: "1.5",
|
|
846
|
+
strokeLinecap: "round",
|
|
847
|
+
strokeLinejoin: "round"
|
|
848
|
+
}
|
|
849
|
+
)
|
|
850
|
+
}
|
|
851
|
+
) })
|
|
852
|
+
]
|
|
853
|
+
}
|
|
854
|
+
),
|
|
855
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SelectPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
856
|
+
SelectPrimitive.Content,
|
|
857
|
+
{
|
|
858
|
+
className: "content",
|
|
859
|
+
position: "popper",
|
|
860
|
+
sideOffset: 4,
|
|
861
|
+
align: "start",
|
|
862
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(SelectPrimitive.Viewport, { className: "viewport", children: [
|
|
863
|
+
placeholder && allowEmptyOption ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
864
|
+
SelectPrimitive.Item,
|
|
865
|
+
{
|
|
866
|
+
value: EMPTY_OPTION_VALUE,
|
|
867
|
+
className: "item",
|
|
868
|
+
children: [
|
|
869
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "indicator", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
870
|
+
"svg",
|
|
871
|
+
{
|
|
872
|
+
viewBox: "0 0 16 16",
|
|
873
|
+
width: "16",
|
|
874
|
+
height: "16",
|
|
875
|
+
"aria-hidden": "true",
|
|
876
|
+
className: "indicatorIcon",
|
|
877
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
878
|
+
"path",
|
|
879
|
+
{
|
|
880
|
+
d: "M3.5 8.5 6.5 11.5 12.5 4.5",
|
|
881
|
+
fill: "none",
|
|
882
|
+
stroke: "currentColor",
|
|
883
|
+
strokeWidth: "1.8",
|
|
884
|
+
strokeLinecap: "round",
|
|
885
|
+
strokeLinejoin: "round"
|
|
886
|
+
}
|
|
887
|
+
)
|
|
888
|
+
}
|
|
889
|
+
) }) }),
|
|
890
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SelectPrimitive.ItemText, { children: placeholder })
|
|
891
|
+
]
|
|
892
|
+
}
|
|
893
|
+
) : null,
|
|
894
|
+
options.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
895
|
+
SelectPrimitive.Item,
|
|
896
|
+
{
|
|
897
|
+
value: opt.value,
|
|
898
|
+
disabled: opt.disabled,
|
|
899
|
+
className: "item",
|
|
900
|
+
children: [
|
|
901
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "indicator", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
902
|
+
"svg",
|
|
903
|
+
{
|
|
904
|
+
viewBox: "0 0 16 16",
|
|
905
|
+
width: "16",
|
|
906
|
+
height: "16",
|
|
907
|
+
"aria-hidden": "true",
|
|
908
|
+
className: "indicatorIcon",
|
|
909
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
910
|
+
"path",
|
|
911
|
+
{
|
|
912
|
+
d: "M3.5 8.5 6.5 11.5 12.5 4.5",
|
|
913
|
+
fill: "none",
|
|
914
|
+
stroke: "currentColor",
|
|
915
|
+
strokeWidth: "1.8",
|
|
916
|
+
strokeLinecap: "round",
|
|
917
|
+
strokeLinejoin: "round"
|
|
918
|
+
}
|
|
919
|
+
)
|
|
920
|
+
}
|
|
921
|
+
) }) }),
|
|
922
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SelectPrimitive.ItemText, { children: opt.label })
|
|
923
|
+
]
|
|
924
|
+
},
|
|
925
|
+
opt.value
|
|
926
|
+
))
|
|
927
|
+
] })
|
|
928
|
+
}
|
|
929
|
+
) })
|
|
649
930
|
]
|
|
650
931
|
}
|
|
651
|
-
)
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
}
|
|
932
|
+
) });
|
|
933
|
+
}
|
|
934
|
+
);
|
|
935
|
+
Select.displayName = "Select";
|
|
936
|
+
|
|
937
|
+
// src/components/dropdown/Dropdown.tsx
|
|
938
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
939
|
+
var Dropdown = React6.forwardRef(
|
|
940
|
+
({
|
|
941
|
+
options,
|
|
942
|
+
value,
|
|
943
|
+
onChange,
|
|
944
|
+
placeholder = "All",
|
|
945
|
+
allowClear = true,
|
|
946
|
+
...rest
|
|
947
|
+
}, ref) => {
|
|
948
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
949
|
+
Select,
|
|
950
|
+
{
|
|
951
|
+
ref,
|
|
952
|
+
options,
|
|
953
|
+
value,
|
|
954
|
+
onChange,
|
|
955
|
+
placeholder,
|
|
956
|
+
allowEmptyOption: allowClear,
|
|
957
|
+
fullWidth: false,
|
|
958
|
+
...rest
|
|
959
|
+
}
|
|
960
|
+
);
|
|
961
|
+
}
|
|
962
|
+
);
|
|
963
|
+
Dropdown.displayName = "Dropdown";
|
|
681
964
|
|
|
682
965
|
// src/components/dropdown-menu/DropdownMenu.tsx
|
|
683
|
-
var
|
|
684
|
-
var
|
|
966
|
+
var DropdownMenuPrimitive2 = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
|
|
967
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
685
968
|
function DropdownMenu(props) {
|
|
686
|
-
return /* @__PURE__ */ (0,
|
|
969
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Root, { ...props });
|
|
687
970
|
}
|
|
688
971
|
function DropdownMenuTrigger(props) {
|
|
689
|
-
return /* @__PURE__ */ (0,
|
|
972
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Trigger, { ...props });
|
|
690
973
|
}
|
|
691
974
|
function DropdownMenuGroup(props) {
|
|
692
|
-
return /* @__PURE__ */ (0,
|
|
975
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Group, { ...props });
|
|
693
976
|
}
|
|
694
977
|
function DropdownMenuPortal(props) {
|
|
695
|
-
return /* @__PURE__ */ (0,
|
|
978
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Portal, { ...props });
|
|
696
979
|
}
|
|
697
980
|
function DropdownMenuSub(props) {
|
|
698
|
-
return /* @__PURE__ */ (0,
|
|
981
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Sub, { ...props });
|
|
699
982
|
}
|
|
700
983
|
function DropdownMenuRadioGroup(props) {
|
|
701
|
-
return /* @__PURE__ */ (0,
|
|
984
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.RadioGroup, { ...props });
|
|
702
985
|
}
|
|
703
986
|
function DropdownMenuContent({
|
|
704
987
|
className,
|
|
705
988
|
sideOffset = 4,
|
|
706
989
|
...props
|
|
707
990
|
}) {
|
|
708
|
-
return /* @__PURE__ */ (0,
|
|
709
|
-
|
|
991
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
992
|
+
DropdownMenuPrimitive2.Content,
|
|
710
993
|
{
|
|
711
994
|
sideOffset,
|
|
712
995
|
className: cx("content", className),
|
|
@@ -720,8 +1003,8 @@ function DropdownMenuItem({
|
|
|
720
1003
|
variant = "default",
|
|
721
1004
|
...props
|
|
722
1005
|
}) {
|
|
723
|
-
return /* @__PURE__ */ (0,
|
|
724
|
-
|
|
1006
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1007
|
+
DropdownMenuPrimitive2.Item,
|
|
725
1008
|
{
|
|
726
1009
|
"data-inset": inset ? "true" : void 0,
|
|
727
1010
|
className: cx(
|
|
@@ -738,13 +1021,13 @@ function DropdownMenuCheckboxItem({
|
|
|
738
1021
|
children,
|
|
739
1022
|
...props
|
|
740
1023
|
}) {
|
|
741
|
-
return /* @__PURE__ */ (0,
|
|
742
|
-
|
|
1024
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1025
|
+
DropdownMenuPrimitive2.CheckboxItem,
|
|
743
1026
|
{
|
|
744
1027
|
className: cx("item", "insetItem", className),
|
|
745
1028
|
...props,
|
|
746
1029
|
children: [
|
|
747
|
-
/* @__PURE__ */ (0,
|
|
1030
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "indicator", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
748
1031
|
"svg",
|
|
749
1032
|
{
|
|
750
1033
|
viewBox: "0 0 16 16",
|
|
@@ -752,7 +1035,7 @@ function DropdownMenuCheckboxItem({
|
|
|
752
1035
|
height: "16",
|
|
753
1036
|
"aria-hidden": "true",
|
|
754
1037
|
className: "indicatorIcon",
|
|
755
|
-
children: /* @__PURE__ */ (0,
|
|
1038
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
756
1039
|
"path",
|
|
757
1040
|
{
|
|
758
1041
|
d: "M3.5 8.5 6.5 11.5 12.5 4.5",
|
|
@@ -775,13 +1058,13 @@ function DropdownMenuRadioItem({
|
|
|
775
1058
|
children,
|
|
776
1059
|
...props
|
|
777
1060
|
}) {
|
|
778
|
-
return /* @__PURE__ */ (0,
|
|
779
|
-
|
|
1061
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1062
|
+
DropdownMenuPrimitive2.RadioItem,
|
|
780
1063
|
{
|
|
781
1064
|
className: cx("item", "insetItem", className),
|
|
782
1065
|
...props,
|
|
783
1066
|
children: [
|
|
784
|
-
/* @__PURE__ */ (0,
|
|
1067
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "indicator", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "radioDot" }) }) }),
|
|
785
1068
|
children
|
|
786
1069
|
]
|
|
787
1070
|
}
|
|
@@ -792,8 +1075,8 @@ function DropdownMenuLabel({
|
|
|
792
1075
|
inset,
|
|
793
1076
|
...props
|
|
794
1077
|
}) {
|
|
795
|
-
return /* @__PURE__ */ (0,
|
|
796
|
-
|
|
1078
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1079
|
+
DropdownMenuPrimitive2.Label,
|
|
797
1080
|
{
|
|
798
1081
|
"data-inset": inset ? "true" : void 0,
|
|
799
1082
|
className: cx("label", className),
|
|
@@ -805,8 +1088,8 @@ function DropdownMenuSeparator({
|
|
|
805
1088
|
className,
|
|
806
1089
|
...props
|
|
807
1090
|
}) {
|
|
808
|
-
return /* @__PURE__ */ (0,
|
|
809
|
-
|
|
1091
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1092
|
+
DropdownMenuPrimitive2.Separator,
|
|
810
1093
|
{
|
|
811
1094
|
className: cx("separator", className),
|
|
812
1095
|
...props
|
|
@@ -819,15 +1102,15 @@ function DropdownMenuSubTrigger({
|
|
|
819
1102
|
children,
|
|
820
1103
|
...props
|
|
821
1104
|
}) {
|
|
822
|
-
return /* @__PURE__ */ (0,
|
|
823
|
-
|
|
1105
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1106
|
+
DropdownMenuPrimitive2.SubTrigger,
|
|
824
1107
|
{
|
|
825
1108
|
"data-inset": inset ? "true" : void 0,
|
|
826
1109
|
className: cx("item", className),
|
|
827
1110
|
...props,
|
|
828
1111
|
children: [
|
|
829
1112
|
children,
|
|
830
|
-
/* @__PURE__ */ (0,
|
|
1113
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
831
1114
|
"svg",
|
|
832
1115
|
{
|
|
833
1116
|
viewBox: "0 0 16 16",
|
|
@@ -835,7 +1118,7 @@ function DropdownMenuSubTrigger({
|
|
|
835
1118
|
height: "16",
|
|
836
1119
|
"aria-hidden": "true",
|
|
837
1120
|
className: "chevron",
|
|
838
|
-
children: /* @__PURE__ */ (0,
|
|
1121
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
839
1122
|
"path",
|
|
840
1123
|
{
|
|
841
1124
|
d: "M6 3.5 10.5 8 6 12.5",
|
|
@@ -856,8 +1139,8 @@ function DropdownMenuSubContent({
|
|
|
856
1139
|
className,
|
|
857
1140
|
...props
|
|
858
1141
|
}) {
|
|
859
|
-
return /* @__PURE__ */ (0,
|
|
860
|
-
|
|
1142
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1143
|
+
DropdownMenuPrimitive2.SubContent,
|
|
861
1144
|
{
|
|
862
1145
|
className: cx("content", className),
|
|
863
1146
|
...props
|
|
@@ -866,10 +1149,10 @@ function DropdownMenuSubContent({
|
|
|
866
1149
|
}
|
|
867
1150
|
|
|
868
1151
|
// src/components/app-shell/AppShell.tsx
|
|
869
|
-
var
|
|
1152
|
+
var import_react3 = require("react");
|
|
870
1153
|
|
|
871
1154
|
// src/theme/ThemeProvider.tsx
|
|
872
|
-
var
|
|
1155
|
+
var import_react2 = require("react");
|
|
873
1156
|
|
|
874
1157
|
// src/theme/constants.ts
|
|
875
1158
|
var UZI_THEMES = ["light", "dark", "system"];
|
|
@@ -878,12 +1161,12 @@ var THEME_STORAGE_KEY = "uzi-theme";
|
|
|
878
1161
|
var ACCENT_STORAGE_KEY = "uzi-accent";
|
|
879
1162
|
|
|
880
1163
|
// src/theme/ThemeProvider.tsx
|
|
881
|
-
var
|
|
1164
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
882
1165
|
var THEME_STORAGE_KEY2 = THEME_STORAGE_KEY;
|
|
883
1166
|
var ACCENT_STORAGE_KEY2 = ACCENT_STORAGE_KEY;
|
|
884
1167
|
var THEME_ATTRIBUTE = "data-uzi-theme";
|
|
885
1168
|
var ACCENT_ATTRIBUTE = "data-uzi-accent";
|
|
886
|
-
var ThemeContext = (0,
|
|
1169
|
+
var ThemeContext = (0, import_react2.createContext)(void 0);
|
|
887
1170
|
function isTheme(value) {
|
|
888
1171
|
return UZI_THEMES.includes(value);
|
|
889
1172
|
}
|
|
@@ -906,10 +1189,10 @@ function ThemeProvider({
|
|
|
906
1189
|
accentStorageKey = ACCENT_STORAGE_KEY2,
|
|
907
1190
|
disableStorage = false
|
|
908
1191
|
}) {
|
|
909
|
-
const [internalTheme, setInternalTheme] = (0,
|
|
910
|
-
const [internalAccent, setInternalAccent] = (0,
|
|
911
|
-
const [systemTheme, setSystemTheme] = (0,
|
|
912
|
-
(0,
|
|
1192
|
+
const [internalTheme, setInternalTheme] = (0, import_react2.useState)(defaultTheme);
|
|
1193
|
+
const [internalAccent, setInternalAccent] = (0, import_react2.useState)(defaultAccent);
|
|
1194
|
+
const [systemTheme, setSystemTheme] = (0, import_react2.useState)("light");
|
|
1195
|
+
(0, import_react2.useEffect)(() => {
|
|
913
1196
|
setSystemTheme(getSystemTheme());
|
|
914
1197
|
if (!disableStorage) {
|
|
915
1198
|
const storedTheme = window.localStorage.getItem(storageKey);
|
|
@@ -923,7 +1206,7 @@ function ThemeProvider({
|
|
|
923
1206
|
const currentTheme = isThemeControlled ? theme : internalTheme;
|
|
924
1207
|
const currentAccent = isAccentControlled ? accent : internalAccent;
|
|
925
1208
|
const resolvedTheme = currentTheme === "system" ? systemTheme : currentTheme;
|
|
926
|
-
(0,
|
|
1209
|
+
(0, import_react2.useEffect)(() => {
|
|
927
1210
|
if (typeof window === "undefined") return;
|
|
928
1211
|
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
929
1212
|
const handleChange = () => setSystemTheme(mediaQuery.matches ? "dark" : "light");
|
|
@@ -931,7 +1214,7 @@ function ThemeProvider({
|
|
|
931
1214
|
mediaQuery.addEventListener("change", handleChange);
|
|
932
1215
|
return () => mediaQuery.removeEventListener("change", handleChange);
|
|
933
1216
|
}, []);
|
|
934
|
-
(0,
|
|
1217
|
+
(0, import_react2.useEffect)(() => {
|
|
935
1218
|
if (typeof document === "undefined") return;
|
|
936
1219
|
const root = document.documentElement;
|
|
937
1220
|
root.setAttribute(THEME_ATTRIBUTE, resolvedTheme);
|
|
@@ -939,7 +1222,7 @@ function ThemeProvider({
|
|
|
939
1222
|
root.style.colorScheme = resolvedTheme;
|
|
940
1223
|
root.classList.toggle("dark", resolvedTheme === "dark");
|
|
941
1224
|
}, [currentAccent, resolvedTheme]);
|
|
942
|
-
const setTheme = (0,
|
|
1225
|
+
const setTheme = (0, import_react2.useCallback)(
|
|
943
1226
|
(nextTheme) => {
|
|
944
1227
|
if (!isThemeControlled) setInternalTheme(nextTheme);
|
|
945
1228
|
if (!disableStorage && typeof window !== "undefined") {
|
|
@@ -949,7 +1232,7 @@ function ThemeProvider({
|
|
|
949
1232
|
},
|
|
950
1233
|
[disableStorage, isThemeControlled, onThemeChange, storageKey]
|
|
951
1234
|
);
|
|
952
|
-
const setAccent = (0,
|
|
1235
|
+
const setAccent = (0, import_react2.useCallback)(
|
|
953
1236
|
(nextAccent) => {
|
|
954
1237
|
if (!isAccentControlled) setInternalAccent(nextAccent);
|
|
955
1238
|
if (!disableStorage && typeof window !== "undefined") {
|
|
@@ -959,10 +1242,10 @@ function ThemeProvider({
|
|
|
959
1242
|
},
|
|
960
1243
|
[accentStorageKey, disableStorage, isAccentControlled, onAccentChange]
|
|
961
1244
|
);
|
|
962
|
-
const toggleTheme = (0,
|
|
1245
|
+
const toggleTheme = (0, import_react2.useCallback)(() => {
|
|
963
1246
|
setTheme(resolvedTheme === "dark" ? "light" : "dark");
|
|
964
1247
|
}, [resolvedTheme, setTheme]);
|
|
965
|
-
const value = (0,
|
|
1248
|
+
const value = (0, import_react2.useMemo)(
|
|
966
1249
|
() => ({
|
|
967
1250
|
theme: currentTheme,
|
|
968
1251
|
resolvedTheme,
|
|
@@ -973,18 +1256,18 @@ function ThemeProvider({
|
|
|
973
1256
|
}),
|
|
974
1257
|
[currentAccent, currentTheme, resolvedTheme, setAccent, setTheme, toggleTheme]
|
|
975
1258
|
);
|
|
976
|
-
return /* @__PURE__ */ (0,
|
|
1259
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ThemeContext.Provider, { value, children });
|
|
977
1260
|
}
|
|
978
1261
|
function useTheme() {
|
|
979
|
-
const context = (0,
|
|
1262
|
+
const context = (0, import_react2.useContext)(ThemeContext);
|
|
980
1263
|
if (!context) throw new Error("useTheme must be used within a ThemeProvider");
|
|
981
1264
|
return context;
|
|
982
1265
|
}
|
|
983
1266
|
|
|
984
1267
|
// src/components/theme-toggle-button/ThemeToggleButton.tsx
|
|
985
|
-
var
|
|
1268
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
986
1269
|
function MoonIcon() {
|
|
987
|
-
return /* @__PURE__ */ (0,
|
|
1270
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", width: "16", height: "16", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
988
1271
|
"path",
|
|
989
1272
|
{
|
|
990
1273
|
d: "M20 15.2A8.5 8.5 0 0 1 8.8 4 9 9 0 1 0 20 15.2Z",
|
|
@@ -996,9 +1279,9 @@ function MoonIcon() {
|
|
|
996
1279
|
) });
|
|
997
1280
|
}
|
|
998
1281
|
function SunIcon() {
|
|
999
|
-
return /* @__PURE__ */ (0,
|
|
1000
|
-
/* @__PURE__ */ (0,
|
|
1001
|
-
/* @__PURE__ */ (0,
|
|
1282
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", width: "16", height: "16", fill: "none", children: [
|
|
1283
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("circle", { cx: "12", cy: "12", r: "4", stroke: "currentColor", strokeWidth: "1.8" }),
|
|
1284
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1002
1285
|
"path",
|
|
1003
1286
|
{
|
|
1004
1287
|
d: "M12 2.75v2.5M12 18.75v2.5M21.25 12h-2.5M5.25 12h-2.5M18.54 5.46l-1.77 1.77M7.23 16.77l-1.77 1.77M18.54 18.54l-1.77-1.77M7.23 7.23 5.46 5.46",
|
|
@@ -1019,7 +1302,7 @@ function ThemeToggleButton({
|
|
|
1019
1302
|
}) {
|
|
1020
1303
|
const { resolvedTheme, toggleTheme } = useTheme();
|
|
1021
1304
|
const nextThemeLabel = resolvedTheme === "dark" ? lightLabel : darkLabel;
|
|
1022
|
-
return /* @__PURE__ */ (0,
|
|
1305
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
1023
1306
|
Button,
|
|
1024
1307
|
{
|
|
1025
1308
|
type: "button",
|
|
@@ -1034,15 +1317,15 @@ function ThemeToggleButton({
|
|
|
1034
1317
|
},
|
|
1035
1318
|
...rest,
|
|
1036
1319
|
children: [
|
|
1037
|
-
resolvedTheme === "dark" ? /* @__PURE__ */ (0,
|
|
1038
|
-
showLabel && /* @__PURE__ */ (0,
|
|
1320
|
+
resolvedTheme === "dark" ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(SunIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(MoonIcon, {}),
|
|
1321
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: nextThemeLabel })
|
|
1039
1322
|
]
|
|
1040
1323
|
}
|
|
1041
1324
|
);
|
|
1042
1325
|
}
|
|
1043
1326
|
|
|
1044
1327
|
// src/components/top-bar/TopBar.tsx
|
|
1045
|
-
var
|
|
1328
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
1046
1329
|
function TopBar({
|
|
1047
1330
|
leading,
|
|
1048
1331
|
brand,
|
|
@@ -1061,24 +1344,24 @@ function TopBar({
|
|
|
1061
1344
|
...rest
|
|
1062
1345
|
}) {
|
|
1063
1346
|
const shouldStick = isSticky ?? sticky;
|
|
1064
|
-
const brandNode = !brand ? null : brandHref ? /* @__PURE__ */ (0,
|
|
1065
|
-
return /* @__PURE__ */ (0,
|
|
1347
|
+
const brandNode = !brand ? null : brandHref ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("a", { href: brandHref, className: "topBarBrand", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "topBarBrandContent", children: brand }) }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "topBarBrand", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "topBarBrandContent", children: brand }) });
|
|
1348
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1066
1349
|
"header",
|
|
1067
1350
|
{
|
|
1068
1351
|
className: cx("topBar", !shouldStick && "topBarStatic", className),
|
|
1069
1352
|
...rest,
|
|
1070
|
-
children: /* @__PURE__ */ (0,
|
|
1071
|
-
/* @__PURE__ */ (0,
|
|
1353
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: cx("topBarInner", innerClassName), children: [
|
|
1354
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "topBarStart", children: [
|
|
1072
1355
|
leading,
|
|
1073
1356
|
brandingLocation === "left" && brandNode,
|
|
1074
1357
|
start
|
|
1075
1358
|
] }),
|
|
1076
|
-
brandNode && brandingLocation === "center" || center || children ? /* @__PURE__ */ (0,
|
|
1359
|
+
brandNode && brandingLocation === "center" || center || children ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "topBarCenter", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "topBarCenterGroup", children: [
|
|
1077
1360
|
brandingLocation === "center" && brandNode,
|
|
1078
1361
|
center ?? children
|
|
1079
1362
|
] }) }) : null,
|
|
1080
|
-
/* @__PURE__ */ (0,
|
|
1081
|
-
showThemeToggle && /* @__PURE__ */ (0,
|
|
1363
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "topBarActions", children: [
|
|
1364
|
+
showThemeToggle && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ThemeToggleButton, { ...themeToggleProps }),
|
|
1082
1365
|
actions
|
|
1083
1366
|
] })
|
|
1084
1367
|
] })
|
|
@@ -1087,7 +1370,7 @@ function TopBar({
|
|
|
1087
1370
|
}
|
|
1088
1371
|
|
|
1089
1372
|
// src/components/app-shell/AppShell.tsx
|
|
1090
|
-
var
|
|
1373
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
1091
1374
|
var DESKTOP_BREAKPOINT = 960;
|
|
1092
1375
|
function getIsDesktop() {
|
|
1093
1376
|
if (typeof window === "undefined") return false;
|
|
@@ -1112,16 +1395,16 @@ function AppShell({
|
|
|
1112
1395
|
hamburgerLabel = "Toggle navigation",
|
|
1113
1396
|
onSidebarToggle
|
|
1114
1397
|
}) {
|
|
1115
|
-
const [isDesktop, setIsDesktop] = (0,
|
|
1116
|
-
const [sidebarOpen, setSidebarOpen] = (0,
|
|
1117
|
-
const [transitionsReady, setTransitionsReady] = (0,
|
|
1118
|
-
const prevIsDesktopRef = (0,
|
|
1119
|
-
const closeKeyRef = (0,
|
|
1120
|
-
const sidebarRef = (0,
|
|
1121
|
-
const hamburgerRef = (0,
|
|
1122
|
-
const mainRef = (0,
|
|
1123
|
-
const sidebarId = (0,
|
|
1124
|
-
(0,
|
|
1398
|
+
const [isDesktop, setIsDesktop] = (0, import_react3.useState)(false);
|
|
1399
|
+
const [sidebarOpen, setSidebarOpen] = (0, import_react3.useState)(false);
|
|
1400
|
+
const [transitionsReady, setTransitionsReady] = (0, import_react3.useState)(false);
|
|
1401
|
+
const prevIsDesktopRef = (0, import_react3.useRef)(false);
|
|
1402
|
+
const closeKeyRef = (0, import_react3.useRef)(closeSidebarOnChangeKey);
|
|
1403
|
+
const sidebarRef = (0, import_react3.useRef)(null);
|
|
1404
|
+
const hamburgerRef = (0, import_react3.useRef)(null);
|
|
1405
|
+
const mainRef = (0, import_react3.useRef)(null);
|
|
1406
|
+
const sidebarId = (0, import_react3.useId)();
|
|
1407
|
+
(0, import_react3.useEffect)(() => {
|
|
1125
1408
|
const desktop = getIsDesktop();
|
|
1126
1409
|
setIsDesktop(desktop);
|
|
1127
1410
|
setSidebarOpen(desktop);
|
|
@@ -1143,7 +1426,7 @@ function AppShell({
|
|
|
1143
1426
|
window.removeEventListener("resize", handleResize);
|
|
1144
1427
|
};
|
|
1145
1428
|
}, []);
|
|
1146
|
-
(0,
|
|
1429
|
+
(0, import_react3.useEffect)(() => {
|
|
1147
1430
|
if (isDesktop || !sidebarOpen) return;
|
|
1148
1431
|
const mainElement = mainRef.current;
|
|
1149
1432
|
const closeSidebar = () => setSidebarOpen(false);
|
|
@@ -1168,13 +1451,13 @@ function AppShell({
|
|
|
1168
1451
|
document.removeEventListener("touchmove", closeSidebar);
|
|
1169
1452
|
};
|
|
1170
1453
|
}, [sidebarOpen, isDesktop]);
|
|
1171
|
-
(0,
|
|
1454
|
+
(0, import_react3.useEffect)(() => {
|
|
1172
1455
|
if (!isDesktop && closeKeyRef.current !== closeSidebarOnChangeKey) {
|
|
1173
1456
|
setSidebarOpen(false);
|
|
1174
1457
|
}
|
|
1175
1458
|
closeKeyRef.current = closeSidebarOnChangeKey;
|
|
1176
1459
|
}, [closeSidebarOnChangeKey, isDesktop]);
|
|
1177
|
-
(0,
|
|
1460
|
+
(0, import_react3.useEffect)(() => {
|
|
1178
1461
|
onSidebarToggle?.(sidebarOpen);
|
|
1179
1462
|
}, [sidebarOpen, onSidebarToggle]);
|
|
1180
1463
|
const toggleSidebar = () => setSidebarOpen((open) => !open);
|
|
@@ -1187,7 +1470,7 @@ function AppShell({
|
|
|
1187
1470
|
className
|
|
1188
1471
|
);
|
|
1189
1472
|
const sidebarClasses = cx("appShellSidebar", sidebarOpen && "appShellSidebarOpen", sidebarClassName);
|
|
1190
|
-
return /* @__PURE__ */ (0,
|
|
1473
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
1191
1474
|
"div",
|
|
1192
1475
|
{
|
|
1193
1476
|
className: shellClasses,
|
|
@@ -1196,11 +1479,11 @@ function AppShell({
|
|
|
1196
1479
|
"data-desktop": isDesktop ? "true" : "false",
|
|
1197
1480
|
"data-sidebar-open": sidebarOpen ? "true" : "false",
|
|
1198
1481
|
children: [
|
|
1199
|
-
/* @__PURE__ */ (0,
|
|
1482
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1200
1483
|
TopBar,
|
|
1201
1484
|
{
|
|
1202
1485
|
className: cx("appShellTopbar", topbarClassName),
|
|
1203
|
-
leading: /* @__PURE__ */ (0,
|
|
1486
|
+
leading: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1204
1487
|
"button",
|
|
1205
1488
|
{
|
|
1206
1489
|
ref: hamburgerRef,
|
|
@@ -1210,7 +1493,7 @@ function AppShell({
|
|
|
1210
1493
|
"aria-label": hamburgerLabel,
|
|
1211
1494
|
"aria-expanded": sidebarOpen,
|
|
1212
1495
|
"aria-controls": sidebarId,
|
|
1213
|
-
children: /* @__PURE__ */ (0,
|
|
1496
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("path", { d: "M3 6h18M3 12h18M3 18h18", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" }) })
|
|
1214
1497
|
}
|
|
1215
1498
|
),
|
|
1216
1499
|
brand,
|
|
@@ -1222,16 +1505,16 @@ function AppShell({
|
|
|
1222
1505
|
themeToggleProps
|
|
1223
1506
|
}
|
|
1224
1507
|
),
|
|
1225
|
-
!isDesktop && sidebarOpen && /* @__PURE__ */ (0,
|
|
1226
|
-
/* @__PURE__ */ (0,
|
|
1227
|
-
/* @__PURE__ */ (0,
|
|
1508
|
+
!isDesktop && sidebarOpen && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "appShellBackdrop", onClick: () => setSidebarOpen(false), onTouchStart: () => setSidebarOpen(false), "aria-hidden": "true" }),
|
|
1509
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("aside", { ref: sidebarRef, id: sidebarId, className: sidebarClasses, "aria-label": "Sidebar navigation", children: sidebar }),
|
|
1510
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("main", { ref: mainRef, className: cx("appShellMain", mainClassName), children })
|
|
1228
1511
|
]
|
|
1229
1512
|
}
|
|
1230
1513
|
);
|
|
1231
1514
|
}
|
|
1232
1515
|
|
|
1233
1516
|
// src/components/sidebar-nav/SidebarNav.tsx
|
|
1234
|
-
var
|
|
1517
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1235
1518
|
var defaultIsActive = (item, path) => {
|
|
1236
1519
|
if (item.active !== void 0) return item.active;
|
|
1237
1520
|
if (!item.href) return false;
|
|
@@ -1258,21 +1541,21 @@ function SidebarNav({
|
|
|
1258
1541
|
const style = iconSize !== void 0 ? {
|
|
1259
1542
|
["--sidebar-nav-icon-size"]: typeof iconSize === "number" ? `${iconSize}px` : iconSize
|
|
1260
1543
|
} : void 0;
|
|
1261
|
-
return /* @__PURE__ */ (0,
|
|
1544
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
1262
1545
|
"nav",
|
|
1263
1546
|
{
|
|
1264
1547
|
className: cx("uziSidebarNav", collapsed && "uziSidebarNavCollapsed", className),
|
|
1265
1548
|
"aria-label": ariaLabel,
|
|
1266
1549
|
style,
|
|
1267
1550
|
children: [
|
|
1268
|
-
header ? /* @__PURE__ */ (0,
|
|
1269
|
-
/* @__PURE__ */ (0,
|
|
1551
|
+
header ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "uziSidebarNavHeader", children: header }) : null,
|
|
1552
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "uziSidebarNavSections", children: resolvedSections.map((section, sectionIndex) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
1270
1553
|
"div",
|
|
1271
1554
|
{
|
|
1272
1555
|
className: cx("uziSidebarNavSection", sectionClassName),
|
|
1273
1556
|
children: [
|
|
1274
|
-
section.label && !collapsed ? /* @__PURE__ */ (0,
|
|
1275
|
-
/* @__PURE__ */ (0,
|
|
1557
|
+
section.label && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "uziSidebarNavSectionLabel", children: section.label }) : null,
|
|
1558
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "uziSidebarNavSectionItems", children: section.items.map((item, itemIndex) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1276
1559
|
SidebarNavEntry,
|
|
1277
1560
|
{
|
|
1278
1561
|
item,
|
|
@@ -1287,7 +1570,7 @@ function SidebarNav({
|
|
|
1287
1570
|
},
|
|
1288
1571
|
section.id ?? `section-${sectionIndex}`
|
|
1289
1572
|
)) }),
|
|
1290
|
-
footer ? /* @__PURE__ */ (0,
|
|
1573
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "uziSidebarNavFooter", children: footer }) : null
|
|
1291
1574
|
]
|
|
1292
1575
|
}
|
|
1293
1576
|
);
|
|
@@ -1308,14 +1591,14 @@ function SidebarNavEntry({
|
|
|
1308
1591
|
item.disabled && "uziSidebarNavItemDisabled",
|
|
1309
1592
|
itemClassName
|
|
1310
1593
|
);
|
|
1311
|
-
const content = /* @__PURE__ */ (0,
|
|
1312
|
-
item.icon && /* @__PURE__ */ (0,
|
|
1313
|
-
!collapsed ? /* @__PURE__ */ (0,
|
|
1314
|
-
/* @__PURE__ */ (0,
|
|
1315
|
-
/* @__PURE__ */ (0,
|
|
1316
|
-
item.badge && /* @__PURE__ */ (0,
|
|
1594
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
|
|
1595
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "uziSidebarNavIcon", children: item.icon }),
|
|
1596
|
+
!collapsed ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "uziSidebarNavItemBody", children: [
|
|
1597
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "uziSidebarNavLabelRow", children: [
|
|
1598
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "uziSidebarNavLabel", children: item.label }),
|
|
1599
|
+
item.badge && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "uziSidebarNavBadge", children: item.badge })
|
|
1317
1600
|
] }),
|
|
1318
|
-
item.description ? /* @__PURE__ */ (0,
|
|
1601
|
+
item.description ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "uziSidebarNavDescription", children: item.description }) : null
|
|
1319
1602
|
] }) : null
|
|
1320
1603
|
] });
|
|
1321
1604
|
const handleClick = () => {
|
|
@@ -1324,7 +1607,7 @@ function SidebarNavEntry({
|
|
|
1324
1607
|
onItemClick?.(item);
|
|
1325
1608
|
};
|
|
1326
1609
|
if (!item.href) {
|
|
1327
|
-
return /* @__PURE__ */ (0,
|
|
1610
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1328
1611
|
"button",
|
|
1329
1612
|
{
|
|
1330
1613
|
type: "button",
|
|
@@ -1339,7 +1622,7 @@ function SidebarNavEntry({
|
|
|
1339
1622
|
);
|
|
1340
1623
|
}
|
|
1341
1624
|
if (item.disabled) {
|
|
1342
|
-
return /* @__PURE__ */ (0,
|
|
1625
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1343
1626
|
"div",
|
|
1344
1627
|
{
|
|
1345
1628
|
className: classes,
|
|
@@ -1350,7 +1633,7 @@ function SidebarNavEntry({
|
|
|
1350
1633
|
}
|
|
1351
1634
|
);
|
|
1352
1635
|
}
|
|
1353
|
-
return /* @__PURE__ */ (0,
|
|
1636
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1354
1637
|
"a",
|
|
1355
1638
|
{
|
|
1356
1639
|
className: classes,
|
|
@@ -1364,6 +1647,58 @@ function SidebarNavEntry({
|
|
|
1364
1647
|
}
|
|
1365
1648
|
);
|
|
1366
1649
|
}
|
|
1650
|
+
|
|
1651
|
+
// src/components/skeleton/Skeleton.tsx
|
|
1652
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1653
|
+
function Skeleton({
|
|
1654
|
+
width,
|
|
1655
|
+
height,
|
|
1656
|
+
radius = "md",
|
|
1657
|
+
className,
|
|
1658
|
+
style,
|
|
1659
|
+
...rest
|
|
1660
|
+
}) {
|
|
1661
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1662
|
+
"div",
|
|
1663
|
+
{
|
|
1664
|
+
className: cx("skeleton", `radius-${radius}`, className),
|
|
1665
|
+
style: { width, height, ...style },
|
|
1666
|
+
"aria-hidden": "true",
|
|
1667
|
+
...rest
|
|
1668
|
+
}
|
|
1669
|
+
);
|
|
1670
|
+
}
|
|
1671
|
+
|
|
1672
|
+
// src/components/progress/Progress.tsx
|
|
1673
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1674
|
+
function Progress({
|
|
1675
|
+
value,
|
|
1676
|
+
tone = "default",
|
|
1677
|
+
className,
|
|
1678
|
+
"aria-label": ariaLabel,
|
|
1679
|
+
...rest
|
|
1680
|
+
}) {
|
|
1681
|
+
const clamped = Math.max(0, Math.min(100, value));
|
|
1682
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1683
|
+
"div",
|
|
1684
|
+
{
|
|
1685
|
+
className: cx("track", className),
|
|
1686
|
+
role: "progressbar",
|
|
1687
|
+
"aria-valuenow": clamped,
|
|
1688
|
+
"aria-valuemin": 0,
|
|
1689
|
+
"aria-valuemax": 100,
|
|
1690
|
+
"aria-label": ariaLabel,
|
|
1691
|
+
...rest,
|
|
1692
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1693
|
+
"div",
|
|
1694
|
+
{
|
|
1695
|
+
className: cx("fill", `tone-${tone}`),
|
|
1696
|
+
style: { width: `${clamped}%` }
|
|
1697
|
+
}
|
|
1698
|
+
)
|
|
1699
|
+
}
|
|
1700
|
+
);
|
|
1701
|
+
}
|
|
1367
1702
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1368
1703
|
0 && (module.exports = {
|
|
1369
1704
|
Alert,
|
|
@@ -1393,8 +1728,12 @@ function SidebarNavEntry({
|
|
|
1393
1728
|
Label,
|
|
1394
1729
|
Modal,
|
|
1395
1730
|
ModalOverlay,
|
|
1731
|
+
MultiSelect,
|
|
1396
1732
|
Pill,
|
|
1733
|
+
Progress,
|
|
1734
|
+
Select,
|
|
1397
1735
|
SidebarNav,
|
|
1736
|
+
Skeleton,
|
|
1398
1737
|
ThemeProvider,
|
|
1399
1738
|
ThemeToggleButton,
|
|
1400
1739
|
ToastProvider,
|