@codefast/ui 0.0.40 → 0.0.42
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/{chunk-EVN2IB57.js → chunk-6EAQQBWG.js} +2 -2
- package/dist/chunk-6EAQQBWG.js.map +1 -0
- package/dist/{chunk-YR36SVVG.mjs → chunk-7HJV22OF.mjs} +1 -1
- package/dist/chunk-7HJV22OF.mjs.map +1 -0
- package/dist/{chunk-5WJB3UAO.js → chunk-CERSQE5J.js} +1 -1
- package/dist/chunk-CERSQE5J.js.map +1 -0
- package/dist/{chunk-UPZHCTQV.js → chunk-ELWITZPX.js} +2 -2
- package/dist/chunk-ELWITZPX.js.map +1 -0
- package/dist/{chunk-WLMYX3C7.mjs → chunk-GDMHMSJ2.mjs} +2 -2
- package/dist/chunk-GDMHMSJ2.mjs.map +1 -0
- package/dist/{chunk-UJJZZCAC.js → chunk-HQ4AUOQM.js} +1 -1
- package/dist/{chunk-UJJZZCAC.js.map → chunk-HQ4AUOQM.js.map} +1 -1
- package/dist/{chunk-HLXU3SQI.mjs → chunk-HWEFQSTC.mjs} +1 -1
- package/dist/chunk-HWEFQSTC.mjs.map +1 -0
- package/dist/{chunk-JTAXNFUM.mjs → chunk-HX5YKP4E.mjs} +2 -2
- package/dist/chunk-HX5YKP4E.mjs.map +1 -0
- package/dist/{chunk-PLX35IKX.mjs → chunk-I6QCJDIF.mjs} +1 -1
- package/dist/chunk-I6QCJDIF.mjs.map +1 -0
- package/dist/{chunk-466PAJCA.mjs → chunk-LEUB3C3L.mjs} +1 -1
- package/dist/chunk-LEUB3C3L.mjs.map +1 -0
- package/dist/{chunk-KJ77RPJ4.mjs → chunk-M5UKNISJ.mjs} +2 -2
- package/dist/chunk-M5UKNISJ.mjs.map +1 -0
- package/dist/{chunk-EYERINEJ.js → chunk-MZJL73RI.js} +1 -1
- package/dist/chunk-MZJL73RI.js.map +1 -0
- package/dist/{chunk-JCMRDCFT.js → chunk-NH6X3FON.js} +1 -1
- package/dist/{chunk-JCMRDCFT.js.map → chunk-NH6X3FON.js.map} +1 -1
- package/dist/{chunk-UDNWQQ3I.js → chunk-NSK74YTM.js} +2 -2
- package/dist/chunk-NSK74YTM.js.map +1 -0
- package/dist/{chunk-N6QGG4WS.mjs → chunk-P5AV3QU7.mjs} +2 -2
- package/dist/chunk-P5AV3QU7.mjs.map +1 -0
- package/dist/{chunk-GRQGCS7U.mjs → chunk-PWF46YXQ.mjs} +2 -2
- package/dist/chunk-PWF46YXQ.mjs.map +1 -0
- package/dist/{chunk-ZWGC5M4G.js → chunk-SCJ3W2VO.js} +2 -2
- package/dist/chunk-SCJ3W2VO.js.map +1 -0
- package/dist/{chunk-MSHUAEXI.js → chunk-SCPFGC2X.js} +2 -2
- package/dist/chunk-SCPFGC2X.js.map +1 -0
- package/dist/{chunk-JIHHUXA5.js → chunk-VXPAGNPJ.js} +2 -2
- package/dist/chunk-VXPAGNPJ.js.map +1 -0
- package/dist/{chunk-6B2PU2GG.mjs → chunk-WL65TBKJ.mjs} +2 -2
- package/dist/chunk-WL65TBKJ.mjs.map +1 -0
- package/dist/{chunk-4TJBMO2Y.mjs → chunk-WYYOCZNI.mjs} +2 -2
- package/dist/chunk-WYYOCZNI.mjs.map +1 -0
- package/dist/{chunk-FEE6PNWV.js → chunk-XM4Y2S5E.js} +2 -2
- package/dist/chunk-XM4Y2S5E.js.map +1 -0
- package/dist/{chunk-7PJR4WFR.mjs → chunk-ZEYIBYZP.mjs} +2 -2
- package/dist/chunk-ZEYIBYZP.mjs.map +1 -0
- package/dist/{chunk-AEWLL6A2.js → chunk-ZTEJNUH6.js} +2 -2
- package/dist/chunk-ZTEJNUH6.js.map +1 -0
- package/dist/lib/utils.js +1 -1
- package/dist/lib/utils.mjs +1 -1
- package/dist/plugin/animate.plugin.js +1 -1
- package/dist/plugin/animate.plugin.mjs +1 -1
- package/dist/plugin/base.plugin.js +1 -1
- package/dist/plugin/base.plugin.mjs +1 -1
- package/dist/plugin/perspective.plugin.js +1 -1
- package/dist/plugin/perspective.plugin.mjs +1 -1
- package/dist/react/accordion.js +1 -1
- package/dist/react/accordion.js.map +1 -1
- package/dist/react/accordion.mjs +1 -1
- package/dist/react/accordion.mjs.map +1 -1
- package/dist/react/alert-dialog.js +1 -1
- package/dist/react/alert-dialog.js.map +1 -1
- package/dist/react/alert-dialog.mjs +1 -1
- package/dist/react/alert-dialog.mjs.map +1 -1
- package/dist/react/alert.js +1 -1
- package/dist/react/alert.js.map +1 -1
- package/dist/react/alert.mjs +1 -1
- package/dist/react/alert.mjs.map +1 -1
- package/dist/react/aspect-ratio.js.map +1 -1
- package/dist/react/aspect-ratio.mjs.map +1 -1
- package/dist/react/avatar.js +1 -1
- package/dist/react/avatar.js.map +1 -1
- package/dist/react/avatar.mjs +1 -1
- package/dist/react/avatar.mjs.map +1 -1
- package/dist/react/badge.js +1 -1
- package/dist/react/badge.js.map +1 -1
- package/dist/react/badge.mjs +1 -1
- package/dist/react/badge.mjs.map +1 -1
- package/dist/react/blockquote.js.map +1 -1
- package/dist/react/blockquote.mjs.map +1 -1
- package/dist/react/box.d.mts +2 -2
- package/dist/react/box.d.ts +2 -2
- package/dist/react/box.js.map +1 -1
- package/dist/react/box.mjs.map +1 -1
- package/dist/react/breadcrumb.js +1 -1
- package/dist/react/breadcrumb.js.map +1 -1
- package/dist/react/breadcrumb.mjs +1 -1
- package/dist/react/breadcrumb.mjs.map +1 -1
- package/dist/react/button.js +1 -1
- package/dist/react/button.mjs +1 -1
- package/dist/react/calendar.js +1 -1
- package/dist/react/calendar.js.map +1 -1
- package/dist/react/calendar.mjs +1 -1
- package/dist/react/calendar.mjs.map +1 -1
- package/dist/react/card.js +1 -1
- package/dist/react/card.js.map +1 -1
- package/dist/react/card.mjs +1 -1
- package/dist/react/card.mjs.map +1 -1
- package/dist/react/carousel.d.mts +1 -1
- package/dist/react/carousel.d.ts +1 -1
- package/dist/react/carousel.js +1 -1
- package/dist/react/carousel.js.map +1 -1
- package/dist/react/carousel.mjs +1 -1
- package/dist/react/carousel.mjs.map +1 -1
- package/dist/react/checkbox-cards.js +1 -1
- package/dist/react/checkbox-cards.js.map +1 -1
- package/dist/react/checkbox-cards.mjs +1 -1
- package/dist/react/checkbox-cards.mjs.map +1 -1
- package/dist/react/checkbox-group.js +1 -1
- package/dist/react/checkbox-group.js.map +1 -1
- package/dist/react/checkbox-group.mjs +1 -1
- package/dist/react/checkbox-group.mjs.map +1 -1
- package/dist/react/checkbox-group.primitive.d.mts +8 -8
- package/dist/react/checkbox-group.primitive.d.ts +8 -8
- package/dist/react/checkbox-group.primitive.js +1 -1
- package/dist/react/checkbox-group.primitive.mjs +1 -1
- package/dist/react/checkbox.js +1 -1
- package/dist/react/checkbox.js.map +1 -1
- package/dist/react/checkbox.mjs +1 -1
- package/dist/react/checkbox.mjs.map +1 -1
- package/dist/react/code.js.map +1 -1
- package/dist/react/code.mjs.map +1 -1
- package/dist/react/collapsible.js +1 -1
- package/dist/react/collapsible.js.map +1 -1
- package/dist/react/collapsible.mjs +1 -1
- package/dist/react/collapsible.mjs.map +1 -1
- package/dist/react/command.js +1 -1
- package/dist/react/command.js.map +1 -1
- package/dist/react/command.mjs +1 -1
- package/dist/react/command.mjs.map +1 -1
- package/dist/react/container.js +1 -1
- package/dist/react/container.js.map +1 -1
- package/dist/react/container.mjs +1 -1
- package/dist/react/container.mjs.map +1 -1
- package/dist/react/context-menu.js +1 -1
- package/dist/react/context-menu.js.map +1 -1
- package/dist/react/context-menu.mjs +1 -1
- package/dist/react/context-menu.mjs.map +1 -1
- package/dist/react/data-table.d.mts +1 -1
- package/dist/react/data-table.d.ts +1 -1
- package/dist/react/data-table.js +1 -1
- package/dist/react/data-table.js.map +1 -1
- package/dist/react/data-table.mjs +1 -1
- package/dist/react/data-table.mjs.map +1 -1
- package/dist/react/dialog.js +1 -1
- package/dist/react/dialog.mjs +1 -1
- package/dist/react/drawer.js +1 -1
- package/dist/react/drawer.js.map +1 -1
- package/dist/react/drawer.mjs +1 -1
- package/dist/react/drawer.mjs.map +1 -1
- package/dist/react/dropdown-menu.js +1 -1
- package/dist/react/dropdown-menu.mjs +1 -1
- package/dist/react/em.js.map +1 -1
- package/dist/react/em.mjs.map +1 -1
- package/dist/react/form.js +1 -1
- package/dist/react/form.js.map +1 -1
- package/dist/react/form.mjs +1 -1
- package/dist/react/form.mjs.map +1 -1
- package/dist/react/heading.d.mts +1 -1
- package/dist/react/heading.d.ts +1 -1
- package/dist/react/heading.js.map +1 -1
- package/dist/react/heading.mjs.map +1 -1
- package/dist/react/hover-card.js +1 -1
- package/dist/react/hover-card.js.map +1 -1
- package/dist/react/hover-card.mjs +1 -1
- package/dist/react/hover-card.mjs.map +1 -1
- package/dist/react/input-otp.js +1 -1
- package/dist/react/input-otp.js.map +1 -1
- package/dist/react/input-otp.mjs +1 -1
- package/dist/react/input-otp.mjs.map +1 -1
- package/dist/react/input.js +1 -1
- package/dist/react/input.js.map +1 -1
- package/dist/react/input.mjs +1 -1
- package/dist/react/input.mjs.map +1 -1
- package/dist/react/kbd.js +1 -1
- package/dist/react/kbd.js.map +1 -1
- package/dist/react/kbd.mjs +1 -1
- package/dist/react/kbd.mjs.map +1 -1
- package/dist/react/label.js +1 -1
- package/dist/react/label.mjs +1 -1
- package/dist/react/menubar.js +1 -1
- package/dist/react/menubar.js.map +1 -1
- package/dist/react/menubar.mjs +1 -1
- package/dist/react/menubar.mjs.map +1 -1
- package/dist/react/navigation-menu.js +1 -1
- package/dist/react/navigation-menu.js.map +1 -1
- package/dist/react/navigation-menu.mjs +1 -1
- package/dist/react/navigation-menu.mjs.map +1 -1
- package/dist/react/pagination.d.mts +1 -1
- package/dist/react/pagination.d.ts +1 -1
- package/dist/react/pagination.js +1 -1
- package/dist/react/pagination.js.map +1 -1
- package/dist/react/pagination.mjs +1 -1
- package/dist/react/pagination.mjs.map +1 -1
- package/dist/react/popover.js +1 -1
- package/dist/react/popover.js.map +1 -1
- package/dist/react/popover.mjs +1 -1
- package/dist/react/popover.mjs.map +1 -1
- package/dist/react/pre.js.map +1 -1
- package/dist/react/pre.mjs.map +1 -1
- package/dist/react/progress.js +1 -1
- package/dist/react/progress.js.map +1 -1
- package/dist/react/progress.mjs +1 -1
- package/dist/react/progress.mjs.map +1 -1
- package/dist/react/quote.js.map +1 -1
- package/dist/react/quote.mjs.map +1 -1
- package/dist/react/radio-cards.js +1 -1
- package/dist/react/radio-cards.js.map +1 -1
- package/dist/react/radio-cards.mjs +1 -1
- package/dist/react/radio-cards.mjs.map +1 -1
- package/dist/react/radio-group.js +1 -1
- package/dist/react/radio-group.js.map +1 -1
- package/dist/react/radio-group.mjs +1 -1
- package/dist/react/radio-group.mjs.map +1 -1
- package/dist/react/radio.js +1 -1
- package/dist/react/radio.js.map +1 -1
- package/dist/react/radio.mjs +1 -1
- package/dist/react/radio.mjs.map +1 -1
- package/dist/react/resizable.js +1 -1
- package/dist/react/resizable.js.map +1 -1
- package/dist/react/resizable.mjs +1 -1
- package/dist/react/resizable.mjs.map +1 -1
- package/dist/react/scroll-area.js +1 -1
- package/dist/react/scroll-area.js.map +1 -1
- package/dist/react/scroll-area.mjs +1 -1
- package/dist/react/scroll-area.mjs.map +1 -1
- package/dist/react/section.js.map +1 -1
- package/dist/react/section.mjs.map +1 -1
- package/dist/react/select.js +1 -1
- package/dist/react/select.mjs +1 -1
- package/dist/react/separator.js +1 -1
- package/dist/react/separator.js.map +1 -1
- package/dist/react/separator.mjs +1 -1
- package/dist/react/separator.mjs.map +1 -1
- package/dist/react/sheet.js +1 -1
- package/dist/react/sheet.js.map +1 -1
- package/dist/react/sheet.mjs +1 -1
- package/dist/react/sheet.mjs.map +1 -1
- package/dist/react/skeleton.js +1 -1
- package/dist/react/skeleton.js.map +1 -1
- package/dist/react/skeleton.mjs +1 -1
- package/dist/react/skeleton.mjs.map +1 -1
- package/dist/react/slider.js +1 -1
- package/dist/react/slider.js.map +1 -1
- package/dist/react/slider.mjs +1 -1
- package/dist/react/slider.mjs.map +1 -1
- package/dist/react/sonner.js.map +1 -1
- package/dist/react/sonner.mjs.map +1 -1
- package/dist/react/spinner.js +1 -1
- package/dist/react/spinner.mjs +1 -1
- package/dist/react/strong.js.map +1 -1
- package/dist/react/strong.mjs.map +1 -1
- package/dist/react/switch.js +1 -1
- package/dist/react/switch.js.map +1 -1
- package/dist/react/switch.mjs +1 -1
- package/dist/react/switch.mjs.map +1 -1
- package/dist/react/table.js +1 -1
- package/dist/react/table.js.map +1 -1
- package/dist/react/table.mjs +1 -1
- package/dist/react/table.mjs.map +1 -1
- package/dist/react/tabs.js +1 -1
- package/dist/react/tabs.js.map +1 -1
- package/dist/react/tabs.mjs +1 -1
- package/dist/react/tabs.mjs.map +1 -1
- package/dist/react/text.d.mts +2 -2
- package/dist/react/text.d.ts +2 -2
- package/dist/react/text.js.map +1 -1
- package/dist/react/text.mjs.map +1 -1
- package/dist/react/textarea.js +1 -1
- package/dist/react/textarea.js.map +1 -1
- package/dist/react/textarea.mjs +1 -1
- package/dist/react/textarea.mjs.map +1 -1
- package/dist/react/toggle-group.js +1 -1
- package/dist/react/toggle-group.js.map +1 -1
- package/dist/react/toggle-group.mjs +1 -1
- package/dist/react/toggle-group.mjs.map +1 -1
- package/dist/react/toggle.js +1 -1
- package/dist/react/toggle.mjs +1 -1
- package/dist/react/tooltip.js +1 -1
- package/dist/react/tooltip.js.map +1 -1
- package/dist/react/tooltip.mjs +1 -1
- package/dist/react/tooltip.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/dist/tailwind.config.js +1 -1
- package/dist/tailwind.config.js.map +1 -1
- package/dist/tailwind.config.mjs +1 -1
- package/dist/tailwind.config.mjs.map +1 -1
- package/package.json +7 -7
- package/plugin/animate.plugin.ts +114 -111
- package/plugin/base.plugin.ts +10 -7
- package/plugin/perspective.plugin.ts +1 -1
- package/src/lib/utils.ts +2 -2
- package/src/react/accordion.tsx +65 -41
- package/src/react/alert-dialog.tsx +130 -62
- package/src/react/alert.tsx +50 -24
- package/src/react/aspect-ratio.tsx +6 -4
- package/src/react/avatar.tsx +47 -19
- package/src/react/badge.tsx +15 -10
- package/src/react/blockquote.tsx +11 -8
- package/src/react/box.tsx +11 -9
- package/src/react/breadcrumb.tsx +62 -29
- package/src/react/button.tsx +47 -31
- package/src/react/calendar.tsx +54 -37
- package/src/react/card.tsx +64 -30
- package/src/react/carousel.tsx +101 -43
- package/src/react/checkbox-cards.tsx +60 -33
- package/src/react/checkbox-group.primitive.tsx +93 -38
- package/src/react/checkbox-group.tsx +57 -34
- package/src/react/checkbox.tsx +24 -20
- package/src/react/code.tsx +9 -7
- package/src/react/collapsible.tsx +33 -23
- package/src/react/command.tsx +140 -75
- package/src/react/container.tsx +12 -8
- package/src/react/context-menu.tsx +228 -150
- package/src/react/data-table.tsx +51 -21
- package/src/react/dialog.tsx +95 -50
- package/src/react/drawer.tsx +96 -49
- package/src/react/dropdown-menu.tsx +199 -131
- package/src/react/em.tsx +9 -7
- package/src/react/form.tsx +96 -61
- package/src/react/heading.tsx +10 -8
- package/src/react/hover-card.tsx +42 -26
- package/src/react/input-otp.tsx +48 -37
- package/src/react/input.tsx +25 -15
- package/src/react/kbd.tsx +21 -19
- package/src/react/label.tsx +16 -14
- package/src/react/menubar.tsx +214 -135
- package/src/react/navigation-menu.tsx +153 -111
- package/src/react/pagination.tsx +59 -26
- package/src/react/popover.tsx +44 -29
- package/src/react/pre.tsx +9 -7
- package/src/react/progress.tsx +26 -19
- package/src/react/quote.tsx +9 -7
- package/src/react/radio-cards.tsx +32 -12
- package/src/react/radio-group.tsx +32 -12
- package/src/react/radio.tsx +24 -20
- package/src/react/resizable.tsx +13 -8
- package/src/react/scroll-area.tsx +56 -34
- package/src/react/section.tsx +9 -7
- package/src/react/select.tsx +167 -114
- package/src/react/separator.tsx +16 -7
- package/src/react/sheet.tsx +84 -34
- package/src/react/skeleton.tsx +8 -3
- package/src/react/slider.tsx +31 -24
- package/src/react/sonner.tsx +12 -10
- package/src/react/spinner.tsx +14 -9
- package/src/react/strong.tsx +9 -7
- package/src/react/switch.tsx +18 -16
- package/src/react/table.tsx +97 -52
- package/src/react/tabs.tsx +48 -38
- package/src/react/text.tsx +13 -10
- package/src/react/textarea.tsx +17 -15
- package/src/react/toggle-group.tsx +66 -23
- package/src/react/toggle.tsx +26 -18
- package/src/react/tooltip.tsx +43 -28
- package/tailwind.config.ts +62 -62
- package/dist/chunk-466PAJCA.mjs.map +0 -1
- package/dist/chunk-4TJBMO2Y.mjs.map +0 -1
- package/dist/chunk-5WJB3UAO.js.map +0 -1
- package/dist/chunk-6B2PU2GG.mjs.map +0 -1
- package/dist/chunk-7PJR4WFR.mjs.map +0 -1
- package/dist/chunk-AEWLL6A2.js.map +0 -1
- package/dist/chunk-EVN2IB57.js.map +0 -1
- package/dist/chunk-EYERINEJ.js.map +0 -1
- package/dist/chunk-FEE6PNWV.js.map +0 -1
- package/dist/chunk-GRQGCS7U.mjs.map +0 -1
- package/dist/chunk-HLXU3SQI.mjs.map +0 -1
- package/dist/chunk-JIHHUXA5.js.map +0 -1
- package/dist/chunk-JTAXNFUM.mjs.map +0 -1
- package/dist/chunk-KJ77RPJ4.mjs.map +0 -1
- package/dist/chunk-MSHUAEXI.js.map +0 -1
- package/dist/chunk-N6QGG4WS.mjs.map +0 -1
- package/dist/chunk-PLX35IKX.mjs.map +0 -1
- package/dist/chunk-UDNWQQ3I.js.map +0 -1
- package/dist/chunk-UPZHCTQV.js.map +0 -1
- package/dist/chunk-WLMYX3C7.mjs.map +0 -1
- package/dist/chunk-YR36SVVG.mjs.map +0 -1
- package/dist/chunk-ZWGC5M4G.js.map +0 -1
- package/dist/plugin/animate.plugin.d.mts +0 -9
- package/dist/plugin/animate.plugin.d.ts +0 -9
- package/dist/plugin/base.plugin.d.mts +0 -8
- package/dist/plugin/base.plugin.d.ts +0 -8
- package/dist/plugin/perspective.plugin.d.mts +0 -8
- package/dist/plugin/perspective.plugin.d.ts +0 -8
- package/dist/tailwind.config.d.mts +0 -5
- package/dist/tailwind.config.d.ts +0 -5
package/src/react/carousel.tsx
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
|
|
3
|
-
import * as React from
|
|
4
|
-
import useEmblaCarousel, {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import useEmblaCarousel, {
|
|
5
|
+
type UseEmblaCarouselType,
|
|
6
|
+
} from 'embla-carousel-react';
|
|
7
|
+
import { ArrowLeftIcon, ArrowRightIcon } from '@radix-ui/react-icons';
|
|
8
|
+
import { createContextScope, type Scope } from '@radix-ui/react-context';
|
|
9
|
+
import { cn } from '../lib/utils';
|
|
10
|
+
import { Button, type ButtonProps } from './button';
|
|
9
11
|
|
|
10
12
|
/* -----------------------------------------------------------------------------
|
|
11
13
|
* Context: Carousel
|
|
12
14
|
* -------------------------------------------------------------------------- */
|
|
13
15
|
|
|
14
|
-
const CAROUSEL_NAME =
|
|
16
|
+
const CAROUSEL_NAME = 'Carousel';
|
|
15
17
|
|
|
16
18
|
type ScopedProps<P> = P & { __scopeCarousel?: Scope };
|
|
17
19
|
|
|
@@ -25,7 +27,7 @@ type CarouselPlugin = UseCarouselParameters[1];
|
|
|
25
27
|
interface BaseCarouselProps {
|
|
26
28
|
opts?: CarouselOptions;
|
|
27
29
|
plugins?: CarouselPlugin;
|
|
28
|
-
orientation?:
|
|
30
|
+
orientation?: 'horizontal' | 'vertical';
|
|
29
31
|
setApi?: (api: CarouselApi) => void;
|
|
30
32
|
}
|
|
31
33
|
|
|
@@ -38,7 +40,8 @@ type CarouselContextValue = {
|
|
|
38
40
|
canScrollNext: boolean;
|
|
39
41
|
} & BaseCarouselProps;
|
|
40
42
|
|
|
41
|
-
const [CarouselProvider, useCarouselContext] =
|
|
43
|
+
const [CarouselProvider, useCarouselContext] =
|
|
44
|
+
createCarouselContext<CarouselContextValue>(CAROUSEL_NAME);
|
|
42
45
|
|
|
43
46
|
/* -----------------------------------------------------------------------------
|
|
44
47
|
* Component: Carousel
|
|
@@ -49,13 +52,22 @@ type CarouselProps = React.HTMLAttributes<HTMLDivElement> & BaseCarouselProps;
|
|
|
49
52
|
|
|
50
53
|
const Carousel = React.forwardRef<CarouselElement, CarouselProps>(
|
|
51
54
|
(
|
|
52
|
-
{
|
|
55
|
+
{
|
|
56
|
+
__scopeCarousel,
|
|
57
|
+
children,
|
|
58
|
+
orientation,
|
|
59
|
+
opts,
|
|
60
|
+
setApi,
|
|
61
|
+
plugins,
|
|
62
|
+
className,
|
|
63
|
+
...props
|
|
64
|
+
}: ScopedProps<CarouselProps>,
|
|
53
65
|
ref,
|
|
54
66
|
) => {
|
|
55
67
|
const [carouselRef, api] = useEmblaCarousel(
|
|
56
68
|
{
|
|
57
69
|
...opts,
|
|
58
|
-
axis: orientation ===
|
|
70
|
+
axis: orientation === 'vertical' ? 'y' : 'x',
|
|
59
71
|
},
|
|
60
72
|
plugins,
|
|
61
73
|
);
|
|
@@ -82,10 +94,10 @@ const Carousel = React.forwardRef<CarouselElement, CarouselProps>(
|
|
|
82
94
|
|
|
83
95
|
const handleKeyDown = React.useCallback(
|
|
84
96
|
(event: React.KeyboardEvent<HTMLDivElement>) => {
|
|
85
|
-
if (event.key ===
|
|
97
|
+
if (event.key === 'ArrowLeft') {
|
|
86
98
|
event.preventDefault();
|
|
87
99
|
scrollPrev();
|
|
88
|
-
} else if (event.key ===
|
|
100
|
+
} else if (event.key === 'ArrowRight') {
|
|
89
101
|
event.preventDefault();
|
|
90
102
|
scrollNext();
|
|
91
103
|
}
|
|
@@ -107,11 +119,11 @@ const Carousel = React.forwardRef<CarouselElement, CarouselProps>(
|
|
|
107
119
|
}
|
|
108
120
|
|
|
109
121
|
onSelect(api);
|
|
110
|
-
api.on(
|
|
111
|
-
api.on(
|
|
122
|
+
api.on('reInit', onSelect);
|
|
123
|
+
api.on('select', onSelect);
|
|
112
124
|
|
|
113
125
|
return () => {
|
|
114
|
-
api.off(
|
|
126
|
+
api.off('select', onSelect);
|
|
115
127
|
};
|
|
116
128
|
}, [api, onSelect]);
|
|
117
129
|
|
|
@@ -121,7 +133,9 @@ const Carousel = React.forwardRef<CarouselElement, CarouselProps>(
|
|
|
121
133
|
carouselRef={carouselRef}
|
|
122
134
|
api={api}
|
|
123
135
|
opts={opts}
|
|
124
|
-
orientation={
|
|
136
|
+
orientation={
|
|
137
|
+
orientation ?? (opts?.axis === 'y' ? 'vertical' : 'horizontal')
|
|
138
|
+
}
|
|
125
139
|
scrollPrev={scrollPrev}
|
|
126
140
|
scrollNext={scrollNext}
|
|
127
141
|
canScrollPrev={canScrollPrev}
|
|
@@ -130,7 +144,7 @@ const Carousel = React.forwardRef<CarouselElement, CarouselProps>(
|
|
|
130
144
|
<div
|
|
131
145
|
ref={ref}
|
|
132
146
|
onKeyDownCapture={handleKeyDown}
|
|
133
|
-
className={cn(
|
|
147
|
+
className={cn('relative', className)}
|
|
134
148
|
role="region"
|
|
135
149
|
aria-roledescription="carousel"
|
|
136
150
|
{...props}
|
|
@@ -148,20 +162,33 @@ Carousel.displayName = CAROUSEL_NAME;
|
|
|
148
162
|
* Component: CarouselContent
|
|
149
163
|
* -------------------------------------------------------------------------- */
|
|
150
164
|
|
|
151
|
-
const CAROUSEL_CONTENT_NAME =
|
|
165
|
+
const CAROUSEL_CONTENT_NAME = 'CarouselContent';
|
|
152
166
|
|
|
153
167
|
type CarouselContentElement = HTMLDivElement;
|
|
154
168
|
type CarouselContentProps = React.HTMLAttributes<HTMLDivElement>;
|
|
155
169
|
|
|
156
|
-
const CarouselContent = React.forwardRef<
|
|
157
|
-
|
|
158
|
-
|
|
170
|
+
const CarouselContent = React.forwardRef<
|
|
171
|
+
CarouselContentElement,
|
|
172
|
+
CarouselContentProps
|
|
173
|
+
>(
|
|
174
|
+
(
|
|
175
|
+
{ __scopeCarousel, className, ...props }: ScopedProps<CarouselContentProps>,
|
|
176
|
+
ref,
|
|
177
|
+
) => {
|
|
178
|
+
const { carouselRef, orientation } = useCarouselContext(
|
|
179
|
+
CAROUSEL_CONTENT_NAME,
|
|
180
|
+
__scopeCarousel,
|
|
181
|
+
);
|
|
159
182
|
|
|
160
183
|
return (
|
|
161
184
|
<div ref={carouselRef} className="overflow-hidden">
|
|
162
185
|
<div
|
|
163
186
|
ref={ref}
|
|
164
|
-
className={cn(
|
|
187
|
+
className={cn(
|
|
188
|
+
'flex',
|
|
189
|
+
orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',
|
|
190
|
+
className,
|
|
191
|
+
)}
|
|
165
192
|
{...props}
|
|
166
193
|
/>
|
|
167
194
|
</div>
|
|
@@ -175,21 +202,31 @@ CarouselContent.displayName = CAROUSEL_CONTENT_NAME;
|
|
|
175
202
|
* Component: CarouselItem
|
|
176
203
|
* -------------------------------------------------------------------------- */
|
|
177
204
|
|
|
178
|
-
const CAROUSEL_ITEM_NAME =
|
|
205
|
+
const CAROUSEL_ITEM_NAME = 'CarouselItem';
|
|
179
206
|
|
|
180
207
|
type CarouselItemElement = HTMLDivElement;
|
|
181
208
|
type CarouselItemProps = React.HTMLAttributes<HTMLDivElement>;
|
|
182
209
|
|
|
183
210
|
const CarouselItem = React.forwardRef<CarouselItemElement, CarouselItemProps>(
|
|
184
|
-
(
|
|
185
|
-
|
|
211
|
+
(
|
|
212
|
+
{ __scopeCarousel, className, ...props }: ScopedProps<CarouselItemProps>,
|
|
213
|
+
ref,
|
|
214
|
+
) => {
|
|
215
|
+
const { orientation } = useCarouselContext(
|
|
216
|
+
CAROUSEL_ITEM_NAME,
|
|
217
|
+
__scopeCarousel,
|
|
218
|
+
);
|
|
186
219
|
|
|
187
220
|
return (
|
|
188
221
|
<div
|
|
189
222
|
ref={ref}
|
|
190
223
|
role="group"
|
|
191
224
|
aria-roledescription="slide"
|
|
192
|
-
className={cn(
|
|
225
|
+
className={cn(
|
|
226
|
+
'min-w-0 shrink-0 grow-0 basis-full',
|
|
227
|
+
orientation === 'horizontal' ? 'pl-4' : 'pt-4',
|
|
228
|
+
className,
|
|
229
|
+
)}
|
|
193
230
|
{...props}
|
|
194
231
|
/>
|
|
195
232
|
);
|
|
@@ -202,17 +239,29 @@ CarouselItem.displayName = CAROUSEL_ITEM_NAME;
|
|
|
202
239
|
* Component: CarouselPrevious
|
|
203
240
|
* -------------------------------------------------------------------------- */
|
|
204
241
|
|
|
205
|
-
const CAROUSEL_PREVIOUS_NAME =
|
|
242
|
+
const CAROUSEL_PREVIOUS_NAME = 'CarouselPrevious';
|
|
206
243
|
|
|
207
244
|
type CarouselPreviousElement = HTMLButtonElement;
|
|
208
245
|
type CarouselPreviousProps = ButtonProps;
|
|
209
246
|
|
|
210
|
-
const CarouselPrevious = React.forwardRef<
|
|
247
|
+
const CarouselPrevious = React.forwardRef<
|
|
248
|
+
CarouselPreviousElement,
|
|
249
|
+
CarouselPreviousProps
|
|
250
|
+
>(
|
|
211
251
|
(
|
|
212
|
-
{
|
|
252
|
+
{
|
|
253
|
+
__scopeCarousel,
|
|
254
|
+
className,
|
|
255
|
+
variant = 'outline',
|
|
256
|
+
size = 'icon',
|
|
257
|
+
...props
|
|
258
|
+
}: ScopedProps<CarouselPreviousProps>,
|
|
213
259
|
ref,
|
|
214
260
|
) => {
|
|
215
|
-
const { orientation, scrollPrev, canScrollPrev } = useCarouselContext(
|
|
261
|
+
const { orientation, scrollPrev, canScrollPrev } = useCarouselContext(
|
|
262
|
+
CAROUSEL_PREVIOUS_NAME,
|
|
263
|
+
__scopeCarousel,
|
|
264
|
+
);
|
|
216
265
|
|
|
217
266
|
return (
|
|
218
267
|
<Button
|
|
@@ -220,10 +269,10 @@ const CarouselPrevious = React.forwardRef<CarouselPreviousElement, CarouselPrevi
|
|
|
220
269
|
variant={variant}
|
|
221
270
|
size={size}
|
|
222
271
|
className={cn(
|
|
223
|
-
|
|
224
|
-
orientation ===
|
|
225
|
-
?
|
|
226
|
-
:
|
|
272
|
+
'absolute size-8 rounded-full',
|
|
273
|
+
orientation === 'horizontal'
|
|
274
|
+
? '-left-12 top-1/2 -translate-y-1/2'
|
|
275
|
+
: '-top-12 left-1/2 -translate-x-1/2 rotate-90',
|
|
227
276
|
className,
|
|
228
277
|
)}
|
|
229
278
|
disabled={!canScrollPrev}
|
|
@@ -243,17 +292,26 @@ CarouselPrevious.displayName = CAROUSEL_PREVIOUS_NAME;
|
|
|
243
292
|
* Component: CarouselNext
|
|
244
293
|
* -------------------------------------------------------------------------- */
|
|
245
294
|
|
|
246
|
-
const CAROUSEL_NEXT_NAME =
|
|
295
|
+
const CAROUSEL_NEXT_NAME = 'CarouselNext';
|
|
247
296
|
|
|
248
297
|
type CarouselNextElement = HTMLButtonElement;
|
|
249
298
|
type CarouselNextProps = ButtonProps;
|
|
250
299
|
|
|
251
300
|
const CarouselNext = React.forwardRef<CarouselNextElement, CarouselNextProps>(
|
|
252
301
|
(
|
|
253
|
-
{
|
|
302
|
+
{
|
|
303
|
+
__scopeCarousel,
|
|
304
|
+
className,
|
|
305
|
+
variant = 'outline',
|
|
306
|
+
size = 'icon',
|
|
307
|
+
...props
|
|
308
|
+
}: ScopedProps<CarouselNextProps>,
|
|
254
309
|
ref,
|
|
255
310
|
) => {
|
|
256
|
-
const { orientation, scrollNext, canScrollNext } = useCarouselContext(
|
|
311
|
+
const { orientation, scrollNext, canScrollNext } = useCarouselContext(
|
|
312
|
+
CAROUSEL_NEXT_NAME,
|
|
313
|
+
__scopeCarousel,
|
|
314
|
+
);
|
|
257
315
|
|
|
258
316
|
return (
|
|
259
317
|
<Button
|
|
@@ -261,10 +319,10 @@ const CarouselNext = React.forwardRef<CarouselNextElement, CarouselNextProps>(
|
|
|
261
319
|
variant={variant}
|
|
262
320
|
size={size}
|
|
263
321
|
className={cn(
|
|
264
|
-
|
|
265
|
-
orientation ===
|
|
266
|
-
?
|
|
267
|
-
:
|
|
322
|
+
'absolute size-8 rounded-full',
|
|
323
|
+
orientation === 'horizontal'
|
|
324
|
+
? '-right-12 top-1/2 -translate-y-1/2'
|
|
325
|
+
: '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',
|
|
268
326
|
className,
|
|
269
327
|
)}
|
|
270
328
|
disabled={!canScrollNext}
|
|
@@ -1,19 +1,32 @@
|
|
|
1
|
-
|
|
1
|
+
'use client';
|
|
2
2
|
|
|
3
|
-
import * as React from
|
|
4
|
-
import { CheckIcon } from
|
|
5
|
-
import { cn } from
|
|
6
|
-
import * as CheckboxGroupPrimitive from
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { CheckIcon } from '@radix-ui/react-icons';
|
|
5
|
+
import { cn } from '../lib/utils';
|
|
6
|
+
import * as CheckboxGroupPrimitive from './checkbox-group.primitive';
|
|
7
7
|
|
|
8
8
|
/* -----------------------------------------------------------------------------
|
|
9
9
|
* Component: CheckboxCards
|
|
10
10
|
* -------------------------------------------------------------------------- */
|
|
11
11
|
|
|
12
|
-
type CheckboxCardsElement = React.ElementRef<
|
|
13
|
-
|
|
12
|
+
type CheckboxCardsElement = React.ElementRef<
|
|
13
|
+
typeof CheckboxGroupPrimitive.Root
|
|
14
|
+
>;
|
|
15
|
+
type CheckboxCardsProps = React.ComponentPropsWithoutRef<
|
|
16
|
+
typeof CheckboxGroupPrimitive.Root
|
|
17
|
+
>;
|
|
14
18
|
|
|
15
|
-
const CheckboxCards = React.forwardRef<
|
|
16
|
-
|
|
19
|
+
const CheckboxCards = React.forwardRef<
|
|
20
|
+
CheckboxCardsElement,
|
|
21
|
+
CheckboxCardsProps
|
|
22
|
+
>(({ className, ...props }, ref) => {
|
|
23
|
+
return (
|
|
24
|
+
<CheckboxGroupPrimitive.Root
|
|
25
|
+
className={cn('grid gap-2', className)}
|
|
26
|
+
{...props}
|
|
27
|
+
ref={ref}
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
17
30
|
});
|
|
18
31
|
|
|
19
32
|
CheckboxCards.displayName = CheckboxGroupPrimitive.Root.displayName;
|
|
@@ -22,33 +35,42 @@ CheckboxCards.displayName = CheckboxGroupPrimitive.Root.displayName;
|
|
|
22
35
|
* Component: CheckboxCardsItem
|
|
23
36
|
* -------------------------------------------------------------------------- */
|
|
24
37
|
|
|
25
|
-
type CheckboxCardsItemElement = React.ElementRef<
|
|
38
|
+
type CheckboxCardsItemElement = React.ElementRef<
|
|
39
|
+
typeof CheckboxGroupPrimitive.Item
|
|
40
|
+
>;
|
|
26
41
|
|
|
27
|
-
interface CheckboxCardsItemProps
|
|
42
|
+
interface CheckboxCardsItemProps
|
|
43
|
+
extends React.ComponentPropsWithoutRef<typeof CheckboxGroupPrimitive.Item> {
|
|
28
44
|
checkboxClassName?: string;
|
|
29
45
|
}
|
|
30
46
|
|
|
31
|
-
const CheckboxCardsItem = React.forwardRef<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
const CheckboxCardsItem = React.forwardRef<
|
|
48
|
+
CheckboxCardsItemElement,
|
|
49
|
+
CheckboxCardsItemProps
|
|
50
|
+
>(({ children, className, checkboxClassName, ...props }, ref) => {
|
|
51
|
+
return (
|
|
52
|
+
<label
|
|
53
|
+
className={cn(
|
|
54
|
+
'flex items-center justify-center gap-4 rounded-md border p-4',
|
|
55
|
+
className,
|
|
56
|
+
)}
|
|
57
|
+
>
|
|
58
|
+
{children}
|
|
59
|
+
<CheckboxGroupPrimitive.Item
|
|
60
|
+
ref={ref}
|
|
61
|
+
className={cn(
|
|
62
|
+
'border-compound/70 aria-checked:border-primary aria-checked:bg-primary aria-checked:text-primary-foreground peer size-4 shrink-0 cursor-default rounded-sm border shadow focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
|
|
63
|
+
checkboxClassName,
|
|
64
|
+
)}
|
|
65
|
+
{...props}
|
|
66
|
+
>
|
|
67
|
+
<CheckboxGroupPrimitive.CheckboxGroupIndicator className="flex size-full items-center justify-center text-current">
|
|
68
|
+
<CheckIcon className="size-3.5" />
|
|
69
|
+
</CheckboxGroupPrimitive.CheckboxGroupIndicator>
|
|
70
|
+
</CheckboxGroupPrimitive.Item>
|
|
71
|
+
</label>
|
|
72
|
+
);
|
|
73
|
+
});
|
|
52
74
|
|
|
53
75
|
CheckboxCardsItem.displayName = CheckboxGroupPrimitive.Item.displayName;
|
|
54
76
|
|
|
@@ -56,4 +78,9 @@ CheckboxCardsItem.displayName = CheckboxGroupPrimitive.Item.displayName;
|
|
|
56
78
|
* Exports
|
|
57
79
|
* -------------------------------------------------------------------------- */
|
|
58
80
|
|
|
59
|
-
export {
|
|
81
|
+
export {
|
|
82
|
+
CheckboxCards,
|
|
83
|
+
CheckboxCardsItem,
|
|
84
|
+
type CheckboxCardsProps,
|
|
85
|
+
type CheckboxCardsItemProps,
|
|
86
|
+
};
|
|
@@ -1,25 +1,26 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import * as CheckboxPrimitive from
|
|
3
|
-
import { createCheckboxScope } from
|
|
4
|
-
import { createContextScope, type Scope } from
|
|
5
|
-
import * as RovingFocusGroup from
|
|
6
|
-
import { createRovingFocusGroupScope } from
|
|
7
|
-
import { useControllableState } from
|
|
8
|
-
import { useDirection } from
|
|
9
|
-
import { Primitive } from
|
|
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
10
|
|
|
11
11
|
/* -------------------------------------------------------------------------------------------------
|
|
12
12
|
* Component: CheckboxGroup
|
|
13
13
|
* -----------------------------------------------------------------------------------------------*/
|
|
14
14
|
|
|
15
|
-
const CHECKBOX_GROUP_NAME =
|
|
15
|
+
const CHECKBOX_GROUP_NAME = 'CheckboxGroup';
|
|
16
16
|
|
|
17
17
|
type ScopedProps<P> = P & { __scopeCheckboxGroup?: Scope };
|
|
18
18
|
|
|
19
|
-
const [createCheckboxGroupContext, createCheckboxGroupScope] =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
const [createCheckboxGroupContext, createCheckboxGroupScope] =
|
|
20
|
+
createContextScope(CHECKBOX_GROUP_NAME, [
|
|
21
|
+
createRovingFocusGroupScope,
|
|
22
|
+
createCheckboxScope,
|
|
23
|
+
]);
|
|
23
24
|
|
|
24
25
|
const useRovingFocusGroupScope = createRovingFocusGroupScope();
|
|
25
26
|
const useCheckboxScope = createCheckboxScope();
|
|
@@ -38,19 +39,27 @@ const [CheckboxGroupProvider, useCheckboxGroupContext] =
|
|
|
38
39
|
|
|
39
40
|
type CheckboxGroupElement = React.ElementRef<typeof Primitive.div>;
|
|
40
41
|
|
|
41
|
-
interface CheckboxGroupProps
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
interface CheckboxGroupProps
|
|
43
|
+
extends React.ComponentPropsWithoutRef<typeof Primitive.div> {
|
|
44
|
+
name?: CheckboxGroupContextValue['name'];
|
|
45
|
+
required?: React.ComponentPropsWithoutRef<
|
|
46
|
+
typeof CheckboxPrimitive.Root
|
|
47
|
+
>['required'];
|
|
48
|
+
disabled?: React.ComponentPropsWithoutRef<
|
|
49
|
+
typeof CheckboxPrimitive.Root
|
|
50
|
+
>['disabled'];
|
|
51
|
+
dir?: RovingFocusGroup.RovingFocusGroupProps['dir'];
|
|
52
|
+
orientation?: RovingFocusGroup.RovingFocusGroupProps['orientation'];
|
|
53
|
+
loop?: RovingFocusGroup.RovingFocusGroupProps['loop'];
|
|
48
54
|
defaultValue?: string[];
|
|
49
|
-
value?: CheckboxGroupContextValue[
|
|
55
|
+
value?: CheckboxGroupContextValue['value'];
|
|
50
56
|
onValueChange?: (value: string[]) => void;
|
|
51
57
|
}
|
|
52
58
|
|
|
53
|
-
const CheckboxGroup = React.forwardRef<
|
|
59
|
+
const CheckboxGroup = React.forwardRef<
|
|
60
|
+
CheckboxGroupElement,
|
|
61
|
+
CheckboxGroupProps
|
|
62
|
+
>(
|
|
54
63
|
(
|
|
55
64
|
{
|
|
56
65
|
__scopeCheckboxGroup,
|
|
@@ -67,7 +76,8 @@ const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>
|
|
|
67
76
|
}: ScopedProps<CheckboxGroupProps>,
|
|
68
77
|
ref,
|
|
69
78
|
) => {
|
|
70
|
-
const rovingFocusGroupScope =
|
|
79
|
+
const rovingFocusGroupScope =
|
|
80
|
+
useRovingFocusGroupScope(__scopeCheckboxGroup);
|
|
71
81
|
const direction = useDirection(dir);
|
|
72
82
|
const [value = [], setValue] = useControllableState({
|
|
73
83
|
prop: valueProp,
|
|
@@ -84,7 +94,9 @@ const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>
|
|
|
84
94
|
|
|
85
95
|
const handleItemUncheck = React.useCallback(
|
|
86
96
|
(itemValue: string) => {
|
|
87
|
-
setValue((prevValue = []) =>
|
|
97
|
+
setValue((prevValue = []) =>
|
|
98
|
+
prevValue.filter((val) => val !== itemValue),
|
|
99
|
+
);
|
|
88
100
|
},
|
|
89
101
|
[setValue],
|
|
90
102
|
);
|
|
@@ -99,9 +111,21 @@ const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>
|
|
|
99
111
|
onItemCheck={handleItemCheck}
|
|
100
112
|
onItemUncheck={handleItemUncheck}
|
|
101
113
|
>
|
|
102
|
-
<RovingFocusGroup.Root
|
|
114
|
+
<RovingFocusGroup.Root
|
|
115
|
+
asChild
|
|
116
|
+
{...rovingFocusGroupScope}
|
|
117
|
+
orientation={orientation}
|
|
118
|
+
dir={direction}
|
|
119
|
+
loop={loop}
|
|
120
|
+
>
|
|
103
121
|
{/* eslint-disable-next-line react/jsx-pascal-case -- radix-ui */}
|
|
104
|
-
<Primitive.div
|
|
122
|
+
<Primitive.div
|
|
123
|
+
ref={ref}
|
|
124
|
+
role="group"
|
|
125
|
+
data-disabled={disabled ? '' : undefined}
|
|
126
|
+
dir={direction}
|
|
127
|
+
{...props}
|
|
128
|
+
/>
|
|
105
129
|
</RovingFocusGroup.Root>
|
|
106
130
|
</CheckboxGroupProvider>
|
|
107
131
|
);
|
|
@@ -121,21 +145,37 @@ type CheckboxGroupItemElement = React.ElementRef<typeof CheckboxPrimitive.Root>;
|
|
|
121
145
|
interface CheckboxGroupItemProps
|
|
122
146
|
extends Omit<
|
|
123
147
|
React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,
|
|
124
|
-
|
|
148
|
+
'checked' | 'defaultChecked' | 'onCheckedChange' | 'name'
|
|
125
149
|
> {
|
|
126
150
|
value: string;
|
|
127
151
|
}
|
|
128
152
|
|
|
129
|
-
const CheckboxGroupItem = React.forwardRef<
|
|
130
|
-
|
|
153
|
+
const CheckboxGroupItem = React.forwardRef<
|
|
154
|
+
CheckboxGroupItemElement,
|
|
155
|
+
CheckboxGroupItemProps
|
|
156
|
+
>(
|
|
157
|
+
(
|
|
158
|
+
{
|
|
159
|
+
__scopeCheckboxGroup,
|
|
160
|
+
disabled,
|
|
161
|
+
...props
|
|
162
|
+
}: ScopedProps<CheckboxGroupItemProps>,
|
|
163
|
+
ref,
|
|
164
|
+
) => {
|
|
131
165
|
const context = useCheckboxGroupContext(ITEM_NAME, __scopeCheckboxGroup);
|
|
132
166
|
const isDisabled = context.disabled || disabled;
|
|
133
|
-
const rovingFocusGroupScope =
|
|
167
|
+
const rovingFocusGroupScope =
|
|
168
|
+
useRovingFocusGroupScope(__scopeCheckboxGroup);
|
|
134
169
|
const checkboxScope = useCheckboxScope(__scopeCheckboxGroup);
|
|
135
170
|
const checked = context.value?.includes(props.value);
|
|
136
171
|
|
|
137
172
|
return (
|
|
138
|
-
<RovingFocusGroup.Item
|
|
173
|
+
<RovingFocusGroup.Item
|
|
174
|
+
asChild
|
|
175
|
+
{...rovingFocusGroupScope}
|
|
176
|
+
focusable={!isDisabled}
|
|
177
|
+
active={checked}
|
|
178
|
+
>
|
|
139
179
|
<CheckboxPrimitive.Root
|
|
140
180
|
ref={ref}
|
|
141
181
|
name={context.name}
|
|
@@ -165,13 +205,28 @@ CheckboxGroupItem.displayName = ITEM_NAME;
|
|
|
165
205
|
|
|
166
206
|
const INDICATOR_NAME = `${CHECKBOX_GROUP_NAME}Indicator`;
|
|
167
207
|
|
|
168
|
-
type CheckboxGroupIndicatorElement = React.ElementRef<
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
208
|
+
type CheckboxGroupIndicatorElement = React.ElementRef<
|
|
209
|
+
typeof CheckboxPrimitive.Indicator
|
|
210
|
+
>;
|
|
211
|
+
type CheckboxGroupIndicatorProps = React.ComponentPropsWithoutRef<
|
|
212
|
+
typeof CheckboxPrimitive.Indicator
|
|
213
|
+
>;
|
|
214
|
+
|
|
215
|
+
const CheckboxGroupIndicator = React.forwardRef<
|
|
216
|
+
CheckboxGroupIndicatorElement,
|
|
217
|
+
CheckboxGroupIndicatorProps
|
|
218
|
+
>(
|
|
219
|
+
(
|
|
220
|
+
{
|
|
221
|
+
__scopeCheckboxGroup,
|
|
222
|
+
...props
|
|
223
|
+
}: ScopedProps<CheckboxGroupIndicatorProps>,
|
|
224
|
+
ref,
|
|
225
|
+
) => {
|
|
173
226
|
const checkboxScope = useCheckboxScope(__scopeCheckboxGroup);
|
|
174
|
-
return
|
|
227
|
+
return (
|
|
228
|
+
<CheckboxPrimitive.Indicator ref={ref} {...checkboxScope} {...props} />
|
|
229
|
+
);
|
|
175
230
|
},
|
|
176
231
|
);
|
|
177
232
|
|