@codefast/ui 0.3.16-canary.3 → 0.4.0-canary.5
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/CHANGELOG.md +112 -0
- package/README.md +27 -16
- package/dist/components/accordion.d.mts +7 -22
- package/dist/components/accordion.mjs +26 -29
- package/dist/components/alert-dialog.d.mts +27 -26
- package/dist/components/alert-dialog.mjs +53 -45
- package/dist/components/alert.d.mts +12 -2
- package/dist/components/alert.mjs +15 -6
- package/dist/components/aspect-ratio.d.mts +2 -2
- package/dist/components/aspect-ratio.mjs +2 -3
- package/dist/components/avatar.d.mts +41 -5
- package/dist/components/avatar.mjs +40 -10
- package/dist/components/badge.mjs +4 -4
- package/dist/components/breadcrumb.d.mts +1 -0
- package/dist/components/breadcrumb.mjs +11 -10
- package/dist/components/button-group.d.mts +1 -1
- package/dist/components/button-group.mjs +6 -7
- package/dist/components/button.d.mts +0 -1
- package/dist/components/button.mjs +7 -7
- package/dist/components/calendar.d.mts +6 -2
- package/dist/components/calendar.mjs +39 -43
- package/dist/components/card.d.mts +4 -2
- package/dist/components/card.mjs +9 -9
- package/dist/components/carousel.d.mts +16 -4
- package/dist/components/carousel.mjs +25 -12
- package/dist/components/chart.d.mts +8 -3
- package/dist/components/chart.mjs +21 -15
- package/dist/components/checkbox-cards.mjs +6 -6
- package/dist/components/checkbox-group.mjs +6 -7
- package/dist/components/checkbox.d.mts +2 -2
- package/dist/components/checkbox.mjs +8 -9
- package/dist/components/collapsible.d.mts +4 -4
- package/dist/components/collapsible.mjs +4 -5
- package/dist/components/command.d.mts +11 -1
- package/dist/components/command.mjs +35 -32
- package/dist/components/context-menu.d.mts +22 -15
- package/dist/components/context-menu.mjs +44 -39
- package/dist/components/dialog.d.mts +19 -23
- package/dist/components/dialog.mjs +48 -47
- package/dist/components/direction.d.mts +24 -0
- package/dist/components/direction.mjs +18 -0
- package/dist/components/drawer.d.mts +2 -20
- package/dist/components/drawer.mjs +17 -25
- package/dist/components/dropdown-menu.d.mts +22 -15
- package/dist/components/dropdown-menu.mjs +41 -37
- package/dist/components/empty.mjs +5 -5
- package/dist/components/field.d.mts +1 -1
- package/dist/components/field.mjs +11 -12
- package/dist/components/form.d.mts +6 -7
- package/dist/components/form.mjs +6 -7
- package/dist/components/hover-card.d.mts +5 -5
- package/dist/components/hover-card.mjs +14 -12
- package/dist/components/input-group.d.mts +1 -1
- package/dist/components/input-group.mjs +12 -7
- package/dist/components/input-number.d.mts +3 -1
- package/dist/components/input-number.mjs +49 -27
- package/dist/components/input-otp.mjs +9 -7
- package/dist/components/input-password.mjs +1 -4
- package/dist/components/input-search.mjs +3 -5
- package/dist/components/input.mjs +1 -2
- package/dist/components/item.mjs +9 -9
- package/dist/components/kbd.mjs +1 -1
- package/dist/components/label.d.mts +2 -2
- package/dist/components/label.mjs +3 -4
- package/dist/components/menubar.d.mts +22 -16
- package/dist/components/menubar.mjs +54 -47
- package/dist/components/native-select.d.mts +5 -1
- package/dist/components/native-select.mjs +9 -6
- package/dist/components/navigation-menu.d.mts +30 -8
- package/dist/components/navigation-menu.mjs +33 -23
- package/dist/components/pagination.d.mts +6 -0
- package/dist/components/pagination.mjs +26 -11
- package/dist/components/popover.d.mts +40 -7
- package/dist/components/popover.mjs +46 -14
- package/dist/components/progress-circle.d.mts +1 -1
- package/dist/components/progress-circle.mjs +1 -2
- package/dist/components/progress.d.mts +2 -2
- package/dist/components/progress.mjs +5 -6
- package/dist/components/radio-cards.d.mts +3 -3
- package/dist/components/radio-cards.mjs +11 -11
- package/dist/components/radio-group.d.mts +3 -3
- package/dist/components/radio-group.mjs +9 -9
- package/dist/components/radio.mjs +2 -3
- package/dist/components/resizable.mjs +3 -8
- package/dist/components/scroll-area.d.mts +5 -5
- package/dist/components/scroll-area.mjs +13 -10
- package/dist/components/select.d.mts +14 -14
- package/dist/components/select.mjs +47 -47
- package/dist/components/separator.d.mts +2 -2
- package/dist/components/separator.mjs +3 -4
- package/dist/components/sheet.d.mts +13 -14
- package/dist/components/sheet.mjs +41 -39
- package/dist/components/sidebar.d.mts +2 -3
- package/dist/components/sidebar.mjs +46 -46
- package/dist/components/skeleton.mjs +1 -1
- package/dist/components/slider.d.mts +2 -2
- package/dist/components/slider.mjs +9 -11
- package/dist/components/sonner.mjs +11 -3
- package/dist/components/spinner.mjs +6 -7
- package/dist/components/switch.d.mts +5 -2
- package/dist/components/switch.mjs +7 -7
- package/dist/components/table.mjs +10 -10
- package/dist/components/tabs.d.mts +8 -5
- package/dist/components/tabs.mjs +18 -12
- package/dist/components/textarea.mjs +1 -1
- package/dist/components/toggle-group.d.mts +9 -6
- package/dist/components/toggle-group.mjs +19 -20
- package/dist/components/toggle.d.mts +2 -3
- package/dist/components/toggle.mjs +4 -6
- package/dist/components/tooltip.d.mts +7 -6
- package/dist/components/tooltip.mjs +19 -17
- package/dist/hooks/use-animated-value.mjs +0 -1
- package/dist/hooks/use-copy-to-clipboard.mjs +0 -1
- package/dist/hooks/use-is-mobile.mjs +0 -1
- package/dist/hooks/use-media-query.mjs +0 -1
- package/dist/hooks/use-mutation-observer.mjs +0 -1
- package/dist/hooks/use-pagination.mjs +0 -1
- package/dist/index.d.mts +15 -13
- package/dist/index.mjs +18 -16
- package/dist/primitives/checkbox-group.d.mts +9 -10
- package/dist/primitives/checkbox-group.mjs +14 -19
- package/dist/primitives/input-number.d.mts +3 -3
- package/dist/primitives/input-number.mjs +3 -5
- package/dist/primitives/input.d.mts +4 -4
- package/dist/primitives/input.mjs +2 -3
- package/dist/primitives/progress-circle.d.mts +3 -3
- package/dist/primitives/progress-circle.mjs +2 -3
- package/dist/variants/alert.d.mts +1 -1
- package/dist/variants/alert.mjs +3 -13
- package/dist/variants/badge.d.mts +6 -4
- package/dist/variants/badge.mjs +7 -34
- package/dist/variants/button-group.d.mts +2 -2
- package/dist/variants/button-group.mjs +3 -14
- package/dist/variants/button.d.mts +12 -10
- package/dist/variants/button.mjs +15 -57
- package/dist/variants/empty.d.mts +1 -1
- package/dist/variants/empty.mjs +2 -7
- package/dist/variants/field.d.mts +3 -3
- package/dist/variants/field.mjs +4 -22
- package/dist/variants/input-group.d.mts +9 -9
- package/dist/variants/input-group.mjs +11 -70
- package/dist/variants/input-number.d.mts +45 -0
- package/dist/variants/input-number.mjs +40 -0
- package/dist/variants/item.d.mts +5 -4
- package/dist/variants/item.mjs +9 -31
- package/dist/variants/navigation-menu.d.mts +1 -1
- package/dist/variants/navigation-menu.mjs +1 -5
- package/dist/variants/progress-circle.d.mts +1 -1
- package/dist/variants/progress-circle.mjs +1 -5
- package/dist/variants/scroll-area.d.mts +2 -2
- package/dist/variants/scroll-area.mjs +3 -8
- package/dist/variants/separator.mjs +6 -6
- package/dist/variants/sheet.d.mts +4 -4
- package/dist/variants/sheet.mjs +5 -38
- package/dist/variants/sidebar.d.mts +4 -4
- package/dist/variants/sidebar.mjs +6 -23
- package/dist/variants/tabs.d.mts +18 -0
- package/dist/variants/tabs.mjs +15 -0
- package/dist/variants/toggle.d.mts +4 -4
- package/dist/variants/toggle.mjs +9 -27
- package/package.json +27 -44
- package/src/components/accordion.tsx +26 -68
- package/src/components/alert-dialog.tsx +70 -86
- package/src/components/alert.tsx +27 -19
- package/src/components/aspect-ratio.tsx +1 -4
- package/src/components/avatar.tsx +99 -12
- package/src/components/badge.tsx +5 -8
- package/src/components/breadcrumb.tsx +18 -24
- package/src/components/button-group.tsx +10 -20
- package/src/components/button.tsx +8 -19
- package/src/components/calendar.tsx +77 -132
- package/src/components/card.tsx +16 -22
- package/src/components/carousel.tsx +40 -58
- package/src/components/chart.tsx +41 -92
- package/src/components/checkbox-cards.tsx +11 -30
- package/src/components/checkbox-group.tsx +6 -28
- package/src/components/checkbox.tsx +6 -26
- package/src/components/collapsible.tsx +1 -4
- package/src/components/command.tsx +52 -65
- package/src/components/context-menu.tsx +46 -125
- package/src/components/dialog.tsx +49 -101
- package/src/components/direction.tsx +32 -0
- package/src/components/drawer.tsx +17 -79
- package/src/components/dropdown-menu.tsx +39 -118
- package/src/components/empty.tsx +6 -20
- package/src/components/field.tsx +19 -52
- package/src/components/form.tsx +19 -61
- package/src/components/hover-card.tsx +4 -27
- package/src/components/input-group.tsx +13 -52
- package/src/components/input-number.tsx +55 -75
- package/src/components/input-otp.tsx +19 -38
- package/src/components/input-password.tsx +5 -29
- package/src/components/input-search.tsx +6 -23
- package/src/components/input.tsx +1 -17
- package/src/components/item.tsx +17 -31
- package/src/components/kbd.tsx +2 -14
- package/src/components/label.tsx +2 -10
- package/src/components/menubar.tsx +34 -125
- package/src/components/native-select.tsx +21 -30
- package/src/components/navigation-menu.tsx +34 -94
- package/src/components/pagination.tsx +28 -34
- package/src/components/popover.tsx +66 -35
- package/src/components/progress-circle.tsx +7 -25
- package/src/components/progress.tsx +3 -16
- package/src/components/radio-cards.tsx +8 -27
- package/src/components/radio-group.tsx +7 -27
- package/src/components/radio.tsx +3 -24
- package/src/components/resizable.tsx +5 -26
- package/src/components/scroll-area.tsx +12 -32
- package/src/components/select.tsx +37 -60
- package/src/components/separator.tsx +4 -18
- package/src/components/sheet.tsx +37 -74
- package/src/components/sidebar.tsx +47 -177
- package/src/components/skeleton.tsx +1 -3
- package/src/components/slider.tsx +7 -36
- package/src/components/sonner.tsx +16 -6
- package/src/components/spinner.tsx +6 -15
- package/src/components/switch.tsx +8 -30
- package/src/components/table.tsx +18 -35
- package/src/components/tabs.tsx +16 -34
- package/src/components/textarea.tsx +1 -15
- package/src/components/toggle-group.tsx +34 -38
- package/src/components/toggle.tsx +4 -13
- package/src/components/tooltip.tsx +11 -37
- package/src/css/foundation/base.css +74 -0
- package/src/css/foundation/motion.css +69 -0
- package/src/css/foundation/source.css +10 -0
- package/src/css/foundation/tokens.css +107 -0
- package/src/css/foundation/variants.css +121 -0
- package/src/css/preset.css +13 -214
- package/src/css/style.css +9 -1
- package/src/css/{amber.css → themes/amber.css} +29 -0
- package/src/css/{blue.css → themes/blue.css} +29 -0
- package/src/css/{cyan.css → themes/cyan.css} +29 -0
- package/src/css/{emerald.css → themes/emerald.css} +29 -0
- package/src/css/{fuchsia.css → themes/fuchsia.css} +29 -0
- package/src/css/{gray.css → themes/gray.css} +29 -0
- package/src/css/{green.css → themes/green.css} +29 -0
- package/src/css/{indigo.css → themes/indigo.css} +29 -0
- package/src/css/{lime.css → themes/lime.css} +29 -0
- package/src/css/{neutral.css → themes/neutral.css} +29 -0
- package/src/css/{orange.css → themes/orange.css} +29 -0
- package/src/css/{pink.css → themes/pink.css} +29 -0
- package/src/css/{purple.css → themes/purple.css} +29 -0
- package/src/css/{red.css → themes/red.css} +29 -0
- package/src/css/{rose.css → themes/rose.css} +29 -0
- package/src/css/{sky.css → themes/sky.css} +29 -0
- package/src/css/{slate.css → themes/slate.css} +29 -0
- package/src/css/{stone.css → themes/stone.css} +29 -0
- package/src/css/{teal.css → themes/teal.css} +29 -0
- package/src/css/{violet.css → themes/violet.css} +29 -0
- package/src/css/{yellow.css → themes/yellow.css} +29 -0
- package/src/css/{zinc.css → themes/zinc.css} +29 -0
- package/src/hooks/use-animated-value.ts +1 -7
- package/src/hooks/use-copy-to-clipboard.ts +1 -6
- package/src/hooks/use-is-mobile.ts +0 -2
- package/src/hooks/use-media-query.ts +0 -2
- package/src/hooks/use-mutation-observer.ts +0 -3
- package/src/hooks/use-pagination.ts +0 -2
- package/src/index.ts +39 -80
- package/src/primitives/checkbox-group.tsx +25 -39
- package/src/primitives/input-number.tsx +17 -63
- package/src/primitives/input.tsx +8 -24
- package/src/primitives/progress-circle.tsx +13 -43
- package/src/variants/alert.ts +3 -14
- package/src/variants/badge.ts +8 -35
- package/src/variants/button-group.ts +5 -18
- package/src/variants/button.ts +21 -58
- package/src/variants/empty.ts +2 -11
- package/src/variants/field.ts +6 -19
- package/src/variants/input-group.ts +12 -64
- package/src/variants/input-number.ts +65 -0
- package/src/variants/item.ts +10 -32
- package/src/variants/navigation-menu.ts +1 -8
- package/src/variants/progress-circle.ts +1 -2
- package/src/variants/scroll-area.ts +3 -9
- package/src/variants/separator.ts +6 -7
- package/src/variants/sheet.ts +6 -39
- package/src/variants/sidebar.ts +7 -27
- package/src/variants/tabs.ts +34 -0
- package/src/variants/toggle.ts +9 -28
|
@@ -1,76 +1,73 @@
|
|
|
1
|
-
"use client";
|
|
2
1
|
import { cn } from "../lib/utils.mjs";
|
|
3
2
|
import { buttonVariants } from "../variants/button.mjs";
|
|
4
3
|
import { Button } from "./button.mjs";
|
|
5
4
|
import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
|
|
6
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
import { DayPicker, getDefaultClassNames } from "@daypicker/react";
|
|
7
7
|
import { useEffect, useRef } from "react";
|
|
8
|
-
import { DayPicker, getDefaultClassNames } from "react-day-picker";
|
|
9
8
|
//#region src/components/calendar.tsx
|
|
10
9
|
/**
|
|
11
10
|
* @since 0.3.16-canary.0
|
|
12
11
|
*/
|
|
13
|
-
function Calendar({ buttonVariant = "ghost", captionLayout = "label", className, classNames, components, formatters, showOutsideDays = true, ...props }) {
|
|
12
|
+
function Calendar({ buttonVariant = "ghost", captionLayout = "label", className, classNames, components, formatters, locale, showOutsideDays = true, ...props }) {
|
|
14
13
|
const defaultClassNames = getDefaultClassNames();
|
|
15
14
|
return /* @__PURE__ */ jsx(DayPicker, {
|
|
16
15
|
captionLayout,
|
|
17
|
-
className: cn("group/calendar
|
|
16
|
+
className: cn("group/calendar bg-background p-3 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(8)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent", String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`, className),
|
|
18
17
|
classNames: {
|
|
19
|
-
button_next: buttonVariants({
|
|
20
|
-
variant: buttonVariant,
|
|
21
|
-
className: ["size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_next]
|
|
22
|
-
}),
|
|
23
|
-
button_previous: buttonVariants({
|
|
24
|
-
variant: buttonVariant,
|
|
25
|
-
className: ["size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_previous]
|
|
26
|
-
}),
|
|
27
|
-
caption_label: cn("font-medium", "select-none", captionLayout === "label" ? "text-sm" : "flex h-8 items-center gap-1 rounded-md pr-1 pl-2 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground", defaultClassNames.caption_label),
|
|
28
|
-
day: cn("group/day relative", "aspect-square h-full w-full p-0 text-center", "select-none", "[&:last-child[data-selected=true]_button]:rounded-r-md", props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-md" : "[&:first-child[data-selected=true]_button]:rounded-l-md", defaultClassNames.day),
|
|
29
|
-
disabled: cn("opacity-50", "text-muted-foreground", defaultClassNames.disabled),
|
|
30
|
-
dropdown: cn("absolute inset-0", "bg-popover", "opacity-0", defaultClassNames.dropdown),
|
|
31
|
-
dropdown_root: cn("relative", "rounded-md border border-input shadow-xs", "has-focus:border-ring has-focus:ring-3 has-focus:ring-ring/50", defaultClassNames.dropdown_root),
|
|
32
|
-
dropdowns: cn("flex h-(--cell-size) w-full items-center justify-center gap-1.5", "text-sm font-medium", defaultClassNames.dropdowns),
|
|
33
|
-
hidden: cn("invisible", defaultClassNames.hidden),
|
|
34
|
-
month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
|
|
35
|
-
month_caption: cn("flex h-(--cell-size) w-full items-center justify-center", "px-(--cell-size)", defaultClassNames.month_caption),
|
|
36
|
-
months: cn("relative flex flex-col gap-4", "md:flex-row", defaultClassNames.months),
|
|
37
|
-
nav: cn("absolute flex w-full items-center justify-between gap-1", "inset-x-0 top-0", defaultClassNames.nav),
|
|
38
|
-
outside: cn("text-muted-foreground", "aria-selected:text-muted-foreground", defaultClassNames.outside),
|
|
39
|
-
range_end: cn("rounded-r-md", "bg-accent", defaultClassNames.range_end),
|
|
40
|
-
range_middle: cn("rounded-none", defaultClassNames.range_middle),
|
|
41
|
-
range_start: cn("rounded-l-md", "bg-accent", defaultClassNames.range_start),
|
|
42
18
|
root: cn("w-fit", defaultClassNames.root),
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
19
|
+
months: cn("relative flex flex-col gap-4 md:flex-row", defaultClassNames.months),
|
|
20
|
+
month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
|
|
21
|
+
nav: cn("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1", defaultClassNames.nav),
|
|
22
|
+
button_previous: cn(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_previous),
|
|
23
|
+
button_next: cn(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_next),
|
|
24
|
+
month_caption: cn("flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)", defaultClassNames.month_caption),
|
|
25
|
+
dropdowns: cn("flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium", defaultClassNames.dropdowns),
|
|
26
|
+
dropdown_root: cn("relative rounded-(--cell-radius) border border-input shadow-xs has-focus:border-ring has-focus:ring-3 has-focus:ring-ring/50", defaultClassNames.dropdown_root),
|
|
27
|
+
dropdown: cn("absolute inset-0 bg-popover opacity-0", defaultClassNames.dropdown),
|
|
28
|
+
caption_label: cn("font-medium select-none", captionLayout === "label" ? "text-sm" : "flex h-8 items-center gap-1 rounded-(--cell-radius) ps-2 pe-1 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground", defaultClassNames.caption_label),
|
|
29
|
+
month_grid: cn("w-full border-collapse", defaultClassNames.month_grid),
|
|
49
30
|
weekdays: cn("flex", defaultClassNames.weekdays),
|
|
31
|
+
weekday: cn("flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none", defaultClassNames.weekday),
|
|
32
|
+
week: cn("mt-2 flex w-full", defaultClassNames.week),
|
|
33
|
+
week_number_header: cn("w-(--cell-size) select-none", defaultClassNames.week_number_header),
|
|
34
|
+
week_number: cn("text-[0.8rem] text-muted-foreground select-none", defaultClassNames.week_number),
|
|
35
|
+
day: cn("group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-e-(--cell-radius)", props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-s-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-s-(--cell-radius)", defaultClassNames.day),
|
|
36
|
+
range_start: cn("relative isolate z-0 rounded-s-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:end-0 after:w-4 after:bg-muted", defaultClassNames.range_start),
|
|
37
|
+
range_middle: cn("rounded-none", defaultClassNames.range_middle),
|
|
38
|
+
range_end: cn("relative isolate z-0 rounded-e-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:start-0 after:w-4 after:bg-muted", defaultClassNames.range_end),
|
|
39
|
+
today: cn("rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none", defaultClassNames.today),
|
|
40
|
+
outside: cn("text-muted-foreground aria-selected:text-muted-foreground", defaultClassNames.outside),
|
|
41
|
+
disabled: cn("text-muted-foreground opacity-50", defaultClassNames.disabled),
|
|
42
|
+
hidden: cn("invisible", defaultClassNames.hidden),
|
|
50
43
|
...classNames
|
|
51
44
|
},
|
|
52
45
|
components: {
|
|
53
46
|
Chevron: CalendarChevron,
|
|
54
|
-
DayButton: CalendarDayButton,
|
|
47
|
+
DayButton: (dayButtonProps) => /* @__PURE__ */ jsx(CalendarDayButton, {
|
|
48
|
+
locale,
|
|
49
|
+
...dayButtonProps
|
|
50
|
+
}),
|
|
55
51
|
Root: CalendarRoot,
|
|
56
52
|
WeekNumber: CalendarWeekNumber,
|
|
57
53
|
...components
|
|
58
54
|
},
|
|
59
55
|
formatters: {
|
|
60
|
-
formatMonthDropdown: (date) => date.toLocaleString(
|
|
56
|
+
formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: "short" }),
|
|
61
57
|
...formatters
|
|
62
58
|
},
|
|
59
|
+
locale,
|
|
63
60
|
showOutsideDays,
|
|
64
61
|
...props
|
|
65
62
|
});
|
|
66
63
|
}
|
|
67
64
|
function CalendarChevron({ className, orientation, ...props }) {
|
|
68
65
|
if (orientation === "left") return /* @__PURE__ */ jsx(ChevronLeftIcon, {
|
|
69
|
-
className: cn("size-4", className),
|
|
66
|
+
className: cn("size-4 rtl:rotate-180", className),
|
|
70
67
|
...props
|
|
71
68
|
});
|
|
72
69
|
if (orientation === "right") return /* @__PURE__ */ jsx(ChevronRightIcon, {
|
|
73
|
-
className: cn("size-4", className),
|
|
70
|
+
className: cn("size-4 rtl:rotate-180", className),
|
|
74
71
|
...props
|
|
75
72
|
});
|
|
76
73
|
return /* @__PURE__ */ jsx(ChevronDownIcon, {
|
|
@@ -78,10 +75,9 @@ function CalendarChevron({ className, orientation, ...props }) {
|
|
|
78
75
|
...props
|
|
79
76
|
});
|
|
80
77
|
}
|
|
81
|
-
function CalendarRoot({
|
|
78
|
+
function CalendarRoot({ rootRef, ...props }) {
|
|
82
79
|
return /* @__PURE__ */ jsx("div", {
|
|
83
80
|
ref: rootRef,
|
|
84
|
-
className: cn(className),
|
|
85
81
|
"data-slot": "calendar",
|
|
86
82
|
...props
|
|
87
83
|
});
|
|
@@ -90,7 +86,7 @@ function CalendarWeekNumber({ children, ...props }) {
|
|
|
90
86
|
return /* @__PURE__ */ jsx("td", {
|
|
91
87
|
...props,
|
|
92
88
|
children: /* @__PURE__ */ jsx("div", {
|
|
93
|
-
className:
|
|
89
|
+
className: "flex size-(--cell-size) items-center justify-center text-center",
|
|
94
90
|
children
|
|
95
91
|
})
|
|
96
92
|
});
|
|
@@ -98,7 +94,7 @@ function CalendarWeekNumber({ children, ...props }) {
|
|
|
98
94
|
/**
|
|
99
95
|
* @since 0.3.16-canary.0
|
|
100
96
|
*/
|
|
101
|
-
function CalendarDayButton({ className, day, modifiers, ...props }) {
|
|
97
|
+
function CalendarDayButton({ className, day, locale, modifiers, ...props }) {
|
|
102
98
|
const defaultClassNames = getDefaultClassNames();
|
|
103
99
|
const ref = useRef(null);
|
|
104
100
|
useEffect(() => {
|
|
@@ -106,8 +102,8 @@ function CalendarDayButton({ className, day, modifiers, ...props }) {
|
|
|
106
102
|
}, [modifiers.focused]);
|
|
107
103
|
return /* @__PURE__ */ jsx(Button, {
|
|
108
104
|
ref,
|
|
109
|
-
className: cn("flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal
|
|
110
|
-
"data-day": day.date.toLocaleDateString(),
|
|
105
|
+
className: cn("relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-focused/day:relative group-data-focused/day:z-10 group-data-focused/day:border-ring group-data-focused/day:ring-3 group-data-focused/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-e-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-s-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70", defaultClassNames.day, className),
|
|
106
|
+
"data-day": day.date.toLocaleDateString(locale?.code),
|
|
111
107
|
"data-range-end": modifiers.range_end,
|
|
112
108
|
"data-range-middle": modifiers.range_middle,
|
|
113
109
|
"data-range-start": modifiers.range_start,
|
|
@@ -4,12 +4,15 @@ import { ComponentProps, JSX } from "react";
|
|
|
4
4
|
/**
|
|
5
5
|
* @since 0.3.16-canary.0
|
|
6
6
|
*/
|
|
7
|
-
type CardProps = ComponentProps<"div"
|
|
7
|
+
type CardProps = ComponentProps<"div"> & {
|
|
8
|
+
size?: "default" | "sm";
|
|
9
|
+
};
|
|
8
10
|
/**
|
|
9
11
|
* @since 0.3.16-canary.0
|
|
10
12
|
*/
|
|
11
13
|
declare function Card({
|
|
12
14
|
className,
|
|
15
|
+
size,
|
|
13
16
|
...props
|
|
14
17
|
}: CardProps): JSX.Element;
|
|
15
18
|
/**
|
|
@@ -31,7 +34,6 @@ type CardTitleProps = ComponentProps<"div">;
|
|
|
31
34
|
* @since 0.3.16-canary.0
|
|
32
35
|
*/
|
|
33
36
|
declare function CardTitle({
|
|
34
|
-
children,
|
|
35
37
|
className,
|
|
36
38
|
...props
|
|
37
39
|
}: CardTitleProps): JSX.Element;
|
package/dist/components/card.mjs
CHANGED
|
@@ -4,9 +4,10 @@ import { jsx } from "react/jsx-runtime";
|
|
|
4
4
|
/**
|
|
5
5
|
* @since 0.3.16-canary.0
|
|
6
6
|
*/
|
|
7
|
-
function Card({ className, ...props }) {
|
|
7
|
+
function Card({ className, size = "default", ...props }) {
|
|
8
8
|
return /* @__PURE__ */ jsx("div", {
|
|
9
|
-
className: cn("flex flex-col gap-
|
|
9
|
+
className: cn("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground shadow-xs ring-1 ring-foreground/10 [--card-spacing:--spacing(6)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(4)] *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl", className),
|
|
10
|
+
"data-size": size,
|
|
10
11
|
"data-slot": "card",
|
|
11
12
|
...props
|
|
12
13
|
});
|
|
@@ -16,7 +17,7 @@ function Card({ className, ...props }) {
|
|
|
16
17
|
*/
|
|
17
18
|
function CardHeader({ className, ...props }) {
|
|
18
19
|
return /* @__PURE__ */ jsx("div", {
|
|
19
|
-
className: cn("@container/card-header grid auto-rows-min
|
|
20
|
+
className: cn("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)", className),
|
|
20
21
|
"data-slot": "card-header",
|
|
21
22
|
...props
|
|
22
23
|
});
|
|
@@ -24,12 +25,11 @@ function CardHeader({ className, ...props }) {
|
|
|
24
25
|
/**
|
|
25
26
|
* @since 0.3.16-canary.0
|
|
26
27
|
*/
|
|
27
|
-
function CardTitle({
|
|
28
|
+
function CardTitle({ className, ...props }) {
|
|
28
29
|
return /* @__PURE__ */ jsx("div", {
|
|
29
|
-
className: cn("leading-
|
|
30
|
+
className: cn("font-heading text-base leading-normal font-medium group-data-[size=sm]/card:text-sm", className),
|
|
30
31
|
"data-slot": "card-title",
|
|
31
|
-
...props
|
|
32
|
-
children
|
|
32
|
+
...props
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
@@ -47,7 +47,7 @@ function CardDescription({ className, ...props }) {
|
|
|
47
47
|
*/
|
|
48
48
|
function CardContent({ className, ...props }) {
|
|
49
49
|
return /* @__PURE__ */ jsx("div", {
|
|
50
|
-
className: cn("px-
|
|
50
|
+
className: cn("px-(--card-spacing)", className),
|
|
51
51
|
"data-slot": "card-content",
|
|
52
52
|
...props
|
|
53
53
|
});
|
|
@@ -57,7 +57,7 @@ function CardContent({ className, ...props }) {
|
|
|
57
57
|
*/
|
|
58
58
|
function CardFooter({ className, ...props }) {
|
|
59
59
|
return /* @__PURE__ */ jsx("div", {
|
|
60
|
-
className: cn("flex items-center
|
|
60
|
+
className: cn("flex items-center rounded-b-xl px-(--card-spacing) [.border-t]:pt-(--card-spacing)", className),
|
|
61
61
|
"data-slot": "card-footer",
|
|
62
62
|
...props
|
|
63
63
|
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Button } from "./button.mjs";
|
|
2
2
|
import { ComponentProps, JSX } from "react";
|
|
3
|
-
import { Scope } from "@radix-ui/react-context";
|
|
4
3
|
import useEmblaCarousel, { UseEmblaCarouselType } from "embla-carousel-react";
|
|
4
|
+
import { Context } from "radix-ui/internal";
|
|
5
5
|
|
|
6
6
|
//#region src/components/carousel.d.ts
|
|
7
7
|
type ScopedProps<P> = P & {
|
|
8
|
-
__scopeCarousel?: Scope;
|
|
8
|
+
__scopeCarousel?: Context.Scope;
|
|
9
9
|
};
|
|
10
|
-
declare const createCarouselScope:
|
|
10
|
+
declare const createCarouselScope: Context.CreateScope;
|
|
11
11
|
/**
|
|
12
12
|
* @since 0.3.16-canary.0
|
|
13
13
|
*/
|
|
@@ -43,11 +43,23 @@ declare function Carousel({
|
|
|
43
43
|
*/
|
|
44
44
|
interface CarouselContentProps extends ComponentProps<"div"> {
|
|
45
45
|
classNames?: {
|
|
46
|
-
content?: string;
|
|
46
|
+
/** Class applied to the flex track that holds the slides. */content?: string; /** Class applied to the scroll viewport (the `overflow-hidden` element). */
|
|
47
47
|
wrapper?: string;
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
|
+
* The scroll viewport requires `overflow-hidden` (Embla hides off-screen slides
|
|
52
|
+
* with it), so any ring/shadow on slide content that sits OUTSIDE the slide's
|
|
53
|
+
* border-box is clipped where the slide meets the viewport edge. This is
|
|
54
|
+
* inherent to every Embla-based carousel — the active slide is flush with both
|
|
55
|
+
* scroll-axis edges, so left/right rings (horizontal) cannot show without
|
|
56
|
+
* revealing the neighbouring slide.
|
|
57
|
+
*
|
|
58
|
+
* To give content shadows/rings breathing room on the CROSS axis (top/bottom
|
|
59
|
+
* for horizontal carousels), add a negative-margin + matching padding via
|
|
60
|
+
* `classNames.wrapper`, e.g. `classNames={{ wrapper: "-my-2 py-2" }}`. This
|
|
61
|
+
* shifts no layout but lets the clip happen `n`px further out.
|
|
62
|
+
*
|
|
51
63
|
* @since 0.3.16-canary.0
|
|
52
64
|
*/
|
|
53
65
|
declare function CarouselContent({
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
"use client";
|
|
2
1
|
import { cn } from "../lib/utils.mjs";
|
|
3
2
|
import { Button } from "./button.mjs";
|
|
4
|
-
import {
|
|
3
|
+
import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
|
|
5
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
5
|
import { useCallback, useEffect, useState } from "react";
|
|
7
|
-
import { createContextScope } from "@radix-ui/react-context";
|
|
8
6
|
import useEmblaCarousel from "embla-carousel-react";
|
|
7
|
+
import { Context } from "radix-ui/internal";
|
|
9
8
|
//#region src/components/carousel.tsx
|
|
10
9
|
const CAROUSEL_NAME = "Carousel";
|
|
11
|
-
const [createCarouselContext, createCarouselScope] = createContextScope(CAROUSEL_NAME);
|
|
10
|
+
const [createCarouselContext, createCarouselScope] = Context.createContextScope(CAROUSEL_NAME);
|
|
12
11
|
const [CarouselContextProvider, useCarouselContext] = createCarouselContext(CAROUSEL_NAME);
|
|
13
12
|
/**
|
|
14
13
|
* @since 0.3.16-canary.0
|
|
@@ -66,8 +65,10 @@ function Carousel({ __scopeCarousel, children, className, opts, orientation, plu
|
|
|
66
65
|
scrollNext,
|
|
67
66
|
scrollPrev: scrollPrevious,
|
|
68
67
|
children: /* @__PURE__ */ jsx("div", {
|
|
68
|
+
"aria-roledescription": "carousel",
|
|
69
69
|
className: cn("relative", className),
|
|
70
70
|
"data-slot": "carousel",
|
|
71
|
+
role: "region",
|
|
71
72
|
onKeyDownCapture: handleKeyDown,
|
|
72
73
|
...props,
|
|
73
74
|
children
|
|
@@ -76,6 +77,18 @@ function Carousel({ __scopeCarousel, children, className, opts, orientation, plu
|
|
|
76
77
|
}
|
|
77
78
|
const CAROUSEL_CONTENT_NAME = "CarouselContent";
|
|
78
79
|
/**
|
|
80
|
+
* The scroll viewport requires `overflow-hidden` (Embla hides off-screen slides
|
|
81
|
+
* with it), so any ring/shadow on slide content that sits OUTSIDE the slide's
|
|
82
|
+
* border-box is clipped where the slide meets the viewport edge. This is
|
|
83
|
+
* inherent to every Embla-based carousel — the active slide is flush with both
|
|
84
|
+
* scroll-axis edges, so left/right rings (horizontal) cannot show without
|
|
85
|
+
* revealing the neighbouring slide.
|
|
86
|
+
*
|
|
87
|
+
* To give content shadows/rings breathing room on the CROSS axis (top/bottom
|
|
88
|
+
* for horizontal carousels), add a negative-margin + matching padding via
|
|
89
|
+
* `classNames.wrapper`, e.g. `classNames={{ wrapper: "-my-2 py-2" }}`. This
|
|
90
|
+
* shifts no layout but lets the clip happen `n`px further out.
|
|
91
|
+
*
|
|
79
92
|
* @since 0.3.16-canary.0
|
|
80
93
|
*/
|
|
81
94
|
function CarouselContent({ __scopeCarousel, className, classNames, ...props }) {
|
|
@@ -85,7 +98,7 @@ function CarouselContent({ __scopeCarousel, className, classNames, ...props }) {
|
|
|
85
98
|
className: cn("overflow-hidden", classNames?.wrapper),
|
|
86
99
|
"data-slot": "carousel-content",
|
|
87
100
|
children: /* @__PURE__ */ jsx("div", {
|
|
88
|
-
className: cn("flex", orientation === "horizontal" ? "-
|
|
101
|
+
className: cn("flex", orientation === "horizontal" ? "-ms-4" : "-mt-4 h-full flex-col", classNames?.content, className),
|
|
89
102
|
...props
|
|
90
103
|
})
|
|
91
104
|
});
|
|
@@ -98,7 +111,7 @@ function CarouselItem({ __scopeCarousel, className, ...props }) {
|
|
|
98
111
|
const { orientation } = useCarouselContext(CAROUSEL_ITEM_NAME, __scopeCarousel);
|
|
99
112
|
return /* @__PURE__ */ jsx("div", {
|
|
100
113
|
"aria-roledescription": "slide",
|
|
101
|
-
className: cn("min-w-0 shrink-0 grow-0 basis-full", orientation === "horizontal" ? "
|
|
114
|
+
className: cn("min-w-0 shrink-0 grow-0 basis-full", orientation === "horizontal" ? "ps-4" : "pt-4", className),
|
|
102
115
|
"data-slot": "carousel-item",
|
|
103
116
|
role: "group",
|
|
104
117
|
...props
|
|
@@ -108,18 +121,18 @@ const CAROUSEL_PREVIOUS_NAME = "CarouselPrevious";
|
|
|
108
121
|
/**
|
|
109
122
|
* @since 0.3.16-canary.0
|
|
110
123
|
*/
|
|
111
|
-
function CarouselPrevious({ __scopeCarousel, className, size = "icon", variant = "outline", ...props }) {
|
|
124
|
+
function CarouselPrevious({ __scopeCarousel, className, size = "icon-sm", variant = "outline", ...props }) {
|
|
112
125
|
const { canScrollPrev, orientation, scrollPrev } = useCarouselContext(CAROUSEL_PREVIOUS_NAME, __scopeCarousel);
|
|
113
126
|
return /* @__PURE__ */ jsxs(Button, {
|
|
114
127
|
"aria-label": "Previous slide",
|
|
115
|
-
className: cn("absolute
|
|
128
|
+
className: cn("absolute touch-manipulation rounded-full", orientation === "horizontal" ? "-start-12 top-1/2 -translate-y-1/2 active:not-aria-[haspopup]:translate-y-[calc(-50%+1px)]" : "start-1/2 -top-12 -translate-x-1/2 rotate-90 rtl:translate-x-1/2", className),
|
|
116
129
|
"data-slot": "carousel-previous",
|
|
117
130
|
disabled: !canScrollPrev,
|
|
118
131
|
size,
|
|
119
132
|
variant,
|
|
120
133
|
onClick: scrollPrev,
|
|
121
134
|
...props,
|
|
122
|
-
children: [/* @__PURE__ */ jsx(
|
|
135
|
+
children: [/* @__PURE__ */ jsx(ChevronLeftIcon, { className: "rtl:rotate-180" }), /* @__PURE__ */ jsx("span", {
|
|
123
136
|
className: "sr-only",
|
|
124
137
|
children: "Previous slide"
|
|
125
138
|
})]
|
|
@@ -129,18 +142,18 @@ const CAROUSEL_NEXT_NAME = "CarouselNext";
|
|
|
129
142
|
/**
|
|
130
143
|
* @since 0.3.16-canary.0
|
|
131
144
|
*/
|
|
132
|
-
function CarouselNext({ __scopeCarousel, className, size = "icon", variant = "outline", ...props }) {
|
|
145
|
+
function CarouselNext({ __scopeCarousel, className, size = "icon-sm", variant = "outline", ...props }) {
|
|
133
146
|
const { canScrollNext, orientation, scrollNext } = useCarouselContext(CAROUSEL_NEXT_NAME, __scopeCarousel);
|
|
134
147
|
return /* @__PURE__ */ jsxs(Button, {
|
|
135
148
|
"aria-label": "Next slide",
|
|
136
|
-
className: cn("absolute
|
|
149
|
+
className: cn("absolute touch-manipulation rounded-full", orientation === "horizontal" ? "-end-12 top-1/2 -translate-y-1/2 active:not-aria-[haspopup]:translate-y-[calc(-50%+1px)]" : "start-1/2 -bottom-12 -translate-x-1/2 rotate-90 rtl:translate-x-1/2", className),
|
|
137
150
|
"data-slot": "carousel-next",
|
|
138
151
|
disabled: !canScrollNext,
|
|
139
152
|
size,
|
|
140
153
|
variant,
|
|
141
154
|
onClick: scrollNext,
|
|
142
155
|
...props,
|
|
143
|
-
children: [/* @__PURE__ */ jsx(
|
|
156
|
+
children: [/* @__PURE__ */ jsx(ChevronRightIcon, { className: "rtl:rotate-180" }), /* @__PURE__ */ jsx("span", {
|
|
144
157
|
className: "sr-only",
|
|
145
158
|
children: "Next slide"
|
|
146
159
|
})]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComponentProps, ComponentType, JSX, ReactNode } from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { Context } from "radix-ui/internal";
|
|
3
3
|
import * as RechartsPrimitive from "recharts";
|
|
4
4
|
import { TooltipContentProps, TooltipProps } from "recharts";
|
|
5
5
|
import { NameType, Payload, ValueType } from "recharts/types/component/DefaultTooltipContent";
|
|
@@ -25,15 +25,19 @@ type ChartConfig = Record<string, {
|
|
|
25
25
|
theme?: never;
|
|
26
26
|
})>;
|
|
27
27
|
type ScopedProps<P> = P & {
|
|
28
|
-
__scopeChart?: Scope;
|
|
28
|
+
__scopeChart?: Context.Scope;
|
|
29
29
|
};
|
|
30
|
-
declare const createChartScope:
|
|
30
|
+
declare const createChartScope: Context.CreateScope;
|
|
31
31
|
/**
|
|
32
32
|
* @since 0.3.16-canary.0
|
|
33
33
|
*/
|
|
34
34
|
interface ChartContainerProps extends ComponentProps<"div"> {
|
|
35
35
|
children: ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>["children"];
|
|
36
36
|
config: ChartConfig;
|
|
37
|
+
initialDimension?: {
|
|
38
|
+
height: number;
|
|
39
|
+
width: number;
|
|
40
|
+
};
|
|
37
41
|
}
|
|
38
42
|
/**
|
|
39
43
|
* @since 0.3.16-canary.0
|
|
@@ -44,6 +48,7 @@ declare function ChartContainer({
|
|
|
44
48
|
className,
|
|
45
49
|
config,
|
|
46
50
|
id,
|
|
51
|
+
initialDimension,
|
|
47
52
|
...props
|
|
48
53
|
}: ScopedProps<ChartContainerProps>): JSX.Element;
|
|
49
54
|
/**
|
|
@@ -1,35 +1,41 @@
|
|
|
1
|
-
"use client";
|
|
2
1
|
import { cn } from "../lib/utils.mjs";
|
|
3
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
3
|
import { useId, useMemo } from "react";
|
|
5
|
-
import {
|
|
4
|
+
import { Context } from "radix-ui/internal";
|
|
6
5
|
import * as RechartsPrimitive from "recharts";
|
|
7
6
|
//#region src/components/chart.tsx
|
|
8
7
|
const THEMES = {
|
|
9
8
|
dark: ".dark",
|
|
10
9
|
light: ""
|
|
11
10
|
};
|
|
11
|
+
const INITIAL_DIMENSION = {
|
|
12
|
+
height: 200,
|
|
13
|
+
width: 320
|
|
14
|
+
};
|
|
12
15
|
const CHART_PROVIDER_NAME = "ChartProvider";
|
|
13
|
-
const [createChartContext, createChartScope] = createContextScope(CHART_PROVIDER_NAME);
|
|
16
|
+
const [createChartContext, createChartScope] = Context.createContextScope(CHART_PROVIDER_NAME);
|
|
14
17
|
const [ChartContextProvider, useChartContext] = createChartContext(CHART_PROVIDER_NAME);
|
|
15
18
|
/**
|
|
16
19
|
* @since 0.3.16-canary.0
|
|
17
20
|
*/
|
|
18
|
-
function ChartContainer({ __scopeChart, children, className, config, id, ...props }) {
|
|
21
|
+
function ChartContainer({ __scopeChart, children, className, config, id, initialDimension = INITIAL_DIMENSION, ...props }) {
|
|
19
22
|
const uniqueId = useId();
|
|
20
|
-
const chartId = `chart-${id ?? uniqueId}`;
|
|
23
|
+
const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
|
|
21
24
|
return /* @__PURE__ */ jsx(ChartContextProvider, {
|
|
22
25
|
config,
|
|
23
26
|
scope: __scopeChart,
|
|
24
27
|
children: /* @__PURE__ */ jsxs("div", {
|
|
25
|
-
className: cn("flex aspect-video justify-center text-xs
|
|
28
|
+
className: cn("flex aspect-video justify-center text-xs [&_.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-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.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 [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden", className),
|
|
26
29
|
"data-chart": chartId,
|
|
27
30
|
"data-slot": "chart",
|
|
28
31
|
...props,
|
|
29
32
|
children: [/* @__PURE__ */ jsx(ChartStyle, {
|
|
30
33
|
config,
|
|
31
34
|
id: chartId
|
|
32
|
-
}), /* @__PURE__ */ jsx(RechartsPrimitive.ResponsiveContainer, {
|
|
35
|
+
}), /* @__PURE__ */ jsx(RechartsPrimitive.ResponsiveContainer, {
|
|
36
|
+
initialDimension,
|
|
37
|
+
children
|
|
38
|
+
})]
|
|
33
39
|
})
|
|
34
40
|
});
|
|
35
41
|
}
|
|
@@ -79,7 +85,7 @@ function ChartTooltipContent({ __scopeChart, active, className, color, formatter
|
|
|
79
85
|
if (!active || payload.length === 0) return null;
|
|
80
86
|
const nestLabel = payload.length === 1 && indicator !== "dot";
|
|
81
87
|
return /* @__PURE__ */ jsxs("div", {
|
|
82
|
-
className: cn("grid min-w-
|
|
88
|
+
className: cn("grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl", className),
|
|
83
89
|
children: [nestLabel ? null : tooltipLabel, /* @__PURE__ */ jsx("div", {
|
|
84
90
|
className: "grid gap-1.5",
|
|
85
91
|
children: payload.map((item, index) => {
|
|
@@ -87,12 +93,12 @@ function ChartTooltipContent({ __scopeChart, active, className, color, formatter
|
|
|
87
93
|
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
88
94
|
const indicatorColor = color ?? (isRecord(item.payload) && "fill" in item.payload && typeof item.payload.fill === "string" ? item.payload.fill : void 0) ?? item.color;
|
|
89
95
|
return /* @__PURE__ */ jsx("div", {
|
|
90
|
-
className: cn("flex w-full flex-wrap items-stretch gap-2
|
|
96
|
+
className: cn("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground", indicator === "dot" && "items-center"),
|
|
91
97
|
children: formatter && item.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, [item]) : /* @__PURE__ */ jsxs(Fragment, { children: [itemConfig?.icon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx("div", {
|
|
92
|
-
className: cn("shrink-0
|
|
98
|
+
className: cn("shrink-0 rounded-xs border-(--color-border) bg-(--color-bg)", {
|
|
93
99
|
"h-2.5 w-2.5": indicator === "dot",
|
|
94
100
|
"my-0.5": nestLabel && indicator === "dashed",
|
|
95
|
-
"border-1.
|
|
101
|
+
"w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
|
|
96
102
|
"w-1": indicator === "line"
|
|
97
103
|
}),
|
|
98
104
|
style: {
|
|
@@ -100,7 +106,7 @@ function ChartTooltipContent({ __scopeChart, active, className, color, formatter
|
|
|
100
106
|
"--color-border": indicatorColor
|
|
101
107
|
}
|
|
102
108
|
}), /* @__PURE__ */ jsxs("div", {
|
|
103
|
-
className: cn("flex flex-1 justify-between
|
|
109
|
+
className: cn("flex flex-1 justify-between leading-none", nestLabel ? "items-end" : "items-center"),
|
|
104
110
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
105
111
|
className: "grid gap-1.5",
|
|
106
112
|
children: [nestLabel ? tooltipLabel : null, /* @__PURE__ */ jsx("span", {
|
|
@@ -108,7 +114,7 @@ function ChartTooltipContent({ __scopeChart, active, className, color, formatter
|
|
|
108
114
|
children: itemConfig?.label ?? item.name
|
|
109
115
|
})]
|
|
110
116
|
}), item.value != null && /* @__PURE__ */ jsx("span", {
|
|
111
|
-
className:
|
|
117
|
+
className: "font-mono font-medium text-foreground tabular-nums",
|
|
112
118
|
children: typeof item.value === "number" ? item.value.toLocaleString() : safeToString(item.value)
|
|
113
119
|
})]
|
|
114
120
|
})] })
|
|
@@ -136,9 +142,9 @@ function ChartLegendContent({ __scopeChart, className, hideIcon = false, nameKey
|
|
|
136
142
|
else if (item.dataKey != null) key = safeToString(item.dataKey);
|
|
137
143
|
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
138
144
|
return /* @__PURE__ */ jsxs("div", {
|
|
139
|
-
className:
|
|
145
|
+
className: "flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground",
|
|
140
146
|
children: [itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx("div", {
|
|
141
|
-
className:
|
|
147
|
+
className: "h-2 w-2 shrink-0 rounded-xs",
|
|
142
148
|
style: { backgroundColor: item.color }
|
|
143
149
|
}), itemConfig?.label]
|
|
144
150
|
}, nameKey ? safeToString(itemConfig?.color ?? "") : safeToString(item.value ?? ""));
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
"use client";
|
|
2
1
|
import { cn } from "../lib/utils.mjs";
|
|
3
2
|
import { Label } from "./label.mjs";
|
|
4
3
|
import { CheckboxGroup, CheckboxGroupIndicator, CheckboxGroupItem } from "../primitives/checkbox-group.mjs";
|
|
5
|
-
import { CheckIcon } from "lucide-react";
|
|
4
|
+
import { CheckIcon, MinusIcon } from "lucide-react";
|
|
6
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
6
|
//#region src/components/checkbox-cards.tsx
|
|
8
7
|
/**
|
|
@@ -19,15 +18,16 @@ function CheckboxCards(props) {
|
|
|
19
18
|
*/
|
|
20
19
|
function CheckboxCardsItem({ checkboxClassName, children, className, ...props }) {
|
|
21
20
|
return /* @__PURE__ */ jsxs(Label, {
|
|
22
|
-
className: cn("flex items-start gap-3
|
|
21
|
+
className: cn("flex items-start gap-3 rounded-md border border-input p-3 transition has-focus-visible:border-ring has-disabled:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-data-indeterminate:border-primary/30 has-data-indeterminate:bg-primary/5", className),
|
|
23
22
|
"data-slot": "checkbox-card",
|
|
24
23
|
children: [/* @__PURE__ */ jsx(CheckboxGroupItem, {
|
|
25
|
-
className: cn("peer flex size-4 shrink-0
|
|
24
|
+
className: cn("peer relative flex size-4 shrink-0 items-center justify-center rounded-sm border border-input shadow-xs transition-shadow duration-control ease-snappy outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-indeterminate:border-primary data-indeterminate:bg-primary data-indeterminate:text-primary-foreground dark:data-indeterminate:bg-primary", checkboxClassName),
|
|
26
25
|
"data-slot": "checkbox-card-item",
|
|
27
26
|
...props,
|
|
28
|
-
children: /* @__PURE__ */
|
|
27
|
+
children: /* @__PURE__ */ jsxs(CheckboxGroupIndicator, {
|
|
28
|
+
className: "group/checkbox-card-indicator grid animate-in place-content-center text-current duration-control-indicator ease-spring zoom-in-50 [&>svg]:size-3.5",
|
|
29
29
|
"data-slot": "checkbox-card-indicator",
|
|
30
|
-
children: /* @__PURE__ */ jsx(CheckIcon, { className: "
|
|
30
|
+
children: [/* @__PURE__ */ jsx(CheckIcon, { className: "group-data-indeterminate/checkbox-card-indicator:hidden" }), /* @__PURE__ */ jsx(MinusIcon, { className: "hidden group-data-indeterminate/checkbox-card-indicator:block" })]
|
|
31
31
|
})
|
|
32
32
|
}), children]
|
|
33
33
|
});
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
"use client";
|
|
2
1
|
import { cn } from "../lib/utils.mjs";
|
|
3
2
|
import { CheckboxGroup as CheckboxGroup$1, CheckboxGroupIndicator, CheckboxGroupItem as CheckboxGroupItem$1 } from "../primitives/checkbox-group.mjs";
|
|
4
|
-
import { CheckIcon } from "lucide-react";
|
|
5
|
-
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { CheckIcon, MinusIcon } from "lucide-react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
5
|
//#region src/components/checkbox-group.tsx
|
|
7
6
|
/**
|
|
8
7
|
* @since 0.3.16-canary.0
|
|
@@ -19,13 +18,13 @@ function CheckboxGroup({ className, ...props }) {
|
|
|
19
18
|
*/
|
|
20
19
|
function CheckboxGroupItem({ className, ...props }) {
|
|
21
20
|
return /* @__PURE__ */ jsx(CheckboxGroupItem$1, {
|
|
22
|
-
className: cn("peer flex size-4 shrink-0 items-center justify-center
|
|
21
|
+
className: cn("peer relative flex size-4 shrink-0 items-center justify-center rounded-sm border border-input shadow-xs transition-shadow duration-control ease-snappy outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-indeterminate:border-primary data-indeterminate:bg-primary data-indeterminate:text-primary-foreground dark:data-indeterminate:bg-primary", className),
|
|
23
22
|
"data-slot": "checkbox-group-item",
|
|
24
23
|
...props,
|
|
25
|
-
children: /* @__PURE__ */
|
|
26
|
-
className:
|
|
24
|
+
children: /* @__PURE__ */ jsxs(CheckboxGroupIndicator, {
|
|
25
|
+
className: "group/checkbox-group-indicator grid animate-in place-content-center text-current duration-control-indicator ease-spring zoom-in-50 [&>svg]:size-3.5",
|
|
27
26
|
"data-slot": "checkbox-group-indicator",
|
|
28
|
-
children: /* @__PURE__ */ jsx(CheckIcon, { className: "
|
|
27
|
+
children: [/* @__PURE__ */ jsx(CheckIcon, { className: "group-data-indeterminate/checkbox-group-indicator:hidden" }), /* @__PURE__ */ jsx(MinusIcon, { className: "hidden group-data-indeterminate/checkbox-group-indicator:block" })]
|
|
29
28
|
})
|
|
30
29
|
});
|
|
31
30
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import { Checkbox as Checkbox$1 } from "radix-ui";
|
|
1
2
|
import { ComponentProps, JSX } from "react";
|
|
2
|
-
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
3
3
|
|
|
4
4
|
//#region src/components/checkbox.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* @since 0.3.16-canary.0
|
|
7
7
|
*/
|
|
8
|
-
type CheckboxProps = ComponentProps<typeof
|
|
8
|
+
type CheckboxProps = ComponentProps<typeof Checkbox$1.Root>;
|
|
9
9
|
/**
|
|
10
10
|
* @since 0.3.16-canary.0
|
|
11
11
|
*/
|