@health-samurai/react-components 0.0.0-alpha.1 → 0.0.0-alpha.2
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/bundle.css +100 -7
- package/dist/src/components/code-editor/index.js +53 -29
- package/dist/src/components/code-editor/index.js.map +1 -1
- package/dist/src/components/code-editor.stories.js +22 -7
- package/dist/src/components/code-editor.stories.js.map +1 -1
- package/dist/src/components/copy-icon.js +11 -4
- package/dist/src/components/copy-icon.js.map +1 -1
- package/dist/src/components/request-line-editor.js +56 -14
- package/dist/src/components/request-line-editor.js.map +1 -1
- package/dist/src/components/request-line-editor.stories.js +71 -22
- package/dist/src/components/request-line-editor.stories.js.map +1 -1
- package/dist/src/global.d.js +2 -0
- package/dist/src/global.d.js.map +1 -0
- package/dist/src/index.css +6 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +52 -50
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.stories.js +8 -5
- package/dist/src/index.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/accordion.js +34 -5
- package/dist/src/shadcn/components/ui/accordion.js.map +1 -1
- package/dist/src/shadcn/components/ui/accordion.stories.js +68 -3
- package/dist/src/shadcn/components/ui/accordion.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/alert-dialog.js +61 -14
- package/dist/src/shadcn/components/ui/alert-dialog.js.map +1 -1
- package/dist/src/shadcn/components/ui/alert-dialog.stories.js +39 -4
- package/dist/src/shadcn/components/ui/alert-dialog.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/alert.js +24 -8
- package/dist/src/shadcn/components/ui/alert.js.map +1 -1
- package/dist/src/shadcn/components/ui/alert.stories.js +57 -3
- package/dist/src/shadcn/components/ui/alert.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/aspect-ratio.js +5 -1
- package/dist/src/shadcn/components/ui/aspect-ratio.js.map +1 -1
- package/dist/src/shadcn/components/ui/aspect-ratio.stories.js +12 -3
- package/dist/src/shadcn/components/ui/aspect-ratio.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/avatar.js +17 -4
- package/dist/src/shadcn/components/ui/avatar.js.map +1 -1
- package/dist/src/shadcn/components/ui/avatar.stories.js +69 -3
- package/dist/src/shadcn/components/ui/avatar.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/badge.js +13 -6
- package/dist/src/shadcn/components/ui/badge.js.map +1 -1
- package/dist/src/shadcn/components/ui/badge.stories.js +55 -3
- package/dist/src/shadcn/components/ui/badge.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/breadcrumb.js +56 -11
- package/dist/src/shadcn/components/ui/breadcrumb.js.map +1 -1
- package/dist/src/shadcn/components/ui/breadcrumb.stories.js +69 -4
- package/dist/src/shadcn/components/ui/breadcrumb.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/button.js +23 -13
- package/dist/src/shadcn/components/ui/button.js.map +1 -1
- package/dist/src/shadcn/components/ui/button.stories.js +190 -10
- package/dist/src/shadcn/components/ui/button.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/calendar.js +75 -33
- package/dist/src/shadcn/components/ui/calendar.js.map +1 -1
- package/dist/src/shadcn/components/ui/calendar.stories.js +12 -5
- package/dist/src/shadcn/components/ui/calendar.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/card.js +38 -9
- package/dist/src/shadcn/components/ui/card.js.map +1 -1
- package/dist/src/shadcn/components/ui/card.stories.js +91 -6
- package/dist/src/shadcn/components/ui/card.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/carousel.js +99 -39
- package/dist/src/shadcn/components/ui/carousel.js.map +1 -1
- package/dist/src/shadcn/components/ui/carousel.stories.js +30 -6
- package/dist/src/shadcn/components/ui/carousel.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/chart.js +118 -55
- package/dist/src/shadcn/components/ui/chart.js.map +1 -1
- package/dist/src/shadcn/components/ui/chart.stories.js +72 -12
- package/dist/src/shadcn/components/ui/chart.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/checkbox.js +14 -2
- package/dist/src/shadcn/components/ui/checkbox.js.map +1 -1
- package/dist/src/shadcn/components/ui/checkbox.stories.js +79 -4
- package/dist/src/shadcn/components/ui/checkbox.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/collapsible.js +13 -3
- package/dist/src/shadcn/components/ui/collapsible.js.map +1 -1
- package/dist/src/shadcn/components/ui/collapsible.stories.js +54 -6
- package/dist/src/shadcn/components/ui/collapsible.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/command.js +77 -12
- package/dist/src/shadcn/components/ui/command.js.map +1 -1
- package/dist/src/shadcn/components/ui/command.stories.js +88 -4
- package/dist/src/shadcn/components/ui/command.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/context-menu.js +106 -17
- package/dist/src/shadcn/components/ui/context-menu.js.map +1 -1
- package/dist/src/shadcn/components/ui/context-menu.stories.js +101 -3
- package/dist/src/shadcn/components/ui/context-menu.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/dialog.js +69 -12
- package/dist/src/shadcn/components/ui/dialog.js.map +1 -1
- package/dist/src/shadcn/components/ui/dialog.stories.js +82 -6
- package/dist/src/shadcn/components/ui/dialog.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/drawer.js +61 -12
- package/dist/src/shadcn/components/ui/drawer.js.map +1 -1
- package/dist/src/shadcn/components/ui/drawer.stories.js +154 -21
- package/dist/src/shadcn/components/ui/drawer.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/dropdown-menu.js +107 -17
- package/dist/src/shadcn/components/ui/dropdown-menu.js.map +1 -1
- package/dist/src/shadcn/components/ui/dropdown-menu.stories.js +119 -4
- package/dist/src/shadcn/components/ui/dropdown-menu.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/form.js +58 -18
- package/dist/src/shadcn/components/ui/form.js.map +1 -1
- package/dist/src/shadcn/components/ui/form.stories.js +45 -11
- package/dist/src/shadcn/components/ui/form.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/hover-card.js +20 -4
- package/dist/src/shadcn/components/ui/hover-card.js.map +1 -1
- package/dist/src/shadcn/components/ui/hover-card.stories.js +51 -5
- package/dist/src/shadcn/components/ui/hover-card.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/input-otp.js +35 -7
- package/dist/src/shadcn/components/ui/input-otp.js.map +1 -1
- package/dist/src/shadcn/components/ui/input-otp.stories.js +35 -3
- package/dist/src/shadcn/components/ui/input-otp.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/input.js +59 -40
- package/dist/src/shadcn/components/ui/input.js.map +1 -1
- package/dist/src/shadcn/components/ui/input.stories.js +391 -23
- package/dist/src/shadcn/components/ui/input.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/label.js +7 -2
- package/dist/src/shadcn/components/ui/label.js.map +1 -1
- package/dist/src/shadcn/components/ui/label.stories.js +18 -4
- package/dist/src/shadcn/components/ui/label.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/menubar.js +116 -19
- package/dist/src/shadcn/components/ui/menubar.js.map +1 -1
- package/dist/src/shadcn/components/ui/menubar.stories.js +216 -3
- package/dist/src/shadcn/components/ui/menubar.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/navigation-menu.js +62 -10
- package/dist/src/shadcn/components/ui/navigation-menu.js.map +1 -1
- package/dist/src/shadcn/components/ui/navigation-menu.stories.js +263 -11
- package/dist/src/shadcn/components/ui/navigation-menu.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/pagination.js +73 -16
- package/dist/src/shadcn/components/ui/pagination.js.map +1 -1
- package/dist/src/shadcn/components/ui/pagination.stories.js +41 -3
- package/dist/src/shadcn/components/ui/pagination.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/popover.js +23 -5
- package/dist/src/shadcn/components/ui/popover.js.map +1 -1
- package/dist/src/shadcn/components/ui/popover.stories.js +99 -6
- package/dist/src/shadcn/components/ui/popover.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/progress.js +14 -2
- package/dist/src/shadcn/components/ui/progress.js.map +1 -1
- package/dist/src/shadcn/components/ui/progress.stories.js +12 -8
- package/dist/src/shadcn/components/ui/progress.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/radio-group.js +19 -3
- package/dist/src/shadcn/components/ui/radio-group.js.map +1 -1
- package/dist/src/shadcn/components/ui/radio-group.stories.js +48 -4
- package/dist/src/shadcn/components/ui/radio-group.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/resizable.js +22 -4
- package/dist/src/shadcn/components/ui/resizable.js.map +1 -1
- package/dist/src/shadcn/components/ui/resizable.stories.js +49 -3
- package/dist/src/shadcn/components/ui/resizable.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/scroll-area.js +26 -5
- package/dist/src/shadcn/components/ui/scroll-area.js.map +1 -1
- package/dist/src/shadcn/components/ui/scroll-area.stories.js +30 -5
- package/dist/src/shadcn/components/ui/scroll-area.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/select.js +98 -19
- package/dist/src/shadcn/components/ui/select.js.map +1 -1
- package/dist/src/shadcn/components/ui/select.stories.js +84 -5
- package/dist/src/shadcn/components/ui/select.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/separator.js +9 -2
- package/dist/src/shadcn/components/ui/separator.js.map +1 -1
- package/dist/src/shadcn/components/ui/separator.stories.js +43 -3
- package/dist/src/shadcn/components/ui/separator.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/sheet.js +69 -16
- package/dist/src/shadcn/components/ui/sheet.js.map +1 -1
- package/dist/src/shadcn/components/ui/sheet.stories.js +77 -6
- package/dist/src/shadcn/components/ui/sheet.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/sidebar.js +304 -79
- package/dist/src/shadcn/components/ui/sidebar.js.map +1 -1
- package/dist/src/shadcn/components/ui/sidebar.stories.js +321 -59
- package/dist/src/shadcn/components/ui/sidebar.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/skeleton.js +7 -2
- package/dist/src/shadcn/components/ui/skeleton.js.map +1 -1
- package/dist/src/shadcn/components/ui/skeleton.stories.js +22 -3
- package/dist/src/shadcn/components/ui/skeleton.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/slider.js +40 -7
- package/dist/src/shadcn/components/ui/slider.js.map +1 -1
- package/dist/src/shadcn/components/ui/slider.stories.js +11 -3
- package/dist/src/shadcn/components/ui/slider.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/sonner.js +10 -4
- package/dist/src/shadcn/components/ui/sonner.js.map +1 -1
- package/dist/src/shadcn/components/ui/sonner.stories.js +14 -9
- package/dist/src/shadcn/components/ui/sonner.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/switch.js +11 -2
- package/dist/src/shadcn/components/ui/switch.js.map +1 -1
- package/dist/src/shadcn/components/ui/switch.stories.js +16 -4
- package/dist/src/shadcn/components/ui/switch.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/table.js +47 -10
- package/dist/src/shadcn/components/ui/table.js.map +1 -1
- package/dist/src/shadcn/components/ui/table.stories.js +72 -11
- package/dist/src/shadcn/components/ui/table.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/tabs.d.ts +9 -5
- package/dist/src/shadcn/components/ui/tabs.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/tabs.js +75 -18
- package/dist/src/shadcn/components/ui/tabs.js.map +1 -1
- package/dist/src/shadcn/components/ui/tabs.stories.d.ts +6 -0
- package/dist/src/shadcn/components/ui/tabs.stories.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/tabs.stories.js +221 -10
- package/dist/src/shadcn/components/ui/tabs.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/textarea.js +7 -2
- package/dist/src/shadcn/components/ui/textarea.js.map +1 -1
- package/dist/src/shadcn/components/ui/textarea.stories.js +6 -3
- package/dist/src/shadcn/components/ui/textarea.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/toggle-group.js +29 -8
- package/dist/src/shadcn/components/ui/toggle-group.js.map +1 -1
- package/dist/src/shadcn/components/ui/toggle-group.stories.js +30 -3
- package/dist/src/shadcn/components/ui/toggle-group.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/toggle.js +16 -7
- package/dist/src/shadcn/components/ui/toggle.js.map +1 -1
- package/dist/src/shadcn/components/ui/toggle.stories.js +9 -3
- package/dist/src/shadcn/components/ui/toggle.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/tooltip.js +26 -5
- package/dist/src/shadcn/components/ui/tooltip.js.map +1 -1
- package/dist/src/shadcn/components/ui/tooltip.stories.js +20 -4
- package/dist/src/shadcn/components/ui/tooltip.stories.js.map +1 -1
- package/dist/src/shadcn/hooks/use-mobile.js +4 -3
- package/dist/src/shadcn/hooks/use-mobile.js.map +1 -1
- package/dist/src/shadcn/lib/utils.js +1 -0
- package/dist/src/shadcn/lib/utils.js.map +1 -1
- package/package.json +8 -4
- package/src/index.css +6 -0
- package/src/index.tsx +1 -0
- package/src/shadcn/components/ui/tabs.stories.tsx +57 -0
- package/src/shadcn/components/ui/tabs.tsx +76 -26
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import useEmblaCarousel
|
|
2
|
+
import useEmblaCarousel from "embla-carousel-react";
|
|
3
3
|
import { ArrowLeft, ArrowRight } from "lucide-react";
|
|
4
4
|
import * as React from "react";
|
|
5
|
-
import { Button } from "
|
|
6
|
-
import { cn } from "
|
|
7
|
-
const CarouselContext = React.createContext(null);
|
|
5
|
+
import { Button } from "./button.js";
|
|
6
|
+
import { cn } from "../../lib/utils.js";
|
|
7
|
+
const CarouselContext = /*#__PURE__*/ React.createContext(null);
|
|
8
8
|
function useCarousel() {
|
|
9
9
|
const context = React.useContext(CarouselContext);
|
|
10
10
|
if (!context) {
|
|
@@ -15,48 +15,58 @@ function useCarousel() {
|
|
|
15
15
|
function Carousel({ orientation = "horizontal", opts, setApi, plugins, className, children, ...props }) {
|
|
16
16
|
const [carouselRef, api] = useEmblaCarousel({
|
|
17
17
|
...opts,
|
|
18
|
-
axis: orientation === "horizontal" ? "x" : "y"
|
|
18
|
+
axis: orientation === "horizontal" ? "x" : "y"
|
|
19
19
|
}, plugins);
|
|
20
20
|
const [canScrollPrev, setCanScrollPrev] = React.useState(false);
|
|
21
21
|
const [canScrollNext, setCanScrollNext] = React.useState(false);
|
|
22
|
-
const onSelect = React.useCallback((api)
|
|
23
|
-
if (!api)
|
|
24
|
-
return;
|
|
22
|
+
const onSelect = React.useCallback((api)=>{
|
|
23
|
+
if (!api) return;
|
|
25
24
|
setCanScrollPrev(api.canScrollPrev());
|
|
26
25
|
setCanScrollNext(api.canScrollNext());
|
|
27
26
|
}, []);
|
|
28
|
-
const scrollPrev = React.useCallback(()
|
|
27
|
+
const scrollPrev = React.useCallback(()=>{
|
|
29
28
|
api?.scrollPrev();
|
|
30
|
-
}, [
|
|
31
|
-
|
|
29
|
+
}, [
|
|
30
|
+
api
|
|
31
|
+
]);
|
|
32
|
+
const scrollNext = React.useCallback(()=>{
|
|
32
33
|
api?.scrollNext();
|
|
33
|
-
}, [
|
|
34
|
-
|
|
34
|
+
}, [
|
|
35
|
+
api
|
|
36
|
+
]);
|
|
37
|
+
const handleKeyDown = React.useCallback((event)=>{
|
|
35
38
|
if (event.key === "ArrowLeft") {
|
|
36
39
|
event.preventDefault();
|
|
37
40
|
scrollPrev();
|
|
38
|
-
}
|
|
39
|
-
else if (event.key === "ArrowRight") {
|
|
41
|
+
} else if (event.key === "ArrowRight") {
|
|
40
42
|
event.preventDefault();
|
|
41
43
|
scrollNext();
|
|
42
44
|
}
|
|
43
|
-
}, [
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
}, [
|
|
46
|
+
scrollPrev,
|
|
47
|
+
scrollNext
|
|
48
|
+
]);
|
|
49
|
+
React.useEffect(()=>{
|
|
50
|
+
if (!api || !setApi) return;
|
|
47
51
|
setApi(api);
|
|
48
|
-
}, [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
}, [
|
|
53
|
+
api,
|
|
54
|
+
setApi
|
|
55
|
+
]);
|
|
56
|
+
React.useEffect(()=>{
|
|
57
|
+
if (!api) return;
|
|
52
58
|
onSelect(api);
|
|
53
59
|
api.on("reInit", onSelect);
|
|
54
60
|
api.on("select", onSelect);
|
|
55
|
-
return ()
|
|
61
|
+
return ()=>{
|
|
56
62
|
api?.off("select", onSelect);
|
|
57
63
|
};
|
|
58
|
-
}, [
|
|
59
|
-
|
|
64
|
+
}, [
|
|
65
|
+
api,
|
|
66
|
+
onSelect
|
|
67
|
+
]);
|
|
68
|
+
return /*#__PURE__*/ _jsx(CarouselContext.Provider, {
|
|
69
|
+
value: {
|
|
60
70
|
carouselRef,
|
|
61
71
|
api: api,
|
|
62
72
|
opts,
|
|
@@ -64,30 +74,80 @@ function Carousel({ orientation = "horizontal", opts, setApi, plugins, className
|
|
|
64
74
|
scrollPrev,
|
|
65
75
|
scrollNext,
|
|
66
76
|
canScrollPrev,
|
|
67
|
-
canScrollNext
|
|
68
|
-
},
|
|
77
|
+
canScrollNext
|
|
78
|
+
},
|
|
79
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
80
|
+
onKeyDownCapture: handleKeyDown,
|
|
81
|
+
className: cn("relative", className),
|
|
82
|
+
role: "region",
|
|
83
|
+
"aria-roledescription": "carousel",
|
|
84
|
+
"data-slot": "carousel",
|
|
85
|
+
...props,
|
|
86
|
+
children: children
|
|
87
|
+
})
|
|
88
|
+
});
|
|
69
89
|
}
|
|
70
90
|
function CarouselContent({ className, ...props }) {
|
|
71
91
|
const { carouselRef, orientation } = useCarousel();
|
|
72
|
-
return
|
|
92
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
93
|
+
ref: carouselRef,
|
|
94
|
+
className: "overflow-hidden",
|
|
95
|
+
"data-slot": "carousel-content",
|
|
96
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
97
|
+
className: cn("flex", orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col", className),
|
|
98
|
+
...props
|
|
99
|
+
})
|
|
100
|
+
});
|
|
73
101
|
}
|
|
74
102
|
function CarouselItem({ className, ...props }) {
|
|
75
103
|
const { orientation } = useCarousel();
|
|
76
|
-
return
|
|
77
|
-
|
|
78
|
-
|
|
104
|
+
return(// biome-ignore lint/a11y/useSemanticElements: FIXME: unchanged shadcn
|
|
105
|
+
/*#__PURE__*/ _jsx("div", {
|
|
106
|
+
role: "group",
|
|
107
|
+
"aria-roledescription": "slide",
|
|
108
|
+
"data-slot": "carousel-item",
|
|
109
|
+
className: cn("min-w-0 shrink-0 grow-0 basis-full", orientation === "horizontal" ? "pl-4" : "pt-4", className),
|
|
110
|
+
...props
|
|
111
|
+
}));
|
|
79
112
|
}
|
|
80
113
|
function CarouselPrevious({ className, variant = "secondary", size = "small", ...props }) {
|
|
81
114
|
const { orientation, scrollPrev, canScrollPrev } = useCarousel();
|
|
82
|
-
return
|
|
83
|
-
|
|
84
|
-
|
|
115
|
+
return /*#__PURE__*/ _jsxs(Button, {
|
|
116
|
+
"data-slot": "carousel-previous",
|
|
117
|
+
variant: variant,
|
|
118
|
+
size: size,
|
|
119
|
+
className: cn("absolute size-8 rounded-full", orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90", className),
|
|
120
|
+
disabled: !canScrollPrev,
|
|
121
|
+
onClick: scrollPrev,
|
|
122
|
+
...props,
|
|
123
|
+
children: [
|
|
124
|
+
/*#__PURE__*/ _jsx(ArrowLeft, {}),
|
|
125
|
+
/*#__PURE__*/ _jsx("span", {
|
|
126
|
+
className: "sr-only",
|
|
127
|
+
children: "Previous slide"
|
|
128
|
+
})
|
|
129
|
+
]
|
|
130
|
+
});
|
|
85
131
|
}
|
|
86
132
|
function CarouselNext({ className, variant = "secondary", size = "small", ...props }) {
|
|
87
133
|
const { orientation, scrollNext, canScrollNext } = useCarousel();
|
|
88
|
-
return
|
|
89
|
-
|
|
90
|
-
|
|
134
|
+
return /*#__PURE__*/ _jsxs(Button, {
|
|
135
|
+
"data-slot": "carousel-next",
|
|
136
|
+
variant: variant,
|
|
137
|
+
size: size,
|
|
138
|
+
className: cn("absolute size-8 rounded-full", orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90", className),
|
|
139
|
+
disabled: !canScrollNext,
|
|
140
|
+
onClick: scrollNext,
|
|
141
|
+
...props,
|
|
142
|
+
children: [
|
|
143
|
+
/*#__PURE__*/ _jsx(ArrowRight, {}),
|
|
144
|
+
/*#__PURE__*/ _jsx("span", {
|
|
145
|
+
className: "sr-only",
|
|
146
|
+
children: "Next slide"
|
|
147
|
+
})
|
|
148
|
+
]
|
|
149
|
+
});
|
|
91
150
|
}
|
|
92
|
-
export { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext
|
|
151
|
+
export { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext };
|
|
152
|
+
|
|
93
153
|
//# sourceMappingURL=carousel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/shadcn/components/ui/carousel.tsx"],"sourcesContent":["import useEmblaCarousel, {\n\ttype UseEmblaCarouselType,\n} from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Button } from \"#shadcn/components/ui/button\";\nimport { cn } from \"#shadcn/lib/utils\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n\topts?: CarouselOptions;\n\tplugins?: CarouselPlugin;\n\torientation?: \"horizontal\" | \"vertical\";\n\tsetApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n\tcarouselRef: ReturnType<typeof useEmblaCarousel>[0];\n\tapi: ReturnType<typeof useEmblaCarousel>[1];\n\tscrollPrev: () => void;\n\tscrollNext: () => void;\n\tcanScrollPrev: boolean;\n\tcanScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n\tconst context = React.useContext(CarouselContext);\n\n\tif (!context) {\n\t\tthrow new Error(\"useCarousel must be used within a <Carousel />\");\n\t}\n\n\treturn context;\n}\n\nfunction Carousel({\n\torientation = \"horizontal\",\n\topts,\n\tsetApi,\n\tplugins,\n\tclassName,\n\tchildren,\n\t...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n\tconst [carouselRef, api] = useEmblaCarousel(\n\t\t{\n\t\t\t...opts,\n\t\t\taxis: orientation === \"horizontal\" ? \"x\" : \"y\",\n\t\t},\n\t\tplugins,\n\t);\n\tconst [canScrollPrev, setCanScrollPrev] = React.useState(false);\n\tconst [canScrollNext, setCanScrollNext] = React.useState(false);\n\n\tconst onSelect = React.useCallback((api: CarouselApi) => {\n\t\tif (!api) return;\n\t\tsetCanScrollPrev(api.canScrollPrev());\n\t\tsetCanScrollNext(api.canScrollNext());\n\t}, []);\n\n\tconst scrollPrev = React.useCallback(() => {\n\t\tapi?.scrollPrev();\n\t}, [api]);\n\n\tconst scrollNext = React.useCallback(() => {\n\t\tapi?.scrollNext();\n\t}, [api]);\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (event.key === \"ArrowLeft\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tscrollPrev();\n\t\t\t} else if (event.key === \"ArrowRight\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tscrollNext();\n\t\t\t}\n\t\t},\n\t\t[scrollPrev, scrollNext],\n\t);\n\n\tReact.useEffect(() => {\n\t\tif (!api || !setApi) return;\n\t\tsetApi(api);\n\t}, [api, setApi]);\n\n\tReact.useEffect(() => {\n\t\tif (!api) return;\n\t\tonSelect(api);\n\t\tapi.on(\"reInit\", onSelect);\n\t\tapi.on(\"select\", onSelect);\n\n\t\treturn () => {\n\t\t\tapi?.off(\"select\", onSelect);\n\t\t};\n\t}, [api, onSelect]);\n\n\treturn (\n\t\t<CarouselContext.Provider\n\t\t\tvalue={{\n\t\t\t\tcarouselRef,\n\t\t\t\tapi: api,\n\t\t\t\topts,\n\t\t\t\torientation:\n\t\t\t\t\torientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n\t\t\t\tscrollPrev,\n\t\t\t\tscrollNext,\n\t\t\t\tcanScrollPrev,\n\t\t\t\tcanScrollNext,\n\t\t\t}}\n\t\t>\n\t\t\t{/* biome-ignore lint: FIXME: unchanged shadcn */}\n\t\t\t<div\n\t\t\t\tonKeyDownCapture={handleKeyDown}\n\t\t\t\tclassName={cn(\"relative\", className)}\n\t\t\t\trole=\"region\"\n\t\t\t\taria-roledescription=\"carousel\"\n\t\t\t\tdata-slot=\"carousel\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</CarouselContext.Provider>\n\t);\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n\tconst { carouselRef, orientation } = useCarousel();\n\n\treturn (\n\t\t<div\n\t\t\tref={carouselRef}\n\t\t\tclassName=\"overflow-hidden\"\n\t\t\tdata-slot=\"carousel-content\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex\",\n\t\t\t\t\torientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n\tconst { orientation } = useCarousel();\n\n\treturn (\n\t\t// biome-ignore lint/a11y/useSemanticElements: FIXME: unchanged shadcn\n\t\t<div\n\t\t\trole=\"group\"\n\t\t\taria-roledescription=\"slide\"\n\t\t\tdata-slot=\"carousel-item\"\n\t\t\tclassName={cn(\n\t\t\t\t\"min-w-0 shrink-0 grow-0 basis-full\",\n\t\t\t\torientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction CarouselPrevious({\n\tclassName,\n\tvariant = \"secondary\",\n\tsize = \"small\",\n\t...props\n}: React.ComponentProps<typeof Button>) {\n\tconst { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n\treturn (\n\t\t<Button\n\t\t\tdata-slot=\"carousel-previous\"\n\t\t\tvariant={variant}\n\t\t\tsize={size}\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute size-8 rounded-full\",\n\t\t\t\torientation === \"horizontal\"\n\t\t\t\t\t? \"top-1/2 -left-12 -translate-y-1/2\"\n\t\t\t\t\t: \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdisabled={!canScrollPrev}\n\t\t\tonClick={scrollPrev}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ArrowLeft />\n\t\t\t<span className=\"sr-only\">Previous slide</span>\n\t\t</Button>\n\t);\n}\n\nfunction CarouselNext({\n\tclassName,\n\tvariant = \"secondary\",\n\tsize = \"small\",\n\t...props\n}: React.ComponentProps<typeof Button>) {\n\tconst { orientation, scrollNext, canScrollNext } = useCarousel();\n\n\treturn (\n\t\t<Button\n\t\t\tdata-slot=\"carousel-next\"\n\t\t\tvariant={variant}\n\t\t\tsize={size}\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute size-8 rounded-full\",\n\t\t\t\torientation === \"horizontal\"\n\t\t\t\t\t? \"top-1/2 -right-12 -translate-y-1/2\"\n\t\t\t\t\t: \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdisabled={!canScrollNext}\n\t\t\tonClick={scrollNext}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ArrowRight />\n\t\t\t<span className=\"sr-only\">Next slide</span>\n\t\t</Button>\n\t);\n}\n\nexport {\n\ttype CarouselApi,\n\tCarousel,\n\tCarouselContent,\n\tCarouselItem,\n\tCarouselPrevious,\n\tCarouselNext,\n};\n"],"names":["useEmblaCarousel","ArrowLeft","ArrowRight","React","Button","cn","CarouselContext","createContext","useCarousel","context","useContext","Error","Carousel","orientation","opts","setApi","plugins","className","children","props","carouselRef","api","axis","canScrollPrev","setCanScrollPrev","useState","canScrollNext","setCanScrollNext","onSelect","useCallback","scrollPrev","scrollNext","handleKeyDown","event","key","preventDefault","useEffect","on","off","Provider","value","div","onKeyDownCapture","role","aria-roledescription","data-slot","CarouselContent","ref","CarouselItem","CarouselPrevious","variant","size","disabled","onClick","span","CarouselNext"],"mappings":"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"}
|
|
@@ -1,13 +1,37 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Card, CardContent } from "
|
|
3
|
-
import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious
|
|
2
|
+
import { Card, CardContent } from "./card.js";
|
|
3
|
+
import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "./carousel.js";
|
|
4
4
|
const meta = {
|
|
5
|
-
title: "Component/Carousel"
|
|
5
|
+
title: "Component/Carousel"
|
|
6
6
|
};
|
|
7
7
|
export default meta;
|
|
8
8
|
export const Demo = {
|
|
9
|
-
render: ()
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
render: ()=>/*#__PURE__*/ _jsxs(Carousel, {
|
|
10
|
+
className: "w-full max-w-xs",
|
|
11
|
+
children: [
|
|
12
|
+
/*#__PURE__*/ _jsx(CarouselContent, {
|
|
13
|
+
children: Array.from({
|
|
14
|
+
length: 5
|
|
15
|
+
}).map((_, index)=>// biome-ignore lint/suspicious/noArrayIndexKey: taken from shadcn demo
|
|
16
|
+
/*#__PURE__*/ _jsx(CarouselItem, {
|
|
17
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
18
|
+
className: "p-1",
|
|
19
|
+
children: /*#__PURE__*/ _jsx(Card, {
|
|
20
|
+
children: /*#__PURE__*/ _jsx(CardContent, {
|
|
21
|
+
className: "flex aspect-square items-center justify-center p-6",
|
|
22
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
23
|
+
className: "text-4xl font-semibold",
|
|
24
|
+
children: index + 1
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
})
|
|
28
|
+
})
|
|
29
|
+
}, index))
|
|
30
|
+
}),
|
|
31
|
+
/*#__PURE__*/ _jsx(CarouselPrevious, {}),
|
|
32
|
+
/*#__PURE__*/ _jsx(CarouselNext, {})
|
|
33
|
+
]
|
|
34
|
+
})
|
|
12
35
|
};
|
|
36
|
+
|
|
13
37
|
//# sourceMappingURL=carousel.stories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/shadcn/components/ui/carousel.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { Card, CardContent } from \"#shadcn/components/ui/card\";\nimport {\n\tCarousel,\n\tCarouselContent,\n\tCarouselItem,\n\tCarouselNext,\n\tCarouselPrevious,\n} from \"#shadcn/components/ui/carousel\";\n\nconst meta = {\n\ttitle: \"Component/Carousel\",\n} satisfies Meta;\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Demo = {\n\trender: () => (\n\t\t<Carousel className=\"w-full max-w-xs\">\n\t\t\t<CarouselContent>\n\t\t\t\t{Array.from({ length: 5 }).map((_, index) => (\n\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: taken from shadcn demo\n\t\t\t\t\t<CarouselItem key={index}>\n\t\t\t\t\t\t<div className=\"p-1\">\n\t\t\t\t\t\t\t<Card>\n\t\t\t\t\t\t\t\t<CardContent className=\"flex aspect-square items-center justify-center p-6\">\n\t\t\t\t\t\t\t\t\t<span className=\"text-4xl font-semibold\">{index + 1}</span>\n\t\t\t\t\t\t\t\t</CardContent>\n\t\t\t\t\t\t\t</Card>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</CarouselItem>\n\t\t\t\t))}\n\t\t\t</CarouselContent>\n\t\t\t<CarouselPrevious />\n\t\t\t<CarouselNext />\n\t\t</Carousel>\n\t),\n} satisfies Story;\n"],"names":["Card","CardContent","Carousel","CarouselContent","CarouselItem","CarouselNext","CarouselPrevious","meta","title","Demo","render","className","Array","from","length","map","_","index","div","span"],"mappings":";AACA,SAASA,IAAI,EAAEC,WAAW,QAAQ,YAA6B;AAC/D,SACCC,QAAQ,EACRC,eAAe,EACfC,YAAY,EACZC,YAAY,EACZC,gBAAgB,QACV,gBAAiC;AAExC,MAAMC,OAAO;IACZC,OAAO;AACR;AACA,eAAeD,KAAK;AAIpB,OAAO,MAAME,OAAO;IACnBC,QAAQ,kBACP,MAACR;YAASS,WAAU;;8BACnB,KAACR;8BACCS,MAAMC,IAAI,CAAC;wBAAEC,QAAQ;oBAAE,GAAGC,GAAG,CAAC,CAACC,GAAGC,QAClC,uEAAuE;sCACvE,KAACb;sCACA,cAAA,KAACc;gCAAIP,WAAU;0CACd,cAAA,KAACX;8CACA,cAAA,KAACC;wCAAYU,WAAU;kDACtB,cAAA,KAACQ;4CAAKR,WAAU;sDAA0BM,QAAQ;;;;;2BAJnCA;;8BAWrB,KAACX;8BACD,KAACD;;;AAGJ,EAAkB"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import * as RechartsPrimitive from "recharts";
|
|
4
|
-
import { cn } from "
|
|
4
|
+
import { cn } from "../../lib/utils.js";
|
|
5
5
|
// Format: { THEME_NAME: CSS_SELECTOR }
|
|
6
|
-
const THEMES = {
|
|
7
|
-
|
|
6
|
+
const THEMES = {
|
|
7
|
+
light: "",
|
|
8
|
+
dark: ".dark"
|
|
9
|
+
};
|
|
10
|
+
const ChartContext = /*#__PURE__*/ React.createContext(null);
|
|
8
11
|
function useChart() {
|
|
9
12
|
const context = React.useContext(ChartContext);
|
|
10
13
|
if (!context) {
|
|
@@ -15,51 +18,70 @@ function useChart() {
|
|
|
15
18
|
function ChartContainer({ id, className, children, config, ...props }) {
|
|
16
19
|
const uniqueId = React.useId();
|
|
17
20
|
const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
|
|
18
|
-
return
|
|
21
|
+
return /*#__PURE__*/ _jsx(ChartContext.Provider, {
|
|
22
|
+
value: {
|
|
23
|
+
config
|
|
24
|
+
},
|
|
25
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
26
|
+
"data-slot": "chart",
|
|
27
|
+
"data-chart": chartId,
|
|
28
|
+
className: cn("[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden", className),
|
|
29
|
+
...props,
|
|
30
|
+
children: [
|
|
31
|
+
/*#__PURE__*/ _jsx(ChartStyle, {
|
|
32
|
+
id: chartId,
|
|
33
|
+
config: config
|
|
34
|
+
}),
|
|
35
|
+
/*#__PURE__*/ _jsx(RechartsPrimitive.ResponsiveContainer, {
|
|
36
|
+
children: children
|
|
37
|
+
})
|
|
38
|
+
]
|
|
39
|
+
})
|
|
40
|
+
});
|
|
19
41
|
}
|
|
20
|
-
const ChartStyle = ({ id, config })
|
|
21
|
-
const colorConfig = Object.entries(config).filter(([, config])
|
|
42
|
+
const ChartStyle = ({ id, config })=>{
|
|
43
|
+
const colorConfig = Object.entries(config).filter(([, config])=>config.theme || config.color);
|
|
22
44
|
if (!colorConfig.length) {
|
|
23
45
|
return null;
|
|
24
46
|
}
|
|
25
|
-
return
|
|
47
|
+
return /*#__PURE__*/ _jsx("style", {
|
|
26
48
|
// biome-ignore lint/security/noDangerouslySetInnerHtml: FIXME: unchanged shadcn
|
|
27
49
|
dangerouslySetInnerHTML: {
|
|
28
|
-
__html: Object.entries(THEMES)
|
|
29
|
-
.map(([theme, prefix]) => `
|
|
50
|
+
__html: Object.entries(THEMES).map(([theme, prefix])=>`
|
|
30
51
|
${prefix} [data-chart=${id}] {
|
|
31
|
-
${colorConfig
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return color ? ` --color-${key}: ${color};` : null;
|
|
36
|
-
})
|
|
37
|
-
.join("\n")}
|
|
52
|
+
${colorConfig.map(([key, itemConfig])=>{
|
|
53
|
+
const color = itemConfig.theme?.[theme] || itemConfig.color;
|
|
54
|
+
return color ? ` --color-${key}: ${color};` : null;
|
|
55
|
+
}).join("\n")}
|
|
38
56
|
}
|
|
39
|
-
`)
|
|
40
|
-
|
|
41
|
-
|
|
57
|
+
`).join("\n")
|
|
58
|
+
}
|
|
59
|
+
});
|
|
42
60
|
};
|
|
43
61
|
const ChartTooltip = RechartsPrimitive.Tooltip;
|
|
44
|
-
function ChartTooltipContent({ active, payload, className, indicator = "dot", hideLabel = false, hideIndicator = false, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey
|
|
62
|
+
function ChartTooltipContent({ active, payload, className, indicator = "dot", hideLabel = false, hideIndicator = false, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey }) {
|
|
45
63
|
const { config } = useChart();
|
|
46
|
-
const tooltipLabel = React.useMemo(()
|
|
64
|
+
const tooltipLabel = React.useMemo(()=>{
|
|
47
65
|
if (hideLabel || !payload?.length) {
|
|
48
66
|
return null;
|
|
49
67
|
}
|
|
50
68
|
const [item] = payload;
|
|
51
69
|
const key = `${labelKey || item?.dataKey || item?.name || "value"}`;
|
|
52
70
|
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
53
|
-
const value = !labelKey && typeof label === "string"
|
|
54
|
-
? config[label]?.label || label
|
|
55
|
-
: itemConfig?.label;
|
|
71
|
+
const value = !labelKey && typeof label === "string" ? config[label]?.label || label : itemConfig?.label;
|
|
56
72
|
if (labelFormatter) {
|
|
57
|
-
return
|
|
73
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
74
|
+
className: cn("font-medium", labelClassName),
|
|
75
|
+
children: labelFormatter(value, payload)
|
|
76
|
+
});
|
|
58
77
|
}
|
|
59
78
|
if (!value) {
|
|
60
79
|
return null;
|
|
61
80
|
}
|
|
62
|
-
return _jsx("div", {
|
|
81
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
82
|
+
className: cn("font-medium", labelClassName),
|
|
83
|
+
children: value
|
|
84
|
+
});
|
|
63
85
|
}, [
|
|
64
86
|
label,
|
|
65
87
|
labelFormatter,
|
|
@@ -67,64 +89,105 @@ function ChartTooltipContent({ active, payload, className, indicator = "dot", hi
|
|
|
67
89
|
hideLabel,
|
|
68
90
|
labelClassName,
|
|
69
91
|
config,
|
|
70
|
-
labelKey
|
|
92
|
+
labelKey
|
|
71
93
|
]);
|
|
72
94
|
if (!active || !payload?.length) {
|
|
73
95
|
return null;
|
|
74
96
|
}
|
|
75
97
|
const nestLabel = payload.length === 1 && indicator !== "dot";
|
|
76
|
-
return
|
|
98
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
99
|
+
className: cn("border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl", className),
|
|
100
|
+
children: [
|
|
101
|
+
!nestLabel ? tooltipLabel : null,
|
|
102
|
+
/*#__PURE__*/ _jsx("div", {
|
|
103
|
+
className: "grid gap-1.5",
|
|
104
|
+
children: payload.map((item, index)=>{
|
|
77
105
|
const key = `${nameKey || item.name || item.dataKey || "value"}`;
|
|
78
106
|
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
79
107
|
const indicatorColor = color || item.payload.fill || item.color;
|
|
80
|
-
return
|
|
108
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
109
|
+
className: cn("[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5", indicator === "dot" && "items-center"),
|
|
110
|
+
children: formatter && item?.value !== undefined && item.name ? formatter(item.value, item.name, item, index, item.payload) : /*#__PURE__*/ _jsxs(_Fragment, {
|
|
111
|
+
children: [
|
|
112
|
+
itemConfig?.icon ? /*#__PURE__*/ _jsx(itemConfig.icon, {}) : !hideIndicator && /*#__PURE__*/ _jsx("div", {
|
|
113
|
+
className: cn("shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)", {
|
|
81
114
|
"h-2.5 w-2.5": indicator === "dot",
|
|
82
115
|
"w-1": indicator === "line",
|
|
83
116
|
"w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
|
|
84
|
-
"my-0.5": nestLabel && indicator === "dashed"
|
|
85
|
-
}),
|
|
117
|
+
"my-0.5": nestLabel && indicator === "dashed"
|
|
118
|
+
}),
|
|
119
|
+
style: {
|
|
86
120
|
"--color-bg": indicatorColor,
|
|
87
|
-
"--color-border": indicatorColor
|
|
88
|
-
}
|
|
89
|
-
|
|
121
|
+
"--color-border": indicatorColor
|
|
122
|
+
}
|
|
123
|
+
}),
|
|
124
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
125
|
+
className: cn("flex flex-1 justify-between leading-none", nestLabel ? "items-end" : "items-center"),
|
|
126
|
+
children: [
|
|
127
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
128
|
+
className: "grid gap-1.5",
|
|
129
|
+
children: [
|
|
130
|
+
nestLabel ? tooltipLabel : null,
|
|
131
|
+
/*#__PURE__*/ _jsx("span", {
|
|
132
|
+
className: "text-muted-foreground",
|
|
133
|
+
children: itemConfig?.label || item.name
|
|
134
|
+
})
|
|
135
|
+
]
|
|
136
|
+
}),
|
|
137
|
+
item.value && /*#__PURE__*/ _jsx("span", {
|
|
138
|
+
className: "text-foreground font-mono font-medium tabular-nums",
|
|
139
|
+
children: item.value.toLocaleString()
|
|
140
|
+
})
|
|
141
|
+
]
|
|
142
|
+
})
|
|
143
|
+
]
|
|
144
|
+
})
|
|
145
|
+
}, item.dataKey);
|
|
146
|
+
})
|
|
147
|
+
})
|
|
148
|
+
]
|
|
149
|
+
});
|
|
90
150
|
}
|
|
91
151
|
const ChartLegend = RechartsPrimitive.Legend;
|
|
92
|
-
function ChartLegendContent({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey
|
|
152
|
+
function ChartLegendContent({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey }) {
|
|
93
153
|
const { config } = useChart();
|
|
94
154
|
if (!payload?.length) {
|
|
95
155
|
return null;
|
|
96
156
|
}
|
|
97
|
-
return
|
|
157
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
158
|
+
className: cn("flex items-center justify-center gap-4", verticalAlign === "top" ? "pb-3" : "pt-3", className),
|
|
159
|
+
children: payload.map((item)=>{
|
|
98
160
|
const key = `${nameKey || item.dataKey || "value"}`;
|
|
99
161
|
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
100
|
-
return
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
162
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
163
|
+
className: cn("[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3"),
|
|
164
|
+
children: [
|
|
165
|
+
itemConfig?.icon && !hideIcon ? /*#__PURE__*/ _jsx(itemConfig.icon, {}) : /*#__PURE__*/ _jsx("div", {
|
|
166
|
+
className: "h-2 w-2 shrink-0 rounded-[2px]",
|
|
167
|
+
style: {
|
|
168
|
+
backgroundColor: item.color
|
|
169
|
+
}
|
|
170
|
+
}),
|
|
171
|
+
itemConfig?.label
|
|
172
|
+
]
|
|
173
|
+
}, item.value);
|
|
174
|
+
})
|
|
175
|
+
});
|
|
104
176
|
}
|
|
105
177
|
// Helper to extract item config from a payload.
|
|
106
178
|
function getPayloadConfigFromPayload(config, payload, key) {
|
|
107
179
|
if (typeof payload !== "object" || payload === null) {
|
|
108
180
|
return undefined;
|
|
109
181
|
}
|
|
110
|
-
const payloadPayload = "payload" in payload &&
|
|
111
|
-
typeof payload.payload === "object" &&
|
|
112
|
-
payload.payload !== null
|
|
113
|
-
? payload.payload
|
|
114
|
-
: undefined;
|
|
182
|
+
const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : undefined;
|
|
115
183
|
let configLabelKey = key;
|
|
116
|
-
if (key in payload &&
|
|
117
|
-
typeof payload[key] === "string") {
|
|
184
|
+
if (key in payload && typeof payload[key] === "string") {
|
|
118
185
|
configLabelKey = payload[key];
|
|
119
|
-
}
|
|
120
|
-
else if (payloadPayload &&
|
|
121
|
-
key in payloadPayload &&
|
|
122
|
-
typeof payloadPayload[key] === "string") {
|
|
186
|
+
} else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
|
|
123
187
|
configLabelKey = payloadPayload[key];
|
|
124
188
|
}
|
|
125
|
-
return configLabelKey in config
|
|
126
|
-
? config[configLabelKey]
|
|
127
|
-
: config[key];
|
|
189
|
+
return configLabelKey in config ? config[configLabelKey] : config[key];
|
|
128
190
|
}
|
|
129
|
-
export { ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent, ChartStyle
|
|
191
|
+
export { ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent, ChartStyle };
|
|
192
|
+
|
|
130
193
|
//# sourceMappingURL=chart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../../../../../src/shadcn/components/ui/chart.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/shadcn/components/ui/chart.tsx"],"sourcesContent":["import * as React from \"react\";\nimport * as RechartsPrimitive from \"recharts\";\n\nimport { cn } from \"#shadcn/lib/utils\";\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: React.ReactNode;\n\t\ticon?: React.ComponentType;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record<keyof typeof THEMES, string> }\n\t);\n};\n\ntype ChartContextProps = {\n\tconfig: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n\tconst context = React.useContext(ChartContext);\n\n\tif (!context) {\n\t\tthrow new Error(\"useChart must be used within a <ChartContainer />\");\n\t}\n\n\treturn context;\n}\n\nfunction ChartContainer({\n\tid,\n\tclassName,\n\tchildren,\n\tconfig,\n\t...props\n}: React.ComponentProps<\"div\"> & {\n\tconfig: ChartConfig;\n\tchildren: React.ComponentProps<\n\t\ttypeof RechartsPrimitive.ResponsiveContainer\n\t>[\"children\"];\n}) {\n\tconst uniqueId = React.useId();\n\tconst chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`;\n\n\treturn (\n\t\t<ChartContext.Provider value={{ config }}>\n\t\t\t<div\n\t\t\t\tdata-slot=\"chart\"\n\t\t\t\tdata-chart={chartId}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ChartStyle id={chartId} config={config} />\n\t\t\t\t<RechartsPrimitive.ResponsiveContainer>\n\t\t\t\t\t{children}\n\t\t\t\t</RechartsPrimitive.ResponsiveContainer>\n\t\t\t</div>\n\t\t</ChartContext.Provider>\n\t);\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n\tconst colorConfig = Object.entries(config).filter(\n\t\t([, config]) => config.theme || config.color,\n\t);\n\n\tif (!colorConfig.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<style\n\t\t\t// biome-ignore lint/security/noDangerouslySetInnerHtml: FIXME: unchanged shadcn\n\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t__html: Object.entries(THEMES)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n\t.map(([key, itemConfig]) => {\n\t\tconst color =\n\t\t\titemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n\t\t\titemConfig.color;\n\t\treturn color ? ` --color-${key}: ${color};` : null;\n\t})\n\t.join(\"\\n\")}\n}\n`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t}}\n\t\t/>\n\t);\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nfunction ChartTooltipContent({\n\tactive,\n\tpayload,\n\tclassName,\n\tindicator = \"dot\",\n\thideLabel = false,\n\thideIndicator = false,\n\tlabel,\n\tlabelFormatter,\n\tlabelClassName,\n\tformatter,\n\tcolor,\n\tnameKey,\n\tlabelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n\tReact.ComponentProps<\"div\"> & {\n\t\thideLabel?: boolean;\n\t\thideIndicator?: boolean;\n\t\tindicator?: \"line\" | \"dot\" | \"dashed\";\n\t\tnameKey?: string;\n\t\tlabelKey?: string;\n\t}) {\n\tconst { config } = useChart();\n\n\tconst tooltipLabel = React.useMemo(() => {\n\t\tif (hideLabel || !payload?.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst [item] = payload;\n\t\tconst key = `${labelKey || item?.dataKey || item?.name || \"value\"}`;\n\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\tconst value =\n\t\t\t!labelKey && typeof label === \"string\"\n\t\t\t\t? config[label as keyof typeof config]?.label || label\n\t\t\t\t: itemConfig?.label;\n\n\t\tif (labelFormatter) {\n\t\t\treturn (\n\t\t\t\t<div className={cn(\"font-medium\", labelClassName)}>\n\t\t\t\t\t{labelFormatter(value, payload)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn <div className={cn(\"font-medium\", labelClassName)}>{value}</div>;\n\t}, [\n\t\tlabel,\n\t\tlabelFormatter,\n\t\tpayload,\n\t\thideLabel,\n\t\tlabelClassName,\n\t\tconfig,\n\t\tlabelKey,\n\t]);\n\n\tif (!active || !payload?.length) {\n\t\treturn null;\n\t}\n\n\tconst nestLabel = payload.length === 1 && indicator !== \"dot\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!nestLabel ? tooltipLabel : null}\n\t\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t{payload.map((item, index) => {\n\t\t\t\t\tconst key = `${nameKey || item.name || item.dataKey || \"value\"}`;\n\t\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\t\t\t\tconst indicatorColor = color || item.payload.fill || item.color;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={item.dataKey}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5\",\n\t\t\t\t\t\t\t\tindicator === \"dot\" && \"items-center\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{formatter && item?.value !== undefined && item.name ? (\n\t\t\t\t\t\t\t\tformatter(item.value, item.name, item, index, item.payload)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{itemConfig?.icon ? (\n\t\t\t\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t!hideIndicator && (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"h-2.5 w-2.5\": indicator === \"dot\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"w-1\": indicator === \"line\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"w-0 border-[1.5px] border-dashed bg-transparent\":\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tindicator === \"dashed\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"my-0.5\": nestLabel && indicator === \"dashed\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"--color-bg\": indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"--color-border\": indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"flex flex-1 justify-between leading-none\",\n\t\t\t\t\t\t\t\t\t\t\tnestLabel ? \"items-end\" : \"items-center\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t\t\t\t\t\t\t\t{nestLabel ? tooltipLabel : null}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.name}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{item.value && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-foreground font-mono font-medium tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nfunction ChartLegendContent({\n\tclassName,\n\thideIcon = false,\n\tpayload,\n\tverticalAlign = \"bottom\",\n\tnameKey,\n}: React.ComponentProps<\"div\"> &\n\tPick<RechartsPrimitive.LegendProps, \"payload\" | \"verticalAlign\"> & {\n\t\thideIcon?: boolean;\n\t\tnameKey?: string;\n\t}) {\n\tconst { config } = useChart();\n\n\tif (!payload?.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center justify-center gap-4\",\n\t\t\t\tverticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{payload.map((item) => {\n\t\t\t\tconst key = `${nameKey || item.dataKey || \"value\"}`;\n\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{itemConfig?.icon && !hideIcon ? (\n\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"h-2 w-2 shrink-0 rounded-[2px]\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tbackgroundColor: item.color,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{itemConfig?.label}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: unknown,\n\tkey: string,\n) {\n\tif (typeof payload !== \"object\" || payload === null) {\n\t\treturn undefined;\n\t}\n\n\tconst payloadPayload =\n\t\t\"payload\" in payload &&\n\t\ttypeof payload.payload === \"object\" &&\n\t\tpayload.payload !== null\n\t\t\t? payload.payload\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (\n\t\tkey in payload &&\n\t\ttypeof payload[key as keyof typeof payload] === \"string\"\n\t) {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadPayload &&\n\t\tkey in payloadPayload &&\n\t\ttypeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadPayload[\n\t\t\tkey as keyof typeof payloadPayload\n\t\t] as string;\n\t}\n\n\treturn configLabelKey in config\n\t\t? config[configLabelKey]\n\t\t: config[key as keyof typeof config];\n}\n\nexport {\n\tChartContainer,\n\tChartTooltip,\n\tChartTooltipContent,\n\tChartLegend,\n\tChartLegendContent,\n\tChartStyle,\n};\n"],"names":["React","RechartsPrimitive","cn","THEMES","light","dark","ChartContext","createContext","useChart","context","useContext","Error","ChartContainer","id","className","children","config","props","uniqueId","useId","chartId","replace","Provider","value","div","data-slot","data-chart","ChartStyle","ResponsiveContainer","colorConfig","Object","entries","filter","theme","color","length","style","dangerouslySetInnerHTML","__html","map","prefix","key","itemConfig","join","ChartTooltip","Tooltip","ChartTooltipContent","active","payload","indicator","hideLabel","hideIndicator","label","labelFormatter","labelClassName","formatter","nameKey","labelKey","tooltipLabel","useMemo","item","dataKey","name","getPayloadConfigFromPayload","nestLabel","index","indicatorColor","fill","undefined","icon","span","toLocaleString","ChartLegend","Legend","ChartLegendContent","hideIcon","verticalAlign","backgroundColor","payloadPayload","configLabelKey"],"mappings":"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"}
|