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