@giddaa-housing/ui 1.0.0 → 1.2.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/css/generated/shared.css +1 -1
- package/css/giddaa.css +12 -2
- package/dist/accordion.d.ts +9 -10
- package/dist/accordion.js +41 -87
- package/dist/activity-timeline.d.ts +12 -16
- package/dist/activity-timeline.js +83 -198
- package/dist/alert.d.ts +8 -9
- package/dist/alert.js +53 -111
- package/dist/auth-layout.d.ts +4 -4
- package/dist/auth-layout.js +143 -294
- package/dist/avatar.d.ts +6 -6
- package/dist/avatar.js +49 -19
- package/dist/badge.d.ts +12 -14
- package/dist/badge.js +71 -11
- package/dist/bar-chart.d.ts +65 -67
- package/dist/bar-chart.js +232 -207
- package/dist/breadcrumb.d.ts +5 -5
- package/dist/breadcrumb.js +56 -118
- package/dist/bullet-chart.d.ts +41 -37
- package/dist/bullet-chart.js +125 -148
- package/dist/button-BZIeyUw6.d.ts +17 -0
- package/dist/button-group.d.ts +13 -16
- package/dist/button-group.js +39 -88
- package/dist/button.d.ts +2 -19
- package/dist/button.js +94 -13
- package/dist/calendar.d.ts +6 -6
- package/dist/calendar.js +138 -17
- package/dist/card.d.ts +14 -16
- package/dist/card.js +59 -145
- package/dist/carousel.d.ts +34 -35
- package/dist/carousel.js +335 -20
- package/dist/chart.d.ts +90 -63
- package/dist/chart.js +573 -28
- package/dist/checkbox.d.ts +10 -12
- package/dist/checkbox.js +82 -47
- package/dist/cn-BI_4DMBf.js +23 -0
- package/dist/collapsible.d.ts +7 -8
- package/dist/collapsible.js +22 -47
- package/dist/combobox.d.ts +10 -10
- package/dist/combobox.js +236 -44
- package/dist/cta.d.ts +12 -14
- package/dist/cta.js +175 -341
- package/dist/currency-selector.d.ts +31 -32
- package/dist/currency-selector.js +106 -184
- package/dist/data-table.d.ts +168 -0
- package/dist/data-table.js +676 -0
- package/dist/date-picker.d.ts +22 -23
- package/dist/date-picker.js +119 -192
- package/dist/details-card.d.ts +7 -7
- package/dist/details-card.js +104 -253
- package/dist/dialog.d.ts +13 -14
- package/dist/dialog.js +116 -209
- package/dist/dropdown-menu.d.ts +13 -13
- package/dist/dropdown-menu.js +180 -37
- package/dist/dropzone.d.ts +55 -55
- package/dist/dropzone.js +327 -439
- package/dist/editorial-card.d.ts +23 -25
- package/dist/editorial-card.js +129 -296
- package/dist/empty-state.d.ts +8 -9
- package/dist/empty-state.js +48 -105
- package/dist/field.d.ts +23 -25
- package/dist/field.js +110 -221
- package/dist/filter.d.ts +118 -0
- package/dist/filter.js +775 -0
- package/dist/footer.d.ts +8 -15
- package/dist/footer.js +197 -400
- package/dist/funnel-chart.d.ts +49 -48
- package/dist/funnel-chart.js +170 -189
- package/dist/gallery-indicator.d.ts +11 -12
- package/dist/gallery-indicator.js +75 -12
- package/dist/heatmap-chart.d.ts +47 -50
- package/dist/heatmap-chart.js +186 -237
- package/dist/infotip.d.ts +8 -9
- package/dist/infotip.js +33 -59
- package/dist/input-CfoEJ8A6.d.ts +12 -0
- package/dist/input-group.d.ts +16 -20
- package/dist/input-group.js +99 -23
- package/dist/input-size-context-C-SFx9sx.d.ts +10 -0
- package/dist/input-size-context.d.ts +2 -11
- package/dist/input-size-context.js +17 -9
- package/dist/input.d.ts +2 -13
- package/dist/input.js +27 -11
- package/dist/item.d.ts +7 -8
- package/dist/item.js +22 -59
- package/dist/kpi-card.d.ts +18 -20
- package/dist/kpi-card.js +84 -192
- package/dist/label.d.ts +6 -6
- package/dist/label.js +40 -8
- package/dist/line-chart.d.ts +200 -129
- package/dist/line-chart.js +330 -105
- package/dist/list-item.d.ts +22 -0
- package/dist/list-item.js +84 -0
- package/dist/logo.d.ts +4 -4
- package/dist/logo.js +92 -9
- package/dist/map-indicator.d.ts +7 -7
- package/dist/map-indicator.js +80 -106
- package/dist/match.d.ts +10 -11
- package/dist/match.js +62 -107
- package/dist/media-gallery-hero.d.ts +40 -42
- package/dist/media-gallery-hero.js +182 -343
- package/dist/media-player.d.ts +17 -17
- package/dist/media-player.js +873 -1348
- package/dist/multi-step-form.d.ts +56 -0
- package/dist/multi-step-form.js +342 -0
- package/dist/number-input.d.ts +34 -34
- package/dist/number-input.js +64 -117
- package/dist/page-header.d.ts +10 -11
- package/dist/page-header.js +34 -79
- package/dist/pagination.d.ts +17 -21
- package/dist/pagination.js +132 -207
- package/dist/password-input.d.ts +5 -13
- package/dist/password-input.js +31 -55
- package/dist/phone-input.d.ts +19 -20
- package/dist/phone-input.js +226 -344
- package/dist/photo-gallery.d.ts +19 -19
- package/dist/photo-gallery.js +313 -449
- package/dist/picker-lzgmsNfG.js +32 -0
- package/dist/pie-chart.d.ts +121 -90
- package/dist/pie-chart.js +183 -149
- package/dist/popover.d.ts +9 -9
- package/dist/popover.js +72 -23
- package/dist/price-tag.d.ts +26 -27
- package/dist/price-tag.js +113 -173
- package/dist/progress.d.ts +16 -17
- package/dist/progress.js +169 -24
- package/dist/property-listing-card.d.ts +14 -17
- package/dist/property-listing-card.js +102 -220
- package/dist/purchase-option-card.d.ts +79 -0
- package/dist/purchase-option-card.js +176 -0
- package/dist/radar-chart.d.ts +29 -31
- package/dist/radar-chart.js +162 -137
- package/dist/radio-group.d.ts +11 -13
- package/dist/radio-group.js +46 -60
- package/dist/review-block.d.ts +14 -16
- package/dist/review-block.js +154 -10
- package/dist/rich-text-editor.d.ts +30 -14
- package/dist/rich-text-editor.js +592 -716
- package/dist/scatter-chart.d.ts +45 -47
- package/dist/scatter-chart.js +236 -240
- package/dist/search-input.d.ts +8 -16
- package/dist/search-input.js +57 -109
- package/dist/select.d.ts +8 -8
- package/dist/select.js +144 -27
- package/dist/separator.d.ts +8 -9
- package/dist/separator.js +32 -8
- package/dist/sheet.d.ts +11 -11
- package/dist/sheet.js +103 -24
- package/dist/sidebar.d.ts +32 -37
- package/dist/sidebar.js +364 -634
- package/dist/size-context-D4mYvcg8.d.ts +10 -0
- package/dist/size-context.d.ts +2 -11
- package/dist/size-context.js +17 -9
- package/dist/skeleton.d.ts +4 -5
- package/dist/skeleton.js +12 -8
- package/dist/slider.d.ts +8 -9
- package/dist/slider.js +64 -135
- package/dist/sparkline.d.ts +68 -58
- package/dist/sparkline.js +315 -251
- package/dist/stepper.d.ts +23 -24
- package/dist/stepper.js +149 -246
- package/dist/styles.css +1004 -116
- package/dist/switch.d.ts +10 -12
- package/dist/switch.js +48 -70
- package/dist/table-card.d.ts +35 -0
- package/dist/table-card.js +125 -0
- package/dist/table.d.ts +18 -14
- package/dist/table.js +117 -154
- package/dist/tabs.d.ts +33 -15
- package/dist/tabs.js +110 -18
- package/dist/tag.d.ts +21 -23
- package/dist/tag.js +103 -159
- package/dist/testimonial-block.d.ts +18 -19
- package/dist/testimonial-block.js +189 -358
- package/dist/textarea-IS_D8pXf.d.ts +11 -0
- package/dist/textarea.d.ts +2 -12
- package/dist/textarea.js +24 -11
- package/dist/time-picker.d.ts +11 -11
- package/dist/time-picker.js +245 -302
- package/dist/toast.d.ts +16 -18
- package/dist/toast.js +154 -205
- package/dist/tooltip.d.ts +8 -9
- package/dist/tooltip.js +37 -12
- package/dist/tree-map.d.ts +59 -62
- package/dist/tree-map.js +226 -269
- package/dist/use-uncontrolled-CLfM1XbB.js +21 -0
- package/dist/waterfall-chart.d.ts +94 -97
- package/dist/waterfall-chart.js +455 -552
- package/package.json +36 -9
- package/dist/accordion.js.map +0 -1
- package/dist/activity-timeline.js.map +0 -1
- package/dist/alert.js.map +0 -1
- package/dist/auth-layout.js.map +0 -1
- package/dist/avatar.js.map +0 -1
- package/dist/badge.js.map +0 -1
- package/dist/bar-chart.js.map +0 -1
- package/dist/breadcrumb.js.map +0 -1
- package/dist/bullet-chart.js.map +0 -1
- package/dist/button-group.js.map +0 -1
- package/dist/button.js.map +0 -1
- package/dist/calendar.js.map +0 -1
- package/dist/card.js.map +0 -1
- package/dist/carousel.js.map +0 -1
- package/dist/chart.js.map +0 -1
- package/dist/checkbox.js.map +0 -1
- package/dist/chunk-322YCNVL.js +0 -278
- package/dist/chunk-322YCNVL.js.map +0 -1
- package/dist/chunk-3ACQVT7A.js +0 -25
- package/dist/chunk-3ACQVT7A.js.map +0 -1
- package/dist/chunk-3T65TLJX.js +0 -334
- package/dist/chunk-3T65TLJX.js.map +0 -1
- package/dist/chunk-6ZSGQHH2.js +0 -192
- package/dist/chunk-6ZSGQHH2.js.map +0 -1
- package/dist/chunk-7TBMLFGW.js +0 -41
- package/dist/chunk-7TBMLFGW.js.map +0 -1
- package/dist/chunk-B4H6RNDH.js +0 -135
- package/dist/chunk-B4H6RNDH.js.map +0 -1
- package/dist/chunk-BUXCGZ6X.js +0 -219
- package/dist/chunk-BUXCGZ6X.js.map +0 -1
- package/dist/chunk-CHII2QHH.js +0 -58
- package/dist/chunk-CHII2QHH.js.map +0 -1
- package/dist/chunk-DMNOXRRW.js +0 -147
- package/dist/chunk-DMNOXRRW.js.map +0 -1
- package/dist/chunk-EFSOSSIC.js +0 -130
- package/dist/chunk-EFSOSSIC.js.map +0 -1
- package/dist/chunk-FZDSVMKY.js +0 -363
- package/dist/chunk-FZDSVMKY.js.map +0 -1
- package/dist/chunk-GJOFIJS3.js +0 -246
- package/dist/chunk-GJOFIJS3.js.map +0 -1
- package/dist/chunk-HL3ZSYES.js +0 -23
- package/dist/chunk-HL3ZSYES.js.map +0 -1
- package/dist/chunk-JVLUBAPB.js +0 -129
- package/dist/chunk-JVLUBAPB.js.map +0 -1
- package/dist/chunk-KDPYSOYZ.js +0 -64
- package/dist/chunk-KDPYSOYZ.js.map +0 -1
- package/dist/chunk-KSMDANKI.js +0 -43
- package/dist/chunk-KSMDANKI.js.map +0 -1
- package/dist/chunk-MEKCCOP5.js +0 -46
- package/dist/chunk-MEKCCOP5.js.map +0 -1
- package/dist/chunk-NOFXVRWL.js +0 -451
- package/dist/chunk-NOFXVRWL.js.map +0 -1
- package/dist/chunk-PC5MHNVA.js +0 -171
- package/dist/chunk-PC5MHNVA.js.map +0 -1
- package/dist/chunk-QKAQZ2GU.js +0 -122
- package/dist/chunk-QKAQZ2GU.js.map +0 -1
- package/dist/chunk-QZHSHSVV.js +0 -26
- package/dist/chunk-QZHSHSVV.js.map +0 -1
- package/dist/chunk-RBMK26XD.js +0 -19
- package/dist/chunk-RBMK26XD.js.map +0 -1
- package/dist/chunk-SFNJGF6M.js +0 -262
- package/dist/chunk-SFNJGF6M.js.map +0 -1
- package/dist/chunk-UJJNLGTM.js +0 -112
- package/dist/chunk-UJJNLGTM.js.map +0 -1
- package/dist/chunk-VGR4ZWJ3.js +0 -418
- package/dist/chunk-VGR4ZWJ3.js.map +0 -1
- package/dist/chunk-XG47P6D4.js +0 -99
- package/dist/chunk-XG47P6D4.js.map +0 -1
- package/dist/chunk-XZZAHNVM.js +0 -21
- package/dist/chunk-XZZAHNVM.js.map +0 -1
- package/dist/chunk-Y4TTYVNE.js +0 -36
- package/dist/chunk-Y4TTYVNE.js.map +0 -1
- package/dist/chunk-YDWIHW6Q.js +0 -69
- package/dist/chunk-YDWIHW6Q.js.map +0 -1
- package/dist/collapsible.js.map +0 -1
- package/dist/combobox.js.map +0 -1
- package/dist/cta.js.map +0 -1
- package/dist/currency-selector.js.map +0 -1
- package/dist/date-picker.js.map +0 -1
- package/dist/details-card.js.map +0 -1
- package/dist/dialog.js.map +0 -1
- package/dist/dropdown-menu.js.map +0 -1
- package/dist/dropzone.js.map +0 -1
- package/dist/editorial-card.js.map +0 -1
- package/dist/empty-state.js.map +0 -1
- package/dist/field.js.map +0 -1
- package/dist/footer.js.map +0 -1
- package/dist/funnel-chart.js.map +0 -1
- package/dist/gallery-indicator.js.map +0 -1
- package/dist/heatmap-chart.js.map +0 -1
- package/dist/infotip.js.map +0 -1
- package/dist/input-group.js.map +0 -1
- package/dist/input-size-context.js.map +0 -1
- package/dist/input.js.map +0 -1
- package/dist/item.js.map +0 -1
- package/dist/kpi-card.js.map +0 -1
- package/dist/label.js.map +0 -1
- package/dist/line-chart.js.map +0 -1
- package/dist/logo.js.map +0 -1
- package/dist/map-indicator.js.map +0 -1
- package/dist/match.js.map +0 -1
- package/dist/media-gallery-hero.js.map +0 -1
- package/dist/media-player.js.map +0 -1
- package/dist/number-input.js.map +0 -1
- package/dist/page-header.js.map +0 -1
- package/dist/pagination.js.map +0 -1
- package/dist/password-input.js.map +0 -1
- package/dist/phone-input.js.map +0 -1
- package/dist/photo-gallery.js.map +0 -1
- package/dist/pie-chart.js.map +0 -1
- package/dist/popover.js.map +0 -1
- package/dist/price-tag.js.map +0 -1
- package/dist/progress.js.map +0 -1
- package/dist/property-listing-card.js.map +0 -1
- package/dist/radar-chart.js.map +0 -1
- package/dist/radio-group.js.map +0 -1
- package/dist/review-block.js.map +0 -1
- package/dist/rich-text-editor.js.map +0 -1
- package/dist/scatter-chart.js.map +0 -1
- package/dist/search-input.js.map +0 -1
- package/dist/select.js.map +0 -1
- package/dist/separator.js.map +0 -1
- package/dist/sheet.js.map +0 -1
- package/dist/sidebar.js.map +0 -1
- package/dist/size-context.js.map +0 -1
- package/dist/skeleton.js.map +0 -1
- package/dist/slider.js.map +0 -1
- package/dist/sparkline.js.map +0 -1
- package/dist/stepper.js.map +0 -1
- package/dist/switch.js.map +0 -1
- package/dist/tab-list.d.ts +0 -38
- package/dist/tab-list.js +0 -123
- package/dist/tab-list.js.map +0 -1
- package/dist/table.js.map +0 -1
- package/dist/tabs.js.map +0 -1
- package/dist/tag.js.map +0 -1
- package/dist/testimonial-block.js.map +0 -1
- package/dist/textarea.js.map +0 -1
- package/dist/time-picker.js.map +0 -1
- package/dist/toast.js.map +0 -1
- package/dist/tooltip.js.map +0 -1
- package/dist/tree-map.js.map +0 -1
- package/dist/waterfall-chart.js.map +0 -1
package/dist/carousel.js
CHANGED
|
@@ -1,22 +1,337 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
2
|
+
import { t as cn } from "./cn-BI_4DMBf.js";
|
|
3
|
+
import { useComponentSize } from "./size-context.js";
|
|
4
|
+
import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { cva } from "class-variance-authority";
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
import useEmblaCarousel from "embla-carousel-react";
|
|
9
|
+
//#region src/carousel.tsx
|
|
10
|
+
/**
|
|
11
|
+
* Shared glassmorphic treatment for every overlay surface in the carousel
|
|
12
|
+
* (navigation arrows + indicator). Dark glass at 35% over a 16px backdrop
|
|
13
|
+
* blur with a near-invisible 18% light border that lifts the chrome off the
|
|
14
|
+
* imagery. Always dark, in both themes — see `--color-surface-glass-overlay-button`.
|
|
15
|
+
*/
|
|
16
|
+
const glassChrome = "border border-fg-on-brand/[0.18] bg-surface-glass-overlay-button backdrop-blur-[16px]";
|
|
17
|
+
const carouselVariants = cva("relative overflow-hidden rounded-2xl bg-surface-brand-subtle", {
|
|
18
|
+
variants: { imageSize: {
|
|
19
|
+
sm: "w-[320px] max-w-full aspect-[320/220]",
|
|
20
|
+
md: "w-[520px] max-w-full aspect-[520/340]",
|
|
21
|
+
lg: "w-[800px] max-w-full aspect-[800/500]",
|
|
22
|
+
full: "w-full"
|
|
23
|
+
} },
|
|
24
|
+
defaultVariants: { imageSize: "md" }
|
|
25
|
+
});
|
|
26
|
+
const CarouselContext = React.createContext(null);
|
|
27
|
+
function useCarousel() {
|
|
28
|
+
const context = React.useContext(CarouselContext);
|
|
29
|
+
if (!context) throw new Error("useCarousel must be used within a <Carousel />");
|
|
30
|
+
return context;
|
|
31
|
+
}
|
|
32
|
+
function Carousel({ orientation = "horizontal", opts, setApi, plugins, size, imageSize, className, children, ...props }) {
|
|
33
|
+
const resolvedSize = useComponentSize(size);
|
|
34
|
+
const [carouselRef, api] = useEmblaCarousel({
|
|
35
|
+
...opts,
|
|
36
|
+
axis: orientation === "horizontal" ? "x" : "y"
|
|
37
|
+
}, plugins);
|
|
38
|
+
const [canScrollPrev, setCanScrollPrev] = React.useState(false);
|
|
39
|
+
const [canScrollNext, setCanScrollNext] = React.useState(false);
|
|
40
|
+
const [selectedIndex, setSelectedIndex] = React.useState(0);
|
|
41
|
+
const [scrollSnaps, setScrollSnaps] = React.useState([]);
|
|
42
|
+
const onSelect = React.useCallback((api) => {
|
|
43
|
+
if (!api) return;
|
|
44
|
+
setCanScrollPrev(api.canScrollPrev());
|
|
45
|
+
setCanScrollNext(api.canScrollNext());
|
|
46
|
+
setSelectedIndex(api.selectedScrollSnap());
|
|
47
|
+
}, []);
|
|
48
|
+
const onReInit = React.useCallback((api) => {
|
|
49
|
+
if (!api) return;
|
|
50
|
+
setScrollSnaps(api.scrollSnapList());
|
|
51
|
+
onSelect(api);
|
|
52
|
+
}, [onSelect]);
|
|
53
|
+
const scrollPrev = React.useCallback(() => {
|
|
54
|
+
api?.scrollPrev();
|
|
55
|
+
}, [api]);
|
|
56
|
+
const scrollNext = React.useCallback(() => {
|
|
57
|
+
api?.scrollNext();
|
|
58
|
+
}, [api]);
|
|
59
|
+
const scrollTo = React.useCallback((index) => {
|
|
60
|
+
api?.scrollTo(index);
|
|
61
|
+
}, [api]);
|
|
62
|
+
const handleKeyDown = React.useCallback((event) => {
|
|
63
|
+
const prevKey = orientation === "horizontal" ? "ArrowLeft" : "ArrowUp";
|
|
64
|
+
const nextKey = orientation === "horizontal" ? "ArrowRight" : "ArrowDown";
|
|
65
|
+
if (event.key === prevKey) {
|
|
66
|
+
event.preventDefault();
|
|
67
|
+
scrollPrev();
|
|
68
|
+
} else if (event.key === nextKey) {
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
scrollNext();
|
|
71
|
+
}
|
|
72
|
+
}, [
|
|
73
|
+
orientation,
|
|
74
|
+
scrollPrev,
|
|
75
|
+
scrollNext
|
|
76
|
+
]);
|
|
77
|
+
React.useEffect(() => {
|
|
78
|
+
if (!api || !setApi) return;
|
|
79
|
+
setApi(api);
|
|
80
|
+
}, [api, setApi]);
|
|
81
|
+
React.useEffect(() => {
|
|
82
|
+
if (!api) return;
|
|
83
|
+
onReInit(api);
|
|
84
|
+
api.on("reInit", onReInit);
|
|
85
|
+
api.on("select", onSelect);
|
|
86
|
+
return () => {
|
|
87
|
+
api?.off("reInit", onReInit);
|
|
88
|
+
api?.off("select", onSelect);
|
|
89
|
+
};
|
|
90
|
+
}, [
|
|
91
|
+
api,
|
|
92
|
+
onReInit,
|
|
93
|
+
onSelect
|
|
94
|
+
]);
|
|
95
|
+
return /* @__PURE__ */ jsx(CarouselContext.Provider, {
|
|
96
|
+
value: {
|
|
97
|
+
carouselRef,
|
|
98
|
+
api,
|
|
99
|
+
orientation,
|
|
100
|
+
size: resolvedSize,
|
|
101
|
+
scrollPrev,
|
|
102
|
+
scrollNext,
|
|
103
|
+
scrollTo,
|
|
104
|
+
canScrollPrev,
|
|
105
|
+
canScrollNext,
|
|
106
|
+
selectedIndex,
|
|
107
|
+
scrollSnaps
|
|
108
|
+
},
|
|
109
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
110
|
+
onKeyDownCapture: handleKeyDown,
|
|
111
|
+
className: cn(carouselVariants({ imageSize }), className),
|
|
112
|
+
role: "region",
|
|
113
|
+
"aria-roledescription": "carousel",
|
|
114
|
+
"data-slot": "carousel",
|
|
115
|
+
...props,
|
|
116
|
+
children
|
|
117
|
+
})
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function CarouselContent({ className, ...props }) {
|
|
121
|
+
const { carouselRef, orientation } = useCarousel();
|
|
122
|
+
return /* @__PURE__ */ jsx("div", {
|
|
123
|
+
ref: carouselRef,
|
|
124
|
+
className: "h-full overflow-hidden",
|
|
125
|
+
"data-slot": "carousel-content",
|
|
126
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
127
|
+
className: cn("flex h-full", orientation === "horizontal" ? "" : "flex-col", className),
|
|
128
|
+
...props
|
|
129
|
+
})
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
function CarouselItem({ className, ...props }) {
|
|
133
|
+
return /* @__PURE__ */ jsx("div", {
|
|
134
|
+
role: "group",
|
|
135
|
+
"aria-roledescription": "slide",
|
|
136
|
+
"data-slot": "carousel-item",
|
|
137
|
+
className: cn("min-w-0 shrink-0 grow-0 basis-full", className),
|
|
138
|
+
...props
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
const arrowVariants = cva(cn("absolute top-1/2 z-10 grid -translate-y-1/2 place-items-center rounded-full text-fg-on-brand/95 shadow-1 transition-[transform,opacity] outline-none", glassChrome, "hover:scale-105 focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] active:scale-95 disabled:pointer-events-none disabled:opacity-40"), {
|
|
142
|
+
variants: {
|
|
143
|
+
size: {
|
|
144
|
+
sm: "size-8 [&_svg]:size-4",
|
|
145
|
+
md: "size-10 [&_svg]:size-[18px]",
|
|
146
|
+
lg: "size-12 [&_svg]:size-5"
|
|
147
|
+
},
|
|
148
|
+
side: {
|
|
149
|
+
prev: "",
|
|
150
|
+
next: ""
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
compoundVariants: [
|
|
154
|
+
{
|
|
155
|
+
size: "sm",
|
|
156
|
+
side: "prev",
|
|
157
|
+
className: "left-3"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
size: "sm",
|
|
161
|
+
side: "next",
|
|
162
|
+
className: "right-3"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
size: "md",
|
|
166
|
+
side: "prev",
|
|
167
|
+
className: "left-4"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
size: "md",
|
|
171
|
+
side: "next",
|
|
172
|
+
className: "right-4"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
size: "lg",
|
|
176
|
+
side: "prev",
|
|
177
|
+
className: "left-5"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
size: "lg",
|
|
181
|
+
side: "next",
|
|
182
|
+
className: "right-5"
|
|
183
|
+
}
|
|
184
|
+
],
|
|
185
|
+
defaultVariants: {
|
|
186
|
+
size: "md",
|
|
187
|
+
side: "prev"
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
function CarouselPrevious({ className, ...props }) {
|
|
191
|
+
const { size, scrollPrev, canScrollPrev } = useCarousel();
|
|
192
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
193
|
+
type: "button",
|
|
194
|
+
"data-slot": "carousel-previous",
|
|
195
|
+
className: cn(arrowVariants({
|
|
196
|
+
size,
|
|
197
|
+
side: "prev"
|
|
198
|
+
}), className),
|
|
199
|
+
disabled: !canScrollPrev,
|
|
200
|
+
onClick: scrollPrev,
|
|
201
|
+
...props,
|
|
202
|
+
children: [/* @__PURE__ */ jsx(ChevronLeftIcon, { className: "cn-rtl-flip" }), /* @__PURE__ */ jsx("span", {
|
|
203
|
+
className: "sr-only",
|
|
204
|
+
children: "Previous slide"
|
|
205
|
+
})]
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
function CarouselNext({ className, ...props }) {
|
|
209
|
+
const { size, scrollNext, canScrollNext } = useCarousel();
|
|
210
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
211
|
+
type: "button",
|
|
212
|
+
"data-slot": "carousel-next",
|
|
213
|
+
className: cn(arrowVariants({
|
|
214
|
+
size,
|
|
215
|
+
side: "next"
|
|
216
|
+
}), className),
|
|
217
|
+
disabled: !canScrollNext,
|
|
218
|
+
onClick: scrollNext,
|
|
219
|
+
...props,
|
|
220
|
+
children: [/* @__PURE__ */ jsx(ChevronRightIcon, { className: "cn-rtl-flip" }), /* @__PURE__ */ jsx("span", {
|
|
221
|
+
className: "sr-only",
|
|
222
|
+
children: "Next slide"
|
|
223
|
+
})]
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Past this many items the indicator switches from "show every dot" to the
|
|
228
|
+
* Airbnb-style windowed mode: at most `MANY_WINDOW` dots, the active one kept
|
|
229
|
+
* near the centre, and dots at a clipped edge faded down to imply more beyond.
|
|
230
|
+
*/
|
|
231
|
+
const MANY_THRESHOLD = 5;
|
|
232
|
+
const MANY_WINDOW = 5;
|
|
233
|
+
/**
|
|
234
|
+
* Returns the dots to render plus the window start, so the determinate and
|
|
235
|
+
* windowed ("many") cases share one render path. The dot strip is always the
|
|
236
|
+
* full list; `start` drives the translate that slides it under the viewport.
|
|
237
|
+
*/
|
|
238
|
+
function getIndicatorWindow(count, selected) {
|
|
239
|
+
if (count < MANY_THRESHOLD) return {
|
|
240
|
+
dots: Array.from({ length: count }, (_, index) => ({
|
|
241
|
+
index,
|
|
242
|
+
faded: false
|
|
243
|
+
})),
|
|
244
|
+
start: 0,
|
|
245
|
+
visible: count
|
|
246
|
+
};
|
|
247
|
+
const start = Math.max(0, Math.min(selected - Math.floor(MANY_WINDOW / 2), count - MANY_WINDOW));
|
|
248
|
+
const end = start + MANY_WINDOW - 1;
|
|
249
|
+
const overflowLeft = start > 0;
|
|
250
|
+
const overflowRight = end < count - 1;
|
|
251
|
+
return {
|
|
252
|
+
dots: Array.from({ length: count }, (_, index) => ({
|
|
253
|
+
index,
|
|
254
|
+
faded: overflowLeft && index === start || overflowRight && index === end
|
|
255
|
+
})),
|
|
256
|
+
start,
|
|
257
|
+
visible: MANY_WINDOW
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
/** Dot diameter, gap, and pill padding per size — in px to keep them crisp. */
|
|
261
|
+
const INDICATOR_SIZES = {
|
|
262
|
+
sm: {
|
|
263
|
+
dot: 5,
|
|
264
|
+
gap: 4,
|
|
265
|
+
padX: 8,
|
|
266
|
+
padY: 4
|
|
267
|
+
},
|
|
268
|
+
md: {
|
|
269
|
+
dot: 7,
|
|
270
|
+
gap: 5,
|
|
271
|
+
padX: 10,
|
|
272
|
+
padY: 5
|
|
273
|
+
},
|
|
274
|
+
lg: {
|
|
275
|
+
dot: 9,
|
|
276
|
+
gap: 6,
|
|
277
|
+
padX: 12,
|
|
278
|
+
padY: 6
|
|
279
|
+
}
|
|
21
280
|
};
|
|
22
|
-
|
|
281
|
+
/** Distance of the indicator from the bottom edge, per size (12/18/24px). */
|
|
282
|
+
const INDICATOR_OFFSET = {
|
|
283
|
+
sm: "bottom-3",
|
|
284
|
+
md: "bottom-[18px]",
|
|
285
|
+
lg: "bottom-6"
|
|
286
|
+
};
|
|
287
|
+
function CarouselIndicator({ className, count: countProp, selected: selectedProp, size: sizeProp, onSelect, ...props }) {
|
|
288
|
+
const ctx = React.useContext(CarouselContext);
|
|
289
|
+
const inheritedSize = useComponentSize(sizeProp);
|
|
290
|
+
const size = sizeProp ?? ctx?.size ?? inheritedSize;
|
|
291
|
+
const count = countProp ?? ctx?.scrollSnaps.length ?? 0;
|
|
292
|
+
const selected = selectedProp ?? ctx?.selectedIndex ?? 0;
|
|
293
|
+
const handleSelect = onSelect ?? ctx?.scrollTo;
|
|
294
|
+
if (count <= 1) return null;
|
|
295
|
+
const { dot, gap, padX, padY } = INDICATOR_SIZES[size];
|
|
296
|
+
const { dots, start, visible } = getIndicatorWindow(count, selected);
|
|
297
|
+
const step = dot + gap;
|
|
298
|
+
const viewportWidth = visible * step - gap;
|
|
299
|
+
return /* @__PURE__ */ jsx("div", {
|
|
300
|
+
"data-slot": "carousel-indicator",
|
|
301
|
+
className: cn("absolute left-1/2 z-10 flex -translate-x-1/2 items-center justify-center rounded-full", INDICATOR_OFFSET[size], glassChrome, className),
|
|
302
|
+
style: { padding: `${padY}px ${padX}px` },
|
|
303
|
+
role: "tablist",
|
|
304
|
+
"aria-label": "Slide indicators",
|
|
305
|
+
...props,
|
|
306
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
307
|
+
className: "overflow-hidden",
|
|
308
|
+
style: { width: viewportWidth },
|
|
309
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
310
|
+
className: "flex items-center transition-transform duration-300 ease-out",
|
|
311
|
+
style: {
|
|
312
|
+
gap,
|
|
313
|
+
transform: `translateX(${-start * step}px)`
|
|
314
|
+
},
|
|
315
|
+
children: dots.map(({ index, faded }) => {
|
|
316
|
+
const isActive = index === selected;
|
|
317
|
+
return /* @__PURE__ */ jsx("button", {
|
|
318
|
+
type: "button",
|
|
319
|
+
role: "tab",
|
|
320
|
+
"aria-selected": isActive,
|
|
321
|
+
"aria-label": `Go to slide ${index + 1}`,
|
|
322
|
+
onClick: () => handleSelect?.(index),
|
|
323
|
+
className: cn("shrink-0 rounded-full bg-fg-on-brand transition-[transform,opacity] duration-300 ease-out", handleSelect ? "cursor-pointer" : "cursor-default"),
|
|
324
|
+
style: {
|
|
325
|
+
width: dot,
|
|
326
|
+
height: dot,
|
|
327
|
+
opacity: faded ? .3 : isActive ? 1 : .55,
|
|
328
|
+
transform: faded ? "scale(0.6)" : "scale(1)"
|
|
329
|
+
}
|
|
330
|
+
}, index);
|
|
331
|
+
})
|
|
332
|
+
})
|
|
333
|
+
})
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
//#endregion
|
|
337
|
+
export { Carousel, CarouselContent, CarouselIndicator, CarouselItem, CarouselNext, CarouselPrevious, useCarousel };
|
package/dist/chart.d.ts
CHANGED
|
@@ -1,48 +1,74 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { VariantProps } from
|
|
3
|
-
import * as React from
|
|
4
|
-
import * as RechartsPrimitive from
|
|
5
|
-
import { TooltipValueType } from
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { t as ComponentSize } from "./size-context-D4mYvcg8.js";
|
|
2
|
+
import { VariantProps } from "class-variance-authority";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import * as RechartsPrimitive from "recharts";
|
|
5
|
+
import { TooltipValueType } from "recharts";
|
|
6
|
+
//#region src/chart.d.ts
|
|
8
7
|
/** How a precise value is formatted in the tooltip and which prefix/suffix it carries. */
|
|
9
8
|
type ChartValueType = "number" | "percentage" | "currency";
|
|
10
9
|
declare const THEMES: {
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
readonly light: "";
|
|
11
|
+
readonly dark: ".dark";
|
|
13
12
|
};
|
|
14
13
|
type TooltipNameType = number | string;
|
|
15
14
|
type ChartConfig = Record<string, {
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
label?: React.ReactNode;
|
|
16
|
+
icon?: React.ComponentType;
|
|
18
17
|
} & ({
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
color?: string;
|
|
19
|
+
theme?: never;
|
|
21
20
|
} | {
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
color?: never;
|
|
22
|
+
theme: Record<keyof typeof THEMES, string>;
|
|
24
23
|
})>;
|
|
25
24
|
declare function ChartCard({ className, size, children, ...props }: React.ComponentProps<"section"> & {
|
|
26
|
-
|
|
25
|
+
size?: ComponentSize;
|
|
27
26
|
}): React.JSX.Element;
|
|
28
27
|
declare function ChartHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
29
28
|
declare function ChartTitle({ className, size, ...props }: React.ComponentProps<"h3"> & {
|
|
30
|
-
|
|
29
|
+
size?: ComponentSize;
|
|
31
30
|
}): React.JSX.Element;
|
|
32
31
|
declare function ChartDescription({ className, size, ...props }: React.ComponentProps<"p"> & {
|
|
33
|
-
|
|
32
|
+
size?: ComponentSize;
|
|
34
33
|
}): React.JSX.Element;
|
|
34
|
+
type ChartMetricLayout = "stacked" | "inline";
|
|
35
|
+
declare function ChartMetric({ className, layout, size, ...props }: React.ComponentProps<"div"> & {
|
|
36
|
+
layout?: ChartMetricLayout;
|
|
37
|
+
size?: ComponentSize;
|
|
38
|
+
}): React.JSX.Element;
|
|
39
|
+
declare function ChartValue({ className, size, ...props }: React.ComponentProps<"p"> & {
|
|
40
|
+
size?: ComponentSize;
|
|
41
|
+
}): React.JSX.Element;
|
|
42
|
+
type ChartTrendDirection = "up" | "down";
|
|
43
|
+
type ChartTrendOrientation = "horizontal" | "vertical";
|
|
44
|
+
declare function ChartTrend({ className, direction, orientation, size, ...props }: React.ComponentProps<"p"> & {
|
|
45
|
+
direction?: ChartTrendDirection;
|
|
46
|
+
orientation?: ChartTrendOrientation;
|
|
47
|
+
size?: ComponentSize;
|
|
48
|
+
}): React.JSX.Element;
|
|
49
|
+
declare function ChartTrendChip({ children, className, direction: directionProp, showIcon, size: sizeProp, ...props }: React.ComponentProps<"span"> & {
|
|
50
|
+
direction?: ChartTrendDirection;
|
|
51
|
+
showIcon?: boolean;
|
|
52
|
+
size?: ComponentSize;
|
|
53
|
+
}): React.JSX.Element;
|
|
54
|
+
declare function ChartTrendValue({ className, size: sizeProp, ...props }: React.ComponentProps<"span"> & {
|
|
55
|
+
size?: ComponentSize;
|
|
56
|
+
}): React.JSX.Element;
|
|
57
|
+
declare function ChartTrendCaption({ className, size: sizeProp, ...props }: React.ComponentProps<"span"> & {
|
|
58
|
+
size?: ComponentSize;
|
|
59
|
+
}): React.JSX.Element;
|
|
60
|
+
declare function ChartFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
35
61
|
declare function ChartContainer({ id, className, children, config, initialDimension, ...props }: React.ComponentProps<"div"> & {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
62
|
+
config: ChartConfig;
|
|
63
|
+
children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>["children"];
|
|
64
|
+
initialDimension?: {
|
|
65
|
+
width: number;
|
|
66
|
+
height: number;
|
|
67
|
+
};
|
|
42
68
|
}): React.JSX.Element;
|
|
43
69
|
declare const ChartStyle: ({ id, config }: {
|
|
44
|
-
|
|
45
|
-
|
|
70
|
+
id: string;
|
|
71
|
+
config: ChartConfig;
|
|
46
72
|
}) => React.JSX.Element | null;
|
|
47
73
|
declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
|
|
48
74
|
/**
|
|
@@ -54,12 +80,12 @@ declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
|
|
|
54
80
|
* Anatomy: series dot · metric label · hero value · period caption.
|
|
55
81
|
*/
|
|
56
82
|
declare const chartTooltipVariants: (props?: ({
|
|
57
|
-
|
|
58
|
-
} &
|
|
59
|
-
declare function ChartTooltipContent({ active, payload, className, hideIndicator, label, labelFormatter, formatter, color, nameKey, valueType, size
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
83
|
+
size?: "lg" | "md" | "sm" | "xs" | null | undefined;
|
|
84
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
85
|
+
declare function ChartTooltipContent({ active, payload, className, hideIndicator, label, labelFormatter, formatter, color, nameKey, valueType, size }: React.ComponentProps<typeof RechartsPrimitive.Tooltip> & React.ComponentProps<"div"> & {
|
|
86
|
+
hideIndicator?: boolean;
|
|
87
|
+
nameKey?: string;
|
|
88
|
+
valueType?: ChartValueType;
|
|
63
89
|
} & VariantProps<typeof chartTooltipVariants> & Omit<RechartsPrimitive.DefaultTooltipContentProps<TooltipValueType, TooltipNameType>, "accessibilityLayer">): React.JSX.Element | null;
|
|
64
90
|
declare const ChartLegend: React.MemoExoticComponent<(outsideProps: RechartsPrimitive.LegendProps) => React.ReactPortal | null>;
|
|
65
91
|
/** Marker shape that ties a legend item to its series. */
|
|
@@ -74,49 +100,50 @@ type ChartLegendMarker = "dot" | "square" | "line";
|
|
|
74
100
|
* from each payload entry's `inactive` flag (recharts sets this when wired) or
|
|
75
101
|
* the controlled `inactiveKeys` set.
|
|
76
102
|
*/
|
|
77
|
-
declare function ChartLegendContent({ className, hideIcon, payload, verticalAlign, nameKey, marker, size, orientation, inactiveKeys, onToggle
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
103
|
+
declare function ChartLegendContent({ className, hideIcon, payload, verticalAlign, nameKey, marker, size, orientation, inactiveKeys, onToggle }: React.ComponentProps<"div"> & {
|
|
104
|
+
hideIcon?: boolean;
|
|
105
|
+
nameKey?: string;
|
|
106
|
+
marker?: ChartLegendMarker;
|
|
107
|
+
size?: "sm" | "md";
|
|
108
|
+
orientation?: "horizontal" | "vertical";
|
|
109
|
+
inactiveKeys?: Iterable<string>;
|
|
110
|
+
onToggle?: (key: string) => void;
|
|
85
111
|
} & RechartsPrimitive.DefaultLegendContentProps): React.JSX.Element | null;
|
|
86
112
|
/** The size-scaled layout numbers a cartesian chart needs to build axis props. */
|
|
87
113
|
type CartesianAxisLayout = {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
114
|
+
tickMargin: number;
|
|
115
|
+
tickFontSize: number;
|
|
116
|
+
yAxisWidth: number;
|
|
91
117
|
};
|
|
92
118
|
/**
|
|
93
119
|
* Shared `<XAxis>`/`<YAxis>` props — the giddaa cartesian-axis defaults (no tick
|
|
94
120
|
* or axis lines, a size-scaled tick font, and a reserved value-axis width) that
|
|
95
121
|
* every bar and line chart would otherwise repeat per axis. Spread the result
|
|
96
122
|
* onto the recharts axis, then add the chart-specific props (`dataKey`,
|
|
97
|
-
* `domain`, `ticks`, a `width`/`type` override, …)
|
|
123
|
+
* `domain`, `ticks`, a `width`/`type` override, …). Chart modules build their
|
|
124
|
+
* per-size axis wrappers (`BarChartXAxis`, `LineChartXAxis`, …) on top of this:
|
|
98
125
|
*
|
|
99
|
-
* const
|
|
100
|
-
* <XAxis dataKey="month" {...
|
|
101
|
-
* <YAxis domain={[0, 120]} {...
|
|
126
|
+
* const axes = cartesianAxisProps({ tickMargin: 8, tickFontSize: 11, yAxisWidth: 32 });
|
|
127
|
+
* <XAxis dataKey="month" {...axes.xAxis} />
|
|
128
|
+
* <YAxis domain={[0, 120]} {...axes.yAxis} />
|
|
102
129
|
*/
|
|
103
130
|
declare function cartesianAxisProps(layout: CartesianAxisLayout): {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
};
|
|
131
|
+
readonly xAxis: {
|
|
132
|
+
readonly tickLine: false;
|
|
133
|
+
readonly axisLine: false;
|
|
134
|
+
readonly tickMargin: number;
|
|
135
|
+
readonly tick: {
|
|
136
|
+
fontSize: number;
|
|
111
137
|
};
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
138
|
+
};
|
|
139
|
+
readonly yAxis: {
|
|
140
|
+
readonly tickLine: false;
|
|
141
|
+
readonly axisLine: false;
|
|
142
|
+
readonly width: number;
|
|
143
|
+
readonly tick: {
|
|
144
|
+
fontSize: number;
|
|
119
145
|
};
|
|
146
|
+
};
|
|
120
147
|
};
|
|
121
|
-
|
|
122
|
-
export { type CartesianAxisLayout, ChartCard,
|
|
148
|
+
//#endregion
|
|
149
|
+
export { type CartesianAxisLayout, ChartCard, ChartConfig, ChartContainer, ChartDescription, ChartFooter, ChartHeader, ChartLegend, ChartLegendContent, ChartMetric, type ChartMetricLayout, ChartStyle, ChartTitle, ChartTooltip, ChartTooltipContent, ChartTrend, ChartTrendCaption, ChartTrendChip, type ChartTrendDirection, type ChartTrendOrientation, ChartTrendValue, ChartValue, ChartValueType, cartesianAxisProps };
|