@tomny-dev/uzi 0.1.8 → 0.1.9-pr.2.1.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 +20 -1
- package/dist/index.cjs +373 -161
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +263 -44
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +69 -14
- package/dist/index.d.ts +69 -14
- package/dist/index.js +372 -164
- package/dist/index.js.map +1 -1
- package/package.json +1 -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,
|
|
@@ -608,105 +612,257 @@ var Checkbox = React3.forwardRef(
|
|
|
608
612
|
);
|
|
609
613
|
Checkbox.displayName = "Checkbox";
|
|
610
614
|
|
|
611
|
-
// src/components/
|
|
612
|
-
var
|
|
615
|
+
// src/components/multi-select/MultiSelect.tsx
|
|
616
|
+
var React4 = __toESM(require("react"), 1);
|
|
617
|
+
var DropdownMenuPrimitive = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
|
|
613
618
|
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
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
619
|
+
var MultiSelect = React4.forwardRef(
|
|
620
|
+
({
|
|
621
|
+
options,
|
|
622
|
+
value,
|
|
623
|
+
onChange,
|
|
624
|
+
placeholder = "Select options",
|
|
625
|
+
fullWidth = true,
|
|
626
|
+
maxVisibleValues = 2,
|
|
627
|
+
className,
|
|
628
|
+
disabled = false,
|
|
629
|
+
name,
|
|
630
|
+
"aria-label": ariaLabel,
|
|
631
|
+
"aria-labelledby": ariaLabelledBy
|
|
632
|
+
}, ref) => {
|
|
633
|
+
const selectedSet = React4.useMemo(() => new Set(value), [value]);
|
|
634
|
+
const selectedOptions = React4.useMemo(
|
|
635
|
+
() => options.filter((opt) => selectedSet.has(opt.value)),
|
|
636
|
+
[options, selectedSet]
|
|
637
|
+
);
|
|
638
|
+
const toggleValue = React4.useCallback(
|
|
639
|
+
(nextValue) => {
|
|
640
|
+
if (selectedSet.has(nextValue)) {
|
|
641
|
+
onChange(value.filter((entry) => entry !== nextValue));
|
|
642
|
+
return;
|
|
643
|
+
}
|
|
644
|
+
onChange([...value, nextValue]);
|
|
645
|
+
},
|
|
646
|
+
[onChange, selectedSet, value]
|
|
647
|
+
);
|
|
648
|
+
const visibleCount = Math.max(1, maxVisibleValues);
|
|
649
|
+
const visibleOptions = selectedOptions.slice(0, visibleCount);
|
|
650
|
+
const overflowCount = Math.max(
|
|
651
|
+
0,
|
|
652
|
+
selectedOptions.length - visibleOptions.length
|
|
653
|
+
);
|
|
654
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuPrimitive.Root, { modal: false, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
655
|
+
"div",
|
|
640
656
|
{
|
|
641
|
-
|
|
642
|
-
className: cx("trigger", isActive && "trigger-active"),
|
|
643
|
-
onClick: () => setOpen((o) => !o),
|
|
644
|
-
"aria-labelledby": ariaLabelledBy,
|
|
645
|
-
"aria-label": ariaLabel,
|
|
657
|
+
className: cx("wrapper", fullWidth && "wrapper-fullWidth", className),
|
|
646
658
|
children: [
|
|
647
|
-
|
|
648
|
-
|
|
659
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuPrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
660
|
+
"button",
|
|
661
|
+
{
|
|
662
|
+
ref,
|
|
663
|
+
type: "button",
|
|
664
|
+
className: cx(
|
|
665
|
+
"trigger",
|
|
666
|
+
selectedOptions.length > 0 && "trigger-hasValue"
|
|
667
|
+
),
|
|
668
|
+
"aria-label": ariaLabel,
|
|
669
|
+
"aria-labelledby": ariaLabelledBy,
|
|
670
|
+
disabled,
|
|
671
|
+
children: [
|
|
672
|
+
/* @__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: [
|
|
673
|
+
visibleOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "chip", children: option.label }, option.value)),
|
|
674
|
+
overflowCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: "chip chip-summary", children: [
|
|
675
|
+
"+",
|
|
676
|
+
overflowCount
|
|
677
|
+
] }) : null
|
|
678
|
+
] }) }),
|
|
679
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "chevron", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
680
|
+
"svg",
|
|
681
|
+
{
|
|
682
|
+
viewBox: "0 0 10 10",
|
|
683
|
+
fill: "none",
|
|
684
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
685
|
+
width: "10",
|
|
686
|
+
height: "10",
|
|
687
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
688
|
+
"path",
|
|
689
|
+
{
|
|
690
|
+
d: "M2 3.5L5 6.5L8 3.5",
|
|
691
|
+
stroke: "currentColor",
|
|
692
|
+
strokeWidth: "1.5",
|
|
693
|
+
strokeLinecap: "round",
|
|
694
|
+
strokeLinejoin: "round"
|
|
695
|
+
}
|
|
696
|
+
)
|
|
697
|
+
}
|
|
698
|
+
) })
|
|
699
|
+
]
|
|
700
|
+
}
|
|
701
|
+
) }),
|
|
702
|
+
name ? value.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("input", { type: "hidden", name, value: entry }, entry)) : null,
|
|
703
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
704
|
+
DropdownMenuPrimitive.Content,
|
|
705
|
+
{
|
|
706
|
+
className: "menu",
|
|
707
|
+
sideOffset: 4,
|
|
708
|
+
align: "start",
|
|
709
|
+
children: options.map((option) => {
|
|
710
|
+
const selected = selectedSet.has(option.value);
|
|
711
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
712
|
+
DropdownMenuPrimitive.CheckboxItem,
|
|
713
|
+
{
|
|
714
|
+
className: cx(
|
|
715
|
+
"option",
|
|
716
|
+
selected && "option-selected",
|
|
717
|
+
option.disabled && "option-disabled"
|
|
718
|
+
),
|
|
719
|
+
checked: selected,
|
|
720
|
+
disabled: option.disabled,
|
|
721
|
+
onCheckedChange: () => toggleValue(option.value),
|
|
722
|
+
onSelect: (event) => event.preventDefault(),
|
|
723
|
+
children: [
|
|
724
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
725
|
+
"span",
|
|
726
|
+
{
|
|
727
|
+
className: cx(
|
|
728
|
+
"indicator",
|
|
729
|
+
selected && "indicator-selected",
|
|
730
|
+
option.disabled && "indicator-disabled"
|
|
731
|
+
),
|
|
732
|
+
"aria-hidden": "true",
|
|
733
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuPrimitive.ItemIndicator, { forceMount: true, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
734
|
+
"svg",
|
|
735
|
+
{
|
|
736
|
+
viewBox: "0 0 16 16",
|
|
737
|
+
width: "16",
|
|
738
|
+
height: "16",
|
|
739
|
+
fill: "none",
|
|
740
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
741
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
742
|
+
"path",
|
|
743
|
+
{
|
|
744
|
+
d: "M3.5 8.5 6.5 11.5 12.5 4.5",
|
|
745
|
+
stroke: "currentColor",
|
|
746
|
+
strokeWidth: "1.8",
|
|
747
|
+
strokeLinecap: "round",
|
|
748
|
+
strokeLinejoin: "round"
|
|
749
|
+
}
|
|
750
|
+
)
|
|
751
|
+
}
|
|
752
|
+
) })
|
|
753
|
+
}
|
|
754
|
+
),
|
|
755
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "option-label", children: option.label })
|
|
756
|
+
]
|
|
757
|
+
},
|
|
758
|
+
option.value
|
|
759
|
+
);
|
|
760
|
+
})
|
|
761
|
+
}
|
|
762
|
+
) })
|
|
649
763
|
]
|
|
650
764
|
}
|
|
651
|
-
)
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
765
|
+
) });
|
|
766
|
+
}
|
|
767
|
+
);
|
|
768
|
+
MultiSelect.displayName = "MultiSelect";
|
|
769
|
+
|
|
770
|
+
// src/components/dropdown/Dropdown.tsx
|
|
771
|
+
var React6 = __toESM(require("react"), 1);
|
|
772
|
+
|
|
773
|
+
// src/components/select/Select.tsx
|
|
774
|
+
var React5 = __toESM(require("react"), 1);
|
|
775
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
776
|
+
var Select = React5.forwardRef(
|
|
777
|
+
({
|
|
778
|
+
options,
|
|
779
|
+
value,
|
|
780
|
+
onChange,
|
|
781
|
+
placeholder,
|
|
782
|
+
allowEmptyOption = false,
|
|
783
|
+
fullWidth = true,
|
|
784
|
+
className,
|
|
785
|
+
...rest
|
|
786
|
+
}, ref) => {
|
|
787
|
+
const isPlaceholderShown = Boolean(placeholder) && value === "";
|
|
788
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: cx("wrapper", fullWidth && "wrapper-fullWidth", className), children: [
|
|
789
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
790
|
+
"select",
|
|
655
791
|
{
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
children:
|
|
792
|
+
ref,
|
|
793
|
+
value,
|
|
794
|
+
onChange: (e) => onChange(e.target.value),
|
|
795
|
+
className: cx("select", isPlaceholderShown && "select-placeholder"),
|
|
796
|
+
"data-placeholder-shown": isPlaceholderShown ? "true" : void 0,
|
|
797
|
+
...rest,
|
|
798
|
+
children: [
|
|
799
|
+
placeholder ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("option", { value: "", disabled: !allowEmptyOption, children: placeholder }) : null,
|
|
800
|
+
options.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("option", { value: opt.value, disabled: opt.disabled, children: opt.label }, opt.value))
|
|
801
|
+
]
|
|
663
802
|
}
|
|
664
803
|
),
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
804
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "chevron", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("svg", { viewBox: "0 0 10 10", fill: "none", xmlns: "http://www.w3.org/2000/svg", width: "10", height: "10", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("path", { d: "M2 3.5L5 6.5L8 3.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
|
|
805
|
+
] });
|
|
806
|
+
}
|
|
807
|
+
);
|
|
808
|
+
Select.displayName = "Select";
|
|
809
|
+
|
|
810
|
+
// src/components/dropdown/Dropdown.tsx
|
|
811
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
812
|
+
var Dropdown = React6.forwardRef(
|
|
813
|
+
({
|
|
814
|
+
options,
|
|
815
|
+
value,
|
|
816
|
+
onChange,
|
|
817
|
+
placeholder = "All",
|
|
818
|
+
allowClear = true,
|
|
819
|
+
...rest
|
|
820
|
+
}, ref) => {
|
|
821
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
822
|
+
Select,
|
|
823
|
+
{
|
|
824
|
+
ref,
|
|
825
|
+
options,
|
|
826
|
+
value,
|
|
827
|
+
onChange,
|
|
828
|
+
placeholder,
|
|
829
|
+
allowEmptyOption: allowClear,
|
|
830
|
+
fullWidth: false,
|
|
831
|
+
...rest
|
|
832
|
+
}
|
|
833
|
+
);
|
|
834
|
+
}
|
|
835
|
+
);
|
|
836
|
+
Dropdown.displayName = "Dropdown";
|
|
681
837
|
|
|
682
838
|
// src/components/dropdown-menu/DropdownMenu.tsx
|
|
683
|
-
var
|
|
684
|
-
var
|
|
839
|
+
var DropdownMenuPrimitive2 = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
|
|
840
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
685
841
|
function DropdownMenu(props) {
|
|
686
|
-
return /* @__PURE__ */ (0,
|
|
842
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Root, { ...props });
|
|
687
843
|
}
|
|
688
844
|
function DropdownMenuTrigger(props) {
|
|
689
|
-
return /* @__PURE__ */ (0,
|
|
845
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Trigger, { ...props });
|
|
690
846
|
}
|
|
691
847
|
function DropdownMenuGroup(props) {
|
|
692
|
-
return /* @__PURE__ */ (0,
|
|
848
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Group, { ...props });
|
|
693
849
|
}
|
|
694
850
|
function DropdownMenuPortal(props) {
|
|
695
|
-
return /* @__PURE__ */ (0,
|
|
851
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Portal, { ...props });
|
|
696
852
|
}
|
|
697
853
|
function DropdownMenuSub(props) {
|
|
698
|
-
return /* @__PURE__ */ (0,
|
|
854
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Sub, { ...props });
|
|
699
855
|
}
|
|
700
856
|
function DropdownMenuRadioGroup(props) {
|
|
701
|
-
return /* @__PURE__ */ (0,
|
|
857
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.RadioGroup, { ...props });
|
|
702
858
|
}
|
|
703
859
|
function DropdownMenuContent({
|
|
704
860
|
className,
|
|
705
861
|
sideOffset = 4,
|
|
706
862
|
...props
|
|
707
863
|
}) {
|
|
708
|
-
return /* @__PURE__ */ (0,
|
|
709
|
-
|
|
864
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DropdownMenuPrimitive2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
865
|
+
DropdownMenuPrimitive2.Content,
|
|
710
866
|
{
|
|
711
867
|
sideOffset,
|
|
712
868
|
className: cx("content", className),
|
|
@@ -720,8 +876,8 @@ function DropdownMenuItem({
|
|
|
720
876
|
variant = "default",
|
|
721
877
|
...props
|
|
722
878
|
}) {
|
|
723
|
-
return /* @__PURE__ */ (0,
|
|
724
|
-
|
|
879
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
880
|
+
DropdownMenuPrimitive2.Item,
|
|
725
881
|
{
|
|
726
882
|
"data-inset": inset ? "true" : void 0,
|
|
727
883
|
className: cx(
|
|
@@ -738,13 +894,13 @@ function DropdownMenuCheckboxItem({
|
|
|
738
894
|
children,
|
|
739
895
|
...props
|
|
740
896
|
}) {
|
|
741
|
-
return /* @__PURE__ */ (0,
|
|
742
|
-
|
|
897
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
898
|
+
DropdownMenuPrimitive2.CheckboxItem,
|
|
743
899
|
{
|
|
744
900
|
className: cx("item", "insetItem", className),
|
|
745
901
|
...props,
|
|
746
902
|
children: [
|
|
747
|
-
/* @__PURE__ */ (0,
|
|
903
|
+
/* @__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
904
|
"svg",
|
|
749
905
|
{
|
|
750
906
|
viewBox: "0 0 16 16",
|
|
@@ -752,7 +908,7 @@ function DropdownMenuCheckboxItem({
|
|
|
752
908
|
height: "16",
|
|
753
909
|
"aria-hidden": "true",
|
|
754
910
|
className: "indicatorIcon",
|
|
755
|
-
children: /* @__PURE__ */ (0,
|
|
911
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
756
912
|
"path",
|
|
757
913
|
{
|
|
758
914
|
d: "M3.5 8.5 6.5 11.5 12.5 4.5",
|
|
@@ -775,13 +931,13 @@ function DropdownMenuRadioItem({
|
|
|
775
931
|
children,
|
|
776
932
|
...props
|
|
777
933
|
}) {
|
|
778
|
-
return /* @__PURE__ */ (0,
|
|
779
|
-
|
|
934
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
935
|
+
DropdownMenuPrimitive2.RadioItem,
|
|
780
936
|
{
|
|
781
937
|
className: cx("item", "insetItem", className),
|
|
782
938
|
...props,
|
|
783
939
|
children: [
|
|
784
|
-
/* @__PURE__ */ (0,
|
|
940
|
+
/* @__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
941
|
children
|
|
786
942
|
]
|
|
787
943
|
}
|
|
@@ -792,8 +948,8 @@ function DropdownMenuLabel({
|
|
|
792
948
|
inset,
|
|
793
949
|
...props
|
|
794
950
|
}) {
|
|
795
|
-
return /* @__PURE__ */ (0,
|
|
796
|
-
|
|
951
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
952
|
+
DropdownMenuPrimitive2.Label,
|
|
797
953
|
{
|
|
798
954
|
"data-inset": inset ? "true" : void 0,
|
|
799
955
|
className: cx("label", className),
|
|
@@ -805,8 +961,8 @@ function DropdownMenuSeparator({
|
|
|
805
961
|
className,
|
|
806
962
|
...props
|
|
807
963
|
}) {
|
|
808
|
-
return /* @__PURE__ */ (0,
|
|
809
|
-
|
|
964
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
965
|
+
DropdownMenuPrimitive2.Separator,
|
|
810
966
|
{
|
|
811
967
|
className: cx("separator", className),
|
|
812
968
|
...props
|
|
@@ -819,15 +975,15 @@ function DropdownMenuSubTrigger({
|
|
|
819
975
|
children,
|
|
820
976
|
...props
|
|
821
977
|
}) {
|
|
822
|
-
return /* @__PURE__ */ (0,
|
|
823
|
-
|
|
978
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
979
|
+
DropdownMenuPrimitive2.SubTrigger,
|
|
824
980
|
{
|
|
825
981
|
"data-inset": inset ? "true" : void 0,
|
|
826
982
|
className: cx("item", className),
|
|
827
983
|
...props,
|
|
828
984
|
children: [
|
|
829
985
|
children,
|
|
830
|
-
/* @__PURE__ */ (0,
|
|
986
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
831
987
|
"svg",
|
|
832
988
|
{
|
|
833
989
|
viewBox: "0 0 16 16",
|
|
@@ -835,7 +991,7 @@ function DropdownMenuSubTrigger({
|
|
|
835
991
|
height: "16",
|
|
836
992
|
"aria-hidden": "true",
|
|
837
993
|
className: "chevron",
|
|
838
|
-
children: /* @__PURE__ */ (0,
|
|
994
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
839
995
|
"path",
|
|
840
996
|
{
|
|
841
997
|
d: "M6 3.5 10.5 8 6 12.5",
|
|
@@ -856,8 +1012,8 @@ function DropdownMenuSubContent({
|
|
|
856
1012
|
className,
|
|
857
1013
|
...props
|
|
858
1014
|
}) {
|
|
859
|
-
return /* @__PURE__ */ (0,
|
|
860
|
-
|
|
1015
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1016
|
+
DropdownMenuPrimitive2.SubContent,
|
|
861
1017
|
{
|
|
862
1018
|
className: cx("content", className),
|
|
863
1019
|
...props
|
|
@@ -866,10 +1022,10 @@ function DropdownMenuSubContent({
|
|
|
866
1022
|
}
|
|
867
1023
|
|
|
868
1024
|
// src/components/app-shell/AppShell.tsx
|
|
869
|
-
var
|
|
1025
|
+
var import_react4 = require("react");
|
|
870
1026
|
|
|
871
1027
|
// src/theme/ThemeProvider.tsx
|
|
872
|
-
var
|
|
1028
|
+
var import_react3 = require("react");
|
|
873
1029
|
|
|
874
1030
|
// src/theme/constants.ts
|
|
875
1031
|
var UZI_THEMES = ["light", "dark", "system"];
|
|
@@ -878,12 +1034,12 @@ var THEME_STORAGE_KEY = "uzi-theme";
|
|
|
878
1034
|
var ACCENT_STORAGE_KEY = "uzi-accent";
|
|
879
1035
|
|
|
880
1036
|
// src/theme/ThemeProvider.tsx
|
|
881
|
-
var
|
|
1037
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
882
1038
|
var THEME_STORAGE_KEY2 = THEME_STORAGE_KEY;
|
|
883
1039
|
var ACCENT_STORAGE_KEY2 = ACCENT_STORAGE_KEY;
|
|
884
1040
|
var THEME_ATTRIBUTE = "data-uzi-theme";
|
|
885
1041
|
var ACCENT_ATTRIBUTE = "data-uzi-accent";
|
|
886
|
-
var ThemeContext = (0,
|
|
1042
|
+
var ThemeContext = (0, import_react3.createContext)(void 0);
|
|
887
1043
|
function isTheme(value) {
|
|
888
1044
|
return UZI_THEMES.includes(value);
|
|
889
1045
|
}
|
|
@@ -906,10 +1062,10 @@ function ThemeProvider({
|
|
|
906
1062
|
accentStorageKey = ACCENT_STORAGE_KEY2,
|
|
907
1063
|
disableStorage = false
|
|
908
1064
|
}) {
|
|
909
|
-
const [internalTheme, setInternalTheme] = (0,
|
|
910
|
-
const [internalAccent, setInternalAccent] = (0,
|
|
911
|
-
const [systemTheme, setSystemTheme] = (0,
|
|
912
|
-
(0,
|
|
1065
|
+
const [internalTheme, setInternalTheme] = (0, import_react3.useState)(defaultTheme);
|
|
1066
|
+
const [internalAccent, setInternalAccent] = (0, import_react3.useState)(defaultAccent);
|
|
1067
|
+
const [systemTheme, setSystemTheme] = (0, import_react3.useState)("light");
|
|
1068
|
+
(0, import_react3.useEffect)(() => {
|
|
913
1069
|
setSystemTheme(getSystemTheme());
|
|
914
1070
|
if (!disableStorage) {
|
|
915
1071
|
const storedTheme = window.localStorage.getItem(storageKey);
|
|
@@ -923,7 +1079,7 @@ function ThemeProvider({
|
|
|
923
1079
|
const currentTheme = isThemeControlled ? theme : internalTheme;
|
|
924
1080
|
const currentAccent = isAccentControlled ? accent : internalAccent;
|
|
925
1081
|
const resolvedTheme = currentTheme === "system" ? systemTheme : currentTheme;
|
|
926
|
-
(0,
|
|
1082
|
+
(0, import_react3.useEffect)(() => {
|
|
927
1083
|
if (typeof window === "undefined") return;
|
|
928
1084
|
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
929
1085
|
const handleChange = () => setSystemTheme(mediaQuery.matches ? "dark" : "light");
|
|
@@ -931,7 +1087,7 @@ function ThemeProvider({
|
|
|
931
1087
|
mediaQuery.addEventListener("change", handleChange);
|
|
932
1088
|
return () => mediaQuery.removeEventListener("change", handleChange);
|
|
933
1089
|
}, []);
|
|
934
|
-
(0,
|
|
1090
|
+
(0, import_react3.useEffect)(() => {
|
|
935
1091
|
if (typeof document === "undefined") return;
|
|
936
1092
|
const root = document.documentElement;
|
|
937
1093
|
root.setAttribute(THEME_ATTRIBUTE, resolvedTheme);
|
|
@@ -939,7 +1095,7 @@ function ThemeProvider({
|
|
|
939
1095
|
root.style.colorScheme = resolvedTheme;
|
|
940
1096
|
root.classList.toggle("dark", resolvedTheme === "dark");
|
|
941
1097
|
}, [currentAccent, resolvedTheme]);
|
|
942
|
-
const setTheme = (0,
|
|
1098
|
+
const setTheme = (0, import_react3.useCallback)(
|
|
943
1099
|
(nextTheme) => {
|
|
944
1100
|
if (!isThemeControlled) setInternalTheme(nextTheme);
|
|
945
1101
|
if (!disableStorage && typeof window !== "undefined") {
|
|
@@ -949,7 +1105,7 @@ function ThemeProvider({
|
|
|
949
1105
|
},
|
|
950
1106
|
[disableStorage, isThemeControlled, onThemeChange, storageKey]
|
|
951
1107
|
);
|
|
952
|
-
const setAccent = (0,
|
|
1108
|
+
const setAccent = (0, import_react3.useCallback)(
|
|
953
1109
|
(nextAccent) => {
|
|
954
1110
|
if (!isAccentControlled) setInternalAccent(nextAccent);
|
|
955
1111
|
if (!disableStorage && typeof window !== "undefined") {
|
|
@@ -959,10 +1115,10 @@ function ThemeProvider({
|
|
|
959
1115
|
},
|
|
960
1116
|
[accentStorageKey, disableStorage, isAccentControlled, onAccentChange]
|
|
961
1117
|
);
|
|
962
|
-
const toggleTheme = (0,
|
|
1118
|
+
const toggleTheme = (0, import_react3.useCallback)(() => {
|
|
963
1119
|
setTheme(resolvedTheme === "dark" ? "light" : "dark");
|
|
964
1120
|
}, [resolvedTheme, setTheme]);
|
|
965
|
-
const value = (0,
|
|
1121
|
+
const value = (0, import_react3.useMemo)(
|
|
966
1122
|
() => ({
|
|
967
1123
|
theme: currentTheme,
|
|
968
1124
|
resolvedTheme,
|
|
@@ -973,18 +1129,18 @@ function ThemeProvider({
|
|
|
973
1129
|
}),
|
|
974
1130
|
[currentAccent, currentTheme, resolvedTheme, setAccent, setTheme, toggleTheme]
|
|
975
1131
|
);
|
|
976
|
-
return /* @__PURE__ */ (0,
|
|
1132
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ThemeContext.Provider, { value, children });
|
|
977
1133
|
}
|
|
978
1134
|
function useTheme() {
|
|
979
|
-
const context = (0,
|
|
1135
|
+
const context = (0, import_react3.useContext)(ThemeContext);
|
|
980
1136
|
if (!context) throw new Error("useTheme must be used within a ThemeProvider");
|
|
981
1137
|
return context;
|
|
982
1138
|
}
|
|
983
1139
|
|
|
984
1140
|
// src/components/theme-toggle-button/ThemeToggleButton.tsx
|
|
985
|
-
var
|
|
1141
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
986
1142
|
function MoonIcon() {
|
|
987
|
-
return /* @__PURE__ */ (0,
|
|
1143
|
+
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
1144
|
"path",
|
|
989
1145
|
{
|
|
990
1146
|
d: "M20 15.2A8.5 8.5 0 0 1 8.8 4 9 9 0 1 0 20 15.2Z",
|
|
@@ -996,9 +1152,9 @@ function MoonIcon() {
|
|
|
996
1152
|
) });
|
|
997
1153
|
}
|
|
998
1154
|
function SunIcon() {
|
|
999
|
-
return /* @__PURE__ */ (0,
|
|
1000
|
-
/* @__PURE__ */ (0,
|
|
1001
|
-
/* @__PURE__ */ (0,
|
|
1155
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", width: "16", height: "16", fill: "none", children: [
|
|
1156
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("circle", { cx: "12", cy: "12", r: "4", stroke: "currentColor", strokeWidth: "1.8" }),
|
|
1157
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1002
1158
|
"path",
|
|
1003
1159
|
{
|
|
1004
1160
|
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 +1175,7 @@ function ThemeToggleButton({
|
|
|
1019
1175
|
}) {
|
|
1020
1176
|
const { resolvedTheme, toggleTheme } = useTheme();
|
|
1021
1177
|
const nextThemeLabel = resolvedTheme === "dark" ? lightLabel : darkLabel;
|
|
1022
|
-
return /* @__PURE__ */ (0,
|
|
1178
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
1023
1179
|
Button,
|
|
1024
1180
|
{
|
|
1025
1181
|
type: "button",
|
|
@@ -1034,15 +1190,15 @@ function ThemeToggleButton({
|
|
|
1034
1190
|
},
|
|
1035
1191
|
...rest,
|
|
1036
1192
|
children: [
|
|
1037
|
-
resolvedTheme === "dark" ? /* @__PURE__ */ (0,
|
|
1038
|
-
showLabel && /* @__PURE__ */ (0,
|
|
1193
|
+
resolvedTheme === "dark" ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(SunIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(MoonIcon, {}),
|
|
1194
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: nextThemeLabel })
|
|
1039
1195
|
]
|
|
1040
1196
|
}
|
|
1041
1197
|
);
|
|
1042
1198
|
}
|
|
1043
1199
|
|
|
1044
1200
|
// src/components/top-bar/TopBar.tsx
|
|
1045
|
-
var
|
|
1201
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
1046
1202
|
function TopBar({
|
|
1047
1203
|
leading,
|
|
1048
1204
|
brand,
|
|
@@ -1061,24 +1217,24 @@ function TopBar({
|
|
|
1061
1217
|
...rest
|
|
1062
1218
|
}) {
|
|
1063
1219
|
const shouldStick = isSticky ?? sticky;
|
|
1064
|
-
const brandNode = !brand ? null : brandHref ? /* @__PURE__ */ (0,
|
|
1065
|
-
return /* @__PURE__ */ (0,
|
|
1220
|
+
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 }) });
|
|
1221
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1066
1222
|
"header",
|
|
1067
1223
|
{
|
|
1068
1224
|
className: cx("topBar", !shouldStick && "topBarStatic", className),
|
|
1069
1225
|
...rest,
|
|
1070
|
-
children: /* @__PURE__ */ (0,
|
|
1071
|
-
/* @__PURE__ */ (0,
|
|
1226
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: cx("topBarInner", innerClassName), children: [
|
|
1227
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "topBarStart", children: [
|
|
1072
1228
|
leading,
|
|
1073
1229
|
brandingLocation === "left" && brandNode,
|
|
1074
1230
|
start
|
|
1075
1231
|
] }),
|
|
1076
|
-
brandNode && brandingLocation === "center" || center || children ? /* @__PURE__ */ (0,
|
|
1232
|
+
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
1233
|
brandingLocation === "center" && brandNode,
|
|
1078
1234
|
center ?? children
|
|
1079
1235
|
] }) }) : null,
|
|
1080
|
-
/* @__PURE__ */ (0,
|
|
1081
|
-
showThemeToggle && /* @__PURE__ */ (0,
|
|
1236
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "topBarActions", children: [
|
|
1237
|
+
showThemeToggle && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ThemeToggleButton, { ...themeToggleProps }),
|
|
1082
1238
|
actions
|
|
1083
1239
|
] })
|
|
1084
1240
|
] })
|
|
@@ -1087,7 +1243,7 @@ function TopBar({
|
|
|
1087
1243
|
}
|
|
1088
1244
|
|
|
1089
1245
|
// src/components/app-shell/AppShell.tsx
|
|
1090
|
-
var
|
|
1246
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
1091
1247
|
var DESKTOP_BREAKPOINT = 960;
|
|
1092
1248
|
function getIsDesktop() {
|
|
1093
1249
|
if (typeof window === "undefined") return false;
|
|
@@ -1112,16 +1268,16 @@ function AppShell({
|
|
|
1112
1268
|
hamburgerLabel = "Toggle navigation",
|
|
1113
1269
|
onSidebarToggle
|
|
1114
1270
|
}) {
|
|
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,
|
|
1271
|
+
const [isDesktop, setIsDesktop] = (0, import_react4.useState)(false);
|
|
1272
|
+
const [sidebarOpen, setSidebarOpen] = (0, import_react4.useState)(false);
|
|
1273
|
+
const [transitionsReady, setTransitionsReady] = (0, import_react4.useState)(false);
|
|
1274
|
+
const prevIsDesktopRef = (0, import_react4.useRef)(false);
|
|
1275
|
+
const closeKeyRef = (0, import_react4.useRef)(closeSidebarOnChangeKey);
|
|
1276
|
+
const sidebarRef = (0, import_react4.useRef)(null);
|
|
1277
|
+
const hamburgerRef = (0, import_react4.useRef)(null);
|
|
1278
|
+
const mainRef = (0, import_react4.useRef)(null);
|
|
1279
|
+
const sidebarId = (0, import_react4.useId)();
|
|
1280
|
+
(0, import_react4.useEffect)(() => {
|
|
1125
1281
|
const desktop = getIsDesktop();
|
|
1126
1282
|
setIsDesktop(desktop);
|
|
1127
1283
|
setSidebarOpen(desktop);
|
|
@@ -1143,7 +1299,7 @@ function AppShell({
|
|
|
1143
1299
|
window.removeEventListener("resize", handleResize);
|
|
1144
1300
|
};
|
|
1145
1301
|
}, []);
|
|
1146
|
-
(0,
|
|
1302
|
+
(0, import_react4.useEffect)(() => {
|
|
1147
1303
|
if (isDesktop || !sidebarOpen) return;
|
|
1148
1304
|
const mainElement = mainRef.current;
|
|
1149
1305
|
const closeSidebar = () => setSidebarOpen(false);
|
|
@@ -1168,13 +1324,13 @@ function AppShell({
|
|
|
1168
1324
|
document.removeEventListener("touchmove", closeSidebar);
|
|
1169
1325
|
};
|
|
1170
1326
|
}, [sidebarOpen, isDesktop]);
|
|
1171
|
-
(0,
|
|
1327
|
+
(0, import_react4.useEffect)(() => {
|
|
1172
1328
|
if (!isDesktop && closeKeyRef.current !== closeSidebarOnChangeKey) {
|
|
1173
1329
|
setSidebarOpen(false);
|
|
1174
1330
|
}
|
|
1175
1331
|
closeKeyRef.current = closeSidebarOnChangeKey;
|
|
1176
1332
|
}, [closeSidebarOnChangeKey, isDesktop]);
|
|
1177
|
-
(0,
|
|
1333
|
+
(0, import_react4.useEffect)(() => {
|
|
1178
1334
|
onSidebarToggle?.(sidebarOpen);
|
|
1179
1335
|
}, [sidebarOpen, onSidebarToggle]);
|
|
1180
1336
|
const toggleSidebar = () => setSidebarOpen((open) => !open);
|
|
@@ -1187,7 +1343,7 @@ function AppShell({
|
|
|
1187
1343
|
className
|
|
1188
1344
|
);
|
|
1189
1345
|
const sidebarClasses = cx("appShellSidebar", sidebarOpen && "appShellSidebarOpen", sidebarClassName);
|
|
1190
|
-
return /* @__PURE__ */ (0,
|
|
1346
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
1191
1347
|
"div",
|
|
1192
1348
|
{
|
|
1193
1349
|
className: shellClasses,
|
|
@@ -1196,11 +1352,11 @@ function AppShell({
|
|
|
1196
1352
|
"data-desktop": isDesktop ? "true" : "false",
|
|
1197
1353
|
"data-sidebar-open": sidebarOpen ? "true" : "false",
|
|
1198
1354
|
children: [
|
|
1199
|
-
/* @__PURE__ */ (0,
|
|
1355
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1200
1356
|
TopBar,
|
|
1201
1357
|
{
|
|
1202
1358
|
className: cx("appShellTopbar", topbarClassName),
|
|
1203
|
-
leading: /* @__PURE__ */ (0,
|
|
1359
|
+
leading: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1204
1360
|
"button",
|
|
1205
1361
|
{
|
|
1206
1362
|
ref: hamburgerRef,
|
|
@@ -1210,7 +1366,7 @@ function AppShell({
|
|
|
1210
1366
|
"aria-label": hamburgerLabel,
|
|
1211
1367
|
"aria-expanded": sidebarOpen,
|
|
1212
1368
|
"aria-controls": sidebarId,
|
|
1213
|
-
children: /* @__PURE__ */ (0,
|
|
1369
|
+
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
1370
|
}
|
|
1215
1371
|
),
|
|
1216
1372
|
brand,
|
|
@@ -1222,16 +1378,16 @@ function AppShell({
|
|
|
1222
1378
|
themeToggleProps
|
|
1223
1379
|
}
|
|
1224
1380
|
),
|
|
1225
|
-
!isDesktop && sidebarOpen && /* @__PURE__ */ (0,
|
|
1226
|
-
/* @__PURE__ */ (0,
|
|
1227
|
-
/* @__PURE__ */ (0,
|
|
1381
|
+
!isDesktop && sidebarOpen && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "appShellBackdrop", onClick: () => setSidebarOpen(false), onTouchStart: () => setSidebarOpen(false), "aria-hidden": "true" }),
|
|
1382
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("aside", { ref: sidebarRef, id: sidebarId, className: sidebarClasses, "aria-label": "Sidebar navigation", children: sidebar }),
|
|
1383
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("main", { ref: mainRef, className: cx("appShellMain", mainClassName), children })
|
|
1228
1384
|
]
|
|
1229
1385
|
}
|
|
1230
1386
|
);
|
|
1231
1387
|
}
|
|
1232
1388
|
|
|
1233
1389
|
// src/components/sidebar-nav/SidebarNav.tsx
|
|
1234
|
-
var
|
|
1390
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1235
1391
|
var defaultIsActive = (item, path) => {
|
|
1236
1392
|
if (item.active !== void 0) return item.active;
|
|
1237
1393
|
if (!item.href) return false;
|
|
@@ -1258,21 +1414,21 @@ function SidebarNav({
|
|
|
1258
1414
|
const style = iconSize !== void 0 ? {
|
|
1259
1415
|
["--sidebar-nav-icon-size"]: typeof iconSize === "number" ? `${iconSize}px` : iconSize
|
|
1260
1416
|
} : void 0;
|
|
1261
|
-
return /* @__PURE__ */ (0,
|
|
1417
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
1262
1418
|
"nav",
|
|
1263
1419
|
{
|
|
1264
1420
|
className: cx("uziSidebarNav", collapsed && "uziSidebarNavCollapsed", className),
|
|
1265
1421
|
"aria-label": ariaLabel,
|
|
1266
1422
|
style,
|
|
1267
1423
|
children: [
|
|
1268
|
-
header ? /* @__PURE__ */ (0,
|
|
1269
|
-
/* @__PURE__ */ (0,
|
|
1424
|
+
header ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "uziSidebarNavHeader", children: header }) : null,
|
|
1425
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "uziSidebarNavSections", children: resolvedSections.map((section, sectionIndex) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
1270
1426
|
"div",
|
|
1271
1427
|
{
|
|
1272
1428
|
className: cx("uziSidebarNavSection", sectionClassName),
|
|
1273
1429
|
children: [
|
|
1274
|
-
section.label && !collapsed ? /* @__PURE__ */ (0,
|
|
1275
|
-
/* @__PURE__ */ (0,
|
|
1430
|
+
section.label && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "uziSidebarNavSectionLabel", children: section.label }) : null,
|
|
1431
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "uziSidebarNavSectionItems", children: section.items.map((item, itemIndex) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1276
1432
|
SidebarNavEntry,
|
|
1277
1433
|
{
|
|
1278
1434
|
item,
|
|
@@ -1287,7 +1443,7 @@ function SidebarNav({
|
|
|
1287
1443
|
},
|
|
1288
1444
|
section.id ?? `section-${sectionIndex}`
|
|
1289
1445
|
)) }),
|
|
1290
|
-
footer ? /* @__PURE__ */ (0,
|
|
1446
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "uziSidebarNavFooter", children: footer }) : null
|
|
1291
1447
|
]
|
|
1292
1448
|
}
|
|
1293
1449
|
);
|
|
@@ -1308,14 +1464,14 @@ function SidebarNavEntry({
|
|
|
1308
1464
|
item.disabled && "uziSidebarNavItemDisabled",
|
|
1309
1465
|
itemClassName
|
|
1310
1466
|
);
|
|
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,
|
|
1467
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
|
|
1468
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "uziSidebarNavIcon", children: item.icon }),
|
|
1469
|
+
!collapsed ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "uziSidebarNavItemBody", children: [
|
|
1470
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "uziSidebarNavLabelRow", children: [
|
|
1471
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "uziSidebarNavLabel", children: item.label }),
|
|
1472
|
+
item.badge && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "uziSidebarNavBadge", children: item.badge })
|
|
1317
1473
|
] }),
|
|
1318
|
-
item.description ? /* @__PURE__ */ (0,
|
|
1474
|
+
item.description ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "uziSidebarNavDescription", children: item.description }) : null
|
|
1319
1475
|
] }) : null
|
|
1320
1476
|
] });
|
|
1321
1477
|
const handleClick = () => {
|
|
@@ -1324,7 +1480,7 @@ function SidebarNavEntry({
|
|
|
1324
1480
|
onItemClick?.(item);
|
|
1325
1481
|
};
|
|
1326
1482
|
if (!item.href) {
|
|
1327
|
-
return /* @__PURE__ */ (0,
|
|
1483
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1328
1484
|
"button",
|
|
1329
1485
|
{
|
|
1330
1486
|
type: "button",
|
|
@@ -1339,7 +1495,7 @@ function SidebarNavEntry({
|
|
|
1339
1495
|
);
|
|
1340
1496
|
}
|
|
1341
1497
|
if (item.disabled) {
|
|
1342
|
-
return /* @__PURE__ */ (0,
|
|
1498
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1343
1499
|
"div",
|
|
1344
1500
|
{
|
|
1345
1501
|
className: classes,
|
|
@@ -1350,7 +1506,7 @@ function SidebarNavEntry({
|
|
|
1350
1506
|
}
|
|
1351
1507
|
);
|
|
1352
1508
|
}
|
|
1353
|
-
return /* @__PURE__ */ (0,
|
|
1509
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1354
1510
|
"a",
|
|
1355
1511
|
{
|
|
1356
1512
|
className: classes,
|
|
@@ -1364,6 +1520,58 @@ function SidebarNavEntry({
|
|
|
1364
1520
|
}
|
|
1365
1521
|
);
|
|
1366
1522
|
}
|
|
1523
|
+
|
|
1524
|
+
// src/components/skeleton/Skeleton.tsx
|
|
1525
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1526
|
+
function Skeleton({
|
|
1527
|
+
width,
|
|
1528
|
+
height,
|
|
1529
|
+
radius = "md",
|
|
1530
|
+
className,
|
|
1531
|
+
style,
|
|
1532
|
+
...rest
|
|
1533
|
+
}) {
|
|
1534
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1535
|
+
"div",
|
|
1536
|
+
{
|
|
1537
|
+
className: cx("skeleton", `radius-${radius}`, className),
|
|
1538
|
+
style: { width, height, ...style },
|
|
1539
|
+
"aria-hidden": "true",
|
|
1540
|
+
...rest
|
|
1541
|
+
}
|
|
1542
|
+
);
|
|
1543
|
+
}
|
|
1544
|
+
|
|
1545
|
+
// src/components/progress/Progress.tsx
|
|
1546
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1547
|
+
function Progress({
|
|
1548
|
+
value,
|
|
1549
|
+
tone = "default",
|
|
1550
|
+
className,
|
|
1551
|
+
"aria-label": ariaLabel,
|
|
1552
|
+
...rest
|
|
1553
|
+
}) {
|
|
1554
|
+
const clamped = Math.max(0, Math.min(100, value));
|
|
1555
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1556
|
+
"div",
|
|
1557
|
+
{
|
|
1558
|
+
className: cx("track", className),
|
|
1559
|
+
role: "progressbar",
|
|
1560
|
+
"aria-valuenow": clamped,
|
|
1561
|
+
"aria-valuemin": 0,
|
|
1562
|
+
"aria-valuemax": 100,
|
|
1563
|
+
"aria-label": ariaLabel,
|
|
1564
|
+
...rest,
|
|
1565
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1566
|
+
"div",
|
|
1567
|
+
{
|
|
1568
|
+
className: cx("fill", `tone-${tone}`),
|
|
1569
|
+
style: { width: `${clamped}%` }
|
|
1570
|
+
}
|
|
1571
|
+
)
|
|
1572
|
+
}
|
|
1573
|
+
);
|
|
1574
|
+
}
|
|
1367
1575
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1368
1576
|
0 && (module.exports = {
|
|
1369
1577
|
Alert,
|
|
@@ -1393,8 +1601,12 @@ function SidebarNavEntry({
|
|
|
1393
1601
|
Label,
|
|
1394
1602
|
Modal,
|
|
1395
1603
|
ModalOverlay,
|
|
1604
|
+
MultiSelect,
|
|
1396
1605
|
Pill,
|
|
1606
|
+
Progress,
|
|
1607
|
+
Select,
|
|
1397
1608
|
SidebarNav,
|
|
1609
|
+
Skeleton,
|
|
1398
1610
|
ThemeProvider,
|
|
1399
1611
|
ThemeToggleButton,
|
|
1400
1612
|
ToastProvider,
|