@codefast/ui 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accordion.d.mts +7 -7
- package/dist/accordion.d.ts +7 -7
- package/dist/accordion.js +42 -32
- package/dist/accordion.js.map +1 -1
- package/dist/accordion.mjs +42 -32
- package/dist/accordion.mjs.map +1 -1
- package/dist/alert-dialog.d.mts +12 -12
- package/dist/alert-dialog.d.ts +12 -12
- package/dist/alert-dialog.js +47 -75
- package/dist/alert-dialog.js.map +1 -1
- package/dist/alert-dialog.mjs +47 -75
- package/dist/alert-dialog.mjs.map +1 -1
- package/dist/alert.js +5 -30
- package/dist/alert.js.map +1 -1
- package/dist/alert.mjs +5 -30
- package/dist/alert.mjs.map +1 -1
- package/dist/aspect-ratio.d.mts +1 -1
- package/dist/aspect-ratio.d.ts +1 -1
- package/dist/aspect-ratio.js.map +1 -1
- package/dist/aspect-ratio.mjs.map +1 -1
- package/dist/avatar.d.mts +6 -6
- package/dist/avatar.d.ts +6 -6
- package/dist/avatar.js +3 -16
- package/dist/avatar.js.map +1 -1
- package/dist/avatar.mjs +3 -16
- package/dist/avatar.mjs.map +1 -1
- package/dist/badge.js +1 -5
- package/dist/badge.js.map +1 -1
- package/dist/badge.mjs +1 -5
- package/dist/badge.mjs.map +1 -1
- package/dist/blockquote.js +4 -6
- package/dist/blockquote.js.map +1 -1
- package/dist/blockquote.mjs +4 -6
- package/dist/blockquote.mjs.map +1 -1
- package/dist/box.js +4 -6
- package/dist/box.js.map +1 -1
- package/dist/box.mjs +4 -6
- package/dist/box.mjs.map +1 -1
- package/dist/breadcrumb.js +29 -66
- package/dist/breadcrumb.js.map +1 -1
- package/dist/breadcrumb.mjs +29 -66
- package/dist/breadcrumb.mjs.map +1 -1
- package/dist/button.d.mts +1 -0
- package/dist/button.d.ts +1 -0
- package/dist/button.js +3 -2
- package/dist/button.mjs +2 -1
- package/dist/calendar.js +7 -19
- package/dist/calendar.js.map +1 -1
- package/dist/calendar.mjs +6 -18
- package/dist/calendar.mjs.map +1 -1
- package/dist/card.js +8 -55
- package/dist/card.js.map +1 -1
- package/dist/card.mjs +8 -55
- package/dist/card.mjs.map +1 -1
- package/dist/carousel.js +58 -64
- package/dist/carousel.js.map +1 -1
- package/dist/carousel.mjs +57 -63
- package/dist/carousel.mjs.map +1 -1
- package/dist/checkbox-cards.d.mts +15 -0
- package/dist/checkbox-cards.d.ts +15 -0
- package/dist/checkbox-cards.js +56 -0
- package/dist/checkbox-cards.js.map +1 -0
- package/dist/checkbox-cards.mjs +56 -0
- package/dist/checkbox-cards.mjs.map +1 -0
- package/dist/checkbox-group.d.mts +13 -0
- package/dist/checkbox-group.d.ts +13 -0
- package/dist/checkbox-group.js +44 -0
- package/dist/checkbox-group.js.map +1 -0
- package/dist/checkbox-group.mjs +44 -0
- package/dist/checkbox-group.mjs.map +1 -0
- package/dist/checkbox-group.primitive.d.mts +38 -0
- package/dist/checkbox-group.primitive.d.ts +38 -0
- package/dist/checkbox-group.primitive.js +19 -0
- package/dist/checkbox-group.primitive.js.map +1 -0
- package/dist/checkbox-group.primitive.mjs +19 -0
- package/dist/checkbox-group.primitive.mjs.map +1 -0
- package/dist/checkbox.d.mts +2 -2
- package/dist/checkbox.d.ts +2 -2
- package/dist/checkbox.js +5 -1
- package/dist/checkbox.js.map +1 -1
- package/dist/checkbox.mjs +5 -1
- package/dist/checkbox.mjs.map +1 -1
- package/dist/chunk-3ZZ3SRTJ.js +148 -0
- package/dist/chunk-3ZZ3SRTJ.js.map +1 -0
- package/dist/chunk-5UHPKXF4.mjs +60 -0
- package/dist/chunk-5UHPKXF4.mjs.map +1 -0
- package/dist/chunk-EWS3N4OZ.mjs +148 -0
- package/dist/chunk-EWS3N4OZ.mjs.map +1 -0
- package/dist/{chunk-PIU627A3.mjs → chunk-FGI3JA75.mjs} +1 -1
- package/dist/chunk-FGI3JA75.mjs.map +1 -0
- package/dist/{chunk-GRKABVK4.js → chunk-IVYGBU4G.js} +1 -1
- package/dist/chunk-IVYGBU4G.js.map +1 -0
- package/dist/chunk-IXEJO7ZP.js +86 -0
- package/dist/chunk-IXEJO7ZP.js.map +1 -0
- package/dist/chunk-J6COVJTP.js +60 -0
- package/dist/chunk-J6COVJTP.js.map +1 -0
- package/dist/chunk-JULVZPCS.mjs +120 -0
- package/dist/chunk-JULVZPCS.mjs.map +1 -0
- package/dist/chunk-LNSEYAPJ.js +121 -0
- package/dist/chunk-LNSEYAPJ.js.map +1 -0
- package/dist/chunk-MOJNV3XZ.js +120 -0
- package/dist/chunk-MOJNV3XZ.js.map +1 -0
- package/dist/{chunk-JOJW7BBY.js → chunk-NEP3JDVQ.js} +31 -6
- package/dist/chunk-NEP3JDVQ.js.map +1 -0
- package/dist/chunk-OK63Q6EJ.mjs +121 -0
- package/dist/chunk-OK63Q6EJ.mjs.map +1 -0
- package/dist/{chunk-PKB2G726.js → chunk-ORAVN37L.js} +6 -10
- package/dist/chunk-ORAVN37L.js.map +1 -0
- package/dist/{chunk-MJDKD2K4.mjs → chunk-XCBBSHAK.mjs} +6 -10
- package/dist/chunk-XCBBSHAK.mjs.map +1 -0
- package/dist/chunk-XCKLBP2V.mjs +86 -0
- package/dist/chunk-XCKLBP2V.mjs.map +1 -0
- package/dist/chunk-XHZUPL2U.mjs +81 -0
- package/dist/chunk-XHZUPL2U.mjs.map +1 -0
- package/dist/code.js +4 -6
- package/dist/code.js.map +1 -1
- package/dist/code.mjs +4 -6
- package/dist/code.mjs.map +1 -1
- package/dist/collapsible.d.mts +3 -3
- package/dist/collapsible.d.ts +3 -3
- package/dist/collapsible.js.map +1 -1
- package/dist/collapsible.mjs.map +1 -1
- package/dist/command.d.mts +11 -10
- package/dist/command.d.ts +11 -10
- package/dist/command.js +10 -44
- package/dist/command.js.map +1 -1
- package/dist/command.mjs +10 -44
- package/dist/command.mjs.map +1 -1
- package/dist/container.js +4 -6
- package/dist/container.js.map +1 -1
- package/dist/container.mjs +4 -6
- package/dist/container.mjs.map +1 -1
- package/dist/context-menu.d.mts +18 -18
- package/dist/context-menu.d.ts +18 -18
- package/dist/context-menu.js +108 -124
- package/dist/context-menu.js.map +1 -1
- package/dist/context-menu.mjs +109 -125
- package/dist/context-menu.mjs.map +1 -1
- package/dist/data-table.d.mts +1 -1
- package/dist/data-table.d.ts +1 -1
- package/dist/data-table.js +131 -149
- package/dist/data-table.js.map +1 -1
- package/dist/data-table.mjs +120 -138
- package/dist/data-table.mjs.map +1 -1
- package/dist/dialog.d.mts +9 -9
- package/dist/dialog.d.ts +9 -9
- package/dist/dialog.js +2 -2
- package/dist/dialog.mjs +1 -1
- package/dist/drawer.d.mts +2 -2
- package/dist/drawer.d.ts +2 -2
- package/dist/drawer.js +30 -63
- package/dist/drawer.js.map +1 -1
- package/dist/drawer.mjs +30 -63
- package/dist/drawer.mjs.map +1 -1
- package/dist/dropdown-menu.d.mts +16 -16
- package/dist/dropdown-menu.d.ts +16 -16
- package/dist/dropdown-menu.js +2 -2
- package/dist/dropdown-menu.mjs +1 -1
- package/dist/em.js +4 -6
- package/dist/em.js.map +1 -1
- package/dist/em.mjs +4 -6
- package/dist/em.mjs.map +1 -1
- package/dist/form.js +23 -54
- package/dist/form.js.map +1 -1
- package/dist/form.mjs +23 -54
- package/dist/form.mjs.map +1 -1
- package/dist/heading.js +4 -6
- package/dist/heading.js.map +1 -1
- package/dist/heading.mjs +4 -6
- package/dist/heading.mjs.map +1 -1
- package/dist/hover-card.d.mts +4 -4
- package/dist/hover-card.d.ts +4 -4
- package/dist/hover-card.js +15 -13
- package/dist/hover-card.js.map +1 -1
- package/dist/hover-card.mjs +15 -13
- package/dist/hover-card.mjs.map +1 -1
- package/dist/input-otp.js +32 -37
- package/dist/input-otp.js.map +1 -1
- package/dist/input-otp.mjs +32 -37
- package/dist/input-otp.mjs.map +1 -1
- package/dist/input.js +10 -14
- package/dist/input.js.map +1 -1
- package/dist/input.mjs +10 -14
- package/dist/input.mjs.map +1 -1
- package/dist/kbd.js +14 -16
- package/dist/kbd.js.map +1 -1
- package/dist/kbd.mjs +14 -16
- package/dist/kbd.mjs.map +1 -1
- package/dist/label.d.mts +2 -2
- package/dist/label.d.ts +2 -2
- package/dist/label.js +2 -2
- package/dist/label.mjs +1 -1
- package/dist/menubar.d.mts +21 -21
- package/dist/menubar.d.ts +21 -21
- package/dist/menubar.js +73 -93
- package/dist/menubar.js.map +1 -1
- package/dist/menubar.mjs +74 -94
- package/dist/menubar.mjs.map +1 -1
- package/dist/navigation-menu.d.mts +16 -16
- package/dist/navigation-menu.d.ts +16 -16
- package/dist/navigation-menu.js +89 -93
- package/dist/navigation-menu.js.map +1 -1
- package/dist/navigation-menu.mjs +89 -93
- package/dist/navigation-menu.mjs.map +1 -1
- package/dist/pagination.js +19 -58
- package/dist/pagination.js.map +1 -1
- package/dist/pagination.mjs +19 -58
- package/dist/pagination.mjs.map +1 -1
- package/dist/popover.d.mts +7 -7
- package/dist/popover.d.ts +7 -7
- package/dist/popover.js +16 -21
- package/dist/popover.js.map +1 -1
- package/dist/popover.mjs +16 -21
- package/dist/popover.mjs.map +1 -1
- package/dist/pre.js +4 -6
- package/dist/pre.js.map +1 -1
- package/dist/pre.mjs +4 -6
- package/dist/pre.mjs.map +1 -1
- package/dist/progress.d.mts +2 -2
- package/dist/progress.d.ts +2 -2
- package/dist/progress.js +1 -4
- package/dist/progress.js.map +1 -1
- package/dist/progress.mjs +1 -4
- package/dist/progress.mjs.map +1 -1
- package/dist/quote.js +4 -6
- package/dist/quote.js.map +1 -1
- package/dist/quote.mjs +4 -6
- package/dist/quote.mjs.map +1 -1
- package/dist/radio-cards.d.mts +9 -0
- package/dist/radio-cards.d.ts +9 -0
- package/dist/radio-cards.js +36 -0
- package/dist/radio-cards.js.map +1 -0
- package/dist/radio-cards.mjs +36 -0
- package/dist/radio-cards.mjs.map +1 -0
- package/dist/radio-group.d.mts +4 -4
- package/dist/radio-group.d.ts +4 -4
- package/dist/radio-group.js +3 -9
- package/dist/radio-group.js.map +1 -1
- package/dist/radio-group.mjs +3 -9
- package/dist/radio-group.mjs.map +1 -1
- package/dist/radio.d.mts +8 -0
- package/dist/radio.d.ts +8 -0
- package/dist/radio.js +35 -0
- package/dist/radio.js.map +1 -0
- package/dist/radio.mjs +35 -0
- package/dist/radio.mjs.map +1 -0
- package/dist/resizable.d.mts +2 -2
- package/dist/resizable.d.ts +2 -2
- package/dist/resizable.js +3 -5
- package/dist/resizable.js.map +1 -1
- package/dist/resizable.mjs +3 -5
- package/dist/resizable.mjs.map +1 -1
- package/dist/scroll-area.d.mts +4 -4
- package/dist/scroll-area.d.ts +4 -4
- package/dist/scroll-area.js +23 -29
- package/dist/scroll-area.js.map +1 -1
- package/dist/scroll-area.mjs +23 -29
- package/dist/scroll-area.mjs.map +1 -1
- package/dist/section.js +4 -6
- package/dist/section.js.map +1 -1
- package/dist/section.mjs +4 -6
- package/dist/section.mjs.map +1 -1
- package/dist/select.d.mts +17 -17
- package/dist/select.d.ts +17 -17
- package/dist/select.js +2 -2
- package/dist/select.mjs +1 -1
- package/dist/separator.d.mts +2 -2
- package/dist/separator.d.ts +2 -2
- package/dist/separator.js +1 -5
- package/dist/separator.js.map +1 -1
- package/dist/separator.mjs +1 -5
- package/dist/separator.mjs.map +1 -1
- package/dist/sheet.d.mts +9 -9
- package/dist/sheet.d.ts +9 -9
- package/dist/sheet.js +35 -76
- package/dist/sheet.js.map +1 -1
- package/dist/sheet.mjs +35 -76
- package/dist/sheet.mjs.map +1 -1
- package/dist/skeleton.js +1 -7
- package/dist/skeleton.js.map +1 -1
- package/dist/skeleton.mjs +1 -7
- package/dist/skeleton.mjs.map +1 -1
- package/dist/slider.d.mts +2 -2
- package/dist/slider.d.ts +2 -2
- package/dist/slider.js +10 -5
- package/dist/slider.js.map +1 -1
- package/dist/slider.mjs +10 -5
- package/dist/slider.mjs.map +1 -1
- package/dist/sonner.js +1 -6
- package/dist/sonner.js.map +1 -1
- package/dist/sonner.mjs +1 -6
- package/dist/sonner.mjs.map +1 -1
- package/dist/spinner.d.mts +8 -0
- package/dist/spinner.d.ts +8 -0
- package/dist/spinner.js +8 -0
- package/dist/spinner.js.map +1 -0
- package/dist/spinner.mjs +8 -0
- package/dist/spinner.mjs.map +1 -0
- package/dist/strong.js +4 -6
- package/dist/strong.js.map +1 -1
- package/dist/strong.mjs +4 -6
- package/dist/strong.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/dist/switch.d.mts +2 -2
- package/dist/switch.d.ts +2 -2
- package/dist/switch.js +2 -1
- package/dist/switch.js.map +1 -1
- package/dist/switch.mjs +2 -1
- package/dist/switch.mjs.map +1 -1
- package/dist/table.js +22 -80
- package/dist/table.js.map +1 -1
- package/dist/table.mjs +22 -80
- package/dist/table.mjs.map +1 -1
- package/dist/tabs.d.mts +7 -7
- package/dist/tabs.d.ts +7 -7
- package/dist/tabs.js +4 -2
- package/dist/tabs.js.map +1 -1
- package/dist/tabs.mjs +4 -2
- package/dist/tabs.mjs.map +1 -1
- package/dist/text.js +4 -6
- package/dist/text.js.map +1 -1
- package/dist/text.mjs +4 -6
- package/dist/text.mjs.map +1 -1
- package/dist/textarea.js +14 -15
- package/dist/textarea.js.map +1 -1
- package/dist/textarea.mjs +14 -15
- package/dist/textarea.mjs.map +1 -1
- package/dist/toggle-group.d.mts +2 -2
- package/dist/toggle-group.d.ts +2 -2
- package/dist/toggle-group.js +41 -34
- package/dist/toggle-group.js.map +1 -1
- package/dist/toggle-group.mjs +40 -33
- package/dist/toggle-group.mjs.map +1 -1
- package/dist/toggle.d.mts +2 -2
- package/dist/toggle.d.ts +2 -2
- package/dist/toggle.js +2 -2
- package/dist/toggle.mjs +1 -1
- package/dist/tooltip.d.mts +7 -7
- package/dist/tooltip.d.ts +7 -7
- package/dist/tooltip.js +15 -20
- package/dist/tooltip.js.map +1 -1
- package/dist/tooltip.mjs +15 -20
- package/dist/tooltip.mjs.map +1 -1
- package/package.json +36 -5
- package/src/accordion.tsx +53 -43
- package/src/alert-dialog.tsx +73 -92
- package/src/alert.tsx +24 -41
- package/src/aspect-ratio.tsx +2 -1
- package/src/avatar.tsx +19 -36
- package/src/badge.tsx +3 -7
- package/src/blockquote.tsx +9 -8
- package/src/box.tsx +7 -6
- package/src/breadcrumb.tsx +52 -61
- package/src/button.tsx +41 -14
- package/src/calendar.tsx +6 -22
- package/src/card.tsx +40 -56
- package/src/carousel.tsx +95 -81
- package/src/checkbox-cards.tsx +68 -0
- package/src/checkbox-group.primitive.tsx +199 -0
- package/src/checkbox-group.tsx +57 -0
- package/src/checkbox.tsx +10 -6
- package/src/code.tsx +8 -6
- package/src/collapsible.tsx +4 -3
- package/src/command.tsx +53 -90
- package/src/container.tsx +8 -6
- package/src/context-menu.tsx +163 -175
- package/src/data-table.tsx +26 -43
- package/src/dialog.tsx +58 -77
- package/src/drawer.tsx +48 -78
- package/src/dropdown-menu.tsx +143 -154
- package/src/em.tsx +8 -6
- package/src/form.tsx +61 -86
- package/src/heading.tsx +8 -6
- package/src/hover-card.tsx +22 -20
- package/src/input-otp.tsx +50 -48
- package/src/input.tsx +14 -15
- package/src/kbd.tsx +18 -16
- package/src/label.tsx +5 -5
- package/src/menubar.tsx +133 -149
- package/src/navigation-menu.tsx +110 -114
- package/src/pagination.tsx +26 -48
- package/src/popover.tsx +29 -31
- package/src/pre.tsx +8 -6
- package/src/progress.tsx +6 -9
- package/src/quote.tsx +8 -6
- package/src/radio-cards.tsx +50 -0
- package/src/radio-group.tsx +14 -24
- package/src/radio.tsx +44 -0
- package/src/resizable.tsx +5 -7
- package/src/scroll-area.tsx +29 -40
- package/src/section.tsx +8 -6
- package/src/select.tsx +106 -115
- package/src/separator.tsx +7 -14
- package/src/sheet.tsx +50 -76
- package/src/skeleton.tsx +2 -6
- package/src/slider.tsx +12 -10
- package/src/sonner.tsx +3 -7
- package/src/spinner.tsx +75 -0
- package/src/strong.tsx +8 -6
- package/src/switch.tsx +7 -6
- package/src/table.tsx +60 -82
- package/src/tabs.tsx +20 -18
- package/src/text.tsx +8 -8
- package/src/textarea.tsx +16 -14
- package/src/toggle-group.tsx +59 -58
- package/src/toggle.tsx +11 -13
- package/src/tooltip.tsx +28 -30
- package/dist/chunk-3BDLWZ3W.js +0 -158
- package/dist/chunk-3BDLWZ3W.js.map +0 -1
- package/dist/chunk-43YGVOCO.js +0 -135
- package/dist/chunk-43YGVOCO.js.map +0 -1
- package/dist/chunk-AJLEALVP.mjs +0 -112
- package/dist/chunk-AJLEALVP.mjs.map +0 -1
- package/dist/chunk-D6NQEMTJ.js +0 -112
- package/dist/chunk-D6NQEMTJ.js.map +0 -1
- package/dist/chunk-FATZHRHR.mjs +0 -56
- package/dist/chunk-FATZHRHR.mjs.map +0 -1
- package/dist/chunk-GRKABVK4.js.map +0 -1
- package/dist/chunk-JOJW7BBY.js.map +0 -1
- package/dist/chunk-KV4VL2ZF.mjs +0 -135
- package/dist/chunk-KV4VL2ZF.mjs.map +0 -1
- package/dist/chunk-MJDKD2K4.mjs.map +0 -1
- package/dist/chunk-NCEN3XBK.mjs +0 -158
- package/dist/chunk-NCEN3XBK.mjs.map +0 -1
- package/dist/chunk-PIU627A3.mjs.map +0 -1
- package/dist/chunk-PKB2G726.js.map +0 -1
package/src/carousel.tsx
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import * as React from "react";
|
|
4
|
-
import useEmblaCarousel, {
|
|
5
|
-
type UseEmblaCarouselType,
|
|
6
|
-
} from "embla-carousel-react";
|
|
4
|
+
import useEmblaCarousel, { type UseEmblaCarouselType } from "embla-carousel-react";
|
|
7
5
|
import { ArrowLeftIcon, ArrowRightIcon } from "@radix-ui/react-icons";
|
|
6
|
+
import { createContextScope, type Scope } from "@radix-ui/react-context";
|
|
8
7
|
import { cn } from "./utils";
|
|
9
8
|
import { Button, type ButtonProps } from "./button";
|
|
10
9
|
|
|
@@ -12,6 +11,12 @@ import { Button, type ButtonProps } from "./button";
|
|
|
12
11
|
* Context: Carousel
|
|
13
12
|
* -------------------------------------------------------------------------- */
|
|
14
13
|
|
|
14
|
+
const CAROUSEL_NAME = "Carousel";
|
|
15
|
+
|
|
16
|
+
type ScopedProps<P> = P & { __scopeCarousel?: Scope };
|
|
17
|
+
|
|
18
|
+
const [createCarouselContext] = createContextScope(CAROUSEL_NAME);
|
|
19
|
+
|
|
15
20
|
type CarouselApi = UseEmblaCarouselType[1];
|
|
16
21
|
type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
|
|
17
22
|
type CarouselOptions = UseCarouselParameters[0];
|
|
@@ -24,7 +29,7 @@ interface BaseCarouselProps {
|
|
|
24
29
|
setApi?: (api: CarouselApi) => void;
|
|
25
30
|
}
|
|
26
31
|
|
|
27
|
-
type
|
|
32
|
+
type CarouselContextValue = {
|
|
28
33
|
carouselRef: ReturnType<typeof useEmblaCarousel>[0];
|
|
29
34
|
api: ReturnType<typeof useEmblaCarousel>[1];
|
|
30
35
|
scrollPrev: () => void;
|
|
@@ -33,26 +38,18 @@ type CarouselContextProps = {
|
|
|
33
38
|
canScrollNext: boolean;
|
|
34
39
|
} & BaseCarouselProps;
|
|
35
40
|
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
function useCarousel(): CarouselContextProps {
|
|
39
|
-
const context = React.useContext(CarouselContext);
|
|
40
|
-
|
|
41
|
-
if (!context) {
|
|
42
|
-
throw new Error("useCarousel must be used within a <Carousel />");
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return context;
|
|
46
|
-
}
|
|
41
|
+
const [CarouselProvider, useCarouselContext] = createCarouselContext<CarouselContextValue>(CAROUSEL_NAME);
|
|
47
42
|
|
|
48
43
|
/* -----------------------------------------------------------------------------
|
|
49
44
|
* Component: Carousel
|
|
50
45
|
* -------------------------------------------------------------------------- */
|
|
51
46
|
|
|
47
|
+
type CarouselElement = HTMLDivElement;
|
|
52
48
|
type CarouselProps = React.HTMLAttributes<HTMLDivElement> & BaseCarouselProps;
|
|
53
|
-
|
|
49
|
+
|
|
50
|
+
const Carousel = React.forwardRef<CarouselElement, CarouselProps>(
|
|
54
51
|
(
|
|
55
|
-
{ orientation, opts, setApi, plugins, className, children, ...props }
|
|
52
|
+
{ __scopeCarousel, orientation, opts, setApi, plugins, className, children, ...props }: ScopedProps<CarouselProps>,
|
|
56
53
|
ref,
|
|
57
54
|
) => {
|
|
58
55
|
const [carouselRef, api] = useEmblaCarousel(
|
|
@@ -62,6 +59,7 @@ const Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(
|
|
|
62
59
|
},
|
|
63
60
|
plugins,
|
|
64
61
|
);
|
|
62
|
+
|
|
65
63
|
const [canScrollPrev, setCanScrollPrev] = React.useState(false);
|
|
66
64
|
const [canScrollNext, setCanScrollNext] = React.useState(false);
|
|
67
65
|
|
|
@@ -118,18 +116,16 @@ const Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(
|
|
|
118
116
|
}, [api, onSelect]);
|
|
119
117
|
|
|
120
118
|
return (
|
|
121
|
-
<
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
canScrollNext,
|
|
132
|
-
}}
|
|
119
|
+
<CarouselProvider
|
|
120
|
+
scope={__scopeCarousel}
|
|
121
|
+
carouselRef={carouselRef}
|
|
122
|
+
api={api}
|
|
123
|
+
opts={opts}
|
|
124
|
+
orientation={orientation ?? (opts?.axis === "y" ? "vertical" : "horizontal")}
|
|
125
|
+
scrollPrev={scrollPrev}
|
|
126
|
+
scrollNext={scrollNext}
|
|
127
|
+
canScrollPrev={canScrollPrev}
|
|
128
|
+
canScrollNext={canScrollNext}
|
|
133
129
|
>
|
|
134
130
|
<div
|
|
135
131
|
ref={ref}
|
|
@@ -141,106 +137,123 @@ const Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(
|
|
|
141
137
|
>
|
|
142
138
|
{children}
|
|
143
139
|
</div>
|
|
144
|
-
</
|
|
140
|
+
</CarouselProvider>
|
|
145
141
|
);
|
|
146
142
|
},
|
|
147
143
|
);
|
|
148
|
-
|
|
144
|
+
|
|
145
|
+
Carousel.displayName = CAROUSEL_NAME;
|
|
149
146
|
|
|
150
147
|
/* -----------------------------------------------------------------------------
|
|
151
148
|
* Component: CarouselContent
|
|
152
149
|
* -------------------------------------------------------------------------- */
|
|
153
150
|
|
|
151
|
+
const CAROUSEL_CONTENT_NAME = "CarouselContent";
|
|
152
|
+
|
|
153
|
+
type CarouselContentElement = HTMLDivElement;
|
|
154
154
|
type CarouselContentProps = React.HTMLAttributes<HTMLDivElement>;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
|
|
156
|
+
const CarouselContent = React.forwardRef<CarouselContentElement, CarouselContentProps>(
|
|
157
|
+
({ __scopeCarousel, className, ...props }: ScopedProps<CarouselContentProps>, ref) => {
|
|
158
|
+
const { carouselRef, orientation } = useCarouselContext(CAROUSEL_CONTENT_NAME, __scopeCarousel);
|
|
158
159
|
|
|
159
160
|
return (
|
|
160
161
|
<div ref={carouselRef} className="overflow-hidden">
|
|
161
162
|
<div
|
|
162
163
|
ref={ref}
|
|
163
|
-
className={cn(
|
|
164
|
-
"flex",
|
|
165
|
-
orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
|
|
166
|
-
className,
|
|
167
|
-
)}
|
|
164
|
+
className={cn("flex", orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col", className)}
|
|
168
165
|
{...props}
|
|
169
166
|
/>
|
|
170
167
|
</div>
|
|
171
168
|
);
|
|
172
169
|
},
|
|
173
170
|
);
|
|
174
|
-
|
|
171
|
+
|
|
172
|
+
CarouselContent.displayName = CAROUSEL_CONTENT_NAME;
|
|
175
173
|
|
|
176
174
|
/* -----------------------------------------------------------------------------
|
|
177
175
|
* Component: CarouselItem
|
|
178
176
|
* -------------------------------------------------------------------------- */
|
|
179
177
|
|
|
178
|
+
const CAROUSEL_ITEM_NAME = "CarouselItem";
|
|
179
|
+
|
|
180
|
+
type CarouselItemElement = HTMLDivElement;
|
|
180
181
|
type CarouselItemProps = React.HTMLAttributes<HTMLDivElement>;
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
182
|
+
|
|
183
|
+
const CarouselItem = React.forwardRef<CarouselItemElement, CarouselItemProps>(
|
|
184
|
+
({ __scopeCarousel, className, ...props }: ScopedProps<CarouselItemProps>, ref) => {
|
|
185
|
+
const { orientation } = useCarouselContext(CAROUSEL_ITEM_NAME, __scopeCarousel);
|
|
184
186
|
|
|
185
187
|
return (
|
|
186
188
|
<div
|
|
187
189
|
ref={ref}
|
|
188
190
|
role="group"
|
|
189
191
|
aria-roledescription="slide"
|
|
190
|
-
className={cn(
|
|
191
|
-
"min-w-0 shrink-0 grow-0 basis-full",
|
|
192
|
-
orientation === "horizontal" ? "pl-4" : "pt-4",
|
|
193
|
-
className,
|
|
194
|
-
)}
|
|
192
|
+
className={cn("min-w-0 shrink-0 grow-0 basis-full", orientation === "horizontal" ? "pl-4" : "pt-4", className)}
|
|
195
193
|
{...props}
|
|
196
194
|
/>
|
|
197
195
|
);
|
|
198
196
|
},
|
|
199
197
|
);
|
|
200
|
-
|
|
198
|
+
|
|
199
|
+
CarouselItem.displayName = CAROUSEL_ITEM_NAME;
|
|
201
200
|
|
|
202
201
|
/* -----------------------------------------------------------------------------
|
|
203
202
|
* Component: CarouselPrevious
|
|
204
203
|
* -------------------------------------------------------------------------- */
|
|
205
204
|
|
|
205
|
+
const CAROUSEL_PREVIOUS_NAME = "CarouselPrevious";
|
|
206
|
+
|
|
207
|
+
type CarouselPreviousElement = HTMLButtonElement;
|
|
206
208
|
type CarouselPreviousProps = ButtonProps;
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
209
|
+
|
|
210
|
+
const CarouselPrevious = React.forwardRef<CarouselPreviousElement, CarouselPreviousProps>(
|
|
211
|
+
(
|
|
212
|
+
{ __scopeCarousel, className, variant = "outline", size = "icon", ...props }: ScopedProps<CarouselPreviousProps>,
|
|
213
|
+
ref,
|
|
214
|
+
) => {
|
|
215
|
+
const { orientation, scrollPrev, canScrollPrev } = useCarouselContext(CAROUSEL_PREVIOUS_NAME, __scopeCarousel);
|
|
216
|
+
|
|
217
|
+
return (
|
|
218
|
+
<Button
|
|
219
|
+
ref={ref}
|
|
220
|
+
variant={variant}
|
|
221
|
+
size={size}
|
|
222
|
+
className={cn(
|
|
223
|
+
"absolute size-8 rounded-full",
|
|
224
|
+
orientation === "horizontal"
|
|
225
|
+
? "-left-12 top-1/2 -translate-y-1/2"
|
|
226
|
+
: "-top-12 left-1/2 -translate-x-1/2 rotate-90",
|
|
227
|
+
className,
|
|
228
|
+
)}
|
|
229
|
+
disabled={!canScrollPrev}
|
|
230
|
+
onClick={scrollPrev}
|
|
231
|
+
{...props}
|
|
232
|
+
>
|
|
233
|
+
<ArrowLeftIcon className="size-4" />
|
|
234
|
+
<span className="sr-only">Previous slide</span>
|
|
235
|
+
</Button>
|
|
236
|
+
);
|
|
237
|
+
},
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
CarouselPrevious.displayName = CAROUSEL_PREVIOUS_NAME;
|
|
235
241
|
|
|
236
242
|
/* -----------------------------------------------------------------------------
|
|
237
243
|
* Component: CarouselNext
|
|
238
244
|
* -------------------------------------------------------------------------- */
|
|
239
245
|
|
|
246
|
+
const CAROUSEL_NEXT_NAME = "CarouselNext";
|
|
247
|
+
|
|
248
|
+
type CarouselNextElement = HTMLButtonElement;
|
|
240
249
|
type CarouselNextProps = ButtonProps;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
250
|
+
|
|
251
|
+
const CarouselNext = React.forwardRef<CarouselNextElement, CarouselNextProps>(
|
|
252
|
+
(
|
|
253
|
+
{ __scopeCarousel, className, variant = "outline", size = "icon", ...props }: ScopedProps<CarouselNextProps>,
|
|
254
|
+
ref,
|
|
255
|
+
) => {
|
|
256
|
+
const { orientation, scrollNext, canScrollNext } = useCarouselContext(CAROUSEL_NEXT_NAME, __scopeCarousel);
|
|
244
257
|
|
|
245
258
|
return (
|
|
246
259
|
<Button
|
|
@@ -264,7 +277,8 @@ const CarouselNext = React.forwardRef<HTMLButtonElement, CarouselNextProps>(
|
|
|
264
277
|
);
|
|
265
278
|
},
|
|
266
279
|
);
|
|
267
|
-
|
|
280
|
+
|
|
281
|
+
CarouselNext.displayName = CAROUSEL_NEXT_NAME;
|
|
268
282
|
|
|
269
283
|
/* -----------------------------------------------------------------------------
|
|
270
284
|
* Exports
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { CheckIcon } from "@radix-ui/react-icons";
|
|
5
|
+
import * as CheckboxGroupPrimitive from "./checkbox-group.primitive";
|
|
6
|
+
import { cn } from "./utils";
|
|
7
|
+
|
|
8
|
+
/* -----------------------------------------------------------------------------
|
|
9
|
+
* Component: CheckboxCards
|
|
10
|
+
* -------------------------------------------------------------------------- */
|
|
11
|
+
|
|
12
|
+
type CheckboxCardsElement = React.ElementRef<typeof CheckboxGroupPrimitive.Root>;
|
|
13
|
+
type CheckboxCardsProps = React.ComponentPropsWithoutRef<typeof CheckboxGroupPrimitive.Root>;
|
|
14
|
+
|
|
15
|
+
const CheckboxCards = React.forwardRef<CheckboxCardsElement, CheckboxCardsProps>(({ className, ...props }, ref) => {
|
|
16
|
+
return <CheckboxGroupPrimitive.Root className={cn("grid gap-2", className)} {...props} ref={ref} />;
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
CheckboxCards.displayName = CheckboxGroupPrimitive.Root.displayName;
|
|
20
|
+
|
|
21
|
+
/* -----------------------------------------------------------------------------
|
|
22
|
+
* Component: CheckboxCardsItem
|
|
23
|
+
* -------------------------------------------------------------------------- */
|
|
24
|
+
|
|
25
|
+
type CheckboxCardsItemElement = React.ElementRef<typeof CheckboxGroupPrimitive.Item>;
|
|
26
|
+
|
|
27
|
+
interface CheckboxCardsItemProps extends React.ComponentPropsWithoutRef<typeof CheckboxGroupPrimitive.Item> {
|
|
28
|
+
checkboxClassName?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const CheckboxCardsItem = React.forwardRef<CheckboxCardsItemElement, CheckboxCardsItemProps>(
|
|
32
|
+
({ className, children, checkboxClassName, ...props }, ref) => {
|
|
33
|
+
return (
|
|
34
|
+
<label
|
|
35
|
+
className={cn(
|
|
36
|
+
"border-compound/70 flex items-center justify-center gap-4 rounded-md border p-4",
|
|
37
|
+
"hover:border-compound",
|
|
38
|
+
className,
|
|
39
|
+
)}
|
|
40
|
+
>
|
|
41
|
+
{children}
|
|
42
|
+
<CheckboxGroupPrimitive.Item
|
|
43
|
+
ref={ref}
|
|
44
|
+
className={cn(
|
|
45
|
+
"border-compound/70 peer size-4 shrink-0 cursor-default rounded-sm border shadow",
|
|
46
|
+
"aria-checked:border-primary aria-checked:bg-primary aria-checked:text-primary-foreground",
|
|
47
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
48
|
+
"focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
49
|
+
checkboxClassName,
|
|
50
|
+
)}
|
|
51
|
+
{...props}
|
|
52
|
+
>
|
|
53
|
+
<CheckboxGroupPrimitive.CheckboxGroupIndicator className="flex size-full items-center justify-center text-current">
|
|
54
|
+
<CheckIcon className="size-3.5" />
|
|
55
|
+
</CheckboxGroupPrimitive.CheckboxGroupIndicator>
|
|
56
|
+
</CheckboxGroupPrimitive.Item>
|
|
57
|
+
</label>
|
|
58
|
+
);
|
|
59
|
+
},
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
CheckboxCardsItem.displayName = CheckboxGroupPrimitive.Item.displayName;
|
|
63
|
+
|
|
64
|
+
/* -----------------------------------------------------------------------------
|
|
65
|
+
* Exports
|
|
66
|
+
* -------------------------------------------------------------------------- */
|
|
67
|
+
|
|
68
|
+
export { CheckboxCards, CheckboxCardsItem, type CheckboxCardsProps, type CheckboxCardsItemProps };
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
3
|
+
import { createCheckboxScope } from "@radix-ui/react-checkbox";
|
|
4
|
+
import { createContextScope, type Scope } from "@radix-ui/react-context";
|
|
5
|
+
import * as RovingFocusGroup from "@radix-ui/react-roving-focus";
|
|
6
|
+
import { createRovingFocusGroupScope } from "@radix-ui/react-roving-focus";
|
|
7
|
+
import { useControllableState } from "@radix-ui/react-use-controllable-state";
|
|
8
|
+
import { useDirection } from "@radix-ui/react-direction";
|
|
9
|
+
import { Primitive } from "@radix-ui/react-primitive";
|
|
10
|
+
|
|
11
|
+
/* -------------------------------------------------------------------------------------------------
|
|
12
|
+
* Component: CheckboxGroup
|
|
13
|
+
* -----------------------------------------------------------------------------------------------*/
|
|
14
|
+
|
|
15
|
+
const CHECKBOX_GROUP_NAME = "CheckboxGroup";
|
|
16
|
+
|
|
17
|
+
type ScopedProps<P> = P & { __scopeCheckboxGroup?: Scope };
|
|
18
|
+
|
|
19
|
+
const [createCheckboxGroupContext, createCheckboxGroupScope] = createContextScope(CHECKBOX_GROUP_NAME, [
|
|
20
|
+
createRovingFocusGroupScope,
|
|
21
|
+
createCheckboxScope,
|
|
22
|
+
]);
|
|
23
|
+
|
|
24
|
+
const useRovingFocusGroupScope = createRovingFocusGroupScope();
|
|
25
|
+
const useCheckboxScope = createCheckboxScope();
|
|
26
|
+
|
|
27
|
+
interface CheckboxGroupContextValue {
|
|
28
|
+
name?: string;
|
|
29
|
+
required: boolean;
|
|
30
|
+
disabled: boolean;
|
|
31
|
+
value?: string[];
|
|
32
|
+
onItemCheck: (value: string) => void;
|
|
33
|
+
onItemUncheck: (value: string) => void;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const [CheckboxGroupProvider, useCheckboxGroupContext] =
|
|
37
|
+
createCheckboxGroupContext<CheckboxGroupContextValue>(CHECKBOX_GROUP_NAME);
|
|
38
|
+
|
|
39
|
+
type CheckboxGroupElement = React.ElementRef<typeof Primitive.div>;
|
|
40
|
+
|
|
41
|
+
interface CheckboxGroupProps extends React.ComponentPropsWithoutRef<typeof Primitive.div> {
|
|
42
|
+
name?: CheckboxGroupContextValue["name"];
|
|
43
|
+
required?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>["required"];
|
|
44
|
+
disabled?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>["disabled"];
|
|
45
|
+
dir?: RovingFocusGroup.RovingFocusGroupProps["dir"];
|
|
46
|
+
orientation?: RovingFocusGroup.RovingFocusGroupProps["orientation"];
|
|
47
|
+
loop?: RovingFocusGroup.RovingFocusGroupProps["loop"];
|
|
48
|
+
defaultValue?: string[];
|
|
49
|
+
value?: CheckboxGroupContextValue["value"];
|
|
50
|
+
onValueChange?: (value: string[]) => void;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>(
|
|
54
|
+
(
|
|
55
|
+
{
|
|
56
|
+
__scopeCheckboxGroup,
|
|
57
|
+
name,
|
|
58
|
+
defaultValue,
|
|
59
|
+
value: valueProp,
|
|
60
|
+
required = false,
|
|
61
|
+
disabled = false,
|
|
62
|
+
orientation,
|
|
63
|
+
dir,
|
|
64
|
+
loop = true,
|
|
65
|
+
onValueChange,
|
|
66
|
+
...props
|
|
67
|
+
}: ScopedProps<CheckboxGroupProps>,
|
|
68
|
+
ref,
|
|
69
|
+
) => {
|
|
70
|
+
const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeCheckboxGroup);
|
|
71
|
+
const direction = useDirection(dir);
|
|
72
|
+
const [value = [], setValue] = useControllableState({
|
|
73
|
+
prop: valueProp,
|
|
74
|
+
defaultProp: defaultValue,
|
|
75
|
+
onChange: onValueChange,
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
const handleItemCheck = React.useCallback(
|
|
79
|
+
(itemValue: string) => {
|
|
80
|
+
setValue((prevValue = []) => [...prevValue, itemValue]);
|
|
81
|
+
},
|
|
82
|
+
[setValue],
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
const handleItemUncheck = React.useCallback(
|
|
86
|
+
(itemValue: string) => {
|
|
87
|
+
setValue((prevValue = []) => prevValue.filter((val) => val !== itemValue));
|
|
88
|
+
},
|
|
89
|
+
[setValue],
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
return (
|
|
93
|
+
<CheckboxGroupProvider
|
|
94
|
+
scope={__scopeCheckboxGroup}
|
|
95
|
+
name={name}
|
|
96
|
+
required={required}
|
|
97
|
+
disabled={disabled}
|
|
98
|
+
value={value}
|
|
99
|
+
onItemCheck={handleItemCheck}
|
|
100
|
+
onItemUncheck={handleItemUncheck}
|
|
101
|
+
>
|
|
102
|
+
<RovingFocusGroup.Root asChild {...rovingFocusGroupScope} orientation={orientation} dir={direction} loop={loop}>
|
|
103
|
+
{/* eslint-disable-next-line react/jsx-pascal-case -- radix-ui */}
|
|
104
|
+
<Primitive.div ref={ref} role="group" data-disabled={disabled ? "" : undefined} dir={direction} {...props} />
|
|
105
|
+
</RovingFocusGroup.Root>
|
|
106
|
+
</CheckboxGroupProvider>
|
|
107
|
+
);
|
|
108
|
+
},
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
CheckboxGroup.displayName = CHECKBOX_GROUP_NAME;
|
|
112
|
+
|
|
113
|
+
/* -------------------------------------------------------------------------------------------------
|
|
114
|
+
* Component: CheckboxGroupItem
|
|
115
|
+
* -----------------------------------------------------------------------------------------------*/
|
|
116
|
+
|
|
117
|
+
const ITEM_NAME = `${CHECKBOX_GROUP_NAME}Item`;
|
|
118
|
+
|
|
119
|
+
type CheckboxGroupItemElement = React.ElementRef<typeof CheckboxPrimitive.Root>;
|
|
120
|
+
|
|
121
|
+
interface CheckboxGroupItemProps
|
|
122
|
+
extends Omit<
|
|
123
|
+
React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,
|
|
124
|
+
"checked" | "defaultChecked" | "onCheckedChange" | "name"
|
|
125
|
+
> {
|
|
126
|
+
value: string;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const CheckboxGroupItem = React.forwardRef<CheckboxGroupItemElement, CheckboxGroupItemProps>(
|
|
130
|
+
({ __scopeCheckboxGroup, disabled, ...props }: ScopedProps<CheckboxGroupItemProps>, ref) => {
|
|
131
|
+
const context = useCheckboxGroupContext(ITEM_NAME, __scopeCheckboxGroup);
|
|
132
|
+
const isDisabled = context.disabled || disabled;
|
|
133
|
+
const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeCheckboxGroup);
|
|
134
|
+
const checkboxScope = useCheckboxScope(__scopeCheckboxGroup);
|
|
135
|
+
const checked = context.value?.includes(props.value);
|
|
136
|
+
|
|
137
|
+
return (
|
|
138
|
+
<RovingFocusGroup.Item asChild {...rovingFocusGroupScope} focusable={!isDisabled} active={checked}>
|
|
139
|
+
<CheckboxPrimitive.Root
|
|
140
|
+
ref={ref}
|
|
141
|
+
name={context.name}
|
|
142
|
+
disabled={isDisabled}
|
|
143
|
+
required={context.required}
|
|
144
|
+
checked={checked}
|
|
145
|
+
{...checkboxScope}
|
|
146
|
+
{...props}
|
|
147
|
+
onCheckedChange={(checkedState) => {
|
|
148
|
+
if (checkedState) {
|
|
149
|
+
context.onItemCheck(props.value);
|
|
150
|
+
} else {
|
|
151
|
+
context.onItemUncheck(props.value);
|
|
152
|
+
}
|
|
153
|
+
}}
|
|
154
|
+
/>
|
|
155
|
+
</RovingFocusGroup.Item>
|
|
156
|
+
);
|
|
157
|
+
},
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
CheckboxGroupItem.displayName = ITEM_NAME;
|
|
161
|
+
|
|
162
|
+
/* -------------------------------------------------------------------------------------------------
|
|
163
|
+
* Component: CheckboxGroupIndicator
|
|
164
|
+
* -----------------------------------------------------------------------------------------------*/
|
|
165
|
+
|
|
166
|
+
const INDICATOR_NAME = `${CHECKBOX_GROUP_NAME}Indicator`;
|
|
167
|
+
|
|
168
|
+
type CheckboxGroupIndicatorElement = React.ElementRef<typeof CheckboxPrimitive.Indicator>;
|
|
169
|
+
type CheckboxGroupIndicatorProps = React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Indicator>;
|
|
170
|
+
|
|
171
|
+
const CheckboxGroupIndicator = React.forwardRef<CheckboxGroupIndicatorElement, CheckboxGroupIndicatorProps>(
|
|
172
|
+
({ __scopeCheckboxGroup, ...props }: ScopedProps<CheckboxGroupIndicatorProps>, ref) => {
|
|
173
|
+
const checkboxScope = useCheckboxScope(__scopeCheckboxGroup);
|
|
174
|
+
return <CheckboxPrimitive.Indicator ref={ref} {...checkboxScope} {...props} />;
|
|
175
|
+
},
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
CheckboxGroupIndicator.displayName = INDICATOR_NAME;
|
|
179
|
+
|
|
180
|
+
/* -----------------------------------------------------------------------------
|
|
181
|
+
* Exports
|
|
182
|
+
* -------------------------------------------------------------------------- */
|
|
183
|
+
|
|
184
|
+
const Root = CheckboxGroup;
|
|
185
|
+
const Item = CheckboxGroupItem;
|
|
186
|
+
const Indicator = CheckboxGroupIndicator;
|
|
187
|
+
|
|
188
|
+
export {
|
|
189
|
+
createCheckboxGroupScope,
|
|
190
|
+
CheckboxGroup,
|
|
191
|
+
CheckboxGroupItem,
|
|
192
|
+
CheckboxGroupIndicator,
|
|
193
|
+
Root,
|
|
194
|
+
Item,
|
|
195
|
+
Indicator,
|
|
196
|
+
type CheckboxGroupProps,
|
|
197
|
+
type CheckboxGroupItemProps,
|
|
198
|
+
type CheckboxGroupIndicatorProps,
|
|
199
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { CheckIcon } from "@radix-ui/react-icons";
|
|
5
|
+
import * as CheckboxGroupPrimitive from "./checkbox-group.primitive";
|
|
6
|
+
import { cn } from "./utils";
|
|
7
|
+
|
|
8
|
+
/* -----------------------------------------------------------------------------
|
|
9
|
+
* Component: CheckboxGroup
|
|
10
|
+
* -------------------------------------------------------------------------- */
|
|
11
|
+
|
|
12
|
+
type CheckboxGroupElement = React.ElementRef<typeof CheckboxGroupPrimitive.Root>;
|
|
13
|
+
type CheckboxGroupProps = React.ComponentPropsWithoutRef<typeof CheckboxGroupPrimitive.Root>;
|
|
14
|
+
|
|
15
|
+
const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>(({ className, ...props }, ref) => {
|
|
16
|
+
return <CheckboxGroupPrimitive.Root ref={ref} className={cn("grid gap-2", className)} {...props} />;
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
CheckboxGroup.displayName = "CheckboxGroup";
|
|
20
|
+
|
|
21
|
+
/* -----------------------------------------------------------------------------
|
|
22
|
+
* Component: CheckboxGroupItem
|
|
23
|
+
* -------------------------------------------------------------------------- */
|
|
24
|
+
|
|
25
|
+
type CheckboxGroupItemElement = React.ElementRef<typeof CheckboxGroupPrimitive.Item>;
|
|
26
|
+
type CheckboxGroupItemProps = React.ComponentPropsWithoutRef<typeof CheckboxGroupPrimitive.Item>;
|
|
27
|
+
|
|
28
|
+
const CheckboxGroupItem = React.forwardRef<CheckboxGroupItemElement, CheckboxGroupItemProps>(
|
|
29
|
+
({ className, ...props }, ref) => {
|
|
30
|
+
return (
|
|
31
|
+
<CheckboxGroupPrimitive.Item
|
|
32
|
+
ref={ref}
|
|
33
|
+
className={cn(
|
|
34
|
+
"border-compound/70 peer size-4 shrink-0 rounded-sm border shadow",
|
|
35
|
+
"hover:border-compound",
|
|
36
|
+
"aria-checked:border-primary aria-checked:bg-primary aria-checked:text-primary-foreground",
|
|
37
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
38
|
+
"focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
39
|
+
className,
|
|
40
|
+
)}
|
|
41
|
+
{...props}
|
|
42
|
+
>
|
|
43
|
+
<CheckboxGroupPrimitive.CheckboxGroupIndicator className="flex size-full items-center justify-center text-current">
|
|
44
|
+
<CheckIcon className="size-3.5" />
|
|
45
|
+
</CheckboxGroupPrimitive.CheckboxGroupIndicator>
|
|
46
|
+
</CheckboxGroupPrimitive.Item>
|
|
47
|
+
);
|
|
48
|
+
},
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
CheckboxGroupItem.displayName = "CheckboxGroupItem";
|
|
52
|
+
|
|
53
|
+
/* -----------------------------------------------------------------------------
|
|
54
|
+
* Exports
|
|
55
|
+
* -------------------------------------------------------------------------- */
|
|
56
|
+
|
|
57
|
+
export { CheckboxGroup, CheckboxGroupItem, type CheckboxGroupProps, type CheckboxGroupItemProps };
|
package/src/checkbox.tsx
CHANGED
|
@@ -9,15 +9,18 @@ import { cn } from "./utils";
|
|
|
9
9
|
* Component: Checkbox
|
|
10
10
|
* -------------------------------------------------------------------------- */
|
|
11
11
|
|
|
12
|
-
type
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
>(({ className, ...props }, ref) => (
|
|
12
|
+
type CheckboxElement = React.ElementRef<typeof CheckboxPrimitive.Root>;
|
|
13
|
+
type CheckboxProps = React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>;
|
|
14
|
+
|
|
15
|
+
const Checkbox = React.forwardRef<CheckboxElement, CheckboxProps>(({ className, ...props }, ref) => (
|
|
17
16
|
<CheckboxPrimitive.Root
|
|
18
17
|
ref={ref}
|
|
19
18
|
className={cn(
|
|
20
|
-
"border-compound
|
|
19
|
+
"border-compound/70 peer size-4 shrink-0 rounded-sm border shadow",
|
|
20
|
+
"hover:border-compound",
|
|
21
|
+
"aria-checked:border-primary aria-checked:bg-primary aria-checked:text-primary-foreground",
|
|
22
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
23
|
+
"focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
21
24
|
className,
|
|
22
25
|
)}
|
|
23
26
|
{...props}
|
|
@@ -27,6 +30,7 @@ const Checkbox = React.forwardRef<
|
|
|
27
30
|
</CheckboxPrimitive.Indicator>
|
|
28
31
|
</CheckboxPrimitive.Root>
|
|
29
32
|
));
|
|
33
|
+
|
|
30
34
|
Checkbox.displayName = CheckboxPrimitive.Root.displayName;
|
|
31
35
|
|
|
32
36
|
/* -----------------------------------------------------------------------------
|
package/src/code.tsx
CHANGED
|
@@ -5,16 +5,18 @@ import { Slot } from "@radix-ui/react-slot";
|
|
|
5
5
|
* Component: Code
|
|
6
6
|
* -------------------------------------------------------------------------- */
|
|
7
7
|
|
|
8
|
+
type CodeElement = HTMLElement;
|
|
9
|
+
|
|
8
10
|
interface CodeProps extends React.HTMLAttributes<HTMLElement> {
|
|
9
11
|
asChild?: boolean;
|
|
10
12
|
}
|
|
11
|
-
const Code = React.forwardRef<HTMLElement, CodeProps>(
|
|
12
|
-
({ asChild, ...props }, ref) => {
|
|
13
|
-
const Comp = asChild ? Slot : "code";
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
const Code = React.forwardRef<CodeElement, CodeProps>(({ asChild, ...props }, ref) => {
|
|
15
|
+
const Comp = asChild ? Slot : "code";
|
|
16
|
+
|
|
17
|
+
return <Comp ref={ref} {...props} />;
|
|
18
|
+
});
|
|
19
|
+
|
|
18
20
|
Code.displayName = "Code";
|
|
19
21
|
|
|
20
22
|
/* -----------------------------------------------------------------------------
|