@sovereignfs/ui 0.41.0 → 0.45.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/Accordion.module.css +3 -0
- package/dist/Alert.module.css +62 -0
- package/dist/AspectRatio.module.css +15 -0
- package/dist/Badge.module.css +75 -9
- package/dist/Breadcrumb.module.css +49 -0
- package/dist/Button.module.css +12 -3
- package/dist/ButtonGroup.module.css +29 -0
- package/dist/Card.module.css +6 -0
- package/dist/Checkbox.module.css +3 -1
- package/dist/Collapsible.module.css +70 -0
- package/dist/Combobox.module.css +122 -0
- package/dist/Command.module.css +80 -0
- package/dist/ConfirmDialog.module.css +5 -1
- package/dist/DataTable.module.css +28 -0
- package/dist/DatePicker.module.css +6 -2
- package/dist/Dialog.module.css +3 -0
- package/dist/HoverCard.module.css +3 -0
- package/dist/Input.module.css +6 -1
- package/dist/Item.module.css +70 -0
- package/dist/Kbd.module.css +14 -0
- package/dist/Label.module.css +11 -0
- package/dist/Marker.module.css +33 -0
- package/dist/Menu.module.css +8 -1
- package/dist/Message.module.css +99 -0
- package/dist/MessageScroller.module.css +54 -0
- package/dist/NavigationMenu.module.css +53 -0
- package/dist/Pagination.module.css +98 -0
- package/dist/Progress.module.css +20 -0
- package/dist/RadioGroup.module.css +88 -0
- package/dist/Resizable.module.css +70 -0
- package/dist/ScrollArea.module.css +20 -0
- package/dist/Select.module.css +7 -3
- package/dist/Slider.module.css +95 -0
- package/dist/Table.module.css +45 -0
- package/dist/Tabs.module.css +6 -1
- package/dist/Toggle.module.css +6 -1
- package/dist/Typography.module.css +47 -0
- package/dist/index.d.ts +617 -5
- package/dist/index.js +1847 -499
- package/dist/tokens/primitives.css +22 -8
- package/package.json +1 -1
- package/src/components/Accordion/Accordion.module.css +3 -0
- package/src/components/Accordion/Accordion.stories.tsx +110 -0
- package/src/components/Accordion/Accordion.tsx +53 -0
- package/src/components/Accordion/__tests__/Accordion.test.tsx +61 -0
- package/src/components/Alert/Alert.module.css +62 -0
- package/src/components/Alert/Alert.stories.tsx +96 -0
- package/src/components/Alert/Alert.tsx +58 -0
- package/src/components/Alert/__tests__/Alert.test.tsx +75 -0
- package/src/components/AspectRatio/AspectRatio.module.css +15 -0
- package/src/components/AspectRatio/AspectRatio.stories.tsx +78 -0
- package/src/components/AspectRatio/AspectRatio.tsx +21 -0
- package/src/components/AspectRatio/__tests__/AspectRatio.test.tsx +27 -0
- package/src/components/Badge/Badge.module.css +75 -9
- package/src/components/Badge/Badge.stories.tsx +109 -1
- package/src/components/Badge/Badge.tsx +30 -2
- package/src/components/Badge/__tests__/Badge.test.tsx +26 -2
- package/src/components/Breadcrumb/Breadcrumb.module.css +49 -0
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +47 -0
- package/src/components/Breadcrumb/Breadcrumb.tsx +57 -0
- package/src/components/Breadcrumb/__tests__/Breadcrumb.test.tsx +52 -0
- package/src/components/Button/Button.module.css +12 -3
- package/src/components/Button/Button.stories.tsx +3 -2
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/Button/__tests__/Button.test.tsx +10 -0
- package/src/components/ButtonGroup/ButtonGroup.module.css +29 -0
- package/src/components/ButtonGroup/ButtonGroup.stories.tsx +57 -0
- package/src/components/ButtonGroup/ButtonGroup.tsx +27 -0
- package/src/components/ButtonGroup/__tests__/ButtonGroup.test.tsx +29 -0
- package/src/components/Card/Card.module.css +6 -0
- package/src/components/Checkbox/Checkbox.module.css +3 -1
- package/src/components/Collapsible/Collapsible.module.css +70 -0
- package/src/components/Collapsible/Collapsible.stories.tsx +62 -0
- package/src/components/Collapsible/Collapsible.tsx +66 -0
- package/src/components/Collapsible/__tests__/Collapsible.test.tsx +71 -0
- package/src/components/Combobox/Combobox.module.css +122 -0
- package/src/components/Combobox/Combobox.stories.tsx +79 -0
- package/src/components/Combobox/Combobox.tsx +186 -0
- package/src/components/Combobox/__tests__/Combobox.test.tsx +158 -0
- package/src/components/Command/Command.module.css +80 -0
- package/src/components/Command/Command.stories.tsx +104 -0
- package/src/components/Command/Command.tsx +168 -0
- package/src/components/Command/__tests__/Command.test.tsx +162 -0
- package/src/components/ConfirmDialog/ConfirmDialog.module.css +5 -1
- package/src/components/ContextMenu/ContextMenu.stories.tsx +81 -0
- package/src/components/ContextMenu/ContextMenu.tsx +100 -0
- package/src/components/ContextMenu/__tests__/ContextMenu.test.tsx +87 -0
- package/src/components/DataTable/DataTable.module.css +28 -0
- package/src/components/DataTable/DataTable.stories.tsx +74 -0
- package/src/components/DataTable/DataTable.tsx +154 -0
- package/src/components/DataTable/__tests__/DataTable.test.tsx +123 -0
- package/src/components/DatePicker/DatePicker.module.css +6 -2
- package/src/components/Dialog/Dialog.module.css +3 -0
- package/src/components/HoverCard/HoverCard.module.css +3 -0
- package/src/components/HoverCard/HoverCard.stories.tsx +66 -0
- package/src/components/HoverCard/HoverCard.tsx +111 -0
- package/src/components/HoverCard/__tests__/HoverCard.test.tsx +99 -0
- package/src/components/Icon/icons/circle-check.tsx +21 -0
- package/src/components/Icon/icons/circle-x.tsx +22 -0
- package/src/components/Icon/icons/index.ts +8 -0
- package/src/components/Input/Input.module.css +6 -1
- package/src/components/Item/Item.module.css +70 -0
- package/src/components/Item/Item.stories.tsx +62 -0
- package/src/components/Item/Item.tsx +54 -0
- package/src/components/Item/__tests__/Item.test.tsx +39 -0
- package/src/components/Kbd/Kbd.module.css +14 -0
- package/src/components/Kbd/Kbd.stories.tsx +32 -0
- package/src/components/Kbd/Kbd.tsx +12 -0
- package/src/components/Kbd/__tests__/Kbd.test.tsx +14 -0
- package/src/components/Label/Label.module.css +11 -0
- package/src/components/Label/Label.stories.tsx +40 -0
- package/src/components/Label/Label.tsx +24 -0
- package/src/components/Label/__tests__/Label.test.tsx +32 -0
- package/src/components/Marker/Marker.module.css +33 -0
- package/src/components/Marker/Marker.stories.tsx +39 -0
- package/src/components/Marker/Marker.tsx +34 -0
- package/src/components/Marker/__tests__/Marker.test.tsx +23 -0
- package/src/components/Menu/Menu.module.css +8 -1
- package/src/components/Menu/Menu.tsx +30 -8
- package/src/components/Menubar/Menubar.stories.tsx +52 -0
- package/src/components/Menubar/Menubar.tsx +42 -0
- package/src/components/Menubar/__tests__/Menubar.test.tsx +45 -0
- package/src/components/Message/Message.module.css +99 -0
- package/src/components/Message/Message.stories.tsx +79 -0
- package/src/components/Message/Message.tsx +41 -0
- package/src/components/Message/__tests__/Message.test.tsx +46 -0
- package/src/components/MessageScroller/MessageScroller.module.css +54 -0
- package/src/components/MessageScroller/MessageScroller.stories.tsx +84 -0
- package/src/components/MessageScroller/MessageScroller.tsx +72 -0
- package/src/components/MessageScroller/__tests__/MessageScroller.test.tsx +105 -0
- package/src/components/NavigationMenu/NavigationMenu.module.css +53 -0
- package/src/components/NavigationMenu/NavigationMenu.stories.tsx +58 -0
- package/src/components/NavigationMenu/NavigationMenu.tsx +125 -0
- package/src/components/NavigationMenu/__tests__/NavigationMenu.test.tsx +93 -0
- package/src/components/Pagination/Pagination.module.css +98 -0
- package/src/components/Pagination/Pagination.stories.tsx +49 -0
- package/src/components/Pagination/Pagination.tsx +87 -0
- package/src/components/Pagination/__tests__/Pagination.test.tsx +56 -0
- package/src/components/Progress/Progress.module.css +20 -0
- package/src/components/Progress/Progress.stories.tsx +40 -0
- package/src/components/Progress/Progress.tsx +35 -0
- package/src/components/Progress/__tests__/Progress.test.tsx +31 -0
- package/src/components/RadioGroup/RadioGroup.module.css +88 -0
- package/src/components/RadioGroup/RadioGroup.stories.tsx +69 -0
- package/src/components/RadioGroup/RadioGroup.tsx +99 -0
- package/src/components/RadioGroup/__tests__/RadioGroup.test.tsx +59 -0
- package/src/components/Resizable/Resizable.module.css +70 -0
- package/src/components/Resizable/Resizable.stories.tsx +82 -0
- package/src/components/Resizable/Resizable.tsx +313 -0
- package/src/components/Resizable/__tests__/Resizable.test.tsx +128 -0
- package/src/components/ScrollArea/ScrollArea.module.css +20 -0
- package/src/components/ScrollArea/ScrollArea.stories.tsx +57 -0
- package/src/components/ScrollArea/ScrollArea.tsx +27 -0
- package/src/components/ScrollArea/__tests__/ScrollArea.test.tsx +39 -0
- package/src/components/Select/Select.module.css +7 -3
- package/src/components/Slider/Slider.module.css +95 -0
- package/src/components/Slider/Slider.stories.tsx +64 -0
- package/src/components/Slider/Slider.tsx +77 -0
- package/src/components/Slider/__tests__/Slider.test.tsx +45 -0
- package/src/components/Table/Table.module.css +45 -0
- package/src/components/Table/Table.stories.tsx +125 -0
- package/src/components/Table/Table.tsx +51 -0
- package/src/components/Table/__tests__/Table.test.tsx +50 -0
- package/src/components/Tabs/Tabs.module.css +6 -1
- package/src/components/Toggle/Toggle.module.css +6 -1
- package/src/components/Typography/Typography.module.css +47 -0
- package/src/components/Typography/Typography.stories.tsx +62 -0
- package/src/components/Typography/Typography.tsx +30 -0
- package/src/components/Typography/__tests__/Typography.test.tsx +34 -0
- package/src/index.ts +78 -1
- package/src/stories/DesignSystemOverview.stories.tsx +614 -2
- package/src/stories/MobilePatterns.stories.tsx +8 -2
- package/src/stories/TokenGallery.stories.tsx +112 -16
- package/src/tokens/primitives.css +22 -8
package/dist/index.js
CHANGED
|
@@ -19,14 +19,32 @@ var STATUS_CHIP_CLASS = {
|
|
|
19
19
|
pending: styles.chipAmber,
|
|
20
20
|
neutral: styles.chipNeutral
|
|
21
21
|
};
|
|
22
|
-
function Badge({
|
|
22
|
+
function Badge({
|
|
23
|
+
variant = "role",
|
|
24
|
+
size = "md",
|
|
25
|
+
status = "neutral",
|
|
26
|
+
uppercase = true,
|
|
27
|
+
children
|
|
28
|
+
}) {
|
|
23
29
|
const isStatus = variant === "status";
|
|
24
30
|
const dotClass = isStatus ? STATUS_DOT_CLASS[status] : void 0;
|
|
25
31
|
const chipClass = isStatus ? STATUS_CHIP_CLASS[status] : void 0;
|
|
26
|
-
return /* @__PURE__ */ jsxs(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
return /* @__PURE__ */ jsxs(
|
|
33
|
+
"span",
|
|
34
|
+
{
|
|
35
|
+
className: [
|
|
36
|
+
styles.badge,
|
|
37
|
+
styles[variant],
|
|
38
|
+
styles[size],
|
|
39
|
+
chipClass,
|
|
40
|
+
uppercase && styles.uppercase
|
|
41
|
+
].filter(Boolean).join(" "),
|
|
42
|
+
children: [
|
|
43
|
+
isStatus && /* @__PURE__ */ jsx("span", { className: [styles.dot, dotClass].join(" "), "aria-hidden": true }),
|
|
44
|
+
children
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
);
|
|
30
48
|
}
|
|
31
49
|
|
|
32
50
|
// src/components/Icon/icons/house.tsx
|
|
@@ -591,9 +609,9 @@ function AlertTriangleIcon(props) {
|
|
|
591
609
|
);
|
|
592
610
|
}
|
|
593
611
|
|
|
594
|
-
// src/components/Icon/icons/
|
|
612
|
+
// src/components/Icon/icons/circle-check.tsx
|
|
595
613
|
import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
596
|
-
function
|
|
614
|
+
function CircleCheckIcon(props) {
|
|
597
615
|
return /* @__PURE__ */ jsxs21(
|
|
598
616
|
"svg",
|
|
599
617
|
{
|
|
@@ -606,18 +624,16 @@ function CalendarIcon(props) {
|
|
|
606
624
|
strokeLinejoin: "round",
|
|
607
625
|
...props,
|
|
608
626
|
children: [
|
|
609
|
-
/* @__PURE__ */ jsx28("
|
|
610
|
-
/* @__PURE__ */ jsx28("path", { d: "
|
|
611
|
-
/* @__PURE__ */ jsx28("rect", { width: "18", height: "18", x: "3", y: "4", rx: "2" }),
|
|
612
|
-
/* @__PURE__ */ jsx28("path", { d: "M3 10h18" })
|
|
627
|
+
/* @__PURE__ */ jsx28("circle", { cx: "12", cy: "12", r: "10" }),
|
|
628
|
+
/* @__PURE__ */ jsx28("path", { d: "m9 12 2 2 4-4" })
|
|
613
629
|
]
|
|
614
630
|
}
|
|
615
631
|
);
|
|
616
632
|
}
|
|
617
633
|
|
|
618
|
-
// src/components/Icon/icons/
|
|
634
|
+
// src/components/Icon/icons/circle-x.tsx
|
|
619
635
|
import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
620
|
-
function
|
|
636
|
+
function CircleXIcon(props) {
|
|
621
637
|
return /* @__PURE__ */ jsxs22(
|
|
622
638
|
"svg",
|
|
623
639
|
{
|
|
@@ -630,23 +646,17 @@ function SlidersHorizontalIcon(props) {
|
|
|
630
646
|
strokeLinejoin: "round",
|
|
631
647
|
...props,
|
|
632
648
|
children: [
|
|
633
|
-
/* @__PURE__ */ jsx29("
|
|
634
|
-
/* @__PURE__ */ jsx29("path", { d: "
|
|
635
|
-
/* @__PURE__ */ jsx29("path", { d: "
|
|
636
|
-
/* @__PURE__ */ jsx29("path", { d: "M16 17v4" }),
|
|
637
|
-
/* @__PURE__ */ jsx29("path", { d: "M21 12h-9" }),
|
|
638
|
-
/* @__PURE__ */ jsx29("path", { d: "M21 19h-5" }),
|
|
639
|
-
/* @__PURE__ */ jsx29("path", { d: "M21 5h-7" }),
|
|
640
|
-
/* @__PURE__ */ jsx29("path", { d: "M8 10v4" }),
|
|
641
|
-
/* @__PURE__ */ jsx29("path", { d: "M8 12H3" })
|
|
649
|
+
/* @__PURE__ */ jsx29("circle", { cx: "12", cy: "12", r: "10" }),
|
|
650
|
+
/* @__PURE__ */ jsx29("path", { d: "m15 9-6 6" }),
|
|
651
|
+
/* @__PURE__ */ jsx29("path", { d: "m9 9 6 6" })
|
|
642
652
|
]
|
|
643
653
|
}
|
|
644
654
|
);
|
|
645
655
|
}
|
|
646
656
|
|
|
647
|
-
// src/components/Icon/icons/
|
|
657
|
+
// src/components/Icon/icons/calendar.tsx
|
|
648
658
|
import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
649
|
-
function
|
|
659
|
+
function CalendarIcon(props) {
|
|
650
660
|
return /* @__PURE__ */ jsxs23(
|
|
651
661
|
"svg",
|
|
652
662
|
{
|
|
@@ -659,17 +669,18 @@ function EllipsisVerticalIcon(props) {
|
|
|
659
669
|
strokeLinejoin: "round",
|
|
660
670
|
...props,
|
|
661
671
|
children: [
|
|
662
|
-
/* @__PURE__ */ jsx30("
|
|
663
|
-
/* @__PURE__ */ jsx30("
|
|
664
|
-
/* @__PURE__ */ jsx30("
|
|
672
|
+
/* @__PURE__ */ jsx30("path", { d: "M8 2v4" }),
|
|
673
|
+
/* @__PURE__ */ jsx30("path", { d: "M16 2v4" }),
|
|
674
|
+
/* @__PURE__ */ jsx30("rect", { width: "18", height: "18", x: "3", y: "4", rx: "2" }),
|
|
675
|
+
/* @__PURE__ */ jsx30("path", { d: "M3 10h18" })
|
|
665
676
|
]
|
|
666
677
|
}
|
|
667
678
|
);
|
|
668
679
|
}
|
|
669
680
|
|
|
670
|
-
// src/components/Icon/icons/
|
|
681
|
+
// src/components/Icon/icons/sliders-horizontal.tsx
|
|
671
682
|
import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
672
|
-
function
|
|
683
|
+
function SlidersHorizontalIcon(props) {
|
|
673
684
|
return /* @__PURE__ */ jsxs24(
|
|
674
685
|
"svg",
|
|
675
686
|
{
|
|
@@ -682,16 +693,23 @@ function FileIcon(props) {
|
|
|
682
693
|
strokeLinejoin: "round",
|
|
683
694
|
...props,
|
|
684
695
|
children: [
|
|
685
|
-
/* @__PURE__ */ jsx31("path", { d: "
|
|
686
|
-
/* @__PURE__ */ jsx31("path", { d: "
|
|
696
|
+
/* @__PURE__ */ jsx31("path", { d: "M10 5H3" }),
|
|
697
|
+
/* @__PURE__ */ jsx31("path", { d: "M12 19H3" }),
|
|
698
|
+
/* @__PURE__ */ jsx31("path", { d: "M14 3v4" }),
|
|
699
|
+
/* @__PURE__ */ jsx31("path", { d: "M16 17v4" }),
|
|
700
|
+
/* @__PURE__ */ jsx31("path", { d: "M21 12h-9" }),
|
|
701
|
+
/* @__PURE__ */ jsx31("path", { d: "M21 19h-5" }),
|
|
702
|
+
/* @__PURE__ */ jsx31("path", { d: "M21 5h-7" }),
|
|
703
|
+
/* @__PURE__ */ jsx31("path", { d: "M8 10v4" }),
|
|
704
|
+
/* @__PURE__ */ jsx31("path", { d: "M8 12H3" })
|
|
687
705
|
]
|
|
688
706
|
}
|
|
689
707
|
);
|
|
690
708
|
}
|
|
691
709
|
|
|
692
|
-
// src/components/Icon/icons/
|
|
710
|
+
// src/components/Icon/icons/ellipsis-vertical.tsx
|
|
693
711
|
import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
694
|
-
function
|
|
712
|
+
function EllipsisVerticalIcon(props) {
|
|
695
713
|
return /* @__PURE__ */ jsxs25(
|
|
696
714
|
"svg",
|
|
697
715
|
{
|
|
@@ -704,17 +722,17 @@ function UploadIcon(props) {
|
|
|
704
722
|
strokeLinejoin: "round",
|
|
705
723
|
...props,
|
|
706
724
|
children: [
|
|
707
|
-
/* @__PURE__ */ jsx32("
|
|
708
|
-
/* @__PURE__ */ jsx32("
|
|
709
|
-
/* @__PURE__ */ jsx32("
|
|
725
|
+
/* @__PURE__ */ jsx32("circle", { cx: "12", cy: "12", r: "1" }),
|
|
726
|
+
/* @__PURE__ */ jsx32("circle", { cx: "12", cy: "5", r: "1" }),
|
|
727
|
+
/* @__PURE__ */ jsx32("circle", { cx: "12", cy: "19", r: "1" })
|
|
710
728
|
]
|
|
711
729
|
}
|
|
712
730
|
);
|
|
713
731
|
}
|
|
714
732
|
|
|
715
|
-
// src/components/Icon/icons/
|
|
733
|
+
// src/components/Icon/icons/file.tsx
|
|
716
734
|
import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
717
|
-
function
|
|
735
|
+
function FileIcon(props) {
|
|
718
736
|
return /* @__PURE__ */ jsxs26(
|
|
719
737
|
"svg",
|
|
720
738
|
{
|
|
@@ -727,17 +745,16 @@ function ExternalLinkIcon(props) {
|
|
|
727
745
|
strokeLinejoin: "round",
|
|
728
746
|
...props,
|
|
729
747
|
children: [
|
|
730
|
-
/* @__PURE__ */ jsx33("path", { d: "
|
|
731
|
-
/* @__PURE__ */ jsx33("path", { d: "
|
|
732
|
-
/* @__PURE__ */ jsx33("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" })
|
|
748
|
+
/* @__PURE__ */ jsx33("path", { d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" }),
|
|
749
|
+
/* @__PURE__ */ jsx33("path", { d: "M14 2v5a1 1 0 0 0 1 1h5" })
|
|
733
750
|
]
|
|
734
751
|
}
|
|
735
752
|
);
|
|
736
753
|
}
|
|
737
754
|
|
|
738
|
-
// src/components/Icon/icons/
|
|
755
|
+
// src/components/Icon/icons/upload.tsx
|
|
739
756
|
import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
740
|
-
function
|
|
757
|
+
function UploadIcon(props) {
|
|
741
758
|
return /* @__PURE__ */ jsxs27(
|
|
742
759
|
"svg",
|
|
743
760
|
{
|
|
@@ -750,16 +767,17 @@ function BananaIcon(props) {
|
|
|
750
767
|
strokeLinejoin: "round",
|
|
751
768
|
...props,
|
|
752
769
|
children: [
|
|
753
|
-
/* @__PURE__ */ jsx34("path", { d: "
|
|
754
|
-
/* @__PURE__ */ jsx34("path", { d: "
|
|
770
|
+
/* @__PURE__ */ jsx34("path", { d: "M12 3v12" }),
|
|
771
|
+
/* @__PURE__ */ jsx34("path", { d: "m17 8-5-5-5 5" }),
|
|
772
|
+
/* @__PURE__ */ jsx34("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" })
|
|
755
773
|
]
|
|
756
774
|
}
|
|
757
775
|
);
|
|
758
776
|
}
|
|
759
777
|
|
|
760
|
-
// src/components/Icon/icons/
|
|
778
|
+
// src/components/Icon/icons/external-link.tsx
|
|
761
779
|
import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
762
|
-
function
|
|
780
|
+
function ExternalLinkIcon(props) {
|
|
763
781
|
return /* @__PURE__ */ jsxs28(
|
|
764
782
|
"svg",
|
|
765
783
|
{
|
|
@@ -772,16 +790,17 @@ function AppleIcon(props) {
|
|
|
772
790
|
strokeLinejoin: "round",
|
|
773
791
|
...props,
|
|
774
792
|
children: [
|
|
775
|
-
/* @__PURE__ */ jsx35("path", { d: "
|
|
776
|
-
/* @__PURE__ */ jsx35("path", { d: "
|
|
793
|
+
/* @__PURE__ */ jsx35("path", { d: "M15 3h6v6" }),
|
|
794
|
+
/* @__PURE__ */ jsx35("path", { d: "M10 14 21 3" }),
|
|
795
|
+
/* @__PURE__ */ jsx35("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" })
|
|
777
796
|
]
|
|
778
797
|
}
|
|
779
798
|
);
|
|
780
799
|
}
|
|
781
800
|
|
|
782
|
-
// src/components/Icon/icons/
|
|
801
|
+
// src/components/Icon/icons/banana.tsx
|
|
783
802
|
import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
784
|
-
function
|
|
803
|
+
function BananaIcon(props) {
|
|
785
804
|
return /* @__PURE__ */ jsxs29(
|
|
786
805
|
"svg",
|
|
787
806
|
{
|
|
@@ -794,18 +813,62 @@ function CarrotIcon(props) {
|
|
|
794
813
|
strokeLinejoin: "round",
|
|
795
814
|
...props,
|
|
796
815
|
children: [
|
|
797
|
-
/* @__PURE__ */ jsx36("path", { d: "
|
|
798
|
-
/* @__PURE__ */ jsx36("path", { d: "
|
|
799
|
-
|
|
816
|
+
/* @__PURE__ */ jsx36("path", { d: "M4 13c3.5-2 8-2 10 2a5.5 5.5 0 0 1 8 5" }),
|
|
817
|
+
/* @__PURE__ */ jsx36("path", { d: "M5.15 17.89c5.52-1.52 8.65-6.89 7-12C11.55 4 11.5 2 13 2c3.22 0 5 5.5 5 8 0 6.5-4.2 12-10.49 12C5.11 22 2 22 2 20c0-1.5 1.14-1.55 3.15-2.11Z" })
|
|
818
|
+
]
|
|
819
|
+
}
|
|
820
|
+
);
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
// src/components/Icon/icons/apple.tsx
|
|
824
|
+
import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
825
|
+
function AppleIcon(props) {
|
|
826
|
+
return /* @__PURE__ */ jsxs30(
|
|
827
|
+
"svg",
|
|
828
|
+
{
|
|
829
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
830
|
+
viewBox: "0 0 24 24",
|
|
831
|
+
fill: "none",
|
|
832
|
+
stroke: "currentColor",
|
|
833
|
+
strokeWidth: "2",
|
|
834
|
+
strokeLinecap: "round",
|
|
835
|
+
strokeLinejoin: "round",
|
|
836
|
+
...props,
|
|
837
|
+
children: [
|
|
838
|
+
/* @__PURE__ */ jsx37("path", { d: "M12 6.528V3a1 1 0 0 1 1-1h0" }),
|
|
839
|
+
/* @__PURE__ */ jsx37("path", { d: "M18.237 21A15 15 0 0 0 22 11a6 6 0 0 0-10-4.472A6 6 0 0 0 2 11a15.1 15.1 0 0 0 3.763 10 3 3 0 0 0 3.648.648 5.5 5.5 0 0 1 5.178 0A3 3 0 0 0 18.237 21" })
|
|
840
|
+
]
|
|
841
|
+
}
|
|
842
|
+
);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
// src/components/Icon/icons/carrot.tsx
|
|
846
|
+
import { jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
847
|
+
function CarrotIcon(props) {
|
|
848
|
+
return /* @__PURE__ */ jsxs31(
|
|
849
|
+
"svg",
|
|
850
|
+
{
|
|
851
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
852
|
+
viewBox: "0 0 24 24",
|
|
853
|
+
fill: "none",
|
|
854
|
+
stroke: "currentColor",
|
|
855
|
+
strokeWidth: "2",
|
|
856
|
+
strokeLinecap: "round",
|
|
857
|
+
strokeLinejoin: "round",
|
|
858
|
+
...props,
|
|
859
|
+
children: [
|
|
860
|
+
/* @__PURE__ */ jsx38("path", { d: "M2.27 21.7s9.87-3.5 12.73-6.36a4.5 4.5 0 0 0-6.36-6.37C5.77 11.84 2.27 21.7 2.27 21.7zM8.64 14l-2.05-2.04M15.34 15l-2.46-2.46" }),
|
|
861
|
+
/* @__PURE__ */ jsx38("path", { d: "M22 9s-1.33-2-3.5-2C16.86 7 15 9 15 9s1.33 2 3.5 2S22 9 22 9z" }),
|
|
862
|
+
/* @__PURE__ */ jsx38("path", { d: "M15 2s-2 1.33-2 3.5S15 9 15 9s2-1.84 2-3.5C17 3.33 15 2 15 2z" })
|
|
800
863
|
]
|
|
801
864
|
}
|
|
802
865
|
);
|
|
803
866
|
}
|
|
804
867
|
|
|
805
868
|
// src/components/Icon/icons/egg.tsx
|
|
806
|
-
import { jsx as
|
|
869
|
+
import { jsx as jsx39 } from "react/jsx-runtime";
|
|
807
870
|
function EggIcon(props) {
|
|
808
|
-
return /* @__PURE__ */
|
|
871
|
+
return /* @__PURE__ */ jsx39(
|
|
809
872
|
"svg",
|
|
810
873
|
{
|
|
811
874
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -816,15 +879,15 @@ function EggIcon(props) {
|
|
|
816
879
|
strokeLinecap: "round",
|
|
817
880
|
strokeLinejoin: "round",
|
|
818
881
|
...props,
|
|
819
|
-
children: /* @__PURE__ */
|
|
882
|
+
children: /* @__PURE__ */ jsx39("path", { d: "M12 2C8 2 4 8 4 14a8 8 0 0 0 16 0c0-6-4-12-8-12" })
|
|
820
883
|
}
|
|
821
884
|
);
|
|
822
885
|
}
|
|
823
886
|
|
|
824
887
|
// src/components/Icon/icons/beef.tsx
|
|
825
|
-
import { jsx as
|
|
888
|
+
import { jsx as jsx40, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
826
889
|
function BeefIcon(props) {
|
|
827
|
-
return /* @__PURE__ */
|
|
890
|
+
return /* @__PURE__ */ jsxs32(
|
|
828
891
|
"svg",
|
|
829
892
|
{
|
|
830
893
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -836,18 +899,18 @@ function BeefIcon(props) {
|
|
|
836
899
|
strokeLinejoin: "round",
|
|
837
900
|
...props,
|
|
838
901
|
children: [
|
|
839
|
-
/* @__PURE__ */
|
|
840
|
-
/* @__PURE__ */
|
|
841
|
-
/* @__PURE__ */
|
|
902
|
+
/* @__PURE__ */ jsx40("path", { d: "M16.4 13.7A6.5 6.5 0 1 0 6.28 6.6c-1.1 3.13-.78 3.9-3.18 6.08A3 3 0 0 0 5 18c4 0 8.4-1.8 11.4-4.3" }),
|
|
903
|
+
/* @__PURE__ */ jsx40("path", { d: "m18.5 6 2.19 4.5a6.48 6.48 0 0 1-2.29 7.2C15.4 20.2 11 22 7 22a3 3 0 0 1-2.68-1.66L2.4 16.5" }),
|
|
904
|
+
/* @__PURE__ */ jsx40("circle", { cx: "12.5", cy: "8.5", r: "2.5" })
|
|
842
905
|
]
|
|
843
906
|
}
|
|
844
907
|
);
|
|
845
908
|
}
|
|
846
909
|
|
|
847
910
|
// src/components/Icon/icons/fish.tsx
|
|
848
|
-
import { jsx as
|
|
911
|
+
import { jsx as jsx41, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
849
912
|
function FishIcon(props) {
|
|
850
|
-
return /* @__PURE__ */
|
|
913
|
+
return /* @__PURE__ */ jsxs33(
|
|
851
914
|
"svg",
|
|
852
915
|
{
|
|
853
916
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -859,21 +922,21 @@ function FishIcon(props) {
|
|
|
859
922
|
strokeLinejoin: "round",
|
|
860
923
|
...props,
|
|
861
924
|
children: [
|
|
862
|
-
/* @__PURE__ */
|
|
863
|
-
/* @__PURE__ */
|
|
864
|
-
/* @__PURE__ */
|
|
865
|
-
/* @__PURE__ */
|
|
866
|
-
/* @__PURE__ */
|
|
867
|
-
/* @__PURE__ */
|
|
925
|
+
/* @__PURE__ */ jsx41("path", { d: "M6.5 12c.94-3.46 4.94-6 8.5-6 3.56 0 6.06 2.54 7 6-.94 3.47-3.44 6-7 6s-7.56-2.53-8.5-6Z" }),
|
|
926
|
+
/* @__PURE__ */ jsx41("path", { d: "M18 12v.5" }),
|
|
927
|
+
/* @__PURE__ */ jsx41("path", { d: "M16 17.93a9.77 9.77 0 0 1 0-11.86" }),
|
|
928
|
+
/* @__PURE__ */ jsx41("path", { d: "M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33" }),
|
|
929
|
+
/* @__PURE__ */ jsx41("path", { d: "M10.46 7.26C10.2 5.88 9.17 4.24 8 3h5.8a2 2 0 0 1 1.98 1.67l.23 1.4" }),
|
|
930
|
+
/* @__PURE__ */ jsx41("path", { d: "m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98" })
|
|
868
931
|
]
|
|
869
932
|
}
|
|
870
933
|
);
|
|
871
934
|
}
|
|
872
935
|
|
|
873
936
|
// src/components/Icon/icons/coffee.tsx
|
|
874
|
-
import { jsx as
|
|
937
|
+
import { jsx as jsx42, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
875
938
|
function CoffeeIcon(props) {
|
|
876
|
-
return /* @__PURE__ */
|
|
939
|
+
return /* @__PURE__ */ jsxs34(
|
|
877
940
|
"svg",
|
|
878
941
|
{
|
|
879
942
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -885,19 +948,19 @@ function CoffeeIcon(props) {
|
|
|
885
948
|
strokeLinejoin: "round",
|
|
886
949
|
...props,
|
|
887
950
|
children: [
|
|
888
|
-
/* @__PURE__ */
|
|
889
|
-
/* @__PURE__ */
|
|
890
|
-
/* @__PURE__ */
|
|
891
|
-
/* @__PURE__ */
|
|
951
|
+
/* @__PURE__ */ jsx42("path", { d: "M10 2v2" }),
|
|
952
|
+
/* @__PURE__ */ jsx42("path", { d: "M14 2v2" }),
|
|
953
|
+
/* @__PURE__ */ jsx42("path", { d: "M16 8a1 1 0 0 1 1 1v8a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1h14a4 4 0 1 1 0 8h-1" }),
|
|
954
|
+
/* @__PURE__ */ jsx42("path", { d: "M6 2v2" })
|
|
892
955
|
]
|
|
893
956
|
}
|
|
894
957
|
);
|
|
895
958
|
}
|
|
896
959
|
|
|
897
960
|
// src/components/Icon/icons/wine.tsx
|
|
898
|
-
import { jsx as
|
|
961
|
+
import { jsx as jsx43, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
899
962
|
function WineIcon(props) {
|
|
900
|
-
return /* @__PURE__ */
|
|
963
|
+
return /* @__PURE__ */ jsxs35(
|
|
901
964
|
"svg",
|
|
902
965
|
{
|
|
903
966
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -909,19 +972,19 @@ function WineIcon(props) {
|
|
|
909
972
|
strokeLinejoin: "round",
|
|
910
973
|
...props,
|
|
911
974
|
children: [
|
|
912
|
-
/* @__PURE__ */
|
|
913
|
-
/* @__PURE__ */
|
|
914
|
-
/* @__PURE__ */
|
|
915
|
-
/* @__PURE__ */
|
|
975
|
+
/* @__PURE__ */ jsx43("path", { d: "M8 22h8" }),
|
|
976
|
+
/* @__PURE__ */ jsx43("path", { d: "M7 10h10" }),
|
|
977
|
+
/* @__PURE__ */ jsx43("path", { d: "M12 15v7" }),
|
|
978
|
+
/* @__PURE__ */ jsx43("path", { d: "M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z" })
|
|
916
979
|
]
|
|
917
980
|
}
|
|
918
981
|
);
|
|
919
982
|
}
|
|
920
983
|
|
|
921
984
|
// src/components/Icon/icons/beer.tsx
|
|
922
|
-
import { jsx as
|
|
985
|
+
import { jsx as jsx44, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
923
986
|
function BeerIcon(props) {
|
|
924
|
-
return /* @__PURE__ */
|
|
987
|
+
return /* @__PURE__ */ jsxs36(
|
|
925
988
|
"svg",
|
|
926
989
|
{
|
|
927
990
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -933,20 +996,20 @@ function BeerIcon(props) {
|
|
|
933
996
|
strokeLinejoin: "round",
|
|
934
997
|
...props,
|
|
935
998
|
children: [
|
|
936
|
-
/* @__PURE__ */
|
|
937
|
-
/* @__PURE__ */
|
|
938
|
-
/* @__PURE__ */
|
|
939
|
-
/* @__PURE__ */
|
|
940
|
-
/* @__PURE__ */
|
|
999
|
+
/* @__PURE__ */ jsx44("path", { d: "M17 11h1a3 3 0 0 1 0 6h-1" }),
|
|
1000
|
+
/* @__PURE__ */ jsx44("path", { d: "M9 12v6" }),
|
|
1001
|
+
/* @__PURE__ */ jsx44("path", { d: "M13 12v6" }),
|
|
1002
|
+
/* @__PURE__ */ jsx44("path", { d: "M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z" }),
|
|
1003
|
+
/* @__PURE__ */ jsx44("path", { d: "M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8" })
|
|
941
1004
|
]
|
|
942
1005
|
}
|
|
943
1006
|
);
|
|
944
1007
|
}
|
|
945
1008
|
|
|
946
1009
|
// src/components/Icon/icons/cookie.tsx
|
|
947
|
-
import { jsx as
|
|
1010
|
+
import { jsx as jsx45, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
948
1011
|
function CookieIcon(props) {
|
|
949
|
-
return /* @__PURE__ */
|
|
1012
|
+
return /* @__PURE__ */ jsxs37(
|
|
950
1013
|
"svg",
|
|
951
1014
|
{
|
|
952
1015
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -958,21 +1021,21 @@ function CookieIcon(props) {
|
|
|
958
1021
|
strokeLinejoin: "round",
|
|
959
1022
|
...props,
|
|
960
1023
|
children: [
|
|
961
|
-
/* @__PURE__ */
|
|
962
|
-
/* @__PURE__ */
|
|
963
|
-
/* @__PURE__ */
|
|
964
|
-
/* @__PURE__ */
|
|
965
|
-
/* @__PURE__ */
|
|
966
|
-
/* @__PURE__ */
|
|
1024
|
+
/* @__PURE__ */ jsx45("path", { d: "M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5" }),
|
|
1025
|
+
/* @__PURE__ */ jsx45("path", { d: "M8.5 8.5v.01" }),
|
|
1026
|
+
/* @__PURE__ */ jsx45("path", { d: "M16 15.5v.01" }),
|
|
1027
|
+
/* @__PURE__ */ jsx45("path", { d: "M12 12v.01" }),
|
|
1028
|
+
/* @__PURE__ */ jsx45("path", { d: "M11 17v.01" }),
|
|
1029
|
+
/* @__PURE__ */ jsx45("path", { d: "M7 14v.01" })
|
|
967
1030
|
]
|
|
968
1031
|
}
|
|
969
1032
|
);
|
|
970
1033
|
}
|
|
971
1034
|
|
|
972
1035
|
// src/components/Icon/icons/pizza.tsx
|
|
973
|
-
import { jsx as
|
|
1036
|
+
import { jsx as jsx46, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
974
1037
|
function PizzaIcon(props) {
|
|
975
|
-
return /* @__PURE__ */
|
|
1038
|
+
return /* @__PURE__ */ jsxs38(
|
|
976
1039
|
"svg",
|
|
977
1040
|
{
|
|
978
1041
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -984,20 +1047,20 @@ function PizzaIcon(props) {
|
|
|
984
1047
|
strokeLinejoin: "round",
|
|
985
1048
|
...props,
|
|
986
1049
|
children: [
|
|
987
|
-
/* @__PURE__ */
|
|
988
|
-
/* @__PURE__ */
|
|
989
|
-
/* @__PURE__ */
|
|
990
|
-
/* @__PURE__ */
|
|
991
|
-
/* @__PURE__ */
|
|
1050
|
+
/* @__PURE__ */ jsx46("path", { d: "m12 14-1 1" }),
|
|
1051
|
+
/* @__PURE__ */ jsx46("path", { d: "m13.75 18.25-1.25 1.42" }),
|
|
1052
|
+
/* @__PURE__ */ jsx46("path", { d: "M17.775 5.654a15.68 15.68 0 0 0-12.121 12.12" }),
|
|
1053
|
+
/* @__PURE__ */ jsx46("path", { d: "M18.8 9.3a1 1 0 0 0 2.1 7.7" }),
|
|
1054
|
+
/* @__PURE__ */ jsx46("path", { d: "M21.964 20.732a1 1 0 0 1-1.232 1.232l-18-5a1 1 0 0 1-.695-1.232A19.68 19.68 0 0 1 15.732 2.037a1 1 0 0 1 1.232.695z" })
|
|
992
1055
|
]
|
|
993
1056
|
}
|
|
994
1057
|
);
|
|
995
1058
|
}
|
|
996
1059
|
|
|
997
1060
|
// src/components/Icon/icons/candy.tsx
|
|
998
|
-
import { jsx as
|
|
1061
|
+
import { jsx as jsx47, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
999
1062
|
function CandyIcon(props) {
|
|
1000
|
-
return /* @__PURE__ */
|
|
1063
|
+
return /* @__PURE__ */ jsxs39(
|
|
1001
1064
|
"svg",
|
|
1002
1065
|
{
|
|
1003
1066
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1009,20 +1072,20 @@ function CandyIcon(props) {
|
|
|
1009
1072
|
strokeLinejoin: "round",
|
|
1010
1073
|
...props,
|
|
1011
1074
|
children: [
|
|
1012
|
-
/* @__PURE__ */
|
|
1013
|
-
/* @__PURE__ */
|
|
1014
|
-
/* @__PURE__ */
|
|
1015
|
-
/* @__PURE__ */
|
|
1016
|
-
/* @__PURE__ */
|
|
1075
|
+
/* @__PURE__ */ jsx47("path", { d: "M10 7v10.9" }),
|
|
1076
|
+
/* @__PURE__ */ jsx47("path", { d: "M14 6.1V17" }),
|
|
1077
|
+
/* @__PURE__ */ jsx47("path", { d: "M16 7V3a1 1 0 0 1 1.707-.707 2.5 2.5 0 0 0 2.152.717 1 1 0 0 1 1.131 1.131 2.5 2.5 0 0 0 .717 2.152A1 1 0 0 1 21 8h-4" }),
|
|
1078
|
+
/* @__PURE__ */ jsx47("path", { d: "M16.536 7.465a5 5 0 0 0-7.072 0l-2 2a5 5 0 0 0 0 7.07 5 5 0 0 0 7.072 0l2-2a5 5 0 0 0 0-7.07" }),
|
|
1079
|
+
/* @__PURE__ */ jsx47("path", { d: "M8 17v4a1 1 0 0 1-1.707.707 2.5 2.5 0 0 0-2.152-.717 1 1 0 0 1-1.131-1.131 2.5 2.5 0 0 0-.717-2.152A1 1 0 0 1 3 16h4" })
|
|
1017
1080
|
]
|
|
1018
1081
|
}
|
|
1019
1082
|
);
|
|
1020
1083
|
}
|
|
1021
1084
|
|
|
1022
1085
|
// src/components/Icon/icons/salad.tsx
|
|
1023
|
-
import { jsx as
|
|
1086
|
+
import { jsx as jsx48, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
1024
1087
|
function SaladIcon(props) {
|
|
1025
|
-
return /* @__PURE__ */
|
|
1088
|
+
return /* @__PURE__ */ jsxs40(
|
|
1026
1089
|
"svg",
|
|
1027
1090
|
{
|
|
1028
1091
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1034,20 +1097,20 @@ function SaladIcon(props) {
|
|
|
1034
1097
|
strokeLinejoin: "round",
|
|
1035
1098
|
...props,
|
|
1036
1099
|
children: [
|
|
1037
|
-
/* @__PURE__ */
|
|
1038
|
-
/* @__PURE__ */
|
|
1039
|
-
/* @__PURE__ */
|
|
1040
|
-
/* @__PURE__ */
|
|
1041
|
-
/* @__PURE__ */
|
|
1100
|
+
/* @__PURE__ */ jsx48("path", { d: "M7 21h10" }),
|
|
1101
|
+
/* @__PURE__ */ jsx48("path", { d: "M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z" }),
|
|
1102
|
+
/* @__PURE__ */ jsx48("path", { d: "M11.38 12a2.4 2.4 0 0 1-.4-4.77 2.4 2.4 0 0 1 3.2-2.77 2.4 2.4 0 0 1 3.47-.63 2.4 2.4 0 0 1 3.37 3.37 2.4 2.4 0 0 1-1.1 3.7 2.51 2.51 0 0 1 .03 1.1" }),
|
|
1103
|
+
/* @__PURE__ */ jsx48("path", { d: "m13 12 4-4" }),
|
|
1104
|
+
/* @__PURE__ */ jsx48("path", { d: "M10.9 7.25A3.99 3.99 0 0 0 4 10c0 .73.2 1.41.54 2" })
|
|
1042
1105
|
]
|
|
1043
1106
|
}
|
|
1044
1107
|
);
|
|
1045
1108
|
}
|
|
1046
1109
|
|
|
1047
1110
|
// src/components/Icon/icons/milk.tsx
|
|
1048
|
-
import { jsx as
|
|
1111
|
+
import { jsx as jsx49, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
1049
1112
|
function MilkIcon(props) {
|
|
1050
|
-
return /* @__PURE__ */
|
|
1113
|
+
return /* @__PURE__ */ jsxs41(
|
|
1051
1114
|
"svg",
|
|
1052
1115
|
{
|
|
1053
1116
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1059,18 +1122,18 @@ function MilkIcon(props) {
|
|
|
1059
1122
|
strokeLinejoin: "round",
|
|
1060
1123
|
...props,
|
|
1061
1124
|
children: [
|
|
1062
|
-
/* @__PURE__ */
|
|
1063
|
-
/* @__PURE__ */
|
|
1064
|
-
/* @__PURE__ */
|
|
1125
|
+
/* @__PURE__ */ jsx49("path", { d: "M8 2h8" }),
|
|
1126
|
+
/* @__PURE__ */ jsx49("path", { d: "M9 2v2.789a4 4 0 0 1-.672 2.219l-.656.984A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-9.789a4 4 0 0 0-.672-2.219l-.656-.984A4 4 0 0 1 15 4.788V2" }),
|
|
1127
|
+
/* @__PURE__ */ jsx49("path", { d: "M7 15a6.472 6.472 0 0 1 5 0 6.47 6.47 0 0 0 5 0" })
|
|
1065
1128
|
]
|
|
1066
1129
|
}
|
|
1067
1130
|
);
|
|
1068
1131
|
}
|
|
1069
1132
|
|
|
1070
1133
|
// src/components/Icon/icons/drumstick.tsx
|
|
1071
|
-
import { jsx as
|
|
1134
|
+
import { jsx as jsx50, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
1072
1135
|
function DrumstickIcon(props) {
|
|
1073
|
-
return /* @__PURE__ */
|
|
1136
|
+
return /* @__PURE__ */ jsxs42(
|
|
1074
1137
|
"svg",
|
|
1075
1138
|
{
|
|
1076
1139
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1082,17 +1145,17 @@ function DrumstickIcon(props) {
|
|
|
1082
1145
|
strokeLinejoin: "round",
|
|
1083
1146
|
...props,
|
|
1084
1147
|
children: [
|
|
1085
|
-
/* @__PURE__ */
|
|
1086
|
-
/* @__PURE__ */
|
|
1148
|
+
/* @__PURE__ */ jsx50("path", { d: "M15.4 15.63a7.875 6 135 1 1 6.23-6.23 4.5 3.43 135 0 0-6.23 6.23" }),
|
|
1149
|
+
/* @__PURE__ */ jsx50("path", { d: "m8.29 12.71-2.6 2.6a2.5 2.5 0 1 0-1.65 4.65A2.5 2.5 0 1 0 8.7 18.3l2.59-2.59" })
|
|
1087
1150
|
]
|
|
1088
1151
|
}
|
|
1089
1152
|
);
|
|
1090
1153
|
}
|
|
1091
1154
|
|
|
1092
1155
|
// src/components/Icon/icons/croissant.tsx
|
|
1093
|
-
import { jsx as
|
|
1156
|
+
import { jsx as jsx51, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
1094
1157
|
function CroissantIcon(props) {
|
|
1095
|
-
return /* @__PURE__ */
|
|
1158
|
+
return /* @__PURE__ */ jsxs43(
|
|
1096
1159
|
"svg",
|
|
1097
1160
|
{
|
|
1098
1161
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1104,20 +1167,20 @@ function CroissantIcon(props) {
|
|
|
1104
1167
|
strokeLinejoin: "round",
|
|
1105
1168
|
...props,
|
|
1106
1169
|
children: [
|
|
1107
|
-
/* @__PURE__ */
|
|
1108
|
-
/* @__PURE__ */
|
|
1109
|
-
/* @__PURE__ */
|
|
1110
|
-
/* @__PURE__ */
|
|
1111
|
-
/* @__PURE__ */
|
|
1170
|
+
/* @__PURE__ */ jsx51("path", { d: "M10.2 18H4.774a1.5 1.5 0 0 1-1.352-.97 11 11 0 0 1 .132-6.487" }),
|
|
1171
|
+
/* @__PURE__ */ jsx51("path", { d: "M18 10.2V4.774a1.5 1.5 0 0 0-.97-1.352 11 11 0 0 0-6.486.132" }),
|
|
1172
|
+
/* @__PURE__ */ jsx51("path", { d: "M18 5a4 3 0 0 1 4 3 2 2 0 0 1-2 2 10 10 0 0 0-5.139 1.42" }),
|
|
1173
|
+
/* @__PURE__ */ jsx51("path", { d: "M5 18a3 4 0 0 0 3 4 2 2 0 0 0 2-2 10 10 0 0 1 1.42-5.14" }),
|
|
1174
|
+
/* @__PURE__ */ jsx51("path", { d: "M8.709 2.554a10 10 0 0 0-6.155 6.155 1.5 1.5 0 0 0 .676 1.626l9.807 5.42a2 2 0 0 0 2.718-2.718l-5.42-9.807a1.5 1.5 0 0 0-1.626-.676" })
|
|
1112
1175
|
]
|
|
1113
1176
|
}
|
|
1114
1177
|
);
|
|
1115
1178
|
}
|
|
1116
1179
|
|
|
1117
1180
|
// src/components/Icon/icons/cup-soda.tsx
|
|
1118
|
-
import { jsx as
|
|
1181
|
+
import { jsx as jsx52, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
1119
1182
|
function CupSodaIcon(props) {
|
|
1120
|
-
return /* @__PURE__ */
|
|
1183
|
+
return /* @__PURE__ */ jsxs44(
|
|
1121
1184
|
"svg",
|
|
1122
1185
|
{
|
|
1123
1186
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1129,19 +1192,19 @@ function CupSodaIcon(props) {
|
|
|
1129
1192
|
strokeLinejoin: "round",
|
|
1130
1193
|
...props,
|
|
1131
1194
|
children: [
|
|
1132
|
-
/* @__PURE__ */
|
|
1133
|
-
/* @__PURE__ */
|
|
1134
|
-
/* @__PURE__ */
|
|
1135
|
-
/* @__PURE__ */
|
|
1195
|
+
/* @__PURE__ */ jsx52("path", { d: "m6 8 1.75 12.28a2 2 0 0 0 2 1.72h4.54a2 2 0 0 0 2-1.72L18 8" }),
|
|
1196
|
+
/* @__PURE__ */ jsx52("path", { d: "M5 8h14" }),
|
|
1197
|
+
/* @__PURE__ */ jsx52("path", { d: "M7 15a6.47 6.47 0 0 1 5 0 6.47 6.47 0 0 0 5 0" }),
|
|
1198
|
+
/* @__PURE__ */ jsx52("path", { d: "m12 8 1-6h2" })
|
|
1136
1199
|
]
|
|
1137
1200
|
}
|
|
1138
1201
|
);
|
|
1139
1202
|
}
|
|
1140
1203
|
|
|
1141
1204
|
// src/components/Icon/icons/spray-can.tsx
|
|
1142
|
-
import { jsx as
|
|
1205
|
+
import { jsx as jsx53, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
1143
1206
|
function SprayCanIcon(props) {
|
|
1144
|
-
return /* @__PURE__ */
|
|
1207
|
+
return /* @__PURE__ */ jsxs45(
|
|
1145
1208
|
"svg",
|
|
1146
1209
|
{
|
|
1147
1210
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1153,25 +1216,25 @@ function SprayCanIcon(props) {
|
|
|
1153
1216
|
strokeLinejoin: "round",
|
|
1154
1217
|
...props,
|
|
1155
1218
|
children: [
|
|
1156
|
-
/* @__PURE__ */
|
|
1157
|
-
/* @__PURE__ */
|
|
1158
|
-
/* @__PURE__ */
|
|
1159
|
-
/* @__PURE__ */
|
|
1160
|
-
/* @__PURE__ */
|
|
1161
|
-
/* @__PURE__ */
|
|
1162
|
-
/* @__PURE__ */
|
|
1163
|
-
/* @__PURE__ */
|
|
1164
|
-
/* @__PURE__ */
|
|
1165
|
-
/* @__PURE__ */
|
|
1219
|
+
/* @__PURE__ */ jsx53("path", { d: "M3 3h.01" }),
|
|
1220
|
+
/* @__PURE__ */ jsx53("path", { d: "M7 5h.01" }),
|
|
1221
|
+
/* @__PURE__ */ jsx53("path", { d: "M11 7h.01" }),
|
|
1222
|
+
/* @__PURE__ */ jsx53("path", { d: "M3 7h.01" }),
|
|
1223
|
+
/* @__PURE__ */ jsx53("path", { d: "M7 9h.01" }),
|
|
1224
|
+
/* @__PURE__ */ jsx53("path", { d: "M3 11h.01" }),
|
|
1225
|
+
/* @__PURE__ */ jsx53("rect", { width: "4", height: "4", x: "15", y: "5" }),
|
|
1226
|
+
/* @__PURE__ */ jsx53("path", { d: "m19 9 2 2v10c0 .6-.4 1-1 1h-6c-.6 0-1-.4-1-1V11l2-2" }),
|
|
1227
|
+
/* @__PURE__ */ jsx53("path", { d: "m13 14 8-2" }),
|
|
1228
|
+
/* @__PURE__ */ jsx53("path", { d: "m13 19 8-2" })
|
|
1166
1229
|
]
|
|
1167
1230
|
}
|
|
1168
1231
|
);
|
|
1169
1232
|
}
|
|
1170
1233
|
|
|
1171
1234
|
// src/components/Icon/icons/snowflake.tsx
|
|
1172
|
-
import { jsx as
|
|
1235
|
+
import { jsx as jsx54, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
1173
1236
|
function SnowflakeIcon(props) {
|
|
1174
|
-
return /* @__PURE__ */
|
|
1237
|
+
return /* @__PURE__ */ jsxs46(
|
|
1175
1238
|
"svg",
|
|
1176
1239
|
{
|
|
1177
1240
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1183,27 +1246,27 @@ function SnowflakeIcon(props) {
|
|
|
1183
1246
|
strokeLinejoin: "round",
|
|
1184
1247
|
...props,
|
|
1185
1248
|
children: [
|
|
1186
|
-
/* @__PURE__ */
|
|
1187
|
-
/* @__PURE__ */
|
|
1188
|
-
/* @__PURE__ */
|
|
1189
|
-
/* @__PURE__ */
|
|
1190
|
-
/* @__PURE__ */
|
|
1191
|
-
/* @__PURE__ */
|
|
1192
|
-
/* @__PURE__ */
|
|
1193
|
-
/* @__PURE__ */
|
|
1194
|
-
/* @__PURE__ */
|
|
1195
|
-
/* @__PURE__ */
|
|
1196
|
-
/* @__PURE__ */
|
|
1197
|
-
/* @__PURE__ */
|
|
1249
|
+
/* @__PURE__ */ jsx54("path", { d: "m10 20-1.25-2.5L6 18" }),
|
|
1250
|
+
/* @__PURE__ */ jsx54("path", { d: "M10 4 8.75 6.5 6 6" }),
|
|
1251
|
+
/* @__PURE__ */ jsx54("path", { d: "m14 20 1.25-2.5L18 18" }),
|
|
1252
|
+
/* @__PURE__ */ jsx54("path", { d: "m14 4 1.25 2.5L18 6" }),
|
|
1253
|
+
/* @__PURE__ */ jsx54("path", { d: "m17 21-3-6h-4" }),
|
|
1254
|
+
/* @__PURE__ */ jsx54("path", { d: "m17 3-3 6 1.5 3" }),
|
|
1255
|
+
/* @__PURE__ */ jsx54("path", { d: "M2 12h6.5L10 9" }),
|
|
1256
|
+
/* @__PURE__ */ jsx54("path", { d: "m20 10-1.5 2 1.5 2" }),
|
|
1257
|
+
/* @__PURE__ */ jsx54("path", { d: "M22 12h-6.5L14 15" }),
|
|
1258
|
+
/* @__PURE__ */ jsx54("path", { d: "m4 10 1.5 2L4 14" }),
|
|
1259
|
+
/* @__PURE__ */ jsx54("path", { d: "m7 21 3-6-1.5-3" }),
|
|
1260
|
+
/* @__PURE__ */ jsx54("path", { d: "m7 3 3 6h4" })
|
|
1198
1261
|
]
|
|
1199
1262
|
}
|
|
1200
1263
|
);
|
|
1201
1264
|
}
|
|
1202
1265
|
|
|
1203
1266
|
// src/components/Icon/icons/shopping-basket.tsx
|
|
1204
|
-
import { jsx as
|
|
1267
|
+
import { jsx as jsx55, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
1205
1268
|
function ShoppingBasketIcon(props) {
|
|
1206
|
-
return /* @__PURE__ */
|
|
1269
|
+
return /* @__PURE__ */ jsxs47(
|
|
1207
1270
|
"svg",
|
|
1208
1271
|
{
|
|
1209
1272
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1215,13 +1278,13 @@ function ShoppingBasketIcon(props) {
|
|
|
1215
1278
|
strokeLinejoin: "round",
|
|
1216
1279
|
...props,
|
|
1217
1280
|
children: [
|
|
1218
|
-
/* @__PURE__ */
|
|
1219
|
-
/* @__PURE__ */
|
|
1220
|
-
/* @__PURE__ */
|
|
1221
|
-
/* @__PURE__ */
|
|
1222
|
-
/* @__PURE__ */
|
|
1223
|
-
/* @__PURE__ */
|
|
1224
|
-
/* @__PURE__ */
|
|
1281
|
+
/* @__PURE__ */ jsx55("path", { d: "m15 11-1 9" }),
|
|
1282
|
+
/* @__PURE__ */ jsx55("path", { d: "m19 11-4-7" }),
|
|
1283
|
+
/* @__PURE__ */ jsx55("path", { d: "M2 11h20" }),
|
|
1284
|
+
/* @__PURE__ */ jsx55("path", { d: "m3.5 11 1.6 7.4a2 2 0 0 0 2 1.6h9.8a2 2 0 0 0 2-1.6l1.7-7.4" }),
|
|
1285
|
+
/* @__PURE__ */ jsx55("path", { d: "M4.5 15.5h15" }),
|
|
1286
|
+
/* @__PURE__ */ jsx55("path", { d: "m5 11 4-7" }),
|
|
1287
|
+
/* @__PURE__ */ jsx55("path", { d: "m9 11 1 9" })
|
|
1225
1288
|
]
|
|
1226
1289
|
}
|
|
1227
1290
|
);
|
|
@@ -1255,6 +1318,8 @@ var ICONS = {
|
|
|
1255
1318
|
"grid-2x2": Grid2x2Icon,
|
|
1256
1319
|
info: InfoIcon,
|
|
1257
1320
|
"alert-triangle": AlertTriangleIcon,
|
|
1321
|
+
"circle-check": CircleCheckIcon,
|
|
1322
|
+
"circle-x": CircleXIcon,
|
|
1258
1323
|
calendar: CalendarIcon,
|
|
1259
1324
|
"sliders-horizontal": SlidersHorizontalIcon,
|
|
1260
1325
|
"ellipsis-vertical": EllipsisVerticalIcon,
|
|
@@ -1285,7 +1350,7 @@ var ICONS = {
|
|
|
1285
1350
|
|
|
1286
1351
|
// src/components/Icon/Icon.tsx
|
|
1287
1352
|
import styles2 from "./Icon.module.css";
|
|
1288
|
-
import { jsx as
|
|
1353
|
+
import { jsx as jsx56 } from "react/jsx-runtime";
|
|
1289
1354
|
function Icon({
|
|
1290
1355
|
name,
|
|
1291
1356
|
size = "md",
|
|
@@ -1294,14 +1359,14 @@ function Icon({
|
|
|
1294
1359
|
}) {
|
|
1295
1360
|
const Svg = ICONS[name];
|
|
1296
1361
|
const classes = [styles2.root, styles2[size], className].filter(Boolean).join(" ");
|
|
1297
|
-
return /* @__PURE__ */
|
|
1362
|
+
return /* @__PURE__ */ jsx56(Svg, { className: classes, role: aria["aria-label"] ? "img" : void 0, ...aria });
|
|
1298
1363
|
}
|
|
1299
1364
|
|
|
1300
1365
|
// src/components/Toggle/Toggle.tsx
|
|
1301
1366
|
import styles3 from "./Toggle.module.css";
|
|
1302
|
-
import { jsx as
|
|
1367
|
+
import { jsx as jsx57 } from "react/jsx-runtime";
|
|
1303
1368
|
function Toggle({ checked, onChange, disabled, className, ...rest }) {
|
|
1304
|
-
return /* @__PURE__ */
|
|
1369
|
+
return /* @__PURE__ */ jsx57(
|
|
1305
1370
|
"button",
|
|
1306
1371
|
{
|
|
1307
1372
|
type: "button",
|
|
@@ -1311,14 +1376,14 @@ function Toggle({ checked, onChange, disabled, className, ...rest }) {
|
|
|
1311
1376
|
className: [styles3.track, checked ? styles3.on : styles3.off, className].filter(Boolean).join(" "),
|
|
1312
1377
|
onClick: () => onChange(!checked),
|
|
1313
1378
|
...rest,
|
|
1314
|
-
children: /* @__PURE__ */
|
|
1379
|
+
children: /* @__PURE__ */ jsx57("span", { className: styles3.thumb })
|
|
1315
1380
|
}
|
|
1316
1381
|
);
|
|
1317
1382
|
}
|
|
1318
1383
|
|
|
1319
1384
|
// src/components/SegmentedControl/SegmentedControl.tsx
|
|
1320
1385
|
import styles4 from "./SegmentedControl.module.css";
|
|
1321
|
-
import { jsx as
|
|
1386
|
+
import { jsx as jsx58 } from "react/jsx-runtime";
|
|
1322
1387
|
function SegmentedControl({
|
|
1323
1388
|
value,
|
|
1324
1389
|
onChange,
|
|
@@ -1326,7 +1391,7 @@ function SegmentedControl({
|
|
|
1326
1391
|
size = "md",
|
|
1327
1392
|
"aria-label": ariaLabel
|
|
1328
1393
|
}) {
|
|
1329
|
-
return /* @__PURE__ */
|
|
1394
|
+
return /* @__PURE__ */ jsx58(
|
|
1330
1395
|
"div",
|
|
1331
1396
|
{
|
|
1332
1397
|
role: "radiogroup",
|
|
@@ -1334,7 +1399,7 @@ function SegmentedControl({
|
|
|
1334
1399
|
className: [styles4.track, styles4[size]].join(" "),
|
|
1335
1400
|
children: options.map((opt) => {
|
|
1336
1401
|
const active = opt.value === value;
|
|
1337
|
-
return /* @__PURE__ */
|
|
1402
|
+
return /* @__PURE__ */ jsx58(
|
|
1338
1403
|
"button",
|
|
1339
1404
|
{
|
|
1340
1405
|
type: "button",
|
|
@@ -1353,11 +1418,11 @@ function SegmentedControl({
|
|
|
1353
1418
|
|
|
1354
1419
|
// src/components/Tabs/Tabs.tsx
|
|
1355
1420
|
import styles5 from "./Tabs.module.css";
|
|
1356
|
-
import { jsx as
|
|
1421
|
+
import { jsx as jsx59 } from "react/jsx-runtime";
|
|
1357
1422
|
function Tabs({ items, value, onChange, "aria-label": ariaLabel }) {
|
|
1358
|
-
return /* @__PURE__ */
|
|
1423
|
+
return /* @__PURE__ */ jsx59("div", { role: "tablist", "aria-label": ariaLabel, className: styles5.tablist, children: items.map((item) => {
|
|
1359
1424
|
const active = item.value === value;
|
|
1360
|
-
return /* @__PURE__ */
|
|
1425
|
+
return /* @__PURE__ */ jsx59(
|
|
1361
1426
|
"button",
|
|
1362
1427
|
{
|
|
1363
1428
|
type: "button",
|
|
@@ -1374,15 +1439,15 @@ function Tabs({ items, value, onChange, "aria-label": ariaLabel }) {
|
|
|
1374
1439
|
|
|
1375
1440
|
// src/components/Select/Select.tsx
|
|
1376
1441
|
import styles6 from "./Select.module.css";
|
|
1377
|
-
import { jsx as
|
|
1442
|
+
import { jsx as jsx60, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
1378
1443
|
function Select({ className, size = "md", children, ...rest }) {
|
|
1379
|
-
return /* @__PURE__ */
|
|
1444
|
+
return /* @__PURE__ */ jsxs48(
|
|
1380
1445
|
"div",
|
|
1381
1446
|
{
|
|
1382
1447
|
className: [styles6.wrapper, size === "sm" ? styles6.sm : void 0, className].filter(Boolean).join(" "),
|
|
1383
1448
|
children: [
|
|
1384
|
-
/* @__PURE__ */
|
|
1385
|
-
/* @__PURE__ */
|
|
1449
|
+
/* @__PURE__ */ jsx60("select", { className: styles6.select, ...rest, children }),
|
|
1450
|
+
/* @__PURE__ */ jsx60(
|
|
1386
1451
|
"svg",
|
|
1387
1452
|
{
|
|
1388
1453
|
className: styles6.chevron,
|
|
@@ -1395,7 +1460,7 @@ function Select({ className, size = "md", children, ...rest }) {
|
|
|
1395
1460
|
strokeWidth: "2",
|
|
1396
1461
|
strokeLinecap: "round",
|
|
1397
1462
|
strokeLinejoin: "round",
|
|
1398
|
-
children: /* @__PURE__ */
|
|
1463
|
+
children: /* @__PURE__ */ jsx60("polyline", { points: "6 9 12 15 18 9" })
|
|
1399
1464
|
}
|
|
1400
1465
|
)
|
|
1401
1466
|
]
|
|
@@ -1405,18 +1470,18 @@ function Select({ className, size = "md", children, ...rest }) {
|
|
|
1405
1470
|
|
|
1406
1471
|
// src/components/SystemBanner/SystemBanner.tsx
|
|
1407
1472
|
import styles7 from "./SystemBanner.module.css";
|
|
1408
|
-
import { jsx as
|
|
1473
|
+
import { jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
1409
1474
|
function SystemBanner({ variant = "info", onDismiss, children }) {
|
|
1410
|
-
return /* @__PURE__ */
|
|
1411
|
-
/* @__PURE__ */
|
|
1412
|
-
onDismiss && /* @__PURE__ */
|
|
1475
|
+
return /* @__PURE__ */ jsxs49("div", { role: "status", "aria-live": "polite", className: [styles7.banner, styles7[variant]].join(" "), children: [
|
|
1476
|
+
/* @__PURE__ */ jsx61("span", { className: styles7.content, children }),
|
|
1477
|
+
onDismiss && /* @__PURE__ */ jsx61(
|
|
1413
1478
|
"button",
|
|
1414
1479
|
{
|
|
1415
1480
|
type: "button",
|
|
1416
1481
|
className: styles7.dismiss,
|
|
1417
1482
|
onClick: onDismiss,
|
|
1418
1483
|
"aria-label": "Dismiss banner",
|
|
1419
|
-
children: /* @__PURE__ */
|
|
1484
|
+
children: /* @__PURE__ */ jsx61(
|
|
1420
1485
|
"svg",
|
|
1421
1486
|
{
|
|
1422
1487
|
width: "14",
|
|
@@ -1425,7 +1490,7 @@ function SystemBanner({ variant = "info", onDismiss, children }) {
|
|
|
1425
1490
|
fill: "none",
|
|
1426
1491
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1427
1492
|
"aria-hidden": true,
|
|
1428
|
-
children: /* @__PURE__ */
|
|
1493
|
+
children: /* @__PURE__ */ jsx61(
|
|
1429
1494
|
"path",
|
|
1430
1495
|
{
|
|
1431
1496
|
d: "M1 1L13 13M13 1L1 13",
|
|
@@ -1449,7 +1514,7 @@ import {
|
|
|
1449
1514
|
useState
|
|
1450
1515
|
} from "react";
|
|
1451
1516
|
import styles8 from "./Popover.module.css";
|
|
1452
|
-
import { jsx as
|
|
1517
|
+
import { jsx as jsx62, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
1453
1518
|
var TRIGGER_GAP = 8;
|
|
1454
1519
|
var VIEWPORT_MARGIN = 4;
|
|
1455
1520
|
function Popover({
|
|
@@ -1525,9 +1590,9 @@ function Popover({
|
|
|
1525
1590
|
document.addEventListener("keydown", handleKeyDown);
|
|
1526
1591
|
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
1527
1592
|
}, [open, onClose]);
|
|
1528
|
-
return /* @__PURE__ */
|
|
1593
|
+
return /* @__PURE__ */ jsxs50("div", { ref: containerRef, className: styles8.container, children: [
|
|
1529
1594
|
trigger,
|
|
1530
|
-
open && /* @__PURE__ */
|
|
1595
|
+
open && /* @__PURE__ */ jsx62(
|
|
1531
1596
|
"div",
|
|
1532
1597
|
{
|
|
1533
1598
|
ref: panelRef,
|
|
@@ -1548,7 +1613,7 @@ function Popover({
|
|
|
1548
1613
|
|
|
1549
1614
|
// src/components/Button/Button.tsx
|
|
1550
1615
|
import styles9 from "./Button.module.css";
|
|
1551
|
-
import { jsx as
|
|
1616
|
+
import { jsx as jsx63, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
1552
1617
|
function Button({
|
|
1553
1618
|
variant = "primary",
|
|
1554
1619
|
size = "md",
|
|
@@ -1560,7 +1625,7 @@ function Button({
|
|
|
1560
1625
|
...rest
|
|
1561
1626
|
}) {
|
|
1562
1627
|
const classes = [styles9.button, styles9[variant], styles9[size], className].filter(Boolean).join(" ");
|
|
1563
|
-
return /* @__PURE__ */
|
|
1628
|
+
return /* @__PURE__ */ jsxs51(
|
|
1564
1629
|
"button",
|
|
1565
1630
|
{
|
|
1566
1631
|
type,
|
|
@@ -1572,7 +1637,7 @@ function Button({
|
|
|
1572
1637
|
loading && // aria-hidden: the button's own accessible name (its visible children,
|
|
1573
1638
|
// unchanged below) plus aria-busy already communicate the pending
|
|
1574
1639
|
// state — an unhidden Spinner-style status region would double-narrate it.
|
|
1575
|
-
/* @__PURE__ */
|
|
1640
|
+
/* @__PURE__ */ jsx63("span", { className: styles9.spinner, "aria-hidden": "true" }),
|
|
1576
1641
|
children
|
|
1577
1642
|
]
|
|
1578
1643
|
}
|
|
@@ -1581,23 +1646,23 @@ function Button({
|
|
|
1581
1646
|
|
|
1582
1647
|
// src/components/Input/Input.tsx
|
|
1583
1648
|
import styles10 from "./Input.module.css";
|
|
1584
|
-
import { jsx as
|
|
1649
|
+
import { jsx as jsx64 } from "react/jsx-runtime";
|
|
1585
1650
|
function Input({ type = "text", className, ...rest }) {
|
|
1586
1651
|
const classes = [styles10.input, className].filter(Boolean).join(" ");
|
|
1587
|
-
return /* @__PURE__ */
|
|
1652
|
+
return /* @__PURE__ */ jsx64("input", { type, className: classes, ...rest });
|
|
1588
1653
|
}
|
|
1589
1654
|
|
|
1590
1655
|
// src/components/Textarea/Textarea.tsx
|
|
1591
1656
|
import styles11 from "./Textarea.module.css";
|
|
1592
|
-
import { jsx as
|
|
1657
|
+
import { jsx as jsx65 } from "react/jsx-runtime";
|
|
1593
1658
|
function Textarea({ className, rows = 4, ...rest }) {
|
|
1594
1659
|
const classes = [styles11.textarea, className].filter(Boolean).join(" ");
|
|
1595
|
-
return /* @__PURE__ */
|
|
1660
|
+
return /* @__PURE__ */ jsx65("textarea", { rows, className: classes, ...rest });
|
|
1596
1661
|
}
|
|
1597
1662
|
|
|
1598
1663
|
// src/components/CodeTextarea/CodeTextarea.tsx
|
|
1599
1664
|
import styles12 from "./CodeTextarea.module.css";
|
|
1600
|
-
import { jsx as
|
|
1665
|
+
import { jsx as jsx66 } from "react/jsx-runtime";
|
|
1601
1666
|
function CodeTextarea({
|
|
1602
1667
|
className,
|
|
1603
1668
|
rows = 12,
|
|
@@ -1608,7 +1673,7 @@ function CodeTextarea({
|
|
|
1608
1673
|
...rest
|
|
1609
1674
|
}) {
|
|
1610
1675
|
const classes = [styles12.textarea, invalid ? styles12.invalid : void 0, className].filter(Boolean).join(" ");
|
|
1611
|
-
return /* @__PURE__ */
|
|
1676
|
+
return /* @__PURE__ */ jsx66(
|
|
1612
1677
|
"textarea",
|
|
1613
1678
|
{
|
|
1614
1679
|
rows,
|
|
@@ -1623,7 +1688,7 @@ function CodeTextarea({
|
|
|
1623
1688
|
|
|
1624
1689
|
// src/components/StatusBadge/StatusBadge.tsx
|
|
1625
1690
|
import styles13 from "./StatusBadge.module.css";
|
|
1626
|
-
import { jsx as
|
|
1691
|
+
import { jsx as jsx67, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
1627
1692
|
var STATUS_CLASS = {
|
|
1628
1693
|
unmodified: styles13.neutral,
|
|
1629
1694
|
draft: styles13.info,
|
|
@@ -1651,14 +1716,14 @@ function StatusBadge({
|
|
|
1651
1716
|
"aria-label": ariaLabel
|
|
1652
1717
|
}) {
|
|
1653
1718
|
const label = children ?? STATUS_LABEL[status];
|
|
1654
|
-
return /* @__PURE__ */
|
|
1719
|
+
return /* @__PURE__ */ jsxs52(
|
|
1655
1720
|
"span",
|
|
1656
1721
|
{
|
|
1657
1722
|
className: [styles13.badge, STATUS_CLASS[status], className].filter(Boolean).join(" "),
|
|
1658
1723
|
"aria-label": ariaLabel,
|
|
1659
1724
|
children: [
|
|
1660
|
-
/* @__PURE__ */
|
|
1661
|
-
/* @__PURE__ */
|
|
1725
|
+
/* @__PURE__ */ jsx67("span", { className: styles13.dot, "aria-hidden": "true" }),
|
|
1726
|
+
/* @__PURE__ */ jsx67("span", { className: styles13.label, children: label })
|
|
1662
1727
|
]
|
|
1663
1728
|
}
|
|
1664
1729
|
);
|
|
@@ -1667,7 +1732,7 @@ function StatusBadge({
|
|
|
1667
1732
|
// src/components/SplitPane/SplitPane.tsx
|
|
1668
1733
|
import { useCallback, useEffect as useEffect2, useRef as useRef2, useState as useState2 } from "react";
|
|
1669
1734
|
import styles14 from "./SplitPane.module.css";
|
|
1670
|
-
import { jsx as
|
|
1735
|
+
import { jsx as jsx68, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
1671
1736
|
var clampSize = (value, min, max) => Math.min(Math.max(value, min), max);
|
|
1672
1737
|
function SplitPane({
|
|
1673
1738
|
primary,
|
|
@@ -1753,15 +1818,15 @@ function SplitPane({
|
|
|
1753
1818
|
const style = {
|
|
1754
1819
|
"--split-pane-primary-size": `${primarySize}%`
|
|
1755
1820
|
};
|
|
1756
|
-
return /* @__PURE__ */
|
|
1821
|
+
return /* @__PURE__ */ jsxs53(
|
|
1757
1822
|
"div",
|
|
1758
1823
|
{
|
|
1759
1824
|
ref: containerRef,
|
|
1760
1825
|
className: [styles14.splitPane, className].filter(Boolean).join(" "),
|
|
1761
1826
|
style,
|
|
1762
1827
|
children: [
|
|
1763
|
-
/* @__PURE__ */
|
|
1764
|
-
resizable && /* @__PURE__ */
|
|
1828
|
+
/* @__PURE__ */ jsx68("section", { className: styles14.pane, "aria-label": primaryLabel, children: primary }),
|
|
1829
|
+
resizable && /* @__PURE__ */ jsx68(
|
|
1765
1830
|
"button",
|
|
1766
1831
|
{
|
|
1767
1832
|
type: "button",
|
|
@@ -1771,7 +1836,7 @@ function SplitPane({
|
|
|
1771
1836
|
onKeyDown: resizeWithKeyboard
|
|
1772
1837
|
}
|
|
1773
1838
|
),
|
|
1774
|
-
/* @__PURE__ */
|
|
1839
|
+
/* @__PURE__ */ jsx68("section", { className: styles14.pane, "aria-label": secondaryLabel, children: secondary })
|
|
1775
1840
|
]
|
|
1776
1841
|
}
|
|
1777
1842
|
);
|
|
@@ -1780,7 +1845,7 @@ function SplitPane({
|
|
|
1780
1845
|
// src/components/TagInput/TagInput.tsx
|
|
1781
1846
|
import { useMemo, useState as useState3 } from "react";
|
|
1782
1847
|
import styles15 from "./TagInput.module.css";
|
|
1783
|
-
import { jsx as
|
|
1848
|
+
import { jsx as jsx69, jsxs as jsxs54 } from "react/jsx-runtime";
|
|
1784
1849
|
var DEFAULT_SEPARATORS = /[\n,]+/;
|
|
1785
1850
|
var splitTags = (value, separators) => value.split(separators).map((tag) => tag.trim()).filter(Boolean);
|
|
1786
1851
|
function TagInput({
|
|
@@ -1854,8 +1919,8 @@ function TagInput({
|
|
|
1854
1919
|
event.preventDefault();
|
|
1855
1920
|
addTags(tags);
|
|
1856
1921
|
};
|
|
1857
|
-
return /* @__PURE__ */
|
|
1858
|
-
/* @__PURE__ */
|
|
1922
|
+
return /* @__PURE__ */ jsxs54("div", { className: [styles15.wrapper, className].filter(Boolean).join(" "), children: [
|
|
1923
|
+
/* @__PURE__ */ jsxs54(
|
|
1859
1924
|
"div",
|
|
1860
1925
|
{
|
|
1861
1926
|
className: [
|
|
@@ -1864,9 +1929,9 @@ function TagInput({
|
|
|
1864
1929
|
error || localError || ariaInvalid ? styles15.invalid : void 0
|
|
1865
1930
|
].filter(Boolean).join(" "),
|
|
1866
1931
|
children: [
|
|
1867
|
-
value.map((tag, index) => /* @__PURE__ */
|
|
1868
|
-
/* @__PURE__ */
|
|
1869
|
-
/* @__PURE__ */
|
|
1932
|
+
value.map((tag, index) => /* @__PURE__ */ jsxs54("span", { className: styles15.tag, children: [
|
|
1933
|
+
/* @__PURE__ */ jsx69("span", { className: styles15.tagLabel, children: tag }),
|
|
1934
|
+
/* @__PURE__ */ jsx69(
|
|
1870
1935
|
"button",
|
|
1871
1936
|
{
|
|
1872
1937
|
type: "button",
|
|
@@ -1878,7 +1943,7 @@ function TagInput({
|
|
|
1878
1943
|
}
|
|
1879
1944
|
)
|
|
1880
1945
|
] }, `${tag}-${index}`)),
|
|
1881
|
-
/* @__PURE__ */
|
|
1946
|
+
/* @__PURE__ */ jsx69(
|
|
1882
1947
|
"input",
|
|
1883
1948
|
{
|
|
1884
1949
|
id,
|
|
@@ -1900,7 +1965,7 @@ function TagInput({
|
|
|
1900
1965
|
]
|
|
1901
1966
|
}
|
|
1902
1967
|
),
|
|
1903
|
-
message && /* @__PURE__ */
|
|
1968
|
+
message && /* @__PURE__ */ jsx69(
|
|
1904
1969
|
"p",
|
|
1905
1970
|
{
|
|
1906
1971
|
id: messageId,
|
|
@@ -1959,7 +2024,7 @@ function usePrefersReducedMotion() {
|
|
|
1959
2024
|
|
|
1960
2025
|
// src/components/OverlayHeader/OverlayHeader.tsx
|
|
1961
2026
|
import styles16 from "./OverlayHeader.module.css";
|
|
1962
|
-
import { jsx as
|
|
2027
|
+
import { jsx as jsx70, jsxs as jsxs55 } from "react/jsx-runtime";
|
|
1963
2028
|
function OverlayHeader({
|
|
1964
2029
|
title,
|
|
1965
2030
|
onClose,
|
|
@@ -1968,20 +2033,20 @@ function OverlayHeader({
|
|
|
1968
2033
|
secondRow,
|
|
1969
2034
|
className
|
|
1970
2035
|
}) {
|
|
1971
|
-
return /* @__PURE__ */
|
|
1972
|
-
/* @__PURE__ */
|
|
1973
|
-
onBack && /* @__PURE__ */
|
|
1974
|
-
/* @__PURE__ */
|
|
1975
|
-
action && /* @__PURE__ */
|
|
1976
|
-
/* @__PURE__ */
|
|
2036
|
+
return /* @__PURE__ */ jsxs55("div", { className: [styles16.header, className].filter(Boolean).join(" "), children: [
|
|
2037
|
+
/* @__PURE__ */ jsxs55("div", { className: styles16.row, children: [
|
|
2038
|
+
onBack && /* @__PURE__ */ jsx70("button", { type: "button", className: styles16.backButton, "aria-label": "Back", onClick: onBack, children: /* @__PURE__ */ jsx70(Icon, { name: "chevron-left", size: "md", "aria-hidden": true }) }),
|
|
2039
|
+
/* @__PURE__ */ jsx70("span", { className: styles16.title, children: title }),
|
|
2040
|
+
action && /* @__PURE__ */ jsx70("div", { className: styles16.action, children: action }),
|
|
2041
|
+
/* @__PURE__ */ jsx70("button", { type: "button", className: styles16.closeButton, "aria-label": "Close", onClick: onClose, children: /* @__PURE__ */ jsx70(Icon, { name: "x", size: "sm", "aria-hidden": true }) })
|
|
1977
2042
|
] }),
|
|
1978
|
-
secondRow && /* @__PURE__ */
|
|
2043
|
+
secondRow && /* @__PURE__ */ jsx70("div", { className: styles16.secondRow, children: secondRow })
|
|
1979
2044
|
] });
|
|
1980
2045
|
}
|
|
1981
2046
|
|
|
1982
2047
|
// src/components/Dialog/Dialog.tsx
|
|
1983
2048
|
import styles17 from "./Dialog.module.css";
|
|
1984
|
-
import { jsx as
|
|
2049
|
+
import { jsx as jsx71, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
1985
2050
|
var MOTION_DURATION_MS = 250;
|
|
1986
2051
|
var OverlaySecondRowContext = createContext(
|
|
1987
2052
|
void 0
|
|
@@ -2057,7 +2122,7 @@ function Dialog({
|
|
|
2057
2122
|
return (
|
|
2058
2123
|
// role="presentation" removes the scrim from the AT (it is purely visual).
|
|
2059
2124
|
// e.target check lets clicks inside the panel bubble without triggering dismiss.
|
|
2060
|
-
/* @__PURE__ */
|
|
2125
|
+
/* @__PURE__ */ jsx71(
|
|
2061
2126
|
"div",
|
|
2062
2127
|
{
|
|
2063
2128
|
className: [styles17.scrim, isOpenPhase ? styles17.scrimOpen : ""].filter(Boolean).join(" "),
|
|
@@ -2068,7 +2133,7 @@ function Dialog({
|
|
|
2068
2133
|
onKeyDown: (e) => {
|
|
2069
2134
|
if (e.key === "Escape") onClose();
|
|
2070
2135
|
},
|
|
2071
|
-
children: /* @__PURE__ */
|
|
2136
|
+
children: /* @__PURE__ */ jsxs56(
|
|
2072
2137
|
"div",
|
|
2073
2138
|
{
|
|
2074
2139
|
ref: panelRef,
|
|
@@ -2078,7 +2143,7 @@ function Dialog({
|
|
|
2078
2143
|
tabIndex: -1,
|
|
2079
2144
|
className: [styles17.panel, styles17[size], isOpenPhase ? styles17.panelOpen : ""].filter(Boolean).join(" "),
|
|
2080
2145
|
children: [
|
|
2081
|
-
/* @__PURE__ */
|
|
2146
|
+
/* @__PURE__ */ jsx71(
|
|
2082
2147
|
OverlayHeader,
|
|
2083
2148
|
{
|
|
2084
2149
|
title,
|
|
@@ -2087,8 +2152,8 @@ function Dialog({
|
|
|
2087
2152
|
className: styles17.mobileHeader
|
|
2088
2153
|
}
|
|
2089
2154
|
),
|
|
2090
|
-
/* @__PURE__ */
|
|
2091
|
-
/* @__PURE__ */
|
|
2155
|
+
/* @__PURE__ */ jsx71("button", { type: "button", className: styles17.close, "aria-label": "Close", onClick: onClose, children: "\xD7" }),
|
|
2156
|
+
/* @__PURE__ */ jsx71("div", { className: styles17.content, children: /* @__PURE__ */ jsx71(OverlaySecondRowContext.Provider, { value: setSecondRow, children }) })
|
|
2092
2157
|
]
|
|
2093
2158
|
}
|
|
2094
2159
|
)
|
|
@@ -2100,7 +2165,7 @@ function Dialog({
|
|
|
2100
2165
|
// src/components/Drawer/Drawer.tsx
|
|
2101
2166
|
import { useEffect as useEffect5, useRef as useRef4 } from "react";
|
|
2102
2167
|
import styles18 from "./Drawer.module.css";
|
|
2103
|
-
import { jsx as
|
|
2168
|
+
import { jsx as jsx72, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
2104
2169
|
var MOTION_DURATION_MS2 = 250;
|
|
2105
2170
|
var FOCUSABLE2 = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
2106
2171
|
var SWIPE_DISMISS_THRESHOLD_PX = 100;
|
|
@@ -2189,7 +2254,7 @@ function Drawer({
|
|
|
2189
2254
|
return (
|
|
2190
2255
|
// role="presentation" removes the scrim from the AT (it is purely visual).
|
|
2191
2256
|
// e.target check lets clicks inside the panel bubble without triggering dismiss.
|
|
2192
|
-
/* @__PURE__ */
|
|
2257
|
+
/* @__PURE__ */ jsx72(
|
|
2193
2258
|
"div",
|
|
2194
2259
|
{
|
|
2195
2260
|
className: [styles18.scrim, isOpenPhase ? styles18.scrimOpen : ""].filter(Boolean).join(" "),
|
|
@@ -2200,7 +2265,7 @@ function Drawer({
|
|
|
2200
2265
|
onKeyDown: (e) => {
|
|
2201
2266
|
if (e.key === "Escape") onClose();
|
|
2202
2267
|
},
|
|
2203
|
-
children: /* @__PURE__ */
|
|
2268
|
+
children: /* @__PURE__ */ jsxs57(
|
|
2204
2269
|
"div",
|
|
2205
2270
|
{
|
|
2206
2271
|
ref: panelRef,
|
|
@@ -2214,7 +2279,7 @@ function Drawer({
|
|
|
2214
2279
|
isOpenPhase ? styles18.panelOpen : ""
|
|
2215
2280
|
].filter(Boolean).join(" "),
|
|
2216
2281
|
children: [
|
|
2217
|
-
/* @__PURE__ */
|
|
2282
|
+
/* @__PURE__ */ jsx72(
|
|
2218
2283
|
"div",
|
|
2219
2284
|
{
|
|
2220
2285
|
className: styles18.handle,
|
|
@@ -2237,7 +2302,7 @@ function Drawer({
|
|
|
2237
2302
|
// src/components/Sheet/Sheet.tsx
|
|
2238
2303
|
import { useEffect as useEffect6, useRef as useRef5 } from "react";
|
|
2239
2304
|
import styles19 from "./Sheet.module.css";
|
|
2240
|
-
import { jsx as
|
|
2305
|
+
import { jsx as jsx73, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
2241
2306
|
var FOCUSABLE3 = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
2242
2307
|
var MOTION_DURATION_MS3 = 250;
|
|
2243
2308
|
function Sheet({
|
|
@@ -2298,7 +2363,7 @@ function Sheet({
|
|
|
2298
2363
|
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
2299
2364
|
}, [open, onClose]);
|
|
2300
2365
|
if (!mounted) return null;
|
|
2301
|
-
return /* @__PURE__ */
|
|
2366
|
+
return /* @__PURE__ */ jsxs58(
|
|
2302
2367
|
"div",
|
|
2303
2368
|
{
|
|
2304
2369
|
ref: panelRef,
|
|
@@ -2312,8 +2377,8 @@ function Sheet({
|
|
|
2312
2377
|
phase === "open" ? styles19.panelOpen : ""
|
|
2313
2378
|
].filter(Boolean).join(" "),
|
|
2314
2379
|
children: [
|
|
2315
|
-
title && /* @__PURE__ */
|
|
2316
|
-
/* @__PURE__ */
|
|
2380
|
+
title && /* @__PURE__ */ jsx73(OverlayHeader, { title, onClose, onBack, action: headerAction }),
|
|
2381
|
+
/* @__PURE__ */ jsx73("div", { className: styles19.content, children })
|
|
2317
2382
|
]
|
|
2318
2383
|
}
|
|
2319
2384
|
);
|
|
@@ -2322,7 +2387,7 @@ function Sheet({
|
|
|
2322
2387
|
// src/components/ConfirmDialog/ConfirmDialog.tsx
|
|
2323
2388
|
import { useEffect as useEffect7, useRef as useRef6 } from "react";
|
|
2324
2389
|
import styles20 from "./ConfirmDialog.module.css";
|
|
2325
|
-
import { jsx as
|
|
2390
|
+
import { jsx as jsx74, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
2326
2391
|
function ConfirmDialog({
|
|
2327
2392
|
open,
|
|
2328
2393
|
onClose,
|
|
@@ -2351,7 +2416,7 @@ function ConfirmDialog({
|
|
|
2351
2416
|
}, [onClose]);
|
|
2352
2417
|
return (
|
|
2353
2418
|
// eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions
|
|
2354
|
-
/* @__PURE__ */
|
|
2419
|
+
/* @__PURE__ */ jsx74(
|
|
2355
2420
|
"dialog",
|
|
2356
2421
|
{
|
|
2357
2422
|
ref: dialogRef,
|
|
@@ -2360,12 +2425,12 @@ function ConfirmDialog({
|
|
|
2360
2425
|
onClick: (e) => {
|
|
2361
2426
|
if (e.target === e.currentTarget) onClose();
|
|
2362
2427
|
},
|
|
2363
|
-
children: /* @__PURE__ */
|
|
2364
|
-
/* @__PURE__ */
|
|
2365
|
-
/* @__PURE__ */
|
|
2366
|
-
error && /* @__PURE__ */
|
|
2367
|
-
/* @__PURE__ */
|
|
2368
|
-
/* @__PURE__ */
|
|
2428
|
+
children: /* @__PURE__ */ jsxs59("div", { className: styles20.body, children: [
|
|
2429
|
+
/* @__PURE__ */ jsx74("h2", { className: styles20.title, children: title }),
|
|
2430
|
+
/* @__PURE__ */ jsx74("div", { className: styles20.message, children: message }),
|
|
2431
|
+
error && /* @__PURE__ */ jsx74("p", { className: styles20.error, children: error }),
|
|
2432
|
+
/* @__PURE__ */ jsxs59("div", { className: styles20.actions, children: [
|
|
2433
|
+
/* @__PURE__ */ jsx74(Button, { type: "button", variant: "secondary", onClick: onClose, disabled: pending, children: cancelLabel }),
|
|
2369
2434
|
destructive ? (
|
|
2370
2435
|
// A solid red fill, not Button's own `destructive` variant (an
|
|
2371
2436
|
// outlined/ghost style meant for lower-emphasis placements) — a
|
|
@@ -2374,7 +2439,7 @@ function ConfirmDialog({
|
|
|
2374
2439
|
// -text-on-error tokens the codebase already introduced for this
|
|
2375
2440
|
// exact "reads as a filled action button, not a tinted status
|
|
2376
2441
|
// surface" case (see semantic.css).
|
|
2377
|
-
/* @__PURE__ */
|
|
2442
|
+
/* @__PURE__ */ jsx74(
|
|
2378
2443
|
"button",
|
|
2379
2444
|
{
|
|
2380
2445
|
type: "button",
|
|
@@ -2384,7 +2449,7 @@ function ConfirmDialog({
|
|
|
2384
2449
|
children: confirmLabel
|
|
2385
2450
|
}
|
|
2386
2451
|
)
|
|
2387
|
-
) : /* @__PURE__ */
|
|
2452
|
+
) : /* @__PURE__ */ jsx74(Button, { type: "button", variant: "primary", onClick: onConfirm, disabled: pending, children: confirmLabel })
|
|
2388
2453
|
] })
|
|
2389
2454
|
] })
|
|
2390
2455
|
}
|
|
@@ -2558,18 +2623,20 @@ function useCommitOnEnterOrBlur(onCommit) {
|
|
|
2558
2623
|
|
|
2559
2624
|
// src/components/Menu/Menu.tsx
|
|
2560
2625
|
import styles21 from "./Menu.module.css";
|
|
2561
|
-
import { Fragment, jsx as
|
|
2562
|
-
function
|
|
2563
|
-
|
|
2564
|
-
|
|
2626
|
+
import { Fragment, jsx as jsx75, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
2627
|
+
function MenuEntries({
|
|
2628
|
+
items,
|
|
2629
|
+
onSelect
|
|
2630
|
+
}) {
|
|
2631
|
+
return /* @__PURE__ */ jsx75("ul", { className: styles21.list, role: "menu", children: items.map((entry, index) => {
|
|
2565
2632
|
if (entry.type === "separator") {
|
|
2566
|
-
return /* @__PURE__ */
|
|
2633
|
+
return /* @__PURE__ */ jsx75("li", { role: "separator", className: styles21.separator }, index);
|
|
2567
2634
|
}
|
|
2568
2635
|
if (entry.type === "label") {
|
|
2569
|
-
return /* @__PURE__ */
|
|
2636
|
+
return /* @__PURE__ */ jsx75("li", { role: "presentation", className: styles21.label, children: entry.label }, index);
|
|
2570
2637
|
}
|
|
2571
2638
|
const isCheckable = entry.checked !== void 0;
|
|
2572
|
-
return /* @__PURE__ */
|
|
2639
|
+
return /* @__PURE__ */ jsx75("li", { role: "none", children: /* @__PURE__ */ jsxs60(
|
|
2573
2640
|
"button",
|
|
2574
2641
|
{
|
|
2575
2642
|
role: isCheckable ? "menuitemradio" : "menuitem",
|
|
@@ -2577,25 +2644,35 @@ function Menu({ trigger, open, onClose, items, "aria-label": ariaLabel, align })
|
|
|
2577
2644
|
type: "button",
|
|
2578
2645
|
className: [styles21.item, entry.destructive ? styles21.itemDestructive : ""].filter(Boolean).join(" "),
|
|
2579
2646
|
disabled: entry.disabled,
|
|
2580
|
-
onClick: () =>
|
|
2581
|
-
onClose();
|
|
2582
|
-
entry.onSelect();
|
|
2583
|
-
},
|
|
2647
|
+
onClick: () => onSelect(entry),
|
|
2584
2648
|
children: [
|
|
2585
|
-
isCheckable && /* @__PURE__ */
|
|
2586
|
-
entry.icon && /* @__PURE__ */
|
|
2649
|
+
isCheckable && /* @__PURE__ */ jsx75("span", { className: styles21.check, "aria-hidden": true, children: entry.checked && /* @__PURE__ */ jsx75(Icon, { name: "check", size: "sm", "aria-hidden": true }) }),
|
|
2650
|
+
entry.icon && /* @__PURE__ */ jsx75(Icon, { name: entry.icon, size: "sm", "aria-hidden": true }),
|
|
2587
2651
|
entry.label
|
|
2588
2652
|
]
|
|
2589
2653
|
}
|
|
2590
2654
|
) }, index);
|
|
2591
2655
|
}) });
|
|
2656
|
+
}
|
|
2657
|
+
function Menu({ trigger, open, onClose, items, "aria-label": ariaLabel, align }) {
|
|
2658
|
+
const isMobile = useIsMobile();
|
|
2659
|
+
const list = /* @__PURE__ */ jsx75(
|
|
2660
|
+
MenuEntries,
|
|
2661
|
+
{
|
|
2662
|
+
items,
|
|
2663
|
+
onSelect: (entry) => {
|
|
2664
|
+
onClose();
|
|
2665
|
+
entry.onSelect();
|
|
2666
|
+
}
|
|
2667
|
+
}
|
|
2668
|
+
);
|
|
2592
2669
|
if (isMobile) {
|
|
2593
|
-
return /* @__PURE__ */
|
|
2670
|
+
return /* @__PURE__ */ jsxs60(Fragment, { children: [
|
|
2594
2671
|
trigger,
|
|
2595
|
-
/* @__PURE__ */
|
|
2672
|
+
/* @__PURE__ */ jsx75(Drawer, { open, onClose, "aria-label": ariaLabel, children: list })
|
|
2596
2673
|
] });
|
|
2597
2674
|
}
|
|
2598
|
-
return /* @__PURE__ */
|
|
2675
|
+
return /* @__PURE__ */ jsx75(Popover, { trigger, open, onClose, "aria-label": ariaLabel, align, children: list });
|
|
2599
2676
|
}
|
|
2600
2677
|
|
|
2601
2678
|
// src/components/Toast/Toast.tsx
|
|
@@ -2610,7 +2687,7 @@ import {
|
|
|
2610
2687
|
useState as useState8
|
|
2611
2688
|
} from "react";
|
|
2612
2689
|
import styles22 from "./Toast.module.css";
|
|
2613
|
-
import { jsx as
|
|
2690
|
+
import { jsx as jsx76, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
2614
2691
|
var ToastContext = createContext2(null);
|
|
2615
2692
|
function useToast() {
|
|
2616
2693
|
const ctx = useContext2(ToastContext);
|
|
@@ -2648,16 +2725,16 @@ function ToastProvider({ children }) {
|
|
|
2648
2725
|
};
|
|
2649
2726
|
}, []);
|
|
2650
2727
|
const value = useMemo2(() => ({ show, dismiss }), [show, dismiss]);
|
|
2651
|
-
return /* @__PURE__ */
|
|
2728
|
+
return /* @__PURE__ */ jsxs61(ToastContext.Provider, { value, children: [
|
|
2652
2729
|
children,
|
|
2653
|
-
/* @__PURE__ */
|
|
2730
|
+
/* @__PURE__ */ jsx76(
|
|
2654
2731
|
"ol",
|
|
2655
2732
|
{
|
|
2656
2733
|
className: styles22.region,
|
|
2657
2734
|
"aria-label": "Notifications",
|
|
2658
2735
|
"aria-live": "polite",
|
|
2659
2736
|
"aria-atomic": "false",
|
|
2660
|
-
children: toasts.map((toast) => /* @__PURE__ */
|
|
2737
|
+
children: toasts.map((toast) => /* @__PURE__ */ jsx76(Toast, { ...toast, onDismiss: dismiss }, toast.id))
|
|
2661
2738
|
}
|
|
2662
2739
|
)
|
|
2663
2740
|
] });
|
|
@@ -2680,18 +2757,18 @@ function Toast({
|
|
|
2680
2757
|
}) {
|
|
2681
2758
|
const categoryClass = styles22[category] ?? styles22.info;
|
|
2682
2759
|
const iconName = CATEGORY_ICON[category] ?? "info";
|
|
2683
|
-
return /* @__PURE__ */
|
|
2760
|
+
return /* @__PURE__ */ jsxs61(
|
|
2684
2761
|
"li",
|
|
2685
2762
|
{
|
|
2686
2763
|
role: "status",
|
|
2687
2764
|
className: `${styles22.toast} ${String(categoryClass)} ${exiting ? styles22.exiting : ""}`,
|
|
2688
2765
|
children: [
|
|
2689
|
-
/* @__PURE__ */
|
|
2690
|
-
/* @__PURE__ */
|
|
2691
|
-
/* @__PURE__ */
|
|
2692
|
-
message && /* @__PURE__ */
|
|
2766
|
+
/* @__PURE__ */ jsx76("span", { className: styles22.icon, "aria-hidden": "true", children: /* @__PURE__ */ jsx76(Icon, { name: iconName, size: "sm", "aria-hidden": true }) }),
|
|
2767
|
+
/* @__PURE__ */ jsxs61("div", { className: styles22.body, children: [
|
|
2768
|
+
/* @__PURE__ */ jsx76("div", { className: styles22.title, children: title }),
|
|
2769
|
+
message && /* @__PURE__ */ jsx76("div", { className: styles22.message, children: message })
|
|
2693
2770
|
] }),
|
|
2694
|
-
/* @__PURE__ */
|
|
2771
|
+
/* @__PURE__ */ jsx76(
|
|
2695
2772
|
"button",
|
|
2696
2773
|
{
|
|
2697
2774
|
type: "button",
|
|
@@ -2708,7 +2785,7 @@ function Toast({
|
|
|
2708
2785
|
|
|
2709
2786
|
// src/components/Card/Card.tsx
|
|
2710
2787
|
import styles23 from "./Card.module.css";
|
|
2711
|
-
import { jsx as
|
|
2788
|
+
import { jsx as jsx77 } from "react/jsx-runtime";
|
|
2712
2789
|
var paddingClass = {
|
|
2713
2790
|
sm: styles23.paddingSm,
|
|
2714
2791
|
md: styles23.paddingMd,
|
|
@@ -2723,13 +2800,13 @@ function Card({
|
|
|
2723
2800
|
...rest
|
|
2724
2801
|
}) {
|
|
2725
2802
|
const cls = [styles23.card, paddingClass[padding], interactive && styles23.interactive, className].filter(Boolean).join(" ");
|
|
2726
|
-
return /* @__PURE__ */
|
|
2803
|
+
return /* @__PURE__ */ jsx77(Tag, { className: cls, ...rest, children });
|
|
2727
2804
|
}
|
|
2728
2805
|
|
|
2729
2806
|
// src/components/FormField/FormField.tsx
|
|
2730
2807
|
import { useId as useId2 } from "react";
|
|
2731
2808
|
import styles24 from "./FormField.module.css";
|
|
2732
|
-
import { jsx as
|
|
2809
|
+
import { jsx as jsx78, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
2733
2810
|
function FormField({
|
|
2734
2811
|
label,
|
|
2735
2812
|
hint,
|
|
@@ -2750,52 +2827,52 @@ function FormField({
|
|
|
2750
2827
|
"aria-invalid": error ? true : void 0,
|
|
2751
2828
|
required: required || void 0
|
|
2752
2829
|
};
|
|
2753
|
-
return /* @__PURE__ */
|
|
2754
|
-
/* @__PURE__ */
|
|
2830
|
+
return /* @__PURE__ */ jsxs62("div", { className: [styles24.field, className].filter(Boolean).join(" "), children: [
|
|
2831
|
+
/* @__PURE__ */ jsxs62("label", { className: styles24.label, htmlFor: fieldId, children: [
|
|
2755
2832
|
label,
|
|
2756
|
-
required && /* @__PURE__ */
|
|
2833
|
+
required && /* @__PURE__ */ jsx78("span", { className: styles24.required, "aria-hidden": "true", children: "*" })
|
|
2757
2834
|
] }),
|
|
2758
2835
|
children(field),
|
|
2759
|
-
hint && !error && /* @__PURE__ */
|
|
2760
|
-
error && /* @__PURE__ */
|
|
2836
|
+
hint && !error && /* @__PURE__ */ jsx78("p", { id: hintId, className: styles24.hint, children: hint }),
|
|
2837
|
+
error && /* @__PURE__ */ jsx78("p", { id: errorId, className: styles24.error, role: "alert", children: error })
|
|
2761
2838
|
] });
|
|
2762
2839
|
}
|
|
2763
2840
|
|
|
2764
2841
|
// src/components/PageHeader/PageHeader.tsx
|
|
2765
2842
|
import styles25 from "./PageHeader.module.css";
|
|
2766
|
-
import { jsx as
|
|
2843
|
+
import { jsx as jsx79, jsxs as jsxs63 } from "react/jsx-runtime";
|
|
2767
2844
|
function PageHeader({ title, description, action, className }) {
|
|
2768
|
-
return /* @__PURE__ */
|
|
2769
|
-
/* @__PURE__ */
|
|
2770
|
-
/* @__PURE__ */
|
|
2771
|
-
description && /* @__PURE__ */
|
|
2845
|
+
return /* @__PURE__ */ jsxs63("header", { className: [styles25.header, className].filter(Boolean).join(" "), children: [
|
|
2846
|
+
/* @__PURE__ */ jsxs63("div", { className: styles25.text, children: [
|
|
2847
|
+
/* @__PURE__ */ jsx79("h1", { className: styles25.title, children: title }),
|
|
2848
|
+
description && /* @__PURE__ */ jsx79("p", { className: styles25.description, children: description })
|
|
2772
2849
|
] }),
|
|
2773
|
-
action && /* @__PURE__ */
|
|
2850
|
+
action && /* @__PURE__ */ jsx79("div", { className: styles25.action, children: action })
|
|
2774
2851
|
] });
|
|
2775
2852
|
}
|
|
2776
2853
|
|
|
2777
2854
|
// src/components/EmptyState/EmptyState.tsx
|
|
2778
2855
|
import styles26 from "./EmptyState.module.css";
|
|
2779
|
-
import { jsx as
|
|
2856
|
+
import { jsx as jsx80, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
2780
2857
|
function EmptyState({ icon, heading, description, action, className }) {
|
|
2781
|
-
return /* @__PURE__ */
|
|
2782
|
-
icon && /* @__PURE__ */
|
|
2783
|
-
/* @__PURE__ */
|
|
2784
|
-
description && /* @__PURE__ */
|
|
2858
|
+
return /* @__PURE__ */ jsxs64("div", { className: [styles26.root, className].filter(Boolean).join(" "), children: [
|
|
2859
|
+
icon && /* @__PURE__ */ jsx80("span", { className: styles26.icon, children: /* @__PURE__ */ jsx80(Icon, { name: icon, size: "lg", "aria-hidden": true }) }),
|
|
2860
|
+
/* @__PURE__ */ jsx80("h2", { className: styles26.heading, children: heading }),
|
|
2861
|
+
description && /* @__PURE__ */ jsx80("p", { className: styles26.description, children: description }),
|
|
2785
2862
|
action
|
|
2786
2863
|
] });
|
|
2787
2864
|
}
|
|
2788
2865
|
|
|
2789
2866
|
// src/components/Spinner/Spinner.tsx
|
|
2790
2867
|
import styles27 from "./Spinner.module.css";
|
|
2791
|
-
import { jsx as
|
|
2868
|
+
import { jsx as jsx81 } from "react/jsx-runtime";
|
|
2792
2869
|
var sizeClass = {
|
|
2793
2870
|
sm: styles27.sm,
|
|
2794
2871
|
md: styles27.md,
|
|
2795
2872
|
lg: styles27.lg
|
|
2796
2873
|
};
|
|
2797
2874
|
function Spinner({ size = "md", label = "Loading\u2026", className }) {
|
|
2798
|
-
return /* @__PURE__ */
|
|
2875
|
+
return /* @__PURE__ */ jsx81(
|
|
2799
2876
|
"span",
|
|
2800
2877
|
{
|
|
2801
2878
|
role: "status",
|
|
@@ -2808,7 +2885,7 @@ function Spinner({ size = "md", label = "Loading\u2026", className }) {
|
|
|
2808
2885
|
// src/components/Avatar/Avatar.tsx
|
|
2809
2886
|
import { useState as useState9 } from "react";
|
|
2810
2887
|
import styles28 from "./Avatar.module.css";
|
|
2811
|
-
import { jsx as
|
|
2888
|
+
import { jsx as jsx82 } from "react/jsx-runtime";
|
|
2812
2889
|
function initials(name) {
|
|
2813
2890
|
const parts = name.trim().split(/\s+/);
|
|
2814
2891
|
if (parts.length === 1) return (parts[0] ?? "").slice(0, 2).toUpperCase();
|
|
@@ -2823,21 +2900,21 @@ function Avatar({ name, src, size = "md", className }) {
|
|
|
2823
2900
|
const [imgFailed, setImgFailed] = useState9(false);
|
|
2824
2901
|
const cls = [styles28.avatar, sizeClass2[size], className].filter(Boolean).join(" ");
|
|
2825
2902
|
if (src && !imgFailed) {
|
|
2826
|
-
return /* @__PURE__ */
|
|
2903
|
+
return /* @__PURE__ */ jsx82("span", { className: cls, "aria-label": name, children: /* @__PURE__ */ jsx82("img", { src, alt: name, className: styles28.img, onError: () => setImgFailed(true) }) });
|
|
2827
2904
|
}
|
|
2828
|
-
return /* @__PURE__ */
|
|
2905
|
+
return /* @__PURE__ */ jsx82("span", { className: cls, "aria-label": name, children: initials(name) });
|
|
2829
2906
|
}
|
|
2830
2907
|
|
|
2831
2908
|
// src/components/NavTabs/NavTabs.tsx
|
|
2832
2909
|
import styles29 from "./NavTabs.module.css";
|
|
2833
|
-
import { jsx as
|
|
2910
|
+
import { jsx as jsx83 } from "react/jsx-runtime";
|
|
2834
2911
|
function NavTabs({ items, className, "aria-label": ariaLabel }) {
|
|
2835
|
-
return /* @__PURE__ */
|
|
2912
|
+
return /* @__PURE__ */ jsx83(
|
|
2836
2913
|
"nav",
|
|
2837
2914
|
{
|
|
2838
2915
|
className: [styles29.nav, className].filter(Boolean).join(" "),
|
|
2839
2916
|
"aria-label": ariaLabel ?? "Page navigation",
|
|
2840
|
-
children: items.map((item) => /* @__PURE__ */
|
|
2917
|
+
children: items.map((item) => /* @__PURE__ */ jsx83(
|
|
2841
2918
|
"a",
|
|
2842
2919
|
{
|
|
2843
2920
|
href: item.href,
|
|
@@ -2854,7 +2931,7 @@ function NavTabs({ items, className, "aria-label": ariaLabel }) {
|
|
|
2854
2931
|
// src/components/Tooltip/Tooltip.tsx
|
|
2855
2932
|
import { useId as useId3 } from "react";
|
|
2856
2933
|
import styles30 from "./Tooltip.module.css";
|
|
2857
|
-
import { jsx as
|
|
2934
|
+
import { jsx as jsx84, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
2858
2935
|
var sideClass = {
|
|
2859
2936
|
top: styles30.top,
|
|
2860
2937
|
bottom: styles30.bottom,
|
|
@@ -2863,15 +2940,15 @@ var sideClass = {
|
|
|
2863
2940
|
};
|
|
2864
2941
|
function Tooltip({ content, children, side = "top" }) {
|
|
2865
2942
|
const tipId = useId3();
|
|
2866
|
-
return /* @__PURE__ */
|
|
2867
|
-
/* @__PURE__ */
|
|
2868
|
-
/* @__PURE__ */
|
|
2943
|
+
return /* @__PURE__ */ jsxs65("span", { className: styles30.wrapper, children: [
|
|
2944
|
+
/* @__PURE__ */ jsx84("span", { "aria-describedby": tipId, children }),
|
|
2945
|
+
/* @__PURE__ */ jsx84("span", { id: tipId, role: "tooltip", className: [styles30.tip, sideClass[side]].join(" "), children: content })
|
|
2869
2946
|
] });
|
|
2870
2947
|
}
|
|
2871
2948
|
|
|
2872
2949
|
// src/components/Checkbox/Checkbox.tsx
|
|
2873
2950
|
import styles31 from "./Checkbox.module.css";
|
|
2874
|
-
import { jsx as
|
|
2951
|
+
import { jsx as jsx85, jsxs as jsxs66 } from "react/jsx-runtime";
|
|
2875
2952
|
function Checkbox({
|
|
2876
2953
|
checked,
|
|
2877
2954
|
onChange,
|
|
@@ -2883,9 +2960,9 @@ function Checkbox({
|
|
|
2883
2960
|
...rest
|
|
2884
2961
|
}) {
|
|
2885
2962
|
const inputId = id ?? `checkbox-${label.toLowerCase().replace(/\s+/g, "-")}`;
|
|
2886
|
-
return /* @__PURE__ */
|
|
2887
|
-
/* @__PURE__ */
|
|
2888
|
-
/* @__PURE__ */
|
|
2963
|
+
return /* @__PURE__ */ jsxs66("span", { className: [styles31.root, className].filter(Boolean).join(" "), children: [
|
|
2964
|
+
/* @__PURE__ */ jsxs66("span", { className: [styles31.box, checked ? styles31.checked : ""].filter(Boolean).join(" "), children: [
|
|
2965
|
+
/* @__PURE__ */ jsx85(
|
|
2889
2966
|
"input",
|
|
2890
2967
|
{
|
|
2891
2968
|
...rest,
|
|
@@ -2897,7 +2974,7 @@ function Checkbox({
|
|
|
2897
2974
|
onChange: (e) => onChange(e.target.checked)
|
|
2898
2975
|
}
|
|
2899
2976
|
),
|
|
2900
|
-
checked && /* @__PURE__ */
|
|
2977
|
+
checked && /* @__PURE__ */ jsx85("svg", { className: styles31.tick, viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx85(
|
|
2901
2978
|
"path",
|
|
2902
2979
|
{
|
|
2903
2980
|
d: "M1 4l3 3 5-6",
|
|
@@ -2908,7 +2985,7 @@ function Checkbox({
|
|
|
2908
2985
|
}
|
|
2909
2986
|
) })
|
|
2910
2987
|
] }),
|
|
2911
|
-
label && /* @__PURE__ */
|
|
2988
|
+
label && /* @__PURE__ */ jsx85(
|
|
2912
2989
|
"label",
|
|
2913
2990
|
{
|
|
2914
2991
|
htmlFor: inputId,
|
|
@@ -2923,79 +3000,1315 @@ function Checkbox({
|
|
|
2923
3000
|
] });
|
|
2924
3001
|
}
|
|
2925
3002
|
|
|
2926
|
-
// src/components/
|
|
2927
|
-
import
|
|
2928
|
-
import
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
3003
|
+
// src/components/RadioGroup/RadioGroup.tsx
|
|
3004
|
+
import { useId as useId4 } from "react";
|
|
3005
|
+
import styles32 from "./RadioGroup.module.css";
|
|
3006
|
+
import { jsx as jsx86, jsxs as jsxs67 } from "react/jsx-runtime";
|
|
3007
|
+
function RadioGroup({
|
|
3008
|
+
items,
|
|
3009
|
+
value,
|
|
3010
|
+
onChange,
|
|
3011
|
+
name,
|
|
3012
|
+
disabled,
|
|
3013
|
+
id,
|
|
2933
3014
|
className,
|
|
2934
|
-
|
|
3015
|
+
"aria-label": ariaLabel,
|
|
3016
|
+
"aria-labelledby": ariaLabelledBy,
|
|
3017
|
+
"aria-describedby": ariaDescribedBy,
|
|
3018
|
+
"aria-invalid": ariaInvalid,
|
|
3019
|
+
required
|
|
2935
3020
|
}) {
|
|
2936
|
-
|
|
3021
|
+
const generatedName = useId4();
|
|
3022
|
+
const groupName = name ?? generatedName;
|
|
3023
|
+
return /* @__PURE__ */ jsx86(
|
|
2937
3024
|
"div",
|
|
2938
3025
|
{
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
3026
|
+
id,
|
|
3027
|
+
role: "radiogroup",
|
|
3028
|
+
"aria-label": ariaLabel,
|
|
3029
|
+
"aria-labelledby": ariaLabelledBy,
|
|
3030
|
+
"aria-describedby": ariaDescribedBy,
|
|
3031
|
+
"aria-invalid": ariaInvalid,
|
|
3032
|
+
"aria-required": required,
|
|
3033
|
+
className: [styles32.root, className].filter(Boolean).join(" "),
|
|
3034
|
+
children: items.map((item) => {
|
|
3035
|
+
const checked = item.value === value;
|
|
3036
|
+
const itemDisabled = disabled || item.disabled;
|
|
3037
|
+
const inputId = `${groupName}-${item.value}`;
|
|
3038
|
+
return /* @__PURE__ */ jsxs67(
|
|
3039
|
+
"label",
|
|
2944
3040
|
{
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
)
|
|
3041
|
+
htmlFor: inputId,
|
|
3042
|
+
className: [styles32.option, itemDisabled ? styles32.disabled : ""].filter(Boolean).join(" "),
|
|
3043
|
+
children: [
|
|
3044
|
+
/* @__PURE__ */ jsxs67("span", { className: [styles32.circle, checked ? styles32.checked : ""].join(" "), children: [
|
|
3045
|
+
/* @__PURE__ */ jsx86(
|
|
3046
|
+
"input",
|
|
3047
|
+
{
|
|
3048
|
+
id: inputId,
|
|
3049
|
+
type: "radio",
|
|
3050
|
+
name: groupName,
|
|
3051
|
+
value: item.value,
|
|
3052
|
+
checked,
|
|
3053
|
+
disabled: itemDisabled,
|
|
3054
|
+
required,
|
|
3055
|
+
className: styles32.input,
|
|
3056
|
+
onChange: () => onChange(item.value)
|
|
3057
|
+
}
|
|
3058
|
+
),
|
|
3059
|
+
checked && /* @__PURE__ */ jsx86("span", { className: styles32.dot })
|
|
3060
|
+
] }),
|
|
3061
|
+
/* @__PURE__ */ jsx86("span", { className: styles32.optionLabel, children: item.label })
|
|
3062
|
+
]
|
|
3063
|
+
},
|
|
3064
|
+
item.value
|
|
3065
|
+
);
|
|
3066
|
+
})
|
|
2971
3067
|
}
|
|
2972
3068
|
);
|
|
2973
3069
|
}
|
|
2974
3070
|
|
|
2975
|
-
// src/components/
|
|
2976
|
-
import {
|
|
2977
|
-
import styles33 from "./
|
|
2978
|
-
import { jsx as
|
|
2979
|
-
function
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
|
|
3071
|
+
// src/components/Slider/Slider.tsx
|
|
3072
|
+
import { useId as useId5 } from "react";
|
|
3073
|
+
import styles33 from "./Slider.module.css";
|
|
3074
|
+
import { jsx as jsx87, jsxs as jsxs68 } from "react/jsx-runtime";
|
|
3075
|
+
function Slider({
|
|
3076
|
+
value,
|
|
3077
|
+
onChange,
|
|
3078
|
+
min,
|
|
3079
|
+
max,
|
|
3080
|
+
step,
|
|
2983
3081
|
label,
|
|
2984
|
-
hint,
|
|
2985
|
-
onFileSelect,
|
|
2986
|
-
ariaLabel,
|
|
2987
3082
|
disabled,
|
|
2988
|
-
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
3083
|
+
id,
|
|
3084
|
+
className,
|
|
3085
|
+
"aria-label": ariaLabel,
|
|
3086
|
+
"aria-describedby": ariaDescribedBy,
|
|
3087
|
+
"aria-invalid": ariaInvalid,
|
|
3088
|
+
required
|
|
3089
|
+
}) {
|
|
3090
|
+
const generatedId = useId5();
|
|
3091
|
+
const inputId = id ?? generatedId;
|
|
3092
|
+
const fillPercent = max > min ? (value - min) / (max - min) * 100 : 0;
|
|
3093
|
+
return /* @__PURE__ */ jsxs68("div", { className: [styles33.root, className].filter(Boolean).join(" "), children: [
|
|
3094
|
+
label && /* @__PURE__ */ jsx87("label", { htmlFor: inputId, className: styles33.label, children: label }),
|
|
3095
|
+
/* @__PURE__ */ jsx87(
|
|
3096
|
+
"input",
|
|
3097
|
+
{
|
|
3098
|
+
id: inputId,
|
|
3099
|
+
type: "range",
|
|
3100
|
+
min,
|
|
3101
|
+
max,
|
|
3102
|
+
step,
|
|
3103
|
+
value,
|
|
3104
|
+
disabled,
|
|
3105
|
+
required,
|
|
3106
|
+
"aria-label": label ? void 0 : ariaLabel,
|
|
3107
|
+
"aria-describedby": ariaDescribedBy,
|
|
3108
|
+
"aria-invalid": ariaInvalid,
|
|
3109
|
+
className: styles33.slider,
|
|
3110
|
+
style: { "--slider-fill": `${fillPercent}%` },
|
|
3111
|
+
onChange: (e) => onChange(Number(e.target.value))
|
|
3112
|
+
}
|
|
3113
|
+
)
|
|
3114
|
+
] });
|
|
3115
|
+
}
|
|
3116
|
+
|
|
3117
|
+
// src/components/Progress/Progress.tsx
|
|
3118
|
+
import styles34 from "./Progress.module.css";
|
|
3119
|
+
import { jsx as jsx88 } from "react/jsx-runtime";
|
|
3120
|
+
function Progress({ value, label, id, className }) {
|
|
3121
|
+
const clamped = Math.min(100, Math.max(0, value));
|
|
3122
|
+
return /* @__PURE__ */ jsx88(
|
|
3123
|
+
"div",
|
|
3124
|
+
{
|
|
3125
|
+
id,
|
|
3126
|
+
role: "progressbar",
|
|
3127
|
+
"aria-valuenow": clamped,
|
|
3128
|
+
"aria-valuemin": 0,
|
|
3129
|
+
"aria-valuemax": 100,
|
|
3130
|
+
"aria-label": label,
|
|
3131
|
+
className: [styles34.track, className].filter(Boolean).join(" "),
|
|
3132
|
+
children: /* @__PURE__ */ jsx88("div", { className: styles34.fill, style: { width: `${clamped}%` } })
|
|
3133
|
+
}
|
|
3134
|
+
);
|
|
3135
|
+
}
|
|
3136
|
+
|
|
3137
|
+
// src/components/Table/Table.tsx
|
|
3138
|
+
import styles35 from "./Table.module.css";
|
|
3139
|
+
import { jsx as jsx89 } from "react/jsx-runtime";
|
|
3140
|
+
function Table({ children, className }) {
|
|
3141
|
+
return /* @__PURE__ */ jsx89("div", { className: styles35.scrollContainer, children: /* @__PURE__ */ jsx89("table", { className: [styles35.table, className].filter(Boolean).join(" "), children }) });
|
|
3142
|
+
}
|
|
3143
|
+
function TableHead({ children }) {
|
|
3144
|
+
return /* @__PURE__ */ jsx89("thead", { className: styles35.head, children });
|
|
3145
|
+
}
|
|
3146
|
+
function TableBody({ children }) {
|
|
3147
|
+
return /* @__PURE__ */ jsx89("tbody", { className: styles35.body, children });
|
|
3148
|
+
}
|
|
3149
|
+
function TableRow({ children }) {
|
|
3150
|
+
return /* @__PURE__ */ jsx89("tr", { className: styles35.row, children });
|
|
3151
|
+
}
|
|
3152
|
+
function TableHeaderCell({ children, ...rest }) {
|
|
3153
|
+
return /* @__PURE__ */ jsx89("th", { className: styles35.th, ...rest, children });
|
|
3154
|
+
}
|
|
3155
|
+
function TableCell({ children, ...rest }) {
|
|
3156
|
+
return /* @__PURE__ */ jsx89("td", { className: styles35.td, ...rest, children });
|
|
3157
|
+
}
|
|
3158
|
+
|
|
3159
|
+
// src/components/Alert/Alert.tsx
|
|
3160
|
+
import styles36 from "./Alert.module.css";
|
|
3161
|
+
import { jsx as jsx90, jsxs as jsxs69 } from "react/jsx-runtime";
|
|
3162
|
+
var DEFAULT_ICON = {
|
|
3163
|
+
info: "info",
|
|
3164
|
+
success: "circle-check",
|
|
3165
|
+
warning: "alert-triangle",
|
|
3166
|
+
error: "circle-x",
|
|
3167
|
+
neutral: void 0
|
|
3168
|
+
};
|
|
3169
|
+
function Alert({ variant, heading, icon, children, id, className }) {
|
|
3170
|
+
const resolvedIcon = icon === void 0 ? DEFAULT_ICON[variant] : icon || void 0;
|
|
3171
|
+
return /* @__PURE__ */ jsxs69(
|
|
3172
|
+
"div",
|
|
3173
|
+
{
|
|
3174
|
+
id,
|
|
3175
|
+
role: variant === "error" ? "alert" : "status",
|
|
3176
|
+
className: [styles36.alert, styles36[variant], className].filter(Boolean).join(" "),
|
|
3177
|
+
children: [
|
|
3178
|
+
resolvedIcon && /* @__PURE__ */ jsx90(Icon, { name: resolvedIcon, size: "sm", className: styles36.icon, "aria-hidden": true }),
|
|
3179
|
+
/* @__PURE__ */ jsxs69("div", { className: styles36.content, children: [
|
|
3180
|
+
heading && /* @__PURE__ */ jsx90("p", { className: styles36.heading, children: heading }),
|
|
3181
|
+
/* @__PURE__ */ jsx90("div", { className: styles36.body, children })
|
|
3182
|
+
] })
|
|
3183
|
+
]
|
|
3184
|
+
}
|
|
3185
|
+
);
|
|
3186
|
+
}
|
|
3187
|
+
|
|
3188
|
+
// src/components/Breadcrumb/Breadcrumb.tsx
|
|
3189
|
+
import styles37 from "./Breadcrumb.module.css";
|
|
3190
|
+
import { jsx as jsx91, jsxs as jsxs70 } from "react/jsx-runtime";
|
|
3191
|
+
function Breadcrumb({
|
|
3192
|
+
items,
|
|
3193
|
+
renderLink,
|
|
3194
|
+
className,
|
|
3195
|
+
"aria-label": ariaLabel = "Breadcrumb"
|
|
3196
|
+
}) {
|
|
3197
|
+
return /* @__PURE__ */ jsx91("nav", { "aria-label": ariaLabel, className: [styles37.nav, className].filter(Boolean).join(" "), children: /* @__PURE__ */ jsx91("ol", { className: styles37.list, children: items.map((item, index) => {
|
|
3198
|
+
const isLast = index === items.length - 1;
|
|
3199
|
+
return /* @__PURE__ */ jsxs70("li", { className: styles37.item, children: [
|
|
3200
|
+
item.href ? renderLink ? renderLink(item, item.label) : /* @__PURE__ */ jsx91("a", { href: item.href, className: styles37.link, children: item.label }) : /* @__PURE__ */ jsx91("span", { className: styles37.current, "aria-current": "page", children: item.label }),
|
|
3201
|
+
!isLast && /* @__PURE__ */ jsx91(Icon, { name: "chevron-right", size: "xs", "aria-hidden": true, className: styles37.separator })
|
|
3202
|
+
] }, item.label + index);
|
|
3203
|
+
}) }) });
|
|
3204
|
+
}
|
|
3205
|
+
|
|
3206
|
+
// src/components/Pagination/Pagination.tsx
|
|
3207
|
+
import styles38 from "./Pagination.module.css";
|
|
3208
|
+
import { jsx as jsx92, jsxs as jsxs71 } from "react/jsx-runtime";
|
|
3209
|
+
function getPageList(page, totalPages) {
|
|
3210
|
+
if (totalPages <= 1) return [1];
|
|
3211
|
+
const siblingCount = 1;
|
|
3212
|
+
const startPage = Math.max(2, page - siblingCount);
|
|
3213
|
+
const endPage = Math.min(totalPages - 1, page + siblingCount);
|
|
3214
|
+
const pages = [1];
|
|
3215
|
+
if (startPage > 2) pages.push("ellipsis");
|
|
3216
|
+
for (let p = startPage; p <= endPage; p++) {
|
|
3217
|
+
pages.push(p);
|
|
3218
|
+
}
|
|
3219
|
+
if (endPage < totalPages - 1) pages.push("ellipsis");
|
|
3220
|
+
pages.push(totalPages);
|
|
3221
|
+
return pages;
|
|
3222
|
+
}
|
|
3223
|
+
function Pagination({
|
|
3224
|
+
page,
|
|
3225
|
+
totalPages,
|
|
3226
|
+
onChange,
|
|
3227
|
+
className,
|
|
3228
|
+
"aria-label": ariaLabel = "Pagination"
|
|
3229
|
+
}) {
|
|
3230
|
+
const pages = getPageList(page, totalPages);
|
|
3231
|
+
return /* @__PURE__ */ jsxs71("nav", { "aria-label": ariaLabel, className: [styles38.nav, className].filter(Boolean).join(" "), children: [
|
|
3232
|
+
/* @__PURE__ */ jsx92(
|
|
3233
|
+
"button",
|
|
3234
|
+
{
|
|
3235
|
+
type: "button",
|
|
3236
|
+
className: styles38.navButton,
|
|
3237
|
+
onClick: () => onChange(page - 1),
|
|
3238
|
+
disabled: page <= 1,
|
|
3239
|
+
"aria-label": "Previous page",
|
|
3240
|
+
children: /* @__PURE__ */ jsx92(Icon, { name: "chevron-left", size: "sm", "aria-hidden": true })
|
|
3241
|
+
}
|
|
3242
|
+
),
|
|
3243
|
+
/* @__PURE__ */ jsx92("ul", { className: styles38.list, children: pages.map(
|
|
3244
|
+
(p, index) => p === "ellipsis" ? /* @__PURE__ */ jsx92("li", { className: styles38.ellipsis, "aria-hidden": "true", children: "\u2026" }, `ellipsis-${index}`) : /* @__PURE__ */ jsx92("li", { children: /* @__PURE__ */ jsx92(
|
|
3245
|
+
"button",
|
|
3246
|
+
{
|
|
3247
|
+
type: "button",
|
|
3248
|
+
className: [styles38.pageButton, p === page ? styles38.active : ""].filter(Boolean).join(" "),
|
|
3249
|
+
onClick: () => onChange(p),
|
|
3250
|
+
"aria-current": p === page ? "page" : void 0,
|
|
3251
|
+
"aria-label": `Page ${p}`,
|
|
3252
|
+
children: p
|
|
3253
|
+
}
|
|
3254
|
+
) }, p)
|
|
3255
|
+
) }),
|
|
3256
|
+
/* @__PURE__ */ jsx92(
|
|
3257
|
+
"button",
|
|
3258
|
+
{
|
|
3259
|
+
type: "button",
|
|
3260
|
+
className: styles38.navButton,
|
|
3261
|
+
onClick: () => onChange(page + 1),
|
|
3262
|
+
disabled: page >= totalPages,
|
|
3263
|
+
"aria-label": "Next page",
|
|
3264
|
+
children: /* @__PURE__ */ jsx92(Icon, { name: "chevron-right", size: "sm", "aria-hidden": true })
|
|
3265
|
+
}
|
|
3266
|
+
)
|
|
3267
|
+
] });
|
|
3268
|
+
}
|
|
3269
|
+
|
|
3270
|
+
// src/components/Kbd/Kbd.tsx
|
|
3271
|
+
import styles39 from "./Kbd.module.css";
|
|
3272
|
+
import { jsx as jsx93 } from "react/jsx-runtime";
|
|
3273
|
+
function Kbd({ children, className }) {
|
|
3274
|
+
return /* @__PURE__ */ jsx93("kbd", { className: [styles39.kbd, className].filter(Boolean).join(" "), children });
|
|
3275
|
+
}
|
|
3276
|
+
|
|
3277
|
+
// src/components/Collapsible/Collapsible.tsx
|
|
3278
|
+
import { useId as useId6 } from "react";
|
|
3279
|
+
import styles40 from "./Collapsible.module.css";
|
|
3280
|
+
import { jsx as jsx94, jsxs as jsxs72 } from "react/jsx-runtime";
|
|
3281
|
+
function Collapsible({
|
|
3282
|
+
open,
|
|
3283
|
+
onOpenChange,
|
|
3284
|
+
trigger,
|
|
3285
|
+
children,
|
|
3286
|
+
id,
|
|
3287
|
+
className
|
|
3288
|
+
}) {
|
|
3289
|
+
const generatedId = useId6();
|
|
3290
|
+
const contentId = `${id ?? generatedId}-content`;
|
|
3291
|
+
return /* @__PURE__ */ jsxs72("div", { className: [styles40.root, className].filter(Boolean).join(" "), children: [
|
|
3292
|
+
/* @__PURE__ */ jsxs72(
|
|
3293
|
+
"button",
|
|
3294
|
+
{
|
|
3295
|
+
type: "button",
|
|
3296
|
+
className: styles40.trigger,
|
|
3297
|
+
"aria-expanded": open,
|
|
3298
|
+
"aria-controls": contentId,
|
|
3299
|
+
onClick: () => onOpenChange(!open),
|
|
3300
|
+
children: [
|
|
3301
|
+
/* @__PURE__ */ jsx94("span", { className: styles40.triggerLabel, children: trigger }),
|
|
3302
|
+
/* @__PURE__ */ jsx94(
|
|
3303
|
+
Icon,
|
|
3304
|
+
{
|
|
3305
|
+
name: "chevron-down",
|
|
3306
|
+
size: "sm",
|
|
3307
|
+
"aria-hidden": true,
|
|
3308
|
+
className: [styles40.chevron, open ? styles40.chevronOpen : ""].filter(Boolean).join(" ")
|
|
3309
|
+
}
|
|
3310
|
+
)
|
|
3311
|
+
]
|
|
3312
|
+
}
|
|
3313
|
+
),
|
|
3314
|
+
/* @__PURE__ */ jsx94(
|
|
3315
|
+
"div",
|
|
3316
|
+
{
|
|
3317
|
+
id: contentId,
|
|
3318
|
+
className: styles40.contentWrapper,
|
|
3319
|
+
"data-open": open,
|
|
3320
|
+
inert: !open || void 0,
|
|
3321
|
+
children: /* @__PURE__ */ jsx94("div", { className: styles40.contentInner, children })
|
|
3322
|
+
}
|
|
3323
|
+
)
|
|
3324
|
+
] });
|
|
3325
|
+
}
|
|
3326
|
+
|
|
3327
|
+
// src/components/Accordion/Accordion.tsx
|
|
3328
|
+
import styles41 from "./Accordion.module.css";
|
|
3329
|
+
import { jsx as jsx95 } from "react/jsx-runtime";
|
|
3330
|
+
function Accordion({ items, type, openIds, onOpenIdsChange, className }) {
|
|
3331
|
+
function handleOpenChange(id, open) {
|
|
3332
|
+
if (type === "single") {
|
|
3333
|
+
onOpenIdsChange(open ? [id] : []);
|
|
3334
|
+
return;
|
|
3335
|
+
}
|
|
3336
|
+
onOpenIdsChange(open ? [...openIds, id] : openIds.filter((openId) => openId !== id));
|
|
3337
|
+
}
|
|
3338
|
+
return /* @__PURE__ */ jsx95("div", { className: [styles41.root, className].filter(Boolean).join(" "), children: items.map((item) => /* @__PURE__ */ jsx95(
|
|
3339
|
+
Collapsible,
|
|
3340
|
+
{
|
|
3341
|
+
id: item.id,
|
|
3342
|
+
trigger: item.trigger,
|
|
3343
|
+
open: openIds.includes(item.id),
|
|
3344
|
+
onOpenChange: (open) => handleOpenChange(item.id, open),
|
|
3345
|
+
children: item.content
|
|
3346
|
+
},
|
|
3347
|
+
item.id
|
|
3348
|
+
)) });
|
|
3349
|
+
}
|
|
3350
|
+
|
|
3351
|
+
// src/components/AspectRatio/AspectRatio.tsx
|
|
3352
|
+
import styles42 from "./AspectRatio.module.css";
|
|
3353
|
+
import { jsx as jsx96 } from "react/jsx-runtime";
|
|
3354
|
+
function AspectRatio({ ratio, children, className }) {
|
|
3355
|
+
return /* @__PURE__ */ jsx96(
|
|
3356
|
+
"div",
|
|
3357
|
+
{
|
|
3358
|
+
className: [styles42.root, className].filter(Boolean).join(" "),
|
|
3359
|
+
style: { aspectRatio: ratio },
|
|
3360
|
+
children
|
|
3361
|
+
}
|
|
3362
|
+
);
|
|
3363
|
+
}
|
|
3364
|
+
|
|
3365
|
+
// src/components/ButtonGroup/ButtonGroup.tsx
|
|
3366
|
+
import styles43 from "./ButtonGroup.module.css";
|
|
3367
|
+
import { jsx as jsx97 } from "react/jsx-runtime";
|
|
3368
|
+
function ButtonGroup({ children, className, "aria-label": ariaLabel }) {
|
|
3369
|
+
return /* @__PURE__ */ jsx97(
|
|
3370
|
+
"div",
|
|
3371
|
+
{
|
|
3372
|
+
role: "group",
|
|
3373
|
+
"aria-label": ariaLabel,
|
|
3374
|
+
className: [styles43.root, className].filter(Boolean).join(" "),
|
|
3375
|
+
children
|
|
3376
|
+
}
|
|
3377
|
+
);
|
|
3378
|
+
}
|
|
3379
|
+
|
|
3380
|
+
// src/components/Item/Item.tsx
|
|
3381
|
+
import styles44 from "./Item.module.css";
|
|
3382
|
+
import { Fragment as Fragment2, jsx as jsx98, jsxs as jsxs73 } from "react/jsx-runtime";
|
|
3383
|
+
function Item({
|
|
3384
|
+
leading,
|
|
3385
|
+
title,
|
|
3386
|
+
description,
|
|
3387
|
+
trailing,
|
|
3388
|
+
onClick,
|
|
3389
|
+
disabled,
|
|
3390
|
+
className
|
|
3391
|
+
}) {
|
|
3392
|
+
const interactive = Boolean(onClick);
|
|
3393
|
+
const classes = [styles44.root, interactive ? styles44.interactive : "", className].filter(Boolean).join(" ");
|
|
3394
|
+
const content = /* @__PURE__ */ jsxs73(Fragment2, { children: [
|
|
3395
|
+
leading && /* @__PURE__ */ jsx98("span", { className: styles44.leading, children: leading }),
|
|
3396
|
+
/* @__PURE__ */ jsxs73("span", { className: styles44.content, children: [
|
|
3397
|
+
/* @__PURE__ */ jsx98("span", { className: styles44.title, children: title }),
|
|
3398
|
+
description && /* @__PURE__ */ jsx98("span", { className: styles44.description, children: description })
|
|
3399
|
+
] }),
|
|
3400
|
+
trailing && /* @__PURE__ */ jsx98("span", { className: styles44.trailing, children: trailing })
|
|
3401
|
+
] });
|
|
3402
|
+
if (interactive) {
|
|
3403
|
+
return /* @__PURE__ */ jsx98("button", { type: "button", onClick, disabled, className: classes, children: content });
|
|
3404
|
+
}
|
|
3405
|
+
return /* @__PURE__ */ jsx98("div", { className: classes, children: content });
|
|
3406
|
+
}
|
|
3407
|
+
|
|
3408
|
+
// src/components/Label/Label.tsx
|
|
3409
|
+
import styles45 from "./Label.module.css";
|
|
3410
|
+
import { jsx as jsx99 } from "react/jsx-runtime";
|
|
3411
|
+
function Label({ disabled, className, children, ...rest }) {
|
|
3412
|
+
return /* @__PURE__ */ jsx99(
|
|
3413
|
+
"label",
|
|
3414
|
+
{
|
|
3415
|
+
className: [styles45.label, disabled ? styles45.disabled : "", className].filter(Boolean).join(" "),
|
|
3416
|
+
...rest,
|
|
3417
|
+
children
|
|
3418
|
+
}
|
|
3419
|
+
);
|
|
3420
|
+
}
|
|
3421
|
+
|
|
3422
|
+
// src/components/ScrollArea/ScrollArea.tsx
|
|
3423
|
+
import styles46 from "./ScrollArea.module.css";
|
|
3424
|
+
import { jsx as jsx100 } from "react/jsx-runtime";
|
|
3425
|
+
function ScrollArea({ children, maxHeight, maxWidth, className }) {
|
|
3426
|
+
const style = {};
|
|
3427
|
+
if (maxHeight !== void 0) style.maxHeight = maxHeight;
|
|
3428
|
+
if (maxWidth !== void 0) style.maxWidth = maxWidth;
|
|
3429
|
+
return /* @__PURE__ */ jsx100("div", { className: [styles46.root, className].filter(Boolean).join(" "), style, children });
|
|
3430
|
+
}
|
|
3431
|
+
|
|
3432
|
+
// src/components/Typography/Typography.tsx
|
|
3433
|
+
import styles47 from "./Typography.module.css";
|
|
3434
|
+
import { jsx as jsx101 } from "react/jsx-runtime";
|
|
3435
|
+
var DEFAULT_TAG = {
|
|
3436
|
+
h1: "h1",
|
|
3437
|
+
h2: "h2",
|
|
3438
|
+
h3: "h3",
|
|
3439
|
+
h4: "h4",
|
|
3440
|
+
body: "p",
|
|
3441
|
+
caption: "p",
|
|
3442
|
+
label: "span"
|
|
3443
|
+
};
|
|
3444
|
+
function Typography({ variant, children, as, className }) {
|
|
3445
|
+
const Tag = as ?? DEFAULT_TAG[variant];
|
|
3446
|
+
return /* @__PURE__ */ jsx101(Tag, { className: [styles47[variant], className].filter(Boolean).join(" "), children });
|
|
3447
|
+
}
|
|
3448
|
+
|
|
3449
|
+
// src/components/Marker/Marker.tsx
|
|
3450
|
+
import styles48 from "./Marker.module.css";
|
|
3451
|
+
import { jsx as jsx102 } from "react/jsx-runtime";
|
|
3452
|
+
function Marker({ index, label, onClick, className }) {
|
|
3453
|
+
const classes = [styles48.marker, className].filter(Boolean).join(" ");
|
|
3454
|
+
if (onClick) {
|
|
3455
|
+
return /* @__PURE__ */ jsx102("button", { type: "button", onClick, "aria-label": label, className: classes, children: index });
|
|
3456
|
+
}
|
|
3457
|
+
return /* @__PURE__ */ jsx102("span", { "aria-label": label, className: classes, children: index });
|
|
3458
|
+
}
|
|
3459
|
+
|
|
3460
|
+
// src/components/Message/Message.tsx
|
|
3461
|
+
import styles49 from "./Message.module.css";
|
|
3462
|
+
import { jsx as jsx103, jsxs as jsxs74 } from "react/jsx-runtime";
|
|
3463
|
+
function Message({ sender, children, pending, actions, className }) {
|
|
3464
|
+
return /* @__PURE__ */ jsxs74("div", { className: [styles49.row, styles49[sender], className].filter(Boolean).join(" "), children: [
|
|
3465
|
+
/* @__PURE__ */ jsx103("div", { className: styles49.bubble, children: pending ? /* @__PURE__ */ jsxs74("span", { className: styles49.typingDots, "aria-label": "Thinking", children: [
|
|
3466
|
+
/* @__PURE__ */ jsx103("span", { className: styles49.dot }),
|
|
3467
|
+
/* @__PURE__ */ jsx103("span", { className: styles49.dot }),
|
|
3468
|
+
/* @__PURE__ */ jsx103("span", { className: styles49.dot })
|
|
3469
|
+
] }) : children }),
|
|
3470
|
+
actions && !pending && /* @__PURE__ */ jsx103("div", { className: styles49.actions, children: actions })
|
|
3471
|
+
] });
|
|
3472
|
+
}
|
|
3473
|
+
|
|
3474
|
+
// src/components/MessageScroller/MessageScroller.tsx
|
|
3475
|
+
import { useEffect as useEffect11, useRef as useRef10, useState as useState10 } from "react";
|
|
3476
|
+
import styles50 from "./MessageScroller.module.css";
|
|
3477
|
+
import { jsx as jsx104, jsxs as jsxs75 } from "react/jsx-runtime";
|
|
3478
|
+
var NEAR_BOTTOM_THRESHOLD_PX = 80;
|
|
3479
|
+
function MessageScroller({ children, className }) {
|
|
3480
|
+
const containerRef = useRef10(null);
|
|
3481
|
+
const isNearBottomRef = useRef10(true);
|
|
3482
|
+
const [hasNewMessages, setHasNewMessages] = useState10(false);
|
|
3483
|
+
useEffect11(() => {
|
|
3484
|
+
const el = containerRef.current;
|
|
3485
|
+
if (!el) return;
|
|
3486
|
+
if (isNearBottomRef.current) {
|
|
3487
|
+
el.scrollTop = el.scrollHeight;
|
|
3488
|
+
setHasNewMessages(false);
|
|
3489
|
+
} else {
|
|
3490
|
+
setHasNewMessages(true);
|
|
3491
|
+
}
|
|
3492
|
+
}, [children]);
|
|
3493
|
+
function handleScroll(event) {
|
|
3494
|
+
const el = event.currentTarget;
|
|
3495
|
+
const distanceFromBottom = el.scrollHeight - el.scrollTop - el.clientHeight;
|
|
3496
|
+
isNearBottomRef.current = distanceFromBottom < NEAR_BOTTOM_THRESHOLD_PX;
|
|
3497
|
+
if (isNearBottomRef.current) {
|
|
3498
|
+
setHasNewMessages(false);
|
|
3499
|
+
}
|
|
3500
|
+
}
|
|
3501
|
+
function scrollToBottom() {
|
|
3502
|
+
const el = containerRef.current;
|
|
3503
|
+
if (!el) return;
|
|
3504
|
+
el.scrollTo({ top: el.scrollHeight, behavior: "smooth" });
|
|
3505
|
+
isNearBottomRef.current = true;
|
|
3506
|
+
setHasNewMessages(false);
|
|
3507
|
+
}
|
|
3508
|
+
return /* @__PURE__ */ jsxs75("div", { className: [styles50.root, className].filter(Boolean).join(" "), children: [
|
|
3509
|
+
/* @__PURE__ */ jsx104("div", { className: styles50.scrollContainer, ref: containerRef, onScroll: handleScroll, children }),
|
|
3510
|
+
hasNewMessages && /* @__PURE__ */ jsx104("button", { type: "button", className: styles50.jumpButton, onClick: scrollToBottom, children: "New messages \u2193" })
|
|
3511
|
+
] });
|
|
3512
|
+
}
|
|
3513
|
+
|
|
3514
|
+
// src/components/HoverCard/HoverCard.tsx
|
|
3515
|
+
import { cloneElement, useEffect as useEffect12, useRef as useRef11, useState as useState11 } from "react";
|
|
3516
|
+
import styles51 from "./HoverCard.module.css";
|
|
3517
|
+
import { jsx as jsx105 } from "react/jsx-runtime";
|
|
3518
|
+
var OPEN_DELAY_MS = 400;
|
|
3519
|
+
var CLOSE_DELAY_MS = 150;
|
|
3520
|
+
function useHoverCapable() {
|
|
3521
|
+
const [hoverCapable, setHoverCapable] = useState11(true);
|
|
3522
|
+
useEffect12(() => {
|
|
3523
|
+
const mql = window.matchMedia("(hover: hover)");
|
|
3524
|
+
setHoverCapable(mql.matches);
|
|
3525
|
+
function handleChange(e) {
|
|
3526
|
+
setHoverCapable(e.matches);
|
|
3527
|
+
}
|
|
3528
|
+
mql.addEventListener("change", handleChange);
|
|
3529
|
+
return () => mql.removeEventListener("change", handleChange);
|
|
3530
|
+
}, []);
|
|
3531
|
+
return hoverCapable;
|
|
3532
|
+
}
|
|
3533
|
+
function HoverCard({
|
|
3534
|
+
trigger,
|
|
3535
|
+
children,
|
|
3536
|
+
align,
|
|
3537
|
+
width,
|
|
3538
|
+
"aria-label": ariaLabel
|
|
3539
|
+
}) {
|
|
3540
|
+
const [open, setOpen] = useState11(false);
|
|
3541
|
+
const hoverCapable = useHoverCapable();
|
|
3542
|
+
const openTimer = useRef11(void 0);
|
|
3543
|
+
const closeTimer = useRef11(void 0);
|
|
3544
|
+
function scheduleOpen() {
|
|
3545
|
+
clearTimeout(closeTimer.current);
|
|
3546
|
+
openTimer.current = setTimeout(() => setOpen(true), OPEN_DELAY_MS);
|
|
3547
|
+
}
|
|
3548
|
+
function scheduleClose() {
|
|
3549
|
+
clearTimeout(openTimer.current);
|
|
3550
|
+
closeTimer.current = setTimeout(() => setOpen(false), CLOSE_DELAY_MS);
|
|
3551
|
+
}
|
|
3552
|
+
function cancelScheduledClose() {
|
|
3553
|
+
clearTimeout(closeTimer.current);
|
|
3554
|
+
}
|
|
3555
|
+
const triggerHandlers = hoverCapable ? {
|
|
3556
|
+
onMouseEnter: scheduleOpen,
|
|
3557
|
+
onMouseLeave: scheduleClose,
|
|
3558
|
+
onFocus: () => setOpen(true),
|
|
3559
|
+
onBlur: scheduleClose
|
|
3560
|
+
} : { onClick: () => setOpen((o) => !o) };
|
|
3561
|
+
const wrappedTrigger = cloneElement(trigger, triggerHandlers);
|
|
3562
|
+
return /* @__PURE__ */ jsx105(
|
|
3563
|
+
"div",
|
|
3564
|
+
{
|
|
3565
|
+
className: styles51.root,
|
|
3566
|
+
onMouseEnter: hoverCapable ? cancelScheduledClose : void 0,
|
|
3567
|
+
onMouseLeave: hoverCapable ? scheduleClose : void 0,
|
|
3568
|
+
children: /* @__PURE__ */ jsx105(
|
|
3569
|
+
Popover,
|
|
3570
|
+
{
|
|
3571
|
+
trigger: wrappedTrigger,
|
|
3572
|
+
open,
|
|
3573
|
+
onClose: () => setOpen(false),
|
|
3574
|
+
align,
|
|
3575
|
+
width,
|
|
3576
|
+
"aria-label": ariaLabel,
|
|
3577
|
+
children
|
|
3578
|
+
}
|
|
3579
|
+
)
|
|
3580
|
+
}
|
|
3581
|
+
);
|
|
3582
|
+
}
|
|
3583
|
+
|
|
3584
|
+
// src/components/ContextMenu/ContextMenu.tsx
|
|
3585
|
+
import { cloneElement as cloneElement2, useState as useState12 } from "react";
|
|
3586
|
+
import { Fragment as Fragment3, jsx as jsx106, jsxs as jsxs76 } from "react/jsx-runtime";
|
|
3587
|
+
function ContextMenu({ children, items, "aria-label": ariaLabel }) {
|
|
3588
|
+
const isMobile = useIsMobile();
|
|
3589
|
+
const [open, setOpen] = useState12(false);
|
|
3590
|
+
const [point, setPoint] = useState12({ x: 0, y: 0 });
|
|
3591
|
+
const longPressHandlers = useLongPress({
|
|
3592
|
+
onLongPress: () => setOpen(true),
|
|
3593
|
+
disabled: !isMobile
|
|
3594
|
+
});
|
|
3595
|
+
function handleContextMenu(e) {
|
|
3596
|
+
e.preventDefault();
|
|
3597
|
+
setPoint({ x: e.clientX, y: e.clientY });
|
|
3598
|
+
setOpen(true);
|
|
3599
|
+
}
|
|
3600
|
+
const wrappedChild = cloneElement2(
|
|
3601
|
+
children,
|
|
3602
|
+
isMobile ? longPressHandlers : { onContextMenu: handleContextMenu }
|
|
3603
|
+
);
|
|
3604
|
+
const list = /* @__PURE__ */ jsx106(
|
|
3605
|
+
MenuEntries,
|
|
3606
|
+
{
|
|
3607
|
+
items,
|
|
3608
|
+
onSelect: (entry) => {
|
|
3609
|
+
setOpen(false);
|
|
3610
|
+
entry.onSelect();
|
|
3611
|
+
}
|
|
3612
|
+
}
|
|
3613
|
+
);
|
|
3614
|
+
if (isMobile) {
|
|
3615
|
+
return /* @__PURE__ */ jsxs76(Fragment3, { children: [
|
|
3616
|
+
wrappedChild,
|
|
3617
|
+
/* @__PURE__ */ jsx106(Drawer, { open, onClose: () => setOpen(false), "aria-label": ariaLabel, children: list })
|
|
3618
|
+
] });
|
|
3619
|
+
}
|
|
3620
|
+
return /* @__PURE__ */ jsxs76(Fragment3, { children: [
|
|
3621
|
+
wrappedChild,
|
|
3622
|
+
open && /* @__PURE__ */ jsx106("div", { style: { position: "fixed", left: point.x, top: point.y, width: 0, height: 0 }, children: /* @__PURE__ */ jsx106(
|
|
3623
|
+
Popover,
|
|
3624
|
+
{
|
|
3625
|
+
trigger: /* @__PURE__ */ jsx106("span", {}),
|
|
3626
|
+
open,
|
|
3627
|
+
onClose: () => setOpen(false),
|
|
3628
|
+
"aria-label": ariaLabel,
|
|
3629
|
+
children: list
|
|
3630
|
+
}
|
|
3631
|
+
) })
|
|
3632
|
+
] });
|
|
3633
|
+
}
|
|
3634
|
+
|
|
3635
|
+
// src/components/NavigationMenu/NavigationMenu.tsx
|
|
3636
|
+
import { useRef as useRef12, useState as useState13 } from "react";
|
|
3637
|
+
import styles52 from "./NavigationMenu.module.css";
|
|
3638
|
+
import { jsx as jsx107 } from "react/jsx-runtime";
|
|
3639
|
+
function NavigationMenu({
|
|
3640
|
+
items,
|
|
3641
|
+
renderLink,
|
|
3642
|
+
"aria-label": ariaLabel
|
|
3643
|
+
}) {
|
|
3644
|
+
const [openIndex, setOpenIndex] = useState13(null);
|
|
3645
|
+
const triggerRefs = useRef12([]);
|
|
3646
|
+
function handleKeyDown(e, index) {
|
|
3647
|
+
if (e.key === "Escape") {
|
|
3648
|
+
setOpenIndex(null);
|
|
3649
|
+
triggerRefs.current[index]?.focus();
|
|
3650
|
+
return;
|
|
3651
|
+
}
|
|
3652
|
+
if (e.key === "ArrowRight" || e.key === "ArrowLeft") {
|
|
3653
|
+
e.preventDefault();
|
|
3654
|
+
const direction = e.key === "ArrowRight" ? 1 : -1;
|
|
3655
|
+
const nextIndex = (index + direction + items.length) % items.length;
|
|
3656
|
+
triggerRefs.current[nextIndex]?.focus();
|
|
3657
|
+
}
|
|
3658
|
+
}
|
|
3659
|
+
return /* @__PURE__ */ jsx107("nav", { "aria-label": ariaLabel, className: styles52.nav, children: /* @__PURE__ */ jsx107("ul", { className: styles52.list, children: items.map((item, index) => {
|
|
3660
|
+
if (!item.content) {
|
|
3661
|
+
const linkChildren = item.label;
|
|
3662
|
+
return /* @__PURE__ */ jsx107("li", { children: item.href && renderLink ? renderLink(item.href, linkChildren) : /* @__PURE__ */ jsx107("a", { href: item.href, className: styles52.link, children: linkChildren }) }, item.label);
|
|
3663
|
+
}
|
|
3664
|
+
const isOpen = openIndex === index;
|
|
3665
|
+
return /* @__PURE__ */ jsx107("li", { children: /* @__PURE__ */ jsx107(
|
|
3666
|
+
Popover,
|
|
3667
|
+
{
|
|
3668
|
+
"aria-label": item.label,
|
|
3669
|
+
open: isOpen,
|
|
3670
|
+
onClose: () => setOpenIndex((current) => current === index ? null : current),
|
|
3671
|
+
trigger: /* @__PURE__ */ jsx107(
|
|
3672
|
+
"button",
|
|
3673
|
+
{
|
|
3674
|
+
ref: (el) => {
|
|
3675
|
+
triggerRefs.current[index] = el;
|
|
3676
|
+
},
|
|
3677
|
+
type: "button",
|
|
3678
|
+
className: [styles52.trigger, isOpen ? styles52.triggerOpen : ""].filter(Boolean).join(" "),
|
|
3679
|
+
"aria-expanded": isOpen,
|
|
3680
|
+
onClick: () => setOpenIndex((current) => current === index ? null : index),
|
|
3681
|
+
onMouseEnter: () => {
|
|
3682
|
+
setOpenIndex((current) => current !== null ? index : current);
|
|
3683
|
+
},
|
|
3684
|
+
onKeyDown: (e) => handleKeyDown(e, index),
|
|
3685
|
+
children: item.label
|
|
3686
|
+
}
|
|
3687
|
+
),
|
|
3688
|
+
children: typeof item.content === "function" ? item.content(() => setOpenIndex(null)) : item.content
|
|
3689
|
+
}
|
|
3690
|
+
) }, item.label);
|
|
3691
|
+
}) }) });
|
|
3692
|
+
}
|
|
3693
|
+
|
|
3694
|
+
// src/components/Menubar/Menubar.tsx
|
|
3695
|
+
import { jsx as jsx108 } from "react/jsx-runtime";
|
|
3696
|
+
function Menubar({ menus, "aria-label": ariaLabel = "Menu bar" }) {
|
|
3697
|
+
return /* @__PURE__ */ jsx108(
|
|
3698
|
+
NavigationMenu,
|
|
3699
|
+
{
|
|
3700
|
+
"aria-label": ariaLabel,
|
|
3701
|
+
items: menus.map((menu) => ({
|
|
3702
|
+
label: menu.label,
|
|
3703
|
+
content: (close) => /* @__PURE__ */ jsx108(
|
|
3704
|
+
MenuEntries,
|
|
3705
|
+
{
|
|
3706
|
+
items: menu.items,
|
|
3707
|
+
onSelect: (entry) => {
|
|
3708
|
+
close();
|
|
3709
|
+
entry.onSelect();
|
|
3710
|
+
}
|
|
3711
|
+
}
|
|
3712
|
+
)
|
|
3713
|
+
}))
|
|
3714
|
+
}
|
|
3715
|
+
);
|
|
3716
|
+
}
|
|
3717
|
+
|
|
3718
|
+
// src/components/Command/Command.tsx
|
|
3719
|
+
import { useEffect as useEffect13, useId as useId7, useMemo as useMemo3, useRef as useRef13, useState as useState14 } from "react";
|
|
3720
|
+
import styles53 from "./Command.module.css";
|
|
3721
|
+
import { jsx as jsx109, jsxs as jsxs77 } from "react/jsx-runtime";
|
|
3722
|
+
function matches(item, query) {
|
|
3723
|
+
if (!query) return true;
|
|
3724
|
+
const haystack = `${item.label} ${item.keywords ?? ""}`.toLowerCase();
|
|
3725
|
+
return haystack.includes(query.toLowerCase());
|
|
3726
|
+
}
|
|
3727
|
+
function Command({
|
|
3728
|
+
open,
|
|
3729
|
+
onClose,
|
|
3730
|
+
items,
|
|
3731
|
+
placeholder = "Type a command\u2026",
|
|
3732
|
+
"aria-label": ariaLabel = "Command palette"
|
|
3733
|
+
}) {
|
|
3734
|
+
const [query, setQuery] = useState14("");
|
|
3735
|
+
const [highlightedIndex, setHighlightedIndex] = useState14(0);
|
|
3736
|
+
const inputRef = useRef13(null);
|
|
3737
|
+
const listId = useId7();
|
|
3738
|
+
const filtered = useMemo3(() => items.filter((item) => matches(item, query)), [items, query]);
|
|
3739
|
+
useEffect13(() => {
|
|
3740
|
+
setHighlightedIndex(0);
|
|
3741
|
+
}, [query, open]);
|
|
3742
|
+
useEffect13(() => {
|
|
3743
|
+
if (open) {
|
|
3744
|
+
setQuery("");
|
|
3745
|
+
requestAnimationFrame(() => inputRef.current?.focus());
|
|
3746
|
+
}
|
|
3747
|
+
}, [open]);
|
|
3748
|
+
function handleKeyDown(e) {
|
|
3749
|
+
if (e.key === "ArrowDown") {
|
|
3750
|
+
e.preventDefault();
|
|
3751
|
+
setHighlightedIndex((i) => Math.min(i + 1, filtered.length - 1));
|
|
3752
|
+
} else if (e.key === "ArrowUp") {
|
|
3753
|
+
e.preventDefault();
|
|
3754
|
+
setHighlightedIndex((i) => Math.max(i - 1, 0));
|
|
3755
|
+
} else if (e.key === "Enter") {
|
|
3756
|
+
e.preventDefault();
|
|
3757
|
+
const item = filtered[highlightedIndex];
|
|
3758
|
+
if (item) {
|
|
3759
|
+
onClose();
|
|
3760
|
+
item.onSelect();
|
|
3761
|
+
}
|
|
3762
|
+
}
|
|
3763
|
+
}
|
|
3764
|
+
const groups = useMemo3(() => {
|
|
3765
|
+
const order = [];
|
|
3766
|
+
const byGroup = /* @__PURE__ */ new Map();
|
|
3767
|
+
for (const item of filtered) {
|
|
3768
|
+
let bucket = byGroup.get(item.group);
|
|
3769
|
+
if (!bucket) {
|
|
3770
|
+
bucket = [];
|
|
3771
|
+
order.push(item.group);
|
|
3772
|
+
byGroup.set(item.group, bucket);
|
|
3773
|
+
}
|
|
3774
|
+
bucket.push(item);
|
|
3775
|
+
}
|
|
3776
|
+
return order.map((group) => ({ group, items: byGroup.get(group) ?? [] }));
|
|
3777
|
+
}, [filtered]);
|
|
3778
|
+
const highlightedId = filtered[highlightedIndex] ? `${listId}-${filtered[highlightedIndex].id}` : void 0;
|
|
3779
|
+
return /* @__PURE__ */ jsx109(Dialog, { open, onClose, "aria-label": ariaLabel, size: "sm", children: /* @__PURE__ */ jsxs77("div", { className: styles53.root, children: [
|
|
3780
|
+
/* @__PURE__ */ jsx109(
|
|
3781
|
+
"input",
|
|
3782
|
+
{
|
|
3783
|
+
ref: inputRef,
|
|
3784
|
+
type: "text",
|
|
3785
|
+
role: "combobox",
|
|
3786
|
+
"aria-expanded": filtered.length > 0,
|
|
3787
|
+
"aria-controls": listId,
|
|
3788
|
+
"aria-activedescendant": highlightedId,
|
|
3789
|
+
"aria-autocomplete": "list",
|
|
3790
|
+
className: styles53.input,
|
|
3791
|
+
placeholder,
|
|
3792
|
+
value: query,
|
|
3793
|
+
onChange: (e) => setQuery(e.target.value),
|
|
3794
|
+
onKeyDown: handleKeyDown
|
|
3795
|
+
}
|
|
3796
|
+
),
|
|
3797
|
+
/* @__PURE__ */ jsxs77("ul", { id: listId, role: "listbox", className: styles53.list, children: [
|
|
3798
|
+
filtered.length === 0 && /* @__PURE__ */ jsx109("li", { className: styles53.empty, children: "No matching commands." }),
|
|
3799
|
+
groups.map(({ group, items: groupItems }) => /* @__PURE__ */ jsxs77("li", { children: [
|
|
3800
|
+
group && /* @__PURE__ */ jsx109("div", { className: styles53.groupLabel, children: group }),
|
|
3801
|
+
/* @__PURE__ */ jsx109("ul", { className: styles53.groupList, children: groupItems.map((item) => {
|
|
3802
|
+
const index = filtered.indexOf(item);
|
|
3803
|
+
const isHighlighted = index === highlightedIndex;
|
|
3804
|
+
return /* @__PURE__ */ jsx109("li", { children: /* @__PURE__ */ jsxs77(
|
|
3805
|
+
"button",
|
|
3806
|
+
{
|
|
3807
|
+
id: `${listId}-${item.id}`,
|
|
3808
|
+
type: "button",
|
|
3809
|
+
role: "option",
|
|
3810
|
+
"aria-selected": isHighlighted,
|
|
3811
|
+
className: [styles53.item, isHighlighted ? styles53.itemHighlighted : ""].filter(Boolean).join(" "),
|
|
3812
|
+
onMouseEnter: () => setHighlightedIndex(index),
|
|
3813
|
+
onClick: () => {
|
|
3814
|
+
onClose();
|
|
3815
|
+
item.onSelect();
|
|
3816
|
+
},
|
|
3817
|
+
children: [
|
|
3818
|
+
item.icon && /* @__PURE__ */ jsx109(Icon, { name: item.icon, size: "sm", "aria-hidden": true }),
|
|
3819
|
+
item.label
|
|
3820
|
+
]
|
|
3821
|
+
}
|
|
3822
|
+
) }, item.id);
|
|
3823
|
+
}) })
|
|
3824
|
+
] }, group ?? "__ungrouped"))
|
|
3825
|
+
] })
|
|
3826
|
+
] }) });
|
|
3827
|
+
}
|
|
3828
|
+
|
|
3829
|
+
// src/components/Resizable/Resizable.tsx
|
|
3830
|
+
import { Children, isValidElement, useEffect as useEffect14, useRef as useRef14, useState as useState15 } from "react";
|
|
3831
|
+
import styles54 from "./Resizable.module.css";
|
|
3832
|
+
import { jsx as jsx110 } from "react/jsx-runtime";
|
|
3833
|
+
function ResizablePanel({ children, className, style }) {
|
|
3834
|
+
return /* @__PURE__ */ jsx110("div", { className: [styles54.panel, className].filter(Boolean).join(" "), style, children });
|
|
3835
|
+
}
|
|
3836
|
+
function ResizableHandle({
|
|
3837
|
+
"aria-label": ariaLabel = "Resize panels",
|
|
3838
|
+
direction = "horizontal",
|
|
3839
|
+
onPointerDown,
|
|
3840
|
+
onKeyDown,
|
|
3841
|
+
"aria-valuenow": valueNow,
|
|
3842
|
+
"aria-valuemin": valueMin,
|
|
3843
|
+
"aria-valuemax": valueMax
|
|
3844
|
+
}) {
|
|
3845
|
+
return (
|
|
3846
|
+
/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex -- WAI-ARIA "window splitter" pattern: a focusable, keyboard-operable separator is the documented exception to role="separator" being non-interactive (https://www.w3.org/WAI/ARIA/apg/patterns/windowsplitter/). */
|
|
3847
|
+
/* @__PURE__ */ jsx110(
|
|
3848
|
+
"div",
|
|
3849
|
+
{
|
|
3850
|
+
className: [styles54.handle, direction === "vertical" ? styles54.handleVertical : ""].filter(Boolean).join(" "),
|
|
3851
|
+
role: "separator",
|
|
3852
|
+
tabIndex: 0,
|
|
3853
|
+
"aria-orientation": direction === "horizontal" ? "vertical" : "horizontal",
|
|
3854
|
+
"aria-label": ariaLabel,
|
|
3855
|
+
"aria-valuenow": valueNow !== void 0 ? Math.round(valueNow) : void 0,
|
|
3856
|
+
"aria-valuemin": valueMin,
|
|
3857
|
+
"aria-valuemax": valueMax,
|
|
3858
|
+
onPointerDown,
|
|
3859
|
+
onKeyDown
|
|
3860
|
+
}
|
|
3861
|
+
)
|
|
3862
|
+
);
|
|
3863
|
+
}
|
|
3864
|
+
var clamp = (value, min, max) => Math.min(Math.max(value, min), max);
|
|
3865
|
+
function ResizablePanelGroup({ direction, children, className }) {
|
|
3866
|
+
const elements = Children.toArray(children).filter(isValidElement);
|
|
3867
|
+
const panelCount = elements.filter((el) => el.type === ResizablePanel).length;
|
|
3868
|
+
const constraints = elements.filter((el) => el.type === ResizablePanel).map((el) => {
|
|
3869
|
+
const props = el.props;
|
|
3870
|
+
return {
|
|
3871
|
+
defaultSize: props.defaultSize ?? 100 / panelCount,
|
|
3872
|
+
minSize: props.minSize ?? 10,
|
|
3873
|
+
maxSize: props.maxSize ?? 90
|
|
3874
|
+
};
|
|
3875
|
+
});
|
|
3876
|
+
const [sizes, setSizes] = useState15(() => constraints.map((c) => c.defaultSize));
|
|
3877
|
+
if (sizes.length !== constraints.length) {
|
|
3878
|
+
setSizes(constraints.map((c) => c.defaultSize));
|
|
3879
|
+
}
|
|
3880
|
+
const containerRef = useRef14(null);
|
|
3881
|
+
const constraintsRef = useRef14(constraints);
|
|
3882
|
+
constraintsRef.current = constraints;
|
|
3883
|
+
const directionRef = useRef14(direction);
|
|
3884
|
+
directionRef.current = direction;
|
|
3885
|
+
const dragState = useRef14(null);
|
|
3886
|
+
function applyResize(handleIndex2, nextA, combined) {
|
|
3887
|
+
const a = constraintsRef.current[handleIndex2];
|
|
3888
|
+
const b = constraintsRef.current[handleIndex2 + 1];
|
|
3889
|
+
if (!a || !b) return;
|
|
3890
|
+
const clampedA = clamp(
|
|
3891
|
+
nextA,
|
|
3892
|
+
Math.max(a.minSize, combined - b.maxSize),
|
|
3893
|
+
Math.min(a.maxSize, combined - b.minSize)
|
|
3894
|
+
);
|
|
3895
|
+
setSizes((prev) => {
|
|
3896
|
+
const next = [...prev];
|
|
3897
|
+
next[handleIndex2] = clampedA;
|
|
3898
|
+
next[handleIndex2 + 1] = combined - clampedA;
|
|
3899
|
+
return next;
|
|
3900
|
+
});
|
|
3901
|
+
}
|
|
3902
|
+
useEffect14(() => {
|
|
3903
|
+
function handlePointerMove(event) {
|
|
3904
|
+
const drag = dragState.current;
|
|
3905
|
+
const rect = containerRef.current?.getBoundingClientRect();
|
|
3906
|
+
if (!drag || !rect || event.pointerId !== drag.pointerId) return;
|
|
3907
|
+
const size = directionRef.current === "horizontal" ? rect.width : rect.height;
|
|
3908
|
+
if (size === 0) return;
|
|
3909
|
+
const pos = directionRef.current === "horizontal" ? event.clientX : event.clientY;
|
|
3910
|
+
const deltaPercent = (pos - drag.startPos) / size * 100;
|
|
3911
|
+
applyResize(drag.handleIndex, drag.startA + deltaPercent, drag.combined);
|
|
3912
|
+
}
|
|
3913
|
+
function stopDragging(event) {
|
|
3914
|
+
if (!dragState.current || event.pointerId !== dragState.current.pointerId) return;
|
|
3915
|
+
dragState.current = null;
|
|
3916
|
+
document.body.style.cursor = "";
|
|
3917
|
+
document.body.style.userSelect = "";
|
|
3918
|
+
}
|
|
3919
|
+
window.addEventListener("pointermove", handlePointerMove);
|
|
3920
|
+
window.addEventListener("pointerup", stopDragging);
|
|
3921
|
+
window.addEventListener("pointercancel", stopDragging);
|
|
3922
|
+
return () => {
|
|
3923
|
+
window.removeEventListener("pointermove", handlePointerMove);
|
|
3924
|
+
window.removeEventListener("pointerup", stopDragging);
|
|
3925
|
+
window.removeEventListener("pointercancel", stopDragging);
|
|
3926
|
+
document.body.style.cursor = "";
|
|
3927
|
+
document.body.style.userSelect = "";
|
|
3928
|
+
};
|
|
3929
|
+
}, []);
|
|
3930
|
+
function startDragging(handleIndex2, event) {
|
|
3931
|
+
const startA = sizes[handleIndex2] ?? 0;
|
|
3932
|
+
const startB = sizes[handleIndex2 + 1] ?? 0;
|
|
3933
|
+
dragState.current = {
|
|
3934
|
+
handleIndex: handleIndex2,
|
|
3935
|
+
pointerId: event.pointerId,
|
|
3936
|
+
startPos: direction === "horizontal" ? event.clientX : event.clientY,
|
|
3937
|
+
startA,
|
|
3938
|
+
combined: startA + startB
|
|
3939
|
+
};
|
|
3940
|
+
document.body.style.cursor = direction === "horizontal" ? "col-resize" : "row-resize";
|
|
3941
|
+
document.body.style.userSelect = "none";
|
|
3942
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
3943
|
+
}
|
|
3944
|
+
function resizeWithKeyboard(handleIndex2, event) {
|
|
3945
|
+
const step = event.shiftKey ? 10 : 5;
|
|
3946
|
+
const forwardKey = direction === "horizontal" ? "ArrowRight" : "ArrowDown";
|
|
3947
|
+
const backwardKey = direction === "horizontal" ? "ArrowLeft" : "ArrowUp";
|
|
3948
|
+
const sizeA = sizes[handleIndex2] ?? 0;
|
|
3949
|
+
const sizeB = sizes[handleIndex2 + 1] ?? 0;
|
|
3950
|
+
const combined = sizeA + sizeB;
|
|
3951
|
+
if (event.key === forwardKey) {
|
|
3952
|
+
event.preventDefault();
|
|
3953
|
+
applyResize(handleIndex2, sizeA + step, combined);
|
|
3954
|
+
} else if (event.key === backwardKey) {
|
|
3955
|
+
event.preventDefault();
|
|
3956
|
+
applyResize(handleIndex2, sizeA - step, combined);
|
|
3957
|
+
}
|
|
3958
|
+
}
|
|
3959
|
+
let panelIndex = -1;
|
|
3960
|
+
let handleIndex = -1;
|
|
3961
|
+
return /* @__PURE__ */ jsx110(
|
|
3962
|
+
"div",
|
|
3963
|
+
{
|
|
3964
|
+
ref: containerRef,
|
|
3965
|
+
className: [styles54.group, direction === "vertical" ? styles54.groupVertical : "", className].filter(Boolean).join(" "),
|
|
3966
|
+
children: elements.map((element, key) => {
|
|
3967
|
+
if (element.type === ResizablePanel) {
|
|
3968
|
+
panelIndex += 1;
|
|
3969
|
+
const size = sizes[panelIndex] ?? constraints[panelIndex]?.defaultSize ?? 0;
|
|
3970
|
+
return /* @__PURE__ */ jsx110(
|
|
3971
|
+
ResizablePanelClone,
|
|
3972
|
+
{
|
|
3973
|
+
element,
|
|
3974
|
+
flexBasis: size
|
|
3975
|
+
},
|
|
3976
|
+
key
|
|
3977
|
+
);
|
|
3978
|
+
}
|
|
3979
|
+
if (element.type === ResizableHandle) {
|
|
3980
|
+
handleIndex += 1;
|
|
3981
|
+
const index = handleIndex;
|
|
3982
|
+
const constraint = constraints[index];
|
|
3983
|
+
return /* @__PURE__ */ jsx110(
|
|
3984
|
+
ResizableHandleClone,
|
|
3985
|
+
{
|
|
3986
|
+
element,
|
|
3987
|
+
direction,
|
|
3988
|
+
"aria-valuenow": sizes[index],
|
|
3989
|
+
"aria-valuemin": constraint?.minSize,
|
|
3990
|
+
"aria-valuemax": constraint?.maxSize,
|
|
3991
|
+
onPointerDown: (e) => startDragging(index, e),
|
|
3992
|
+
onKeyDown: (e) => resizeWithKeyboard(index, e)
|
|
3993
|
+
},
|
|
3994
|
+
key
|
|
3995
|
+
);
|
|
3996
|
+
}
|
|
3997
|
+
return element;
|
|
3998
|
+
})
|
|
3999
|
+
}
|
|
4000
|
+
);
|
|
4001
|
+
}
|
|
4002
|
+
function ResizablePanelClone({
|
|
4003
|
+
element,
|
|
4004
|
+
flexBasis
|
|
4005
|
+
}) {
|
|
4006
|
+
const style = {
|
|
4007
|
+
...element.props.style,
|
|
4008
|
+
flexBasis: `${flexBasis}%`,
|
|
4009
|
+
flexGrow: 0,
|
|
4010
|
+
flexShrink: 0
|
|
4011
|
+
};
|
|
4012
|
+
return /* @__PURE__ */ jsx110(ResizablePanel, { ...element.props, style });
|
|
4013
|
+
}
|
|
4014
|
+
function ResizableHandleClone({
|
|
4015
|
+
element,
|
|
4016
|
+
...injected
|
|
4017
|
+
}) {
|
|
4018
|
+
return /* @__PURE__ */ jsx110(ResizableHandle, { ...element.props, ...injected });
|
|
4019
|
+
}
|
|
4020
|
+
|
|
4021
|
+
// src/components/DataTable/DataTable.tsx
|
|
4022
|
+
import { useMemo as useMemo4, useState as useState16 } from "react";
|
|
4023
|
+
import styles55 from "./DataTable.module.css";
|
|
4024
|
+
import { jsx as jsx111, jsxs as jsxs78 } from "react/jsx-runtime";
|
|
4025
|
+
function compareValues(a, b) {
|
|
4026
|
+
if (typeof a === "number" && typeof b === "number") return a - b;
|
|
4027
|
+
return String(a).localeCompare(String(b));
|
|
4028
|
+
}
|
|
4029
|
+
function DataTable({
|
|
4030
|
+
columns,
|
|
4031
|
+
data,
|
|
4032
|
+
getRowKey,
|
|
4033
|
+
defaultSortKey,
|
|
4034
|
+
defaultSortDirection = "asc",
|
|
4035
|
+
emptyMessage = "No results.",
|
|
4036
|
+
className
|
|
4037
|
+
}) {
|
|
4038
|
+
const [sortKey, setSortKey] = useState16(defaultSortKey);
|
|
4039
|
+
const [sortDirection, setSortDirection] = useState16(defaultSortDirection);
|
|
4040
|
+
const sortColumn = columns.find((c) => c.key === sortKey);
|
|
4041
|
+
const sortedData = useMemo4(() => {
|
|
4042
|
+
if (!sortColumn) return data;
|
|
4043
|
+
const getValue = sortColumn.sortValue ?? ((row) => row[sortColumn.key]);
|
|
4044
|
+
const sorted = [...data].sort((a, b) => compareValues(getValue(a), getValue(b)));
|
|
4045
|
+
return sortDirection === "asc" ? sorted : sorted.reverse();
|
|
4046
|
+
}, [data, sortColumn, sortDirection]);
|
|
4047
|
+
function handleSort(column) {
|
|
4048
|
+
if (!column.sortable) return;
|
|
4049
|
+
if (sortKey !== column.key) {
|
|
4050
|
+
setSortKey(column.key);
|
|
4051
|
+
setSortDirection("asc");
|
|
4052
|
+
} else if (sortDirection === "asc") {
|
|
4053
|
+
setSortDirection("desc");
|
|
4054
|
+
} else {
|
|
4055
|
+
setSortKey(void 0);
|
|
4056
|
+
setSortDirection("asc");
|
|
4057
|
+
}
|
|
4058
|
+
}
|
|
4059
|
+
if (data.length === 0) {
|
|
4060
|
+
return /* @__PURE__ */ jsx111(EmptyState, { heading: emptyMessage });
|
|
4061
|
+
}
|
|
4062
|
+
return /* @__PURE__ */ jsxs78(Table, { className, children: [
|
|
4063
|
+
/* @__PURE__ */ jsx111(TableHead, { children: /* @__PURE__ */ jsx111(TableRow, { children: columns.map((column) => {
|
|
4064
|
+
const isSorted = sortKey === column.key;
|
|
4065
|
+
const ariaSort = !column.sortable ? void 0 : isSorted ? sortDirection === "asc" ? "ascending" : "descending" : "none";
|
|
4066
|
+
return /* @__PURE__ */ jsx111(
|
|
4067
|
+
TableHeaderCell,
|
|
4068
|
+
{
|
|
4069
|
+
"aria-sort": ariaSort,
|
|
4070
|
+
style: column.align === "end" ? { textAlign: "end" } : void 0,
|
|
4071
|
+
children: column.sortable ? /* @__PURE__ */ jsxs78(
|
|
4072
|
+
"button",
|
|
4073
|
+
{
|
|
4074
|
+
type: "button",
|
|
4075
|
+
className: styles55.sortButton,
|
|
4076
|
+
onClick: () => handleSort(column),
|
|
4077
|
+
children: [
|
|
4078
|
+
column.header,
|
|
4079
|
+
/* @__PURE__ */ jsx111("span", { className: styles55.sortIcon, children: isSorted && /* @__PURE__ */ jsx111(
|
|
4080
|
+
Icon,
|
|
4081
|
+
{
|
|
4082
|
+
name: sortDirection === "asc" ? "chevron-up" : "chevron-down",
|
|
4083
|
+
size: "sm",
|
|
4084
|
+
"aria-hidden": true
|
|
4085
|
+
}
|
|
4086
|
+
) })
|
|
4087
|
+
]
|
|
4088
|
+
}
|
|
4089
|
+
) : column.header
|
|
4090
|
+
},
|
|
4091
|
+
column.key
|
|
4092
|
+
);
|
|
4093
|
+
}) }) }),
|
|
4094
|
+
/* @__PURE__ */ jsx111(TableBody, { children: sortedData.map((row) => /* @__PURE__ */ jsx111(TableRow, { children: columns.map((column) => /* @__PURE__ */ jsx111(
|
|
4095
|
+
TableCell,
|
|
4096
|
+
{
|
|
4097
|
+
style: column.align === "end" ? { textAlign: "end" } : void 0,
|
|
4098
|
+
children: column.render ? column.render(row) : String(row[column.key] ?? "")
|
|
4099
|
+
},
|
|
4100
|
+
column.key
|
|
4101
|
+
)) }, getRowKey(row))) })
|
|
4102
|
+
] });
|
|
4103
|
+
}
|
|
4104
|
+
|
|
4105
|
+
// src/components/Combobox/Combobox.tsx
|
|
4106
|
+
import { useEffect as useEffect15, useId as useId8, useMemo as useMemo5, useRef as useRef15, useState as useState17 } from "react";
|
|
4107
|
+
import styles56 from "./Combobox.module.css";
|
|
4108
|
+
import { Fragment as Fragment4, jsx as jsx112, jsxs as jsxs79 } from "react/jsx-runtime";
|
|
4109
|
+
function matches2(option, query) {
|
|
4110
|
+
if (!query) return true;
|
|
4111
|
+
return option.label.toLowerCase().includes(query.toLowerCase());
|
|
4112
|
+
}
|
|
4113
|
+
function Combobox({
|
|
4114
|
+
options,
|
|
4115
|
+
value,
|
|
4116
|
+
onChange,
|
|
4117
|
+
placeholder = "Select\u2026",
|
|
4118
|
+
searchPlaceholder = "Search\u2026",
|
|
4119
|
+
emptyMessage = "No matches.",
|
|
4120
|
+
"aria-label": ariaLabel,
|
|
4121
|
+
disabled = false,
|
|
4122
|
+
className
|
|
4123
|
+
}) {
|
|
4124
|
+
const [open, setOpen] = useState17(false);
|
|
4125
|
+
const [query, setQuery] = useState17("");
|
|
4126
|
+
const [highlightedIndex, setHighlightedIndex] = useState17(0);
|
|
4127
|
+
const isMobile = useIsMobile();
|
|
4128
|
+
const inputRef = useRef15(null);
|
|
4129
|
+
const listId = useId8();
|
|
4130
|
+
const selected = options.find((o) => o.value === value) ?? null;
|
|
4131
|
+
const filtered = useMemo5(
|
|
4132
|
+
() => options.filter((option) => matches2(option, query)),
|
|
4133
|
+
[options, query]
|
|
4134
|
+
);
|
|
4135
|
+
useEffect15(() => {
|
|
4136
|
+
setHighlightedIndex(0);
|
|
4137
|
+
}, [query, open]);
|
|
4138
|
+
useEffect15(() => {
|
|
4139
|
+
if (open) {
|
|
4140
|
+
setQuery("");
|
|
4141
|
+
requestAnimationFrame(() => inputRef.current?.focus());
|
|
4142
|
+
}
|
|
4143
|
+
}, [open]);
|
|
4144
|
+
function commit(option) {
|
|
4145
|
+
onChange(option.value);
|
|
4146
|
+
setOpen(false);
|
|
4147
|
+
}
|
|
4148
|
+
function handleKeyDown(e) {
|
|
4149
|
+
if (e.key === "ArrowDown") {
|
|
4150
|
+
e.preventDefault();
|
|
4151
|
+
setHighlightedIndex((i) => Math.min(i + 1, filtered.length - 1));
|
|
4152
|
+
} else if (e.key === "ArrowUp") {
|
|
4153
|
+
e.preventDefault();
|
|
4154
|
+
setHighlightedIndex((i) => Math.max(i - 1, 0));
|
|
4155
|
+
} else if (e.key === "Enter") {
|
|
4156
|
+
e.preventDefault();
|
|
4157
|
+
const option = filtered[highlightedIndex];
|
|
4158
|
+
if (option) commit(option);
|
|
4159
|
+
}
|
|
4160
|
+
}
|
|
4161
|
+
const highlightedId = filtered[highlightedIndex] ? `${listId}-${filtered[highlightedIndex].value}` : void 0;
|
|
4162
|
+
const trigger = /* @__PURE__ */ jsxs79(
|
|
4163
|
+
"button",
|
|
4164
|
+
{
|
|
4165
|
+
type: "button",
|
|
4166
|
+
className: [styles56.trigger, className].filter(Boolean).join(" "),
|
|
4167
|
+
disabled,
|
|
4168
|
+
"aria-label": ariaLabel,
|
|
4169
|
+
"aria-haspopup": "listbox",
|
|
4170
|
+
"aria-expanded": open,
|
|
4171
|
+
onClick: () => setOpen((o) => !o),
|
|
4172
|
+
children: [
|
|
4173
|
+
/* @__PURE__ */ jsx112("span", { className: selected ? styles56.triggerValue : styles56.triggerPlaceholder, children: selected ? selected.label : placeholder }),
|
|
4174
|
+
/* @__PURE__ */ jsx112(Icon, { name: "chevron-down", size: "sm", "aria-hidden": true })
|
|
4175
|
+
]
|
|
4176
|
+
}
|
|
4177
|
+
);
|
|
4178
|
+
const body = /* @__PURE__ */ jsxs79("div", { className: styles56.body, children: [
|
|
4179
|
+
/* @__PURE__ */ jsx112(
|
|
4180
|
+
"input",
|
|
4181
|
+
{
|
|
4182
|
+
ref: inputRef,
|
|
4183
|
+
type: "text",
|
|
4184
|
+
role: "combobox",
|
|
4185
|
+
"aria-expanded": filtered.length > 0,
|
|
4186
|
+
"aria-controls": listId,
|
|
4187
|
+
"aria-activedescendant": highlightedId,
|
|
4188
|
+
"aria-autocomplete": "list",
|
|
4189
|
+
className: styles56.search,
|
|
4190
|
+
placeholder: searchPlaceholder,
|
|
4191
|
+
value: query,
|
|
4192
|
+
onChange: (e) => setQuery(e.target.value),
|
|
4193
|
+
onKeyDown: handleKeyDown
|
|
4194
|
+
}
|
|
4195
|
+
),
|
|
4196
|
+
/* @__PURE__ */ jsxs79("ul", { id: listId, role: "listbox", className: styles56.list, children: [
|
|
4197
|
+
filtered.length === 0 && /* @__PURE__ */ jsx112("li", { className: styles56.empty, children: emptyMessage }),
|
|
4198
|
+
filtered.map((option, index) => {
|
|
4199
|
+
const isHighlighted = index === highlightedIndex;
|
|
4200
|
+
const isSelected = option.value === value;
|
|
4201
|
+
return /* @__PURE__ */ jsx112("li", { children: /* @__PURE__ */ jsxs79(
|
|
4202
|
+
"button",
|
|
4203
|
+
{
|
|
4204
|
+
id: `${listId}-${option.value}`,
|
|
4205
|
+
type: "button",
|
|
4206
|
+
role: "option",
|
|
4207
|
+
"aria-selected": isSelected,
|
|
4208
|
+
className: [styles56.option, isHighlighted ? styles56.optionHighlighted : ""].filter(Boolean).join(" "),
|
|
4209
|
+
onMouseEnter: () => setHighlightedIndex(index),
|
|
4210
|
+
onClick: () => commit(option),
|
|
4211
|
+
children: [
|
|
4212
|
+
/* @__PURE__ */ jsx112("span", { className: styles56.check, children: isSelected && /* @__PURE__ */ jsx112(Icon, { name: "check", size: "sm", "aria-hidden": true }) }),
|
|
4213
|
+
option.label
|
|
4214
|
+
]
|
|
4215
|
+
}
|
|
4216
|
+
) }, option.value);
|
|
4217
|
+
})
|
|
4218
|
+
] })
|
|
4219
|
+
] });
|
|
4220
|
+
if (isMobile) {
|
|
4221
|
+
return /* @__PURE__ */ jsxs79(Fragment4, { children: [
|
|
4222
|
+
trigger,
|
|
4223
|
+
/* @__PURE__ */ jsx112(Drawer, { open, onClose: () => setOpen(false), "aria-label": ariaLabel, children: body })
|
|
4224
|
+
] });
|
|
4225
|
+
}
|
|
4226
|
+
return /* @__PURE__ */ jsx112(
|
|
4227
|
+
Popover,
|
|
4228
|
+
{
|
|
4229
|
+
trigger,
|
|
4230
|
+
open,
|
|
4231
|
+
onClose: () => setOpen(false),
|
|
4232
|
+
"aria-label": ariaLabel,
|
|
4233
|
+
width: "trigger",
|
|
4234
|
+
children: body
|
|
4235
|
+
}
|
|
4236
|
+
);
|
|
4237
|
+
}
|
|
4238
|
+
|
|
4239
|
+
// src/components/DragHandleRow/DragHandleRow.tsx
|
|
4240
|
+
import styles57 from "./DragHandleRow.module.css";
|
|
4241
|
+
import { jsx as jsx113, jsxs as jsxs80 } from "react/jsx-runtime";
|
|
4242
|
+
function DragHandleRow({
|
|
4243
|
+
children,
|
|
4244
|
+
handleProps,
|
|
4245
|
+
isDragging,
|
|
4246
|
+
className,
|
|
4247
|
+
...rest
|
|
4248
|
+
}) {
|
|
4249
|
+
return /* @__PURE__ */ jsxs80(
|
|
4250
|
+
"div",
|
|
4251
|
+
{
|
|
4252
|
+
...rest,
|
|
4253
|
+
className: [styles57.row, isDragging ? styles57.dragging : "", className].filter(Boolean).join(" "),
|
|
4254
|
+
children: [
|
|
4255
|
+
/* @__PURE__ */ jsx113(
|
|
4256
|
+
"button",
|
|
4257
|
+
{
|
|
4258
|
+
type: "button",
|
|
4259
|
+
"aria-label": "Drag to reorder",
|
|
4260
|
+
className: styles57.handle,
|
|
4261
|
+
tabIndex: -1,
|
|
4262
|
+
...handleProps,
|
|
4263
|
+
children: /* @__PURE__ */ jsx113(DragIcon, {})
|
|
4264
|
+
}
|
|
4265
|
+
),
|
|
4266
|
+
/* @__PURE__ */ jsx113("div", { className: styles57.content, children })
|
|
4267
|
+
]
|
|
4268
|
+
}
|
|
4269
|
+
);
|
|
4270
|
+
}
|
|
4271
|
+
function DragIcon() {
|
|
4272
|
+
return /* @__PURE__ */ jsx113(
|
|
4273
|
+
"svg",
|
|
4274
|
+
{
|
|
4275
|
+
width: "14",
|
|
4276
|
+
height: "14",
|
|
4277
|
+
viewBox: "0 0 14 14",
|
|
4278
|
+
fill: "none",
|
|
4279
|
+
"aria-hidden": "true",
|
|
4280
|
+
className: styles57.icon,
|
|
4281
|
+
children: [3, 7, 11].map(
|
|
4282
|
+
(cy) => [4, 10].map((cx) => /* @__PURE__ */ jsx113("circle", { cx, cy, r: 1.2, fill: "currentColor" }, `${cx}-${cy}`))
|
|
4283
|
+
)
|
|
4284
|
+
}
|
|
4285
|
+
);
|
|
4286
|
+
}
|
|
4287
|
+
|
|
4288
|
+
// src/components/FileDropzone/FileDropzone.tsx
|
|
4289
|
+
import { useRef as useRef16, useState as useState18 } from "react";
|
|
4290
|
+
import styles58 from "./FileDropzone.module.css";
|
|
4291
|
+
import { jsx as jsx114, jsxs as jsxs81 } from "react/jsx-runtime";
|
|
4292
|
+
function FileDropzone({
|
|
4293
|
+
name,
|
|
4294
|
+
accept,
|
|
4295
|
+
icon,
|
|
4296
|
+
label,
|
|
4297
|
+
hint,
|
|
4298
|
+
onFileSelect,
|
|
4299
|
+
ariaLabel,
|
|
4300
|
+
disabled,
|
|
4301
|
+
className
|
|
4302
|
+
}) {
|
|
4303
|
+
const [dragging, setDragging] = useState18(false);
|
|
4304
|
+
const inputRef = useRef16(null);
|
|
4305
|
+
return /* @__PURE__ */ jsxs81(
|
|
2993
4306
|
"label",
|
|
2994
4307
|
{
|
|
2995
4308
|
className: [
|
|
2996
|
-
|
|
2997
|
-
dragging ?
|
|
2998
|
-
disabled ?
|
|
4309
|
+
styles58.dropzone,
|
|
4310
|
+
dragging ? styles58.dropzoneActive : "",
|
|
4311
|
+
disabled ? styles58.dropzoneDisabled : "",
|
|
2999
4312
|
className
|
|
3000
4313
|
].filter(Boolean).join(" "),
|
|
3001
4314
|
onDragOver: (event) => {
|
|
@@ -3018,12 +4331,12 @@ function FileDropzone({
|
|
|
3018
4331
|
onFileSelect(dropped);
|
|
3019
4332
|
},
|
|
3020
4333
|
children: [
|
|
3021
|
-
/* @__PURE__ */
|
|
3022
|
-
/* @__PURE__ */
|
|
3023
|
-
/* @__PURE__ */
|
|
3024
|
-
hint && /* @__PURE__ */
|
|
4334
|
+
/* @__PURE__ */ jsx114("span", { className: styles58.icon, "aria-hidden": "true", children: icon ?? /* @__PURE__ */ jsx114(Icon, { name: "file", size: "lg", "aria-hidden": true }) }),
|
|
4335
|
+
/* @__PURE__ */ jsxs81("span", { className: styles58.text, children: [
|
|
4336
|
+
/* @__PURE__ */ jsx114("span", { className: styles58.title, children: label }),
|
|
4337
|
+
hint && /* @__PURE__ */ jsx114("span", { className: styles58.hint, children: hint })
|
|
3025
4338
|
] }),
|
|
3026
|
-
/* @__PURE__ */
|
|
4339
|
+
/* @__PURE__ */ jsx114(
|
|
3027
4340
|
"input",
|
|
3028
4341
|
{
|
|
3029
4342
|
ref: inputRef,
|
|
@@ -3033,7 +4346,7 @@ function FileDropzone({
|
|
|
3033
4346
|
accept,
|
|
3034
4347
|
disabled,
|
|
3035
4348
|
onChange: (event) => onFileSelect(event.target.files?.[0] ?? null),
|
|
3036
|
-
className:
|
|
4349
|
+
className: styles58.hiddenInput
|
|
3037
4350
|
}
|
|
3038
4351
|
)
|
|
3039
4352
|
]
|
|
@@ -3042,7 +4355,7 @@ function FileDropzone({
|
|
|
3042
4355
|
}
|
|
3043
4356
|
|
|
3044
4357
|
// src/components/Calendar/Calendar.tsx
|
|
3045
|
-
import { useRef as
|
|
4358
|
+
import { useRef as useRef17, useState as useState19 } from "react";
|
|
3046
4359
|
|
|
3047
4360
|
// src/components/Calendar/dateUtils.ts
|
|
3048
4361
|
function startOfMonth(date) {
|
|
@@ -3108,8 +4421,8 @@ function formatDateLabel(date) {
|
|
|
3108
4421
|
}
|
|
3109
4422
|
|
|
3110
4423
|
// src/components/Calendar/Calendar.tsx
|
|
3111
|
-
import
|
|
3112
|
-
import { jsx as
|
|
4424
|
+
import styles59 from "./Calendar.module.css";
|
|
4425
|
+
import { jsx as jsx115, jsxs as jsxs82 } from "react/jsx-runtime";
|
|
3113
4426
|
var WEEKDAY_LABEL_WEEK = getMonthGrid(new Date(2026, 0, 1))[0] ?? [];
|
|
3114
4427
|
function Calendar({
|
|
3115
4428
|
value,
|
|
@@ -3118,9 +4431,9 @@ function Calendar({
|
|
|
3118
4431
|
maxDate,
|
|
3119
4432
|
"aria-label": ariaLabel
|
|
3120
4433
|
}) {
|
|
3121
|
-
const [displayedMonth, setDisplayedMonth] =
|
|
3122
|
-
const [focusedDate, setFocusedDate] =
|
|
3123
|
-
const gridRef =
|
|
4434
|
+
const [displayedMonth, setDisplayedMonth] = useState19(() => startOfMonth(value ?? /* @__PURE__ */ new Date()));
|
|
4435
|
+
const [focusedDate, setFocusedDate] = useState19(() => value ?? /* @__PURE__ */ new Date());
|
|
4436
|
+
const gridRef = useRef17(null);
|
|
3124
4437
|
const weeks = getMonthGrid(displayedMonth);
|
|
3125
4438
|
function goToMonth(next) {
|
|
3126
4439
|
setDisplayedMonth(startOfMonth(next));
|
|
@@ -3179,51 +4492,51 @@ function Calendar({
|
|
|
3179
4492
|
default:
|
|
3180
4493
|
}
|
|
3181
4494
|
}
|
|
3182
|
-
return /* @__PURE__ */
|
|
3183
|
-
/* @__PURE__ */
|
|
3184
|
-
/* @__PURE__ */
|
|
4495
|
+
return /* @__PURE__ */ jsxs82("div", { className: styles59.calendar, "aria-label": ariaLabel, children: [
|
|
4496
|
+
/* @__PURE__ */ jsxs82("div", { className: styles59.header, children: [
|
|
4497
|
+
/* @__PURE__ */ jsx115(
|
|
3185
4498
|
"button",
|
|
3186
4499
|
{
|
|
3187
4500
|
type: "button",
|
|
3188
|
-
className:
|
|
4501
|
+
className: styles59.navButton,
|
|
3189
4502
|
"aria-label": "Previous month",
|
|
3190
4503
|
onClick: () => goToMonth(addMonths(displayedMonth, -1)),
|
|
3191
|
-
children: /* @__PURE__ */
|
|
4504
|
+
children: /* @__PURE__ */ jsx115(Icon, { name: "chevron-left", size: "sm", "aria-hidden": true })
|
|
3192
4505
|
}
|
|
3193
4506
|
),
|
|
3194
|
-
/* @__PURE__ */
|
|
3195
|
-
/* @__PURE__ */
|
|
4507
|
+
/* @__PURE__ */ jsx115("span", { className: styles59.monthLabel, children: formatMonthYear(displayedMonth) }),
|
|
4508
|
+
/* @__PURE__ */ jsx115(
|
|
3196
4509
|
"button",
|
|
3197
4510
|
{
|
|
3198
4511
|
type: "button",
|
|
3199
|
-
className:
|
|
4512
|
+
className: styles59.navButton,
|
|
3200
4513
|
"aria-label": "Next month",
|
|
3201
4514
|
onClick: () => goToMonth(addMonths(displayedMonth, 1)),
|
|
3202
|
-
children: /* @__PURE__ */
|
|
4515
|
+
children: /* @__PURE__ */ jsx115(Icon, { name: "chevron-right", size: "sm", "aria-hidden": true })
|
|
3203
4516
|
}
|
|
3204
4517
|
)
|
|
3205
4518
|
] }),
|
|
3206
|
-
/* @__PURE__ */
|
|
4519
|
+
/* @__PURE__ */ jsxs82(
|
|
3207
4520
|
"div",
|
|
3208
4521
|
{
|
|
3209
4522
|
ref: gridRef,
|
|
3210
4523
|
role: "grid",
|
|
3211
4524
|
"aria-label": formatMonthYear(displayedMonth),
|
|
3212
|
-
className:
|
|
4525
|
+
className: styles59.grid,
|
|
3213
4526
|
onKeyDown: handleKeyDown,
|
|
3214
4527
|
tabIndex: -1,
|
|
3215
4528
|
children: [
|
|
3216
|
-
/* @__PURE__ */
|
|
4529
|
+
/* @__PURE__ */ jsx115("div", { role: "row", className: styles59.weekdayRow, children: WEEKDAY_LABEL_WEEK.map((d) => /* @__PURE__ */ jsx115("span", { role: "columnheader", className: styles59.weekday, "aria-hidden": true, children: formatWeekdayShort(d) }, d.getDay())) }),
|
|
3217
4530
|
weeks.map((week) => {
|
|
3218
4531
|
const firstDayOfWeek = week[0];
|
|
3219
4532
|
if (!firstDayOfWeek) return null;
|
|
3220
|
-
return /* @__PURE__ */
|
|
4533
|
+
return /* @__PURE__ */ jsx115("div", { role: "row", className: styles59.week, children: week.map((date) => {
|
|
3221
4534
|
const isCurrentMonth = isSameMonth(date, displayedMonth);
|
|
3222
4535
|
const isSelected = value !== null && isSameDay(date, value);
|
|
3223
4536
|
const isToday = isSameDay(date, /* @__PURE__ */ new Date());
|
|
3224
4537
|
const isFocusTarget = isSameDay(date, focusedDate);
|
|
3225
4538
|
const disabled = !isWithinRange(date, minDate, maxDate);
|
|
3226
|
-
return /* @__PURE__ */
|
|
4539
|
+
return /* @__PURE__ */ jsx115("div", { role: "gridcell", "aria-selected": isSelected, children: /* @__PURE__ */ jsx115(
|
|
3227
4540
|
"button",
|
|
3228
4541
|
{
|
|
3229
4542
|
type: "button",
|
|
@@ -3232,10 +4545,10 @@ function Calendar({
|
|
|
3232
4545
|
"aria-current": isToday ? "date" : void 0,
|
|
3233
4546
|
"aria-label": formatDateLabel(date),
|
|
3234
4547
|
className: [
|
|
3235
|
-
|
|
3236
|
-
!isCurrentMonth ?
|
|
3237
|
-
isSelected ?
|
|
3238
|
-
isToday && !isSelected ?
|
|
4548
|
+
styles59.day,
|
|
4549
|
+
!isCurrentMonth ? styles59.dayOutside : "",
|
|
4550
|
+
isSelected ? styles59.daySelected : "",
|
|
4551
|
+
isToday && !isSelected ? styles59.dayToday : ""
|
|
3239
4552
|
].filter(Boolean).join(" "),
|
|
3240
4553
|
onClick: () => selectDate(date),
|
|
3241
4554
|
onFocus: () => setFocusedDate(date),
|
|
@@ -3251,9 +4564,9 @@ function Calendar({
|
|
|
3251
4564
|
}
|
|
3252
4565
|
|
|
3253
4566
|
// src/components/DatePicker/DatePicker.tsx
|
|
3254
|
-
import { useState as
|
|
3255
|
-
import
|
|
3256
|
-
import { Fragment as
|
|
4567
|
+
import { useState as useState20 } from "react";
|
|
4568
|
+
import styles60 from "./DatePicker.module.css";
|
|
4569
|
+
import { Fragment as Fragment5, jsx as jsx116, jsxs as jsxs83 } from "react/jsx-runtime";
|
|
3257
4570
|
var POPOVER_WIDTH = 320;
|
|
3258
4571
|
function DatePicker({
|
|
3259
4572
|
value,
|
|
@@ -3264,29 +4577,29 @@ function DatePicker({
|
|
|
3264
4577
|
"aria-label": ariaLabel,
|
|
3265
4578
|
disabled = false
|
|
3266
4579
|
}) {
|
|
3267
|
-
const [open, setOpen] =
|
|
4580
|
+
const [open, setOpen] = useState20(false);
|
|
3268
4581
|
const isMobile = useIsMobile();
|
|
3269
4582
|
function handleSelect(date) {
|
|
3270
4583
|
onChange(date);
|
|
3271
4584
|
setOpen(false);
|
|
3272
4585
|
}
|
|
3273
|
-
const trigger = /* @__PURE__ */
|
|
4586
|
+
const trigger = /* @__PURE__ */ jsxs83(
|
|
3274
4587
|
"button",
|
|
3275
4588
|
{
|
|
3276
4589
|
type: "button",
|
|
3277
|
-
className:
|
|
4590
|
+
className: styles60.trigger,
|
|
3278
4591
|
disabled,
|
|
3279
4592
|
"aria-label": ariaLabel,
|
|
3280
4593
|
"aria-haspopup": "dialog",
|
|
3281
4594
|
"aria-expanded": open,
|
|
3282
4595
|
onClick: () => setOpen((o) => !o),
|
|
3283
4596
|
children: [
|
|
3284
|
-
/* @__PURE__ */
|
|
3285
|
-
/* @__PURE__ */
|
|
4597
|
+
/* @__PURE__ */ jsx116("span", { className: value ? styles60.triggerValue : styles60.triggerPlaceholder, children: value ? formatDateShort(value) : placeholder }),
|
|
4598
|
+
/* @__PURE__ */ jsx116(Icon, { name: "calendar", size: "sm", "aria-hidden": true })
|
|
3286
4599
|
]
|
|
3287
4600
|
}
|
|
3288
4601
|
);
|
|
3289
|
-
const calendar = /* @__PURE__ */
|
|
4602
|
+
const calendar = /* @__PURE__ */ jsx116(
|
|
3290
4603
|
Calendar,
|
|
3291
4604
|
{
|
|
3292
4605
|
value,
|
|
@@ -3297,12 +4610,12 @@ function DatePicker({
|
|
|
3297
4610
|
}
|
|
3298
4611
|
);
|
|
3299
4612
|
if (isMobile) {
|
|
3300
|
-
return /* @__PURE__ */
|
|
4613
|
+
return /* @__PURE__ */ jsxs83(Fragment5, { children: [
|
|
3301
4614
|
trigger,
|
|
3302
|
-
/* @__PURE__ */
|
|
4615
|
+
/* @__PURE__ */ jsx116(Drawer, { open, onClose: () => setOpen(false), "aria-label": ariaLabel, children: /* @__PURE__ */ jsx116("div", { className: styles60.drawerBody, children: calendar }) })
|
|
3303
4616
|
] });
|
|
3304
4617
|
}
|
|
3305
|
-
return /* @__PURE__ */
|
|
4618
|
+
return /* @__PURE__ */ jsx116(
|
|
3306
4619
|
Popover,
|
|
3307
4620
|
{
|
|
3308
4621
|
trigger,
|
|
@@ -3310,15 +4623,15 @@ function DatePicker({
|
|
|
3310
4623
|
onClose: () => setOpen(false),
|
|
3311
4624
|
"aria-label": ariaLabel,
|
|
3312
4625
|
width: POPOVER_WIDTH,
|
|
3313
|
-
children: /* @__PURE__ */
|
|
4626
|
+
children: /* @__PURE__ */ jsx116("div", { className: styles60.popoverBody, children: calendar })
|
|
3314
4627
|
}
|
|
3315
4628
|
);
|
|
3316
4629
|
}
|
|
3317
4630
|
|
|
3318
4631
|
// src/components/SuggestionInput/SuggestionInput.tsx
|
|
3319
|
-
import { useId as
|
|
3320
|
-
import
|
|
3321
|
-
import { Fragment as
|
|
4632
|
+
import { useId as useId9, useRef as useRef18, useState as useState21 } from "react";
|
|
4633
|
+
import styles61 from "./SuggestionInput.module.css";
|
|
4634
|
+
import { Fragment as Fragment6, jsx as jsx117, jsxs as jsxs84 } from "react/jsx-runtime";
|
|
3322
4635
|
function SuggestionInput({
|
|
3323
4636
|
value,
|
|
3324
4637
|
onChange,
|
|
@@ -3333,12 +4646,12 @@ function SuggestionInput({
|
|
|
3333
4646
|
onCreate,
|
|
3334
4647
|
className
|
|
3335
4648
|
}) {
|
|
3336
|
-
const generatedId =
|
|
4649
|
+
const generatedId = useId9();
|
|
3337
4650
|
const inputId = id ?? generatedId;
|
|
3338
4651
|
const listId = `${inputId}-suggestions`;
|
|
3339
|
-
const inputRef =
|
|
3340
|
-
const [focused, setFocused] =
|
|
3341
|
-
const [activeIndex, setActiveIndex] =
|
|
4652
|
+
const inputRef = useRef18(null);
|
|
4653
|
+
const [focused, setFocused] = useState21(false);
|
|
4654
|
+
const [activeIndex, setActiveIndex] = useState21(-1);
|
|
3342
4655
|
const showCreateRow = Boolean(onCreate && createLabel && value.trim());
|
|
3343
4656
|
const rowCount = options.length + (showCreateRow ? 1 : 0);
|
|
3344
4657
|
const open = focused && (rowCount > 0 || loading);
|
|
@@ -3375,7 +4688,7 @@ function SuggestionInput({
|
|
|
3375
4688
|
close();
|
|
3376
4689
|
}
|
|
3377
4690
|
}
|
|
3378
|
-
const trigger = /* @__PURE__ */
|
|
4691
|
+
const trigger = /* @__PURE__ */ jsx117(
|
|
3379
4692
|
"input",
|
|
3380
4693
|
{
|
|
3381
4694
|
ref: inputRef,
|
|
@@ -3387,7 +4700,7 @@ function SuggestionInput({
|
|
|
3387
4700
|
"aria-autocomplete": "list",
|
|
3388
4701
|
"aria-activedescendant": activeIndex >= 0 ? `${listId}-option-${activeIndex}` : void 0,
|
|
3389
4702
|
"aria-label": ariaLabel,
|
|
3390
|
-
className: [
|
|
4703
|
+
className: [styles61.input, className].filter(Boolean).join(" "),
|
|
3391
4704
|
value,
|
|
3392
4705
|
placeholder,
|
|
3393
4706
|
disabled,
|
|
@@ -3400,7 +4713,7 @@ function SuggestionInput({
|
|
|
3400
4713
|
onKeyDown: handleKeyDown
|
|
3401
4714
|
}
|
|
3402
4715
|
);
|
|
3403
|
-
return /* @__PURE__ */
|
|
4716
|
+
return /* @__PURE__ */ jsx117(
|
|
3404
4717
|
Popover,
|
|
3405
4718
|
{
|
|
3406
4719
|
trigger,
|
|
@@ -3408,29 +4721,29 @@ function SuggestionInput({
|
|
|
3408
4721
|
onClose: close,
|
|
3409
4722
|
width: "trigger",
|
|
3410
4723
|
"aria-label": `${ariaLabel} suggestions`,
|
|
3411
|
-
children: /* @__PURE__ */
|
|
3412
|
-
options.map((option, index) => /* @__PURE__ */
|
|
4724
|
+
children: /* @__PURE__ */ jsx117("ul", { id: listId, role: "listbox", className: styles61.list, children: loading ? /* @__PURE__ */ jsx117("li", { className: styles61.status, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs84(Fragment6, { children: [
|
|
4725
|
+
options.map((option, index) => /* @__PURE__ */ jsx117("li", { role: "none", children: /* @__PURE__ */ jsxs84(
|
|
3413
4726
|
"button",
|
|
3414
4727
|
{
|
|
3415
4728
|
id: `${listId}-option-${index}`,
|
|
3416
4729
|
role: "option",
|
|
3417
4730
|
"aria-selected": index === activeIndex,
|
|
3418
4731
|
type: "button",
|
|
3419
|
-
className: [
|
|
4732
|
+
className: [styles61.option, index === activeIndex ? styles61.optionActive : ""].filter(Boolean).join(" "),
|
|
3420
4733
|
onMouseDown: (e) => {
|
|
3421
4734
|
e.preventDefault();
|
|
3422
4735
|
commitIndex(index);
|
|
3423
4736
|
},
|
|
3424
4737
|
children: [
|
|
3425
|
-
option.icon && /* @__PURE__ */
|
|
3426
|
-
/* @__PURE__ */
|
|
3427
|
-
option.meta && /* @__PURE__ */
|
|
4738
|
+
option.icon && /* @__PURE__ */ jsx117("span", { className: styles61.optionIcon, children: option.icon }),
|
|
4739
|
+
/* @__PURE__ */ jsx117("span", { className: styles61.optionLabel, children: option.label }),
|
|
4740
|
+
option.meta && /* @__PURE__ */ jsx117("span", { className: styles61.optionMeta, children: option.meta })
|
|
3428
4741
|
]
|
|
3429
4742
|
}
|
|
3430
4743
|
) }, option.id)),
|
|
3431
|
-
showCreateRow && createLabel && /* @__PURE__ */
|
|
3432
|
-
options.length > 0 && /* @__PURE__ */
|
|
3433
|
-
/* @__PURE__ */
|
|
4744
|
+
showCreateRow && createLabel && /* @__PURE__ */ jsxs84("li", { role: "none", children: [
|
|
4745
|
+
options.length > 0 && /* @__PURE__ */ jsx117("div", { className: styles61.divider }),
|
|
4746
|
+
/* @__PURE__ */ jsx117(
|
|
3434
4747
|
"button",
|
|
3435
4748
|
{
|
|
3436
4749
|
id: `${listId}-option-${options.length}`,
|
|
@@ -3438,9 +4751,9 @@ function SuggestionInput({
|
|
|
3438
4751
|
"aria-selected": options.length === activeIndex,
|
|
3439
4752
|
type: "button",
|
|
3440
4753
|
className: [
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
options.length === activeIndex ?
|
|
4754
|
+
styles61.option,
|
|
4755
|
+
styles61.optionCreate,
|
|
4756
|
+
options.length === activeIndex ? styles61.optionActive : ""
|
|
3444
4757
|
].filter(Boolean).join(" "),
|
|
3445
4758
|
onMouseDown: (e) => {
|
|
3446
4759
|
e.preventDefault();
|
|
@@ -3456,9 +4769,9 @@ function SuggestionInput({
|
|
|
3456
4769
|
}
|
|
3457
4770
|
|
|
3458
4771
|
// src/components/IconPicker/IconPicker.tsx
|
|
3459
|
-
import { useState as
|
|
3460
|
-
import
|
|
3461
|
-
import { jsx as
|
|
4772
|
+
import { useState as useState22 } from "react";
|
|
4773
|
+
import styles62 from "./IconPicker.module.css";
|
|
4774
|
+
import { jsx as jsx118, jsxs as jsxs85 } from "react/jsx-runtime";
|
|
3462
4775
|
function IconPicker({
|
|
3463
4776
|
value,
|
|
3464
4777
|
onChange,
|
|
@@ -3468,24 +4781,24 @@ function IconPicker({
|
|
|
3468
4781
|
disabled = false,
|
|
3469
4782
|
className
|
|
3470
4783
|
}) {
|
|
3471
|
-
const [open, setOpen] =
|
|
3472
|
-
const trigger = /* @__PURE__ */
|
|
4784
|
+
const [open, setOpen] = useState22(false);
|
|
4785
|
+
const trigger = /* @__PURE__ */ jsxs85(
|
|
3473
4786
|
"button",
|
|
3474
4787
|
{
|
|
3475
4788
|
type: "button",
|
|
3476
|
-
className: [
|
|
4789
|
+
className: [styles62.trigger, className].filter(Boolean).join(" "),
|
|
3477
4790
|
onClick: () => setOpen((o) => !o),
|
|
3478
4791
|
disabled,
|
|
3479
4792
|
"aria-label": ariaLabel,
|
|
3480
4793
|
"aria-haspopup": "true",
|
|
3481
4794
|
"aria-expanded": open,
|
|
3482
4795
|
children: [
|
|
3483
|
-
value ? /* @__PURE__ */
|
|
3484
|
-
triggerLabel && /* @__PURE__ */
|
|
4796
|
+
value ? /* @__PURE__ */ jsx118(Icon, { name: value, size: "md", "aria-hidden": true }) : /* @__PURE__ */ jsx118("span", { className: styles62.placeholder, "aria-hidden": true, children: "?" }),
|
|
4797
|
+
triggerLabel && /* @__PURE__ */ jsx118("span", { className: styles62.triggerLabel, children: triggerLabel })
|
|
3485
4798
|
]
|
|
3486
4799
|
}
|
|
3487
4800
|
);
|
|
3488
|
-
return /* @__PURE__ */
|
|
4801
|
+
return /* @__PURE__ */ jsx118(
|
|
3489
4802
|
Popover,
|
|
3490
4803
|
{
|
|
3491
4804
|
trigger,
|
|
@@ -3493,18 +4806,18 @@ function IconPicker({
|
|
|
3493
4806
|
onClose: () => setOpen(false),
|
|
3494
4807
|
width: 240,
|
|
3495
4808
|
"aria-label": `${ariaLabel} options`,
|
|
3496
|
-
children: /* @__PURE__ */
|
|
4809
|
+
children: /* @__PURE__ */ jsx118("div", { className: styles62.grid, role: "listbox", "aria-label": ariaLabel, children: options.map((name) => /* @__PURE__ */ jsx118(
|
|
3497
4810
|
"button",
|
|
3498
4811
|
{
|
|
3499
4812
|
type: "button",
|
|
3500
4813
|
role: "option",
|
|
3501
4814
|
"aria-selected": name === value,
|
|
3502
|
-
className: [
|
|
4815
|
+
className: [styles62.option, name === value ? styles62.optionSelected : ""].filter(Boolean).join(" "),
|
|
3503
4816
|
onClick: () => {
|
|
3504
4817
|
onChange(name);
|
|
3505
4818
|
setOpen(false);
|
|
3506
4819
|
},
|
|
3507
|
-
children: /* @__PURE__ */
|
|
4820
|
+
children: /* @__PURE__ */ jsx118(Icon, { name, size: "md", "aria-hidden": true })
|
|
3508
4821
|
},
|
|
3509
4822
|
name
|
|
3510
4823
|
)) })
|
|
@@ -3513,9 +4826,9 @@ function IconPicker({
|
|
|
3513
4826
|
}
|
|
3514
4827
|
|
|
3515
4828
|
// src/components/QuantityStepper/QuantityStepper.tsx
|
|
3516
|
-
import { useId as
|
|
3517
|
-
import
|
|
3518
|
-
import { jsx as
|
|
4829
|
+
import { useId as useId10 } from "react";
|
|
4830
|
+
import styles63 from "./QuantityStepper.module.css";
|
|
4831
|
+
import { jsx as jsx119, jsxs as jsxs86 } from "react/jsx-runtime";
|
|
3519
4832
|
function QuantityStepper({
|
|
3520
4833
|
value,
|
|
3521
4834
|
onChange,
|
|
@@ -3528,9 +4841,9 @@ function QuantityStepper({
|
|
|
3528
4841
|
id,
|
|
3529
4842
|
className
|
|
3530
4843
|
}) {
|
|
3531
|
-
const generatedId =
|
|
4844
|
+
const generatedId = useId10();
|
|
3532
4845
|
const inputId = id ?? generatedId;
|
|
3533
|
-
function
|
|
4846
|
+
function clamp2(next) {
|
|
3534
4847
|
let result = next;
|
|
3535
4848
|
if (min !== void 0) result = Math.max(min, result);
|
|
3536
4849
|
if (max !== void 0) result = Math.min(max, result);
|
|
@@ -3538,28 +4851,28 @@ function QuantityStepper({
|
|
|
3538
4851
|
}
|
|
3539
4852
|
function handleInputChange(e) {
|
|
3540
4853
|
const parsed = Number.parseFloat(e.target.value);
|
|
3541
|
-
if (!Number.isNaN(parsed)) onChange(
|
|
4854
|
+
if (!Number.isNaN(parsed)) onChange(clamp2(parsed));
|
|
3542
4855
|
}
|
|
3543
4856
|
const decrementDisabled = disabled || min !== void 0 && value <= min;
|
|
3544
4857
|
const incrementDisabled = disabled || max !== void 0 && value >= max;
|
|
3545
|
-
return /* @__PURE__ */
|
|
3546
|
-
/* @__PURE__ */
|
|
4858
|
+
return /* @__PURE__ */ jsxs86("div", { className: [styles63.root, className].filter(Boolean).join(" "), children: [
|
|
4859
|
+
/* @__PURE__ */ jsx119(
|
|
3547
4860
|
"button",
|
|
3548
4861
|
{
|
|
3549
4862
|
type: "button",
|
|
3550
|
-
className:
|
|
3551
|
-
onClick: () => onChange(
|
|
4863
|
+
className: styles63.button,
|
|
4864
|
+
onClick: () => onChange(clamp2(value - step)),
|
|
3552
4865
|
disabled: decrementDisabled,
|
|
3553
4866
|
"aria-label": `Decrease ${ariaLabel}`,
|
|
3554
4867
|
children: "\u2212"
|
|
3555
4868
|
}
|
|
3556
4869
|
),
|
|
3557
|
-
/* @__PURE__ */
|
|
4870
|
+
/* @__PURE__ */ jsx119(
|
|
3558
4871
|
"input",
|
|
3559
4872
|
{
|
|
3560
4873
|
id: inputId,
|
|
3561
4874
|
type: "number",
|
|
3562
|
-
className:
|
|
4875
|
+
className: styles63.input,
|
|
3563
4876
|
value,
|
|
3564
4877
|
onChange: handleInputChange,
|
|
3565
4878
|
min,
|
|
@@ -3569,13 +4882,13 @@ function QuantityStepper({
|
|
|
3569
4882
|
"aria-label": ariaLabel
|
|
3570
4883
|
}
|
|
3571
4884
|
),
|
|
3572
|
-
unit && /* @__PURE__ */
|
|
3573
|
-
/* @__PURE__ */
|
|
4885
|
+
unit && /* @__PURE__ */ jsx119("span", { className: styles63.unit, "aria-hidden": true, children: unit }),
|
|
4886
|
+
/* @__PURE__ */ jsx119(
|
|
3574
4887
|
"button",
|
|
3575
4888
|
{
|
|
3576
4889
|
type: "button",
|
|
3577
|
-
className:
|
|
3578
|
-
onClick: () => onChange(
|
|
4890
|
+
className: styles63.button,
|
|
4891
|
+
onClick: () => onChange(clamp2(value + step)),
|
|
3579
4892
|
disabled: incrementDisabled,
|
|
3580
4893
|
"aria-label": `Increase ${ariaLabel}`,
|
|
3581
4894
|
children: "+"
|
|
@@ -3585,8 +4898,8 @@ function QuantityStepper({
|
|
|
3585
4898
|
}
|
|
3586
4899
|
|
|
3587
4900
|
// src/components/CheckableListRow/CheckableListRow.tsx
|
|
3588
|
-
import
|
|
3589
|
-
import { jsx as
|
|
4901
|
+
import styles64 from "./CheckableListRow.module.css";
|
|
4902
|
+
import { jsx as jsx120, jsxs as jsxs87 } from "react/jsx-runtime";
|
|
3590
4903
|
function CheckableListRow({
|
|
3591
4904
|
checked,
|
|
3592
4905
|
onCheckedChange,
|
|
@@ -3605,8 +4918,8 @@ function CheckableListRow({
|
|
|
3605
4918
|
toggle();
|
|
3606
4919
|
}
|
|
3607
4920
|
}
|
|
3608
|
-
return /* @__PURE__ */
|
|
3609
|
-
/* @__PURE__ */
|
|
4921
|
+
return /* @__PURE__ */ jsxs87("div", { className: [styles64.row, className].filter(Boolean).join(" "), children: [
|
|
4922
|
+
/* @__PURE__ */ jsxs87(
|
|
3610
4923
|
"div",
|
|
3611
4924
|
{
|
|
3612
4925
|
role: "checkbox",
|
|
@@ -3614,11 +4927,11 @@ function CheckableListRow({
|
|
|
3614
4927
|
"aria-label": label,
|
|
3615
4928
|
"aria-disabled": disabled || void 0,
|
|
3616
4929
|
tabIndex: disabled ? -1 : 0,
|
|
3617
|
-
className:
|
|
4930
|
+
className: styles64.tapTarget,
|
|
3618
4931
|
onClick: toggle,
|
|
3619
4932
|
onKeyDown: handleKeyDown,
|
|
3620
4933
|
children: [
|
|
3621
|
-
/* @__PURE__ */
|
|
4934
|
+
/* @__PURE__ */ jsx120("span", { className: [styles64.box, checked ? styles64.checked : ""].filter(Boolean).join(" "), children: checked && /* @__PURE__ */ jsx120("svg", { className: styles64.tick, viewBox: "0 0 10 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx120(
|
|
3622
4935
|
"path",
|
|
3623
4936
|
{
|
|
3624
4937
|
d: "M1 4l3 3 5-6",
|
|
@@ -3628,18 +4941,18 @@ function CheckableListRow({
|
|
|
3628
4941
|
strokeLinejoin: "round"
|
|
3629
4942
|
}
|
|
3630
4943
|
) }) }),
|
|
3631
|
-
icon && /* @__PURE__ */
|
|
3632
|
-
/* @__PURE__ */
|
|
4944
|
+
icon && /* @__PURE__ */ jsx120("span", { className: styles64.icon, children: icon }),
|
|
4945
|
+
/* @__PURE__ */ jsx120("span", { className: [styles64.label, checked ? styles64.struck : ""].filter(Boolean).join(" "), children: label })
|
|
3633
4946
|
]
|
|
3634
4947
|
}
|
|
3635
4948
|
),
|
|
3636
|
-
trailing && /* @__PURE__ */
|
|
4949
|
+
trailing && /* @__PURE__ */ jsx120("span", { className: styles64.trailing, children: trailing })
|
|
3637
4950
|
] });
|
|
3638
4951
|
}
|
|
3639
4952
|
|
|
3640
4953
|
// src/components/CurrencyInput/CurrencyInput.tsx
|
|
3641
|
-
import { useState as
|
|
3642
|
-
import { jsx as
|
|
4954
|
+
import { useState as useState23 } from "react";
|
|
4955
|
+
import { jsx as jsx121 } from "react/jsx-runtime";
|
|
3643
4956
|
function centsToText(cents) {
|
|
3644
4957
|
return (cents / 100).toFixed(2);
|
|
3645
4958
|
}
|
|
@@ -3651,11 +4964,11 @@ function textToCents(text) {
|
|
|
3651
4964
|
return Math.round(parsed * 100);
|
|
3652
4965
|
}
|
|
3653
4966
|
function CurrencyInput({ valueCents, onValueChange, ...rest }) {
|
|
3654
|
-
const [text, setText] =
|
|
4967
|
+
const [text, setText] = useState23(() => valueCents != null ? centsToText(valueCents) : "");
|
|
3655
4968
|
if (textToCents(text) !== valueCents) {
|
|
3656
4969
|
setText(valueCents != null ? centsToText(valueCents) : "");
|
|
3657
4970
|
}
|
|
3658
|
-
return /* @__PURE__ */
|
|
4971
|
+
return /* @__PURE__ */ jsx121(
|
|
3659
4972
|
Input,
|
|
3660
4973
|
{
|
|
3661
4974
|
...rest,
|
|
@@ -3672,19 +4985,19 @@ function CurrencyInput({ valueCents, onValueChange, ...rest }) {
|
|
|
3672
4985
|
}
|
|
3673
4986
|
|
|
3674
4987
|
// src/components/BalanceChip/BalanceChip.tsx
|
|
3675
|
-
import
|
|
3676
|
-
import { jsx as
|
|
4988
|
+
import styles65 from "./BalanceChip.module.css";
|
|
4989
|
+
import { jsx as jsx122 } from "react/jsx-runtime";
|
|
3677
4990
|
function formatAbsCents(cents) {
|
|
3678
4991
|
return (Math.abs(cents) / 100).toFixed(2);
|
|
3679
4992
|
}
|
|
3680
4993
|
function BalanceChip({ amountCents, currency, className }) {
|
|
3681
4994
|
const direction = amountCents > 0 ? "owed" : amountCents < 0 ? "owes" : "settled";
|
|
3682
4995
|
const text = direction === "settled" ? "Settled up" : `${direction === "owed" ? "Owed" : "Owes"} ${currency} ${formatAbsCents(amountCents)}`;
|
|
3683
|
-
return /* @__PURE__ */
|
|
4996
|
+
return /* @__PURE__ */ jsx122("span", { className: [styles65.chip, styles65[direction], className].filter(Boolean).join(" "), children: text });
|
|
3684
4997
|
}
|
|
3685
4998
|
|
|
3686
4999
|
// src/components/SplitMethodSelector/SplitMethodSelector.tsx
|
|
3687
|
-
import { jsx as
|
|
5000
|
+
import { jsx as jsx123 } from "react/jsx-runtime";
|
|
3688
5001
|
var OPTIONS = [
|
|
3689
5002
|
{ label: "Equal", value: "equal" },
|
|
3690
5003
|
{ label: "Amount", value: "amount" },
|
|
@@ -3697,7 +5010,7 @@ function SplitMethodSelector({
|
|
|
3697
5010
|
size = "sm",
|
|
3698
5011
|
"aria-label": ariaLabel = "Split method"
|
|
3699
5012
|
}) {
|
|
3700
|
-
return /* @__PURE__ */
|
|
5013
|
+
return /* @__PURE__ */ jsx123(
|
|
3701
5014
|
SegmentedControl,
|
|
3702
5015
|
{
|
|
3703
5016
|
value,
|
|
@@ -3710,8 +5023,8 @@ function SplitMethodSelector({
|
|
|
3710
5023
|
}
|
|
3711
5024
|
|
|
3712
5025
|
// src/components/MemberMultiSelect/MemberMultiSelect.tsx
|
|
3713
|
-
import
|
|
3714
|
-
import { jsx as
|
|
5026
|
+
import styles66 from "./MemberMultiSelect.module.css";
|
|
5027
|
+
import { jsx as jsx124, jsxs as jsxs88 } from "react/jsx-runtime";
|
|
3715
5028
|
function MemberMultiSelect({
|
|
3716
5029
|
options,
|
|
3717
5030
|
selectedIds,
|
|
@@ -3721,12 +5034,12 @@ function MemberMultiSelect({
|
|
|
3721
5034
|
hint,
|
|
3722
5035
|
className
|
|
3723
5036
|
}) {
|
|
3724
|
-
return /* @__PURE__ */
|
|
3725
|
-
label && /* @__PURE__ */
|
|
5037
|
+
return /* @__PURE__ */ jsxs88("div", { className: [styles66.group, className].filter(Boolean).join(" "), children: [
|
|
5038
|
+
label && /* @__PURE__ */ jsx124("span", { className: styles66.label, children: label }),
|
|
3726
5039
|
options.map((option) => {
|
|
3727
5040
|
const checked = selectedIds.has(option.id);
|
|
3728
|
-
return /* @__PURE__ */
|
|
3729
|
-
/* @__PURE__ */
|
|
5041
|
+
return /* @__PURE__ */ jsxs88("div", { className: styles66.row, children: [
|
|
5042
|
+
/* @__PURE__ */ jsx124(
|
|
3730
5043
|
Checkbox,
|
|
3731
5044
|
{
|
|
3732
5045
|
checked,
|
|
@@ -3734,24 +5047,34 @@ function MemberMultiSelect({
|
|
|
3734
5047
|
label: option.label
|
|
3735
5048
|
}
|
|
3736
5049
|
),
|
|
3737
|
-
checked && renderTrailing && /* @__PURE__ */
|
|
5050
|
+
checked && renderTrailing && /* @__PURE__ */ jsx124("span", { className: styles66.trailing, children: renderTrailing(option.id) })
|
|
3738
5051
|
] }, option.id);
|
|
3739
5052
|
}),
|
|
3740
|
-
hint && /* @__PURE__ */
|
|
5053
|
+
hint && /* @__PURE__ */ jsx124("span", { className: styles66.hint, children: hint })
|
|
3741
5054
|
] });
|
|
3742
5055
|
}
|
|
3743
5056
|
export {
|
|
5057
|
+
Accordion,
|
|
5058
|
+
Alert,
|
|
5059
|
+
AspectRatio,
|
|
3744
5060
|
Avatar,
|
|
3745
5061
|
Badge,
|
|
3746
5062
|
BalanceChip,
|
|
5063
|
+
Breadcrumb,
|
|
3747
5064
|
Button,
|
|
5065
|
+
ButtonGroup,
|
|
3748
5066
|
Calendar,
|
|
3749
5067
|
Card,
|
|
3750
5068
|
CheckableListRow,
|
|
3751
5069
|
Checkbox,
|
|
3752
5070
|
CodeTextarea,
|
|
5071
|
+
Collapsible,
|
|
5072
|
+
Combobox,
|
|
5073
|
+
Command,
|
|
3753
5074
|
ConfirmDialog,
|
|
5075
|
+
ContextMenu,
|
|
3754
5076
|
CurrencyInput,
|
|
5077
|
+
DataTable,
|
|
3755
5078
|
DatePicker,
|
|
3756
5079
|
Dialog,
|
|
3757
5080
|
DragHandleRow,
|
|
@@ -3759,32 +5082,57 @@ export {
|
|
|
3759
5082
|
EmptyState,
|
|
3760
5083
|
FileDropzone,
|
|
3761
5084
|
FormField,
|
|
5085
|
+
HoverCard,
|
|
3762
5086
|
Icon,
|
|
3763
5087
|
IconPicker,
|
|
3764
5088
|
Input,
|
|
5089
|
+
Item,
|
|
5090
|
+
Kbd,
|
|
5091
|
+
Label,
|
|
3765
5092
|
MOBILE_BREAKPOINT_PX,
|
|
5093
|
+
Marker,
|
|
3766
5094
|
MemberMultiSelect,
|
|
3767
5095
|
Menu,
|
|
5096
|
+
MenuEntries,
|
|
5097
|
+
Menubar,
|
|
5098
|
+
Message,
|
|
5099
|
+
MessageScroller,
|
|
3768
5100
|
NavTabs,
|
|
5101
|
+
NavigationMenu,
|
|
3769
5102
|
OverlayHeader,
|
|
3770
5103
|
PageHeader,
|
|
5104
|
+
Pagination,
|
|
3771
5105
|
Popover,
|
|
5106
|
+
Progress,
|
|
3772
5107
|
QuantityStepper,
|
|
5108
|
+
RadioGroup,
|
|
5109
|
+
ResizableHandle,
|
|
5110
|
+
ResizablePanel,
|
|
5111
|
+
ResizablePanelGroup,
|
|
5112
|
+
ScrollArea,
|
|
3773
5113
|
SegmentedControl,
|
|
3774
5114
|
Select,
|
|
3775
5115
|
Sheet,
|
|
5116
|
+
Slider,
|
|
3776
5117
|
Spinner,
|
|
3777
5118
|
SplitMethodSelector,
|
|
3778
5119
|
SplitPane,
|
|
3779
5120
|
StatusBadge,
|
|
3780
5121
|
SuggestionInput,
|
|
3781
5122
|
SystemBanner,
|
|
5123
|
+
Table,
|
|
5124
|
+
TableBody,
|
|
5125
|
+
TableCell,
|
|
5126
|
+
TableHead,
|
|
5127
|
+
TableHeaderCell,
|
|
5128
|
+
TableRow,
|
|
3782
5129
|
Tabs,
|
|
3783
5130
|
TagInput,
|
|
3784
5131
|
Textarea,
|
|
3785
5132
|
ToastProvider,
|
|
3786
5133
|
Toggle,
|
|
3787
5134
|
Tooltip,
|
|
5135
|
+
Typography,
|
|
3788
5136
|
useCommitOnEnterOrBlur,
|
|
3789
5137
|
useDoubleTapHandler,
|
|
3790
5138
|
useIsMobile,
|