@tensor_1/react 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/NavFavourites.d.ts +61 -0
- package/dist/components/NavFavourites.js +352 -0
- package/dist/components/StarButton.d.ts +31 -0
- package/dist/components/StarButton.js +43 -0
- package/dist/index.cjs +506 -113
- package/dist/index.d.cts +86 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -50,6 +50,7 @@ __export(src_exports, {
|
|
|
50
50
|
ListItem: () => ListItem,
|
|
51
51
|
LoadingState: () => LoadingState,
|
|
52
52
|
Modal: () => Modal,
|
|
53
|
+
NavFavourites: () => NavFavourites,
|
|
53
54
|
NavGroup: () => NavGroup,
|
|
54
55
|
NavItem: () => NavItem,
|
|
55
56
|
Note: () => Note,
|
|
@@ -66,6 +67,7 @@ __export(src_exports, {
|
|
|
66
67
|
SidebarSection: () => SidebarSection,
|
|
67
68
|
Skeleton: () => Skeleton,
|
|
68
69
|
Spinner: () => Spinner,
|
|
70
|
+
StarButton: () => StarButton,
|
|
69
71
|
Stat: () => Stat,
|
|
70
72
|
StatusPill: () => StatusPill,
|
|
71
73
|
SubNavItem: () => SubNavItem,
|
|
@@ -541,22 +543,411 @@ function SubNavItem({ active, as: Tag = "a", children, className, ...props }) {
|
|
|
541
543
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("a", { className: cls, "aria-current": active ? "page" : void 0, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "uix-navitem__label", children }) });
|
|
542
544
|
}
|
|
543
545
|
|
|
544
|
-
// src/components/
|
|
546
|
+
// src/components/StarButton.tsx
|
|
545
547
|
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
548
|
+
var StarGlyph = () => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
549
|
+
"svg",
|
|
550
|
+
{
|
|
551
|
+
viewBox: "0 0 24 24",
|
|
552
|
+
fill: "none",
|
|
553
|
+
stroke: "currentColor",
|
|
554
|
+
strokeWidth: 2,
|
|
555
|
+
strokeLinecap: "round",
|
|
556
|
+
strokeLinejoin: "round",
|
|
557
|
+
"aria-hidden": "true",
|
|
558
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("path", { d: "M11.5 2.7a.6.6 0 0 1 1 0l2.4 5 5.4.8a.6.6 0 0 1 .3 1l-3.9 3.8.9 5.4a.6.6 0 0 1-.8.6L12 17l-4.8 2.5a.6.6 0 0 1-.8-.6l.9-5.4L3.4 9.5a.6.6 0 0 1 .3-1l5.4-.8z" })
|
|
559
|
+
}
|
|
560
|
+
);
|
|
561
|
+
function StarButton({
|
|
562
|
+
pinned,
|
|
563
|
+
label,
|
|
564
|
+
addLabel = "Add {label} to favourites",
|
|
565
|
+
onToggle,
|
|
566
|
+
className
|
|
567
|
+
}) {
|
|
568
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
569
|
+
"button",
|
|
570
|
+
{
|
|
571
|
+
type: "button",
|
|
572
|
+
className: cx("uix-navitem__star", className),
|
|
573
|
+
"data-on": pinned || void 0,
|
|
574
|
+
"aria-pressed": pinned,
|
|
575
|
+
"aria-label": addLabel.replace("{label}", label),
|
|
576
|
+
onClick: (e) => {
|
|
577
|
+
e.preventDefault();
|
|
578
|
+
e.stopPropagation();
|
|
579
|
+
onToggle(!pinned);
|
|
580
|
+
},
|
|
581
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(StarGlyph, {})
|
|
582
|
+
}
|
|
583
|
+
);
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
// src/components/NavFavourites.tsx
|
|
587
|
+
var import_react12 = require("react");
|
|
588
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
589
|
+
var ChevronDownIcon = () => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
590
|
+
"svg",
|
|
591
|
+
{
|
|
592
|
+
width: "12",
|
|
593
|
+
height: "12",
|
|
594
|
+
viewBox: "0 0 24 24",
|
|
595
|
+
fill: "none",
|
|
596
|
+
stroke: "currentColor",
|
|
597
|
+
strokeWidth: 2,
|
|
598
|
+
strokeLinecap: "round",
|
|
599
|
+
strokeLinejoin: "round",
|
|
600
|
+
"aria-hidden": "true",
|
|
601
|
+
style: { flexShrink: 0 },
|
|
602
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("path", { d: "m6 9 6 6 6-6" })
|
|
603
|
+
}
|
|
604
|
+
);
|
|
605
|
+
var ChevronRightIcon = () => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
606
|
+
"svg",
|
|
607
|
+
{
|
|
608
|
+
width: "12",
|
|
609
|
+
height: "12",
|
|
610
|
+
viewBox: "0 0 24 24",
|
|
611
|
+
fill: "none",
|
|
612
|
+
stroke: "currentColor",
|
|
613
|
+
strokeWidth: 2,
|
|
614
|
+
strokeLinecap: "round",
|
|
615
|
+
strokeLinejoin: "round",
|
|
616
|
+
"aria-hidden": "true",
|
|
617
|
+
style: { flexShrink: 0 },
|
|
618
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("path", { d: "m9 18 6-6-6-6" })
|
|
619
|
+
}
|
|
620
|
+
);
|
|
621
|
+
var MoreIcon = () => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
622
|
+
"svg",
|
|
623
|
+
{
|
|
624
|
+
width: "14",
|
|
625
|
+
height: "14",
|
|
626
|
+
viewBox: "0 0 24 24",
|
|
627
|
+
fill: "none",
|
|
628
|
+
stroke: "currentColor",
|
|
629
|
+
strokeWidth: 1.75,
|
|
630
|
+
strokeLinecap: "round",
|
|
631
|
+
strokeLinejoin: "round",
|
|
632
|
+
"aria-hidden": "true",
|
|
633
|
+
children: [
|
|
634
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("circle", { cx: "12", cy: "12", r: "1" }),
|
|
635
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("circle", { cx: "12", cy: "5", r: "1" }),
|
|
636
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("circle", { cx: "12", cy: "19", r: "1" })
|
|
637
|
+
]
|
|
638
|
+
}
|
|
639
|
+
);
|
|
640
|
+
var MUTED = "color-mix(in srgb, var(--uix-text) 50%, transparent)";
|
|
641
|
+
function NavFavourites({
|
|
642
|
+
items,
|
|
643
|
+
collapsed = false,
|
|
644
|
+
onToggleCollapsed,
|
|
645
|
+
onRemove,
|
|
646
|
+
onReorder,
|
|
647
|
+
labels,
|
|
648
|
+
emptyReason,
|
|
649
|
+
className
|
|
650
|
+
}) {
|
|
651
|
+
const regionId = (0, import_react12.useId)();
|
|
652
|
+
const headerRef = (0, import_react12.useRef)(null);
|
|
653
|
+
const regionRef = (0, import_react12.useRef)(null);
|
|
654
|
+
const focusAfterRef = (0, import_react12.useRef)(null);
|
|
655
|
+
const triggerRefs = (0, import_react12.useRef)(/* @__PURE__ */ new Map());
|
|
656
|
+
const order = items.map((i) => i.id);
|
|
657
|
+
(0, import_react12.useEffect)(() => {
|
|
658
|
+
const id = focusAfterRef.current;
|
|
659
|
+
if (!id) return;
|
|
660
|
+
focusAfterRef.current = null;
|
|
661
|
+
const el = triggerRefs.current.get(id);
|
|
662
|
+
if (el) el.focus();
|
|
663
|
+
else headerRef.current?.focus();
|
|
664
|
+
}, [order.join("|")]);
|
|
665
|
+
const handleToggle = () => {
|
|
666
|
+
if (!collapsed) {
|
|
667
|
+
const active = document.activeElement;
|
|
668
|
+
if (active && regionRef.current?.contains(active) && active !== headerRef.current) {
|
|
669
|
+
headerRef.current?.focus();
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
onToggleCollapsed?.();
|
|
673
|
+
};
|
|
674
|
+
const move = (id, dir) => {
|
|
675
|
+
const idx = order.indexOf(id);
|
|
676
|
+
const next = idx + dir;
|
|
677
|
+
if (idx < 0 || next < 0 || next >= order.length) return;
|
|
678
|
+
const reordered = [...order];
|
|
679
|
+
const [it] = reordered.splice(idx, 1);
|
|
680
|
+
if (it === void 0) return;
|
|
681
|
+
reordered.splice(next, 0, it);
|
|
682
|
+
focusAfterRef.current = id;
|
|
683
|
+
onReorder(reordered);
|
|
684
|
+
};
|
|
685
|
+
const remove = (id) => {
|
|
686
|
+
const idx = order.indexOf(id);
|
|
687
|
+
const neighbour = order[idx + 1] ?? order[idx - 1] ?? null;
|
|
688
|
+
focusAfterRef.current = neighbour;
|
|
689
|
+
onRemove(id);
|
|
690
|
+
};
|
|
691
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: cx("uix-favourites", className), style: { marginBottom: "var(--uix-space-1)" }, children: [
|
|
692
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
693
|
+
"button",
|
|
694
|
+
{
|
|
695
|
+
ref: headerRef,
|
|
696
|
+
type: "button",
|
|
697
|
+
"aria-expanded": !collapsed,
|
|
698
|
+
"aria-controls": regionId,
|
|
699
|
+
onClick: handleToggle,
|
|
700
|
+
className: "uix-text-eyebrow",
|
|
701
|
+
style: {
|
|
702
|
+
display: "flex",
|
|
703
|
+
width: "100%",
|
|
704
|
+
alignItems: "center",
|
|
705
|
+
gap: "6px",
|
|
706
|
+
padding: "8px 4px 4px",
|
|
707
|
+
border: 0,
|
|
708
|
+
background: "transparent",
|
|
709
|
+
cursor: "pointer",
|
|
710
|
+
color: "inherit"
|
|
711
|
+
},
|
|
712
|
+
children: [
|
|
713
|
+
collapsed ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ChevronRightIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ChevronDownIcon, {}),
|
|
714
|
+
labels.heading
|
|
715
|
+
]
|
|
716
|
+
}
|
|
717
|
+
),
|
|
718
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
719
|
+
"ul",
|
|
720
|
+
{
|
|
721
|
+
ref: regionRef,
|
|
722
|
+
id: regionId,
|
|
723
|
+
hidden: collapsed,
|
|
724
|
+
style: {
|
|
725
|
+
display: "flex",
|
|
726
|
+
flexDirection: "column",
|
|
727
|
+
gap: "1px",
|
|
728
|
+
listStyle: "none",
|
|
729
|
+
margin: 0,
|
|
730
|
+
padding: 0
|
|
731
|
+
},
|
|
732
|
+
children: items.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
733
|
+
"li",
|
|
734
|
+
{
|
|
735
|
+
className: "uix-text-meta",
|
|
736
|
+
"data-empty-reason": emptyReason,
|
|
737
|
+
style: { padding: "6px 8px", color: MUTED },
|
|
738
|
+
children: labels.empty
|
|
739
|
+
}
|
|
740
|
+
) : items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
741
|
+
FavouriteRow,
|
|
742
|
+
{
|
|
743
|
+
item,
|
|
744
|
+
isFirst: idx === 0,
|
|
745
|
+
isLast: idx === items.length - 1,
|
|
746
|
+
labels,
|
|
747
|
+
onMoveUp: () => move(item.id, -1),
|
|
748
|
+
onMoveDown: () => move(item.id, 1),
|
|
749
|
+
onRemove: () => remove(item.id),
|
|
750
|
+
registerTrigger: (el) => triggerRefs.current.set(item.id, el)
|
|
751
|
+
},
|
|
752
|
+
item.id
|
|
753
|
+
))
|
|
754
|
+
}
|
|
755
|
+
)
|
|
756
|
+
] });
|
|
757
|
+
}
|
|
758
|
+
function FavouriteRow({
|
|
759
|
+
item,
|
|
760
|
+
isFirst,
|
|
761
|
+
isLast,
|
|
762
|
+
labels,
|
|
763
|
+
onMoveUp,
|
|
764
|
+
onMoveDown,
|
|
765
|
+
onRemove,
|
|
766
|
+
registerTrigger
|
|
767
|
+
}) {
|
|
768
|
+
const [open, setOpen] = (0, import_react12.useState)(false);
|
|
769
|
+
const [revealed, setRevealed] = (0, import_react12.useState)(false);
|
|
770
|
+
const menuId = (0, import_react12.useId)();
|
|
771
|
+
const triggerRef = (0, import_react12.useRef)(null);
|
|
772
|
+
const itemRefs = (0, import_react12.useRef)([]);
|
|
773
|
+
const optionsTemplate = labels.options ?? "{label} favourite options";
|
|
774
|
+
const actions = [
|
|
775
|
+
...isFirst ? [] : [{ label: labels.moveUp, onSelect: onMoveUp }],
|
|
776
|
+
...isLast ? [] : [{ label: labels.moveDown, onSelect: onMoveDown }],
|
|
777
|
+
{ label: labels.remove.replace("{label}", item.label), onSelect: onRemove }
|
|
778
|
+
];
|
|
779
|
+
(0, import_react12.useEffect)(() => {
|
|
780
|
+
if (open) itemRefs.current[0]?.focus();
|
|
781
|
+
}, [open]);
|
|
782
|
+
const closeAndReturnFocus = () => {
|
|
783
|
+
setOpen(false);
|
|
784
|
+
triggerRef.current?.focus();
|
|
785
|
+
};
|
|
786
|
+
const onMenuKeyDown = (e) => {
|
|
787
|
+
const menuItems = itemRefs.current.filter((x) => x !== null);
|
|
788
|
+
const currentIdx = menuItems.findIndex((el) => el === document.activeElement);
|
|
789
|
+
if (e.key === "ArrowDown") {
|
|
790
|
+
e.preventDefault();
|
|
791
|
+
menuItems[(currentIdx + 1) % menuItems.length]?.focus();
|
|
792
|
+
} else if (e.key === "ArrowUp") {
|
|
793
|
+
e.preventDefault();
|
|
794
|
+
menuItems[(currentIdx - 1 + menuItems.length) % menuItems.length]?.focus();
|
|
795
|
+
} else if (e.key === "Escape") {
|
|
796
|
+
e.preventDefault();
|
|
797
|
+
closeAndReturnFocus();
|
|
798
|
+
} else if (e.key === "Tab") {
|
|
799
|
+
setOpen(false);
|
|
800
|
+
}
|
|
801
|
+
};
|
|
802
|
+
const onRowKeyDown = (e) => {
|
|
803
|
+
if (!e.altKey) return;
|
|
804
|
+
if (e.key === "ArrowUp" && !isFirst) {
|
|
805
|
+
e.preventDefault();
|
|
806
|
+
onMoveUp();
|
|
807
|
+
} else if (e.key === "ArrowDown" && !isLast) {
|
|
808
|
+
e.preventDefault();
|
|
809
|
+
onMoveDown();
|
|
810
|
+
}
|
|
811
|
+
};
|
|
812
|
+
const triggerVisible = revealed || open;
|
|
813
|
+
return (
|
|
814
|
+
// biome-ignore lint/a11y/noStaticElementInteractions: keyboard accelerators on the row; the focusable controls inside carry their own semantics.
|
|
815
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
816
|
+
"li",
|
|
817
|
+
{
|
|
818
|
+
style: { position: "relative", display: "flex", alignItems: "center" },
|
|
819
|
+
onKeyDown: onRowKeyDown,
|
|
820
|
+
onMouseEnter: () => setRevealed(true),
|
|
821
|
+
onMouseLeave: () => setRevealed(false),
|
|
822
|
+
onFocus: () => setRevealed(true),
|
|
823
|
+
onBlur: (e) => {
|
|
824
|
+
if (!e.currentTarget.contains(e.relatedTarget)) setRevealed(false);
|
|
825
|
+
},
|
|
826
|
+
children: [
|
|
827
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { style: { minWidth: 0, flex: 1 }, children: item.link }),
|
|
828
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
829
|
+
"button",
|
|
830
|
+
{
|
|
831
|
+
ref: (el) => {
|
|
832
|
+
triggerRef.current = el;
|
|
833
|
+
registerTrigger(el);
|
|
834
|
+
},
|
|
835
|
+
type: "button",
|
|
836
|
+
"aria-haspopup": "menu",
|
|
837
|
+
"aria-expanded": open,
|
|
838
|
+
"aria-controls": open ? menuId : void 0,
|
|
839
|
+
"aria-label": optionsTemplate.replace("{label}", item.label),
|
|
840
|
+
onClick: () => setOpen((v) => !v),
|
|
841
|
+
style: {
|
|
842
|
+
marginLeft: "auto",
|
|
843
|
+
display: "inline-flex",
|
|
844
|
+
height: "20px",
|
|
845
|
+
width: "20px",
|
|
846
|
+
flexShrink: 0,
|
|
847
|
+
alignItems: "center",
|
|
848
|
+
justifyContent: "center",
|
|
849
|
+
border: 0,
|
|
850
|
+
borderRadius: "2px",
|
|
851
|
+
background: "transparent",
|
|
852
|
+
cursor: "pointer",
|
|
853
|
+
color: MUTED,
|
|
854
|
+
opacity: triggerVisible ? 1 : 0,
|
|
855
|
+
transition: "opacity var(--uix-dur-fast) var(--uix-ease-out)"
|
|
856
|
+
},
|
|
857
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(MoreIcon, {})
|
|
858
|
+
}
|
|
859
|
+
),
|
|
860
|
+
open ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
|
|
861
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
862
|
+
"div",
|
|
863
|
+
{
|
|
864
|
+
"aria-hidden": "true",
|
|
865
|
+
role: "presentation",
|
|
866
|
+
onClick: () => setOpen(false),
|
|
867
|
+
style: { position: "fixed", inset: 0, cursor: "default", background: "transparent", zIndex: 40 }
|
|
868
|
+
}
|
|
869
|
+
),
|
|
870
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
871
|
+
"ul",
|
|
872
|
+
{
|
|
873
|
+
id: menuId,
|
|
874
|
+
role: "menu",
|
|
875
|
+
onKeyDown: onMenuKeyDown,
|
|
876
|
+
style: {
|
|
877
|
+
position: "absolute",
|
|
878
|
+
right: 0,
|
|
879
|
+
top: "calc(100% + 2px)",
|
|
880
|
+
zIndex: 50,
|
|
881
|
+
minWidth: "160px",
|
|
882
|
+
overflow: "hidden",
|
|
883
|
+
margin: 0,
|
|
884
|
+
padding: "4px 0",
|
|
885
|
+
listStyle: "none",
|
|
886
|
+
borderRadius: "6px",
|
|
887
|
+
border: "1px solid var(--uix-border)",
|
|
888
|
+
background: "var(--uix-surface)",
|
|
889
|
+
boxShadow: "var(--uix-shadow-popover)"
|
|
890
|
+
},
|
|
891
|
+
children: actions.map((action, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("li", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
892
|
+
"button",
|
|
893
|
+
{
|
|
894
|
+
ref: (el) => {
|
|
895
|
+
itemRefs.current[i] = el;
|
|
896
|
+
},
|
|
897
|
+
type: "button",
|
|
898
|
+
role: "menuitem",
|
|
899
|
+
tabIndex: -1,
|
|
900
|
+
onClick: () => {
|
|
901
|
+
setOpen(false);
|
|
902
|
+
action.onSelect();
|
|
903
|
+
},
|
|
904
|
+
style: {
|
|
905
|
+
display: "flex",
|
|
906
|
+
width: "100%",
|
|
907
|
+
alignItems: "center",
|
|
908
|
+
padding: "6px 12px",
|
|
909
|
+
border: 0,
|
|
910
|
+
background: "transparent",
|
|
911
|
+
cursor: "pointer",
|
|
912
|
+
textAlign: "left",
|
|
913
|
+
fontSize: "13px",
|
|
914
|
+
color: "color-mix(in srgb, var(--uix-text) 85%, transparent)",
|
|
915
|
+
transition: "background-color var(--uix-dur-fast) var(--uix-ease-out)"
|
|
916
|
+
},
|
|
917
|
+
onMouseEnter: (e) => {
|
|
918
|
+
e.currentTarget.style.background = "var(--uix-bg-hover)";
|
|
919
|
+
},
|
|
920
|
+
onMouseLeave: (e) => {
|
|
921
|
+
e.currentTarget.style.background = "transparent";
|
|
922
|
+
},
|
|
923
|
+
children: action.label
|
|
924
|
+
}
|
|
925
|
+
) }, action.label))
|
|
926
|
+
}
|
|
927
|
+
)
|
|
928
|
+
] }) : null
|
|
929
|
+
]
|
|
930
|
+
}
|
|
931
|
+
)
|
|
932
|
+
);
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
// src/components/Alert.tsx
|
|
936
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
546
937
|
function Alert({ tone, title, icon, children, className, ...props }) {
|
|
547
|
-
return /* @__PURE__ */ (0,
|
|
548
|
-
icon && /* @__PURE__ */ (0,
|
|
549
|
-
/* @__PURE__ */ (0,
|
|
550
|
-
title && /* @__PURE__ */ (0,
|
|
551
|
-
children && /* @__PURE__ */ (0,
|
|
938
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: cx("uix-alert", tone && tone !== "neutral" && `uix-alert--${tone}`, className), ...props, children: [
|
|
939
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "uix-alert__icon", children: icon }),
|
|
940
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { children: [
|
|
941
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "uix-alert__title", children: title }),
|
|
942
|
+
children && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "uix-alert__body", children })
|
|
552
943
|
] })
|
|
553
944
|
] });
|
|
554
945
|
}
|
|
555
946
|
|
|
556
947
|
// src/components/Spinner.tsx
|
|
557
|
-
var
|
|
948
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
558
949
|
function Spinner({ size = "md", accent, className, ...props }) {
|
|
559
|
-
return /* @__PURE__ */ (0,
|
|
950
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
560
951
|
"span",
|
|
561
952
|
{
|
|
562
953
|
className: cx("uix-spinner", accent && "uix-spinner--accent", size === "lg" && "uix-spinner--lg", className),
|
|
@@ -568,9 +959,9 @@ function Spinner({ size = "md", accent, className, ...props }) {
|
|
|
568
959
|
}
|
|
569
960
|
|
|
570
961
|
// src/components/Toast.tsx
|
|
571
|
-
var
|
|
962
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
572
963
|
function Toast({ title, message, tone, icon, onClose, leaving, className, ...props }) {
|
|
573
|
-
return /* @__PURE__ */ (0,
|
|
964
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
574
965
|
"div",
|
|
575
966
|
{
|
|
576
967
|
className: cx("uix-toast", tone && `uix-toast--${tone}`, className),
|
|
@@ -579,24 +970,24 @@ function Toast({ title, message, tone, icon, onClose, leaving, className, ...pro
|
|
|
579
970
|
"aria-live": "polite",
|
|
580
971
|
...props,
|
|
581
972
|
children: [
|
|
582
|
-
icon && /* @__PURE__ */ (0,
|
|
583
|
-
/* @__PURE__ */ (0,
|
|
584
|
-
title && /* @__PURE__ */ (0,
|
|
585
|
-
message && /* @__PURE__ */ (0,
|
|
973
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "uix-toast__icon", children: icon }),
|
|
974
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "uix-toast__body", children: [
|
|
975
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "uix-toast__title", children: title }),
|
|
976
|
+
message && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "uix-toast__msg", children: message })
|
|
586
977
|
] }),
|
|
587
|
-
onClose && /* @__PURE__ */ (0,
|
|
978
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("button", { className: "uix-toast__close", onClick: onClose, "aria-label": "Dismiss", children: "\xD7" })
|
|
588
979
|
]
|
|
589
980
|
}
|
|
590
981
|
);
|
|
591
982
|
}
|
|
592
983
|
function Toaster({ children, className, ...props }) {
|
|
593
|
-
return /* @__PURE__ */ (0,
|
|
984
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: cx("uix-toaster", className), "aria-live": "polite", "aria-atomic": "false", ...props, children });
|
|
594
985
|
}
|
|
595
986
|
|
|
596
987
|
// src/components/Table.tsx
|
|
597
|
-
var
|
|
988
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
598
989
|
function TableWrap({ children, className, ...props }) {
|
|
599
|
-
return /* @__PURE__ */ (0,
|
|
990
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: cx("uix-table-wrap", className), ...props, children });
|
|
600
991
|
}
|
|
601
992
|
function Table({
|
|
602
993
|
density = "standard",
|
|
@@ -608,7 +999,7 @@ function Table({
|
|
|
608
999
|
children,
|
|
609
1000
|
...props
|
|
610
1001
|
}) {
|
|
611
|
-
return /* @__PURE__ */ (0,
|
|
1002
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
612
1003
|
"table",
|
|
613
1004
|
{
|
|
614
1005
|
className: cx("uix-table", !zebra && "uix-table--no-zebra", pinnedCol && "uix-table--pinned-col", className),
|
|
@@ -621,7 +1012,7 @@ function Table({
|
|
|
621
1012
|
);
|
|
622
1013
|
}
|
|
623
1014
|
function Th({ sortable, sortDirection, onSort, className, children, onClick, ...props }) {
|
|
624
|
-
return /* @__PURE__ */ (0,
|
|
1015
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
625
1016
|
"th",
|
|
626
1017
|
{
|
|
627
1018
|
className,
|
|
@@ -634,10 +1025,10 @@ function Th({ sortable, sortDirection, onSort, className, children, onClick, ...
|
|
|
634
1025
|
);
|
|
635
1026
|
}
|
|
636
1027
|
function Td({ pinned, className, children, ...props }) {
|
|
637
|
-
return /* @__PURE__ */ (0,
|
|
1028
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("td", { className, "data-pinned": pinned || void 0, ...props, children });
|
|
638
1029
|
}
|
|
639
1030
|
function Tr({ selected, pinned, className, children, ...props }) {
|
|
640
|
-
return /* @__PURE__ */ (0,
|
|
1031
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
641
1032
|
"tr",
|
|
642
1033
|
{
|
|
643
1034
|
className,
|
|
@@ -650,7 +1041,7 @@ function Tr({ selected, pinned, className, children, ...props }) {
|
|
|
650
1041
|
}
|
|
651
1042
|
|
|
652
1043
|
// src/components/Pagination.tsx
|
|
653
|
-
var
|
|
1044
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
654
1045
|
function getPageNumbers(page, total) {
|
|
655
1046
|
if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);
|
|
656
1047
|
const pages = [1];
|
|
@@ -664,8 +1055,8 @@ function getPageNumbers(page, total) {
|
|
|
664
1055
|
}
|
|
665
1056
|
function Pagination({ page, pageCount, onChange, className, ...props }) {
|
|
666
1057
|
const pages = getPageNumbers(page, pageCount);
|
|
667
|
-
return /* @__PURE__ */ (0,
|
|
668
|
-
/* @__PURE__ */ (0,
|
|
1058
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("nav", { "aria-label": "Pagination", className: cx("uix-pagination", className), ...props, children: [
|
|
1059
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
669
1060
|
"button",
|
|
670
1061
|
{
|
|
671
1062
|
className: "uix-pagination__btn",
|
|
@@ -676,7 +1067,7 @@ function Pagination({ page, pageCount, onChange, className, ...props }) {
|
|
|
676
1067
|
}
|
|
677
1068
|
),
|
|
678
1069
|
pages.map(
|
|
679
|
-
(p, i) => p === "ellipsis" ? /* @__PURE__ */ (0,
|
|
1070
|
+
(p, i) => p === "ellipsis" ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "uix-pagination__ellipsis", children: "\u2026" }, `e${i}`) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
680
1071
|
"button",
|
|
681
1072
|
{
|
|
682
1073
|
className: "uix-pagination__btn",
|
|
@@ -687,7 +1078,7 @@ function Pagination({ page, pageCount, onChange, className, ...props }) {
|
|
|
687
1078
|
p
|
|
688
1079
|
)
|
|
689
1080
|
),
|
|
690
|
-
/* @__PURE__ */ (0,
|
|
1081
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
691
1082
|
"button",
|
|
692
1083
|
{
|
|
693
1084
|
className: "uix-pagination__btn",
|
|
@@ -701,15 +1092,15 @@ function Pagination({ page, pageCount, onChange, className, ...props }) {
|
|
|
701
1092
|
}
|
|
702
1093
|
|
|
703
1094
|
// src/components/StatusPill.tsx
|
|
704
|
-
var
|
|
1095
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
705
1096
|
function StatusPill({ tone = "neutral", treatment = "filled", dot, children, className, ...props }) {
|
|
706
|
-
return /* @__PURE__ */ (0,
|
|
1097
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
707
1098
|
"span",
|
|
708
1099
|
{
|
|
709
1100
|
className: cx("uix-pill", `uix-pill--${tone}`, treatment === "outline" && "uix-pill--outline", className),
|
|
710
1101
|
...props,
|
|
711
1102
|
children: [
|
|
712
|
-
dot && /* @__PURE__ */ (0,
|
|
1103
|
+
dot && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "uix-pill__dot", "aria-hidden": "true" }),
|
|
713
1104
|
children
|
|
714
1105
|
]
|
|
715
1106
|
}
|
|
@@ -717,10 +1108,10 @@ function StatusPill({ tone = "neutral", treatment = "filled", dot, children, cla
|
|
|
717
1108
|
}
|
|
718
1109
|
|
|
719
1110
|
// src/components/Progress.tsx
|
|
720
|
-
var
|
|
1111
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
721
1112
|
function Progress({ value = 0, max = 100, indeterminate, className, ...props }) {
|
|
722
1113
|
const pct = Math.max(0, Math.min(100, value / (max || 100) * 100));
|
|
723
|
-
return /* @__PURE__ */ (0,
|
|
1114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
724
1115
|
"div",
|
|
725
1116
|
{
|
|
726
1117
|
role: "progressbar",
|
|
@@ -729,54 +1120,54 @@ function Progress({ value = 0, max = 100, indeterminate, className, ...props })
|
|
|
729
1120
|
"aria-valuenow": indeterminate ? void 0 : value,
|
|
730
1121
|
className: cx("uix-progress", indeterminate && "uix-progress--indeterminate", className),
|
|
731
1122
|
...props,
|
|
732
|
-
children: /* @__PURE__ */ (0,
|
|
1123
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "uix-progress__bar", style: indeterminate ? void 0 : { width: `${pct}%` } })
|
|
733
1124
|
}
|
|
734
1125
|
);
|
|
735
1126
|
}
|
|
736
1127
|
|
|
737
1128
|
// src/components/Stat.tsx
|
|
738
|
-
var
|
|
1129
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
739
1130
|
function Stat({ label, value, icon, meta, trend, className, ...props }) {
|
|
740
|
-
return /* @__PURE__ */ (0,
|
|
741
|
-
/* @__PURE__ */ (0,
|
|
742
|
-
/* @__PURE__ */ (0,
|
|
1131
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: cx("uix-stat", className), ...props, children: [
|
|
1132
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "uix-stat__label", children: [
|
|
1133
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: label }),
|
|
743
1134
|
icon
|
|
744
1135
|
] }),
|
|
745
|
-
/* @__PURE__ */ (0,
|
|
746
|
-
(meta != null || trend != null) && /* @__PURE__ */ (0,
|
|
747
|
-
trend != null && /* @__PURE__ */ (0,
|
|
1136
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "uix-stat__value", children: value }),
|
|
1137
|
+
(meta != null || trend != null) && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "uix-stat__meta", children: [
|
|
1138
|
+
trend != null && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: cx("uix-stat__trend", `uix-stat__trend--${trend.direction}`), children: trend.label }),
|
|
748
1139
|
meta
|
|
749
1140
|
] })
|
|
750
1141
|
] });
|
|
751
1142
|
}
|
|
752
1143
|
|
|
753
1144
|
// src/components/Tooltip.tsx
|
|
754
|
-
var
|
|
1145
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
755
1146
|
function Tooltip({ label, children, ...props }) {
|
|
756
|
-
return /* @__PURE__ */ (0,
|
|
1147
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { "data-uix-tip": label, ...props, children });
|
|
757
1148
|
}
|
|
758
1149
|
|
|
759
1150
|
// src/components/States.tsx
|
|
760
|
-
var
|
|
1151
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
761
1152
|
function EmptyState({ icon, title, children, action, className, ...props }) {
|
|
762
|
-
return /* @__PURE__ */ (0,
|
|
763
|
-
icon != null && /* @__PURE__ */ (0,
|
|
764
|
-
title != null && /* @__PURE__ */ (0,
|
|
1153
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cx("uix-empty", className), ...props, children: [
|
|
1154
|
+
icon != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "uix-empty__icon", children: icon }),
|
|
1155
|
+
title != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "uix-empty__title", children: title }),
|
|
765
1156
|
children,
|
|
766
1157
|
action
|
|
767
1158
|
] });
|
|
768
1159
|
}
|
|
769
1160
|
function ErrorState({ icon, title, detail, action, className, ...props }) {
|
|
770
|
-
return /* @__PURE__ */ (0,
|
|
771
|
-
icon != null && /* @__PURE__ */ (0,
|
|
772
|
-
title != null && /* @__PURE__ */ (0,
|
|
773
|
-
detail != null && /* @__PURE__ */ (0,
|
|
1161
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cx("uix-empty", "uix-empty--danger", className), role: "alert", ...props, children: [
|
|
1162
|
+
icon != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "uix-empty__icon uix-empty__icon--danger", children: icon }),
|
|
1163
|
+
title != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "uix-empty__title", children: title }),
|
|
1164
|
+
detail != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { children: detail }),
|
|
774
1165
|
action
|
|
775
1166
|
] });
|
|
776
1167
|
}
|
|
777
1168
|
function Skeleton({ variant = "block", width, height, className, style, ...props }) {
|
|
778
1169
|
const dims = { width, height, ...style };
|
|
779
|
-
return /* @__PURE__ */ (0,
|
|
1170
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
780
1171
|
"div",
|
|
781
1172
|
{
|
|
782
1173
|
className: cx(
|
|
@@ -791,52 +1182,52 @@ function Skeleton({ variant = "block", width, height, className, style, ...props
|
|
|
791
1182
|
);
|
|
792
1183
|
}
|
|
793
1184
|
function LoadingState({ rows = 3, className, ...props }) {
|
|
794
|
-
return /* @__PURE__ */ (0,
|
|
1185
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: cx("uix-stack", className), role: "status", "aria-busy": "true", ...props, children: Array.from({ length: rows }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Skeleton, { variant: "text", width: `${92 - i % 3 * 14}%` }, i)) });
|
|
795
1186
|
}
|
|
796
1187
|
|
|
797
1188
|
// src/components/Label.tsx
|
|
798
|
-
var
|
|
1189
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
799
1190
|
function Label({ color, dot, children, className, style, ...props }) {
|
|
800
1191
|
const merged = color ? { "--label-color": color, ...style } : style;
|
|
801
|
-
return /* @__PURE__ */ (0,
|
|
802
|
-
dot && /* @__PURE__ */ (0,
|
|
1192
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { className: cx("uix-label", className), style: merged, ...props, children: [
|
|
1193
|
+
dot && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "uix-label__dot", "aria-hidden": "true" }),
|
|
803
1194
|
children
|
|
804
1195
|
] });
|
|
805
1196
|
}
|
|
806
1197
|
|
|
807
1198
|
// src/components/Avatar.tsx
|
|
808
|
-
var
|
|
1199
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
809
1200
|
function Avatar({ size = "md", src, alt, children, status, className, ...props }) {
|
|
810
|
-
return /* @__PURE__ */ (0,
|
|
811
|
-
src ? /* @__PURE__ */ (0,
|
|
812
|
-
status && /* @__PURE__ */ (0,
|
|
1201
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: cx("uix-avatar", size !== "md" && `uix-avatar--${size}`, className), ...props, children: [
|
|
1202
|
+
src ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("img", { src, alt: alt ?? "" }) : children,
|
|
1203
|
+
status && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "uix-avatar__status" })
|
|
813
1204
|
] });
|
|
814
1205
|
}
|
|
815
1206
|
function AvatarGroup({ children, className, ...props }) {
|
|
816
|
-
return /* @__PURE__ */ (0,
|
|
1207
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: cx("uix-avatar-group", className), ...props, children });
|
|
817
1208
|
}
|
|
818
1209
|
function UserChip({ avatar, name, sub, className, children, ...props }) {
|
|
819
|
-
return /* @__PURE__ */ (0,
|
|
1210
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: cx("uix-user-chip", className), ...props, children: [
|
|
820
1211
|
avatar,
|
|
821
|
-
/* @__PURE__ */ (0,
|
|
822
|
-
name != null && /* @__PURE__ */ (0,
|
|
823
|
-
sub != null && /* @__PURE__ */ (0,
|
|
1212
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { children: [
|
|
1213
|
+
name != null && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "uix-user-chip__name", children: name }),
|
|
1214
|
+
sub != null && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "uix-user-chip__sub", style: { display: "block" }, children: sub })
|
|
824
1215
|
] }),
|
|
825
1216
|
children
|
|
826
1217
|
] });
|
|
827
1218
|
}
|
|
828
1219
|
|
|
829
1220
|
// src/components/Comments.tsx
|
|
830
|
-
var
|
|
1221
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
831
1222
|
function Comments({ children, className, ...props }) {
|
|
832
|
-
return /* @__PURE__ */ (0,
|
|
1223
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: cx("uix-comments", className), ...props, children });
|
|
833
1224
|
}
|
|
834
1225
|
function Comment({ avatar, author, meta, children, className, ...props }) {
|
|
835
|
-
return /* @__PURE__ */ (0,
|
|
836
|
-
avatar ?? /* @__PURE__ */ (0,
|
|
837
|
-
/* @__PURE__ */ (0,
|
|
838
|
-
(author != null || meta != null) && /* @__PURE__ */ (0,
|
|
839
|
-
author != null && /* @__PURE__ */ (0,
|
|
1226
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: cx("uix-comment", className), ...props, children: [
|
|
1227
|
+
avatar ?? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { "aria-hidden": "true" }),
|
|
1228
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "uix-comment__body", children: [
|
|
1229
|
+
(author != null || meta != null) && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "uix-comment__meta", children: [
|
|
1230
|
+
author != null && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "uix-comment__author", children: author }),
|
|
840
1231
|
author != null && meta != null ? " \xB7 " : null,
|
|
841
1232
|
meta
|
|
842
1233
|
] }),
|
|
@@ -846,95 +1237,95 @@ function Comment({ avatar, author, meta, children, className, ...props }) {
|
|
|
846
1237
|
}
|
|
847
1238
|
|
|
848
1239
|
// src/components/Timeline.tsx
|
|
849
|
-
var
|
|
1240
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
850
1241
|
function Timeline({ children, className, ...props }) {
|
|
851
|
-
return /* @__PURE__ */ (0,
|
|
1242
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: cx("uix-timeline", className), ...props, children });
|
|
852
1243
|
}
|
|
853
1244
|
function TimelineItem({ meta, children, className, ...props }) {
|
|
854
|
-
return /* @__PURE__ */ (0,
|
|
855
|
-
/* @__PURE__ */ (0,
|
|
856
|
-
/* @__PURE__ */ (0,
|
|
857
|
-
/* @__PURE__ */ (0,
|
|
1245
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: cx("uix-timeline__item", className), ...props, children: [
|
|
1246
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "uix-timeline__rail", children: [
|
|
1247
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "uix-timeline__node" }),
|
|
1248
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "uix-timeline__line" })
|
|
858
1249
|
] }),
|
|
859
|
-
/* @__PURE__ */ (0,
|
|
860
|
-
meta != null && /* @__PURE__ */ (0,
|
|
1250
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "uix-timeline__body", children: [
|
|
1251
|
+
meta != null && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "uix-timeline__meta", children: meta }),
|
|
861
1252
|
children
|
|
862
1253
|
] })
|
|
863
1254
|
] });
|
|
864
1255
|
}
|
|
865
1256
|
|
|
866
1257
|
// src/components/Prose.tsx
|
|
867
|
-
var
|
|
1258
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
868
1259
|
function Prose({ children, className, ...props }) {
|
|
869
|
-
return /* @__PURE__ */ (0,
|
|
1260
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: cx("uix-prose", className), ...props, children });
|
|
870
1261
|
}
|
|
871
1262
|
function Note({ tone, icon, children, className, ...props }) {
|
|
872
|
-
return /* @__PURE__ */ (0,
|
|
873
|
-
icon != null && /* @__PURE__ */ (0,
|
|
874
|
-
/* @__PURE__ */ (0,
|
|
1263
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: cx("uix-note", tone && `uix-note--${tone}`, className), ...props, children: [
|
|
1264
|
+
icon != null && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "uix-note__icon", children: icon }),
|
|
1265
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "uix-note__body", children })
|
|
875
1266
|
] });
|
|
876
1267
|
}
|
|
877
1268
|
|
|
878
1269
|
// src/components/Popover.tsx
|
|
879
|
-
var
|
|
1270
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
880
1271
|
function Popover({ popover = "auto", children, className, ...props }) {
|
|
881
1272
|
const popoverAttr = { popover };
|
|
882
|
-
return /* @__PURE__ */ (0,
|
|
1273
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: cx("uix-popover", className), ...popoverAttr, ...props, children });
|
|
883
1274
|
}
|
|
884
1275
|
|
|
885
1276
|
// src/components/CommandPalette.tsx
|
|
886
|
-
var
|
|
1277
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
887
1278
|
function CommandPalette({ inputProps, children, className, ...props }) {
|
|
888
|
-
return /* @__PURE__ */ (0,
|
|
889
|
-
/* @__PURE__ */ (0,
|
|
890
|
-
/* @__PURE__ */ (0,
|
|
1279
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: cx("uix-cmdk", className), ...props, children: [
|
|
1280
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("input", { className: "uix-cmdk__input", ...inputProps }),
|
|
1281
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "uix-cmdk__list", children })
|
|
891
1282
|
] });
|
|
892
1283
|
}
|
|
893
1284
|
function CommandGroup({ label, children }) {
|
|
894
|
-
return /* @__PURE__ */ (0,
|
|
895
|
-
label != null && /* @__PURE__ */ (0,
|
|
1285
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
1286
|
+
label != null && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "uix-cmdk__group", children: label }),
|
|
896
1287
|
children
|
|
897
1288
|
] });
|
|
898
1289
|
}
|
|
899
1290
|
function CommandItem({ icon, shortcut, active, children, className, ...props }) {
|
|
900
|
-
return /* @__PURE__ */ (0,
|
|
1291
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: cx("uix-cmdk__item", className), "data-active": active || void 0, ...props, children: [
|
|
901
1292
|
icon,
|
|
902
|
-
/* @__PURE__ */ (0,
|
|
1293
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children }),
|
|
903
1294
|
shortcut
|
|
904
1295
|
] });
|
|
905
1296
|
}
|
|
906
1297
|
|
|
907
1298
|
// src/components/Kanban.tsx
|
|
908
|
-
var
|
|
1299
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
909
1300
|
function Kanban({ children, className, ...props }) {
|
|
910
|
-
return /* @__PURE__ */ (0,
|
|
1301
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: cx("uix-kanban", className), ...props, children });
|
|
911
1302
|
}
|
|
912
1303
|
function KanbanColumn({ title, count, children, className, ...props }) {
|
|
913
|
-
return /* @__PURE__ */ (0,
|
|
914
|
-
(title != null || count != null) && /* @__PURE__ */ (0,
|
|
1304
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: cx("uix-kanban__col", className), ...props, children: [
|
|
1305
|
+
(title != null || count != null) && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "uix-kanban__head", children: [
|
|
915
1306
|
title,
|
|
916
|
-
count != null && /* @__PURE__ */ (0,
|
|
1307
|
+
count != null && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "uix-kanban__count", children: count })
|
|
917
1308
|
] }),
|
|
918
|
-
/* @__PURE__ */ (0,
|
|
1309
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "uix-kanban__body", children })
|
|
919
1310
|
] });
|
|
920
1311
|
}
|
|
921
1312
|
function KanbanCard({ title, meta, children, className, ...props }) {
|
|
922
|
-
return /* @__PURE__ */ (0,
|
|
923
|
-
title && /* @__PURE__ */ (0,
|
|
924
|
-
meta && /* @__PURE__ */ (0,
|
|
1313
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: cx("uix-kanban__card", className), ...props, children: [
|
|
1314
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "uix-kanban__card-title", children: title }),
|
|
1315
|
+
meta && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "uix-kanban__card-meta", children: meta }),
|
|
925
1316
|
children
|
|
926
1317
|
] });
|
|
927
1318
|
}
|
|
928
1319
|
|
|
929
1320
|
// src/components/Tree.tsx
|
|
930
|
-
var
|
|
931
|
-
var
|
|
932
|
-
var ChevronIcon2 = () => /* @__PURE__ */ (0,
|
|
1321
|
+
var import_react13 = require("react");
|
|
1322
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
1323
|
+
var ChevronIcon2 = () => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("svg", { viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("path", { d: "M2 4l4 4 4-4" }) });
|
|
933
1324
|
function TreeNode({ node, expanded, selected, onToggle, onSelect, level = 0 }) {
|
|
934
1325
|
const hasChildren = Array.isArray(node.children) && node.children.length > 0;
|
|
935
1326
|
const isExpanded = expanded.has(node.id);
|
|
936
|
-
return /* @__PURE__ */ (0,
|
|
937
|
-
/* @__PURE__ */ (0,
|
|
1327
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("li", { children: [
|
|
1328
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
|
|
938
1329
|
"button",
|
|
939
1330
|
{
|
|
940
1331
|
className: "uix-tree__row",
|
|
@@ -945,13 +1336,13 @@ function TreeNode({ node, expanded, selected, onToggle, onSelect, level = 0 }) {
|
|
|
945
1336
|
onSelect?.(node.id);
|
|
946
1337
|
},
|
|
947
1338
|
children: [
|
|
948
|
-
/* @__PURE__ */ (0,
|
|
949
|
-
node.icon && /* @__PURE__ */ (0,
|
|
1339
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "uix-tree__toggle", children: hasChildren && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronIcon2, {}) }),
|
|
1340
|
+
node.icon && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { "aria-hidden": "true", children: node.icon }),
|
|
950
1341
|
node.label
|
|
951
1342
|
]
|
|
952
1343
|
}
|
|
953
1344
|
),
|
|
954
|
-
hasChildren && isExpanded && /* @__PURE__ */ (0,
|
|
1345
|
+
hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("ul", { children: node.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
955
1346
|
TreeNode,
|
|
956
1347
|
{
|
|
957
1348
|
node: child,
|
|
@@ -966,7 +1357,7 @@ function TreeNode({ node, expanded, selected, onToggle, onSelect, level = 0 }) {
|
|
|
966
1357
|
] });
|
|
967
1358
|
}
|
|
968
1359
|
function Tree({ nodes, expanded: controlledExpanded, defaultExpanded, selected, onToggle, onSelect, className, ...props }) {
|
|
969
|
-
const [internalExpanded, setInternalExpanded] = (0,
|
|
1360
|
+
const [internalExpanded, setInternalExpanded] = (0, import_react13.useState)(defaultExpanded ?? /* @__PURE__ */ new Set());
|
|
970
1361
|
const expanded = controlledExpanded ?? internalExpanded;
|
|
971
1362
|
function handleToggle(id) {
|
|
972
1363
|
if (!controlledExpanded) {
|
|
@@ -979,7 +1370,7 @@ function Tree({ nodes, expanded: controlledExpanded, defaultExpanded, selected,
|
|
|
979
1370
|
}
|
|
980
1371
|
onToggle?.(id);
|
|
981
1372
|
}
|
|
982
|
-
return /* @__PURE__ */ (0,
|
|
1373
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("ul", { className: cx("uix-tree", className), role: "tree", ...props, children: nodes.map((node) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
983
1374
|
TreeNode,
|
|
984
1375
|
{
|
|
985
1376
|
node,
|
|
@@ -1023,6 +1414,7 @@ function Tree({ nodes, expanded: controlledExpanded, defaultExpanded, selected,
|
|
|
1023
1414
|
ListItem,
|
|
1024
1415
|
LoadingState,
|
|
1025
1416
|
Modal,
|
|
1417
|
+
NavFavourites,
|
|
1026
1418
|
NavGroup,
|
|
1027
1419
|
NavItem,
|
|
1028
1420
|
Note,
|
|
@@ -1039,6 +1431,7 @@ function Tree({ nodes, expanded: controlledExpanded, defaultExpanded, selected,
|
|
|
1039
1431
|
SidebarSection,
|
|
1040
1432
|
Skeleton,
|
|
1041
1433
|
Spinner,
|
|
1434
|
+
StarButton,
|
|
1042
1435
|
Stat,
|
|
1043
1436
|
StatusPill,
|
|
1044
1437
|
SubNavItem,
|