@music-vine/cadence 2.6.1 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/accordion.d.ts +71 -0
- package/dist/components/accordion.d.ts.map +1 -0
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/badge.d.ts +62 -0
- package/dist/components/badge.d.ts.map +1 -0
- package/dist/components/breadcrumb.d.ts +42 -0
- package/dist/components/breadcrumb.d.ts.map +1 -0
- package/dist/components/button.d.ts +117 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js.map +1 -1
- package/dist/components/card.d.ts +56 -0
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js.map +1 -1
- package/dist/components/carousel-dots.d.ts +17 -0
- package/dist/components/carousel-dots.d.ts.map +1 -0
- package/dist/components/carousel-dots.js.map +1 -1
- package/dist/components/carousel.d.ts +99 -0
- package/dist/components/carousel.d.ts.map +1 -0
- package/dist/components/carousel.js.map +1 -1
- package/dist/components/checkbox.d.ts +34 -0
- package/dist/components/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/context-menu.d.ts +126 -0
- package/dist/components/context-menu.d.ts.map +1 -0
- package/dist/components/dialog.d.ts +85 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +21 -4
- package/dist/components/dialog.js.map +2 -2
- package/dist/components/drawer.d.ts +90 -0
- package/dist/components/drawer.d.ts.map +1 -0
- package/dist/components/drawer.js.map +1 -1
- package/dist/components/index.d.ts +36 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/input.d.ts +69 -0
- package/dist/components/input.d.ts.map +1 -0
- package/dist/components/input.js +59 -55
- package/dist/components/input.js.map +2 -2
- package/dist/components/label.d.ts +36 -0
- package/dist/components/label.d.ts.map +1 -0
- package/dist/components/popover.d.ts +61 -0
- package/dist/components/popover.d.ts.map +1 -0
- package/dist/components/price-tag.d.ts +31 -0
- package/dist/components/price-tag.d.ts.map +1 -0
- package/dist/components/price-tag.js.map +1 -1
- package/dist/components/radio-group.d.ts +15 -0
- package/dist/components/radio-group.d.ts.map +1 -0
- package/dist/components/scroll-area.d.ts +33 -0
- package/dist/components/scroll-area.d.ts.map +1 -0
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/scroll-drum.d.ts +96 -0
- package/dist/components/scroll-drum.d.ts.map +1 -0
- package/dist/components/scroll-drum.js +62 -33
- package/dist/components/scroll-drum.js.map +2 -2
- package/dist/components/select.d.ts +49 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js.map +1 -1
- package/dist/components/separator.d.ts +35 -0
- package/dist/components/separator.d.ts.map +1 -0
- package/dist/components/skeleton.d.ts +44 -0
- package/dist/components/skeleton.d.ts.map +1 -0
- package/dist/components/slider.d.ts +21 -0
- package/dist/components/slider.d.ts.map +1 -0
- package/dist/components/slider.js.map +1 -1
- package/dist/components/stacking-card.d.ts +89 -0
- package/dist/components/stacking-card.d.ts.map +1 -0
- package/dist/components/stacking-card.js +2 -2
- package/dist/components/stacking-card.js.map +2 -2
- package/dist/components/tabs.d.ts +46 -0
- package/dist/components/tabs.d.ts.map +1 -0
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/textarea.d.ts +34 -0
- package/dist/components/textarea.d.ts.map +1 -0
- package/dist/components/toast.d.ts +67 -0
- package/dist/components/toast.d.ts.map +1 -0
- package/dist/components/toast.js +1 -1
- package/dist/components/toast.js.map +2 -2
- package/dist/components/toggle-button.d.ts +54 -0
- package/dist/components/toggle-button.d.ts.map +1 -0
- package/dist/components/toggle-button.js.map +1 -1
- package/dist/components/typography/heading.d.ts +20 -0
- package/dist/components/typography/heading.d.ts.map +1 -0
- package/dist/components/typography/heading.js.map +1 -1
- package/dist/components/typography/index.d.ts +5 -0
- package/dist/components/typography/index.d.ts.map +1 -0
- package/dist/components/typography/list.d.ts +23 -0
- package/dist/components/typography/list.d.ts.map +1 -0
- package/dist/components/typography/prose.d.ts +8 -0
- package/dist/components/typography/prose.d.ts.map +1 -0
- package/dist/components/typography/text.d.ts +13 -0
- package/dist/components/typography/text.d.ts.map +1 -0
- package/dist/icons/custom/boards-indicator.d.ts +6 -0
- package/dist/icons/custom/boards-indicator.d.ts.map +1 -0
- package/dist/icons/custom/boards-indicator.js +7 -2
- package/dist/icons/custom/boards-indicator.js.map +2 -2
- package/dist/icons/custom/download-history.d.ts +5 -0
- package/dist/icons/custom/download-history.d.ts.map +1 -0
- package/dist/icons/custom/download-history.js +3 -4
- package/dist/icons/custom/download-history.js.map +2 -2
- package/dist/icons/custom/exclamation-mark-in-octagon.d.ts +5 -0
- package/dist/icons/custom/exclamation-mark-in-octagon.d.ts.map +1 -0
- package/dist/icons/custom/exclamation-mark-in-octagon.js +6 -3
- package/dist/icons/custom/exclamation-mark-in-octagon.js.map +2 -2
- package/dist/icons/custom/horizontal-orientation.d.ts +5 -0
- package/dist/icons/custom/horizontal-orientation.d.ts.map +1 -0
- package/dist/icons/custom/horizontal-orientation.js +4 -3
- package/dist/icons/custom/horizontal-orientation.js.map +2 -2
- package/dist/icons/custom/lightning-bolt.d.ts +5 -0
- package/dist/icons/custom/lightning-bolt.d.ts.map +1 -0
- package/dist/icons/custom/lightning-bolt.js +24 -27
- package/dist/icons/custom/lightning-bolt.js.map +2 -2
- package/dist/icons/custom/music-file.d.ts +5 -0
- package/dist/icons/custom/music-file.d.ts.map +1 -0
- package/dist/icons/custom/music-file.js +17 -0
- package/dist/icons/custom/music-file.js.map +7 -0
- package/dist/icons/custom/pin.d.ts +5 -0
- package/dist/icons/custom/pin.d.ts.map +1 -0
- package/dist/icons/custom/pin.js +4 -1
- package/dist/icons/custom/pin.js.map +2 -2
- package/dist/icons/custom/premium-star.d.ts +11 -0
- package/dist/icons/custom/premium-star.d.ts.map +1 -0
- package/dist/icons/custom/premium-star.js +3 -1
- package/dist/icons/custom/premium-star.js.map +2 -2
- package/dist/icons/custom/social/discord.d.ts +5 -0
- package/dist/icons/custom/social/discord.d.ts.map +1 -0
- package/dist/icons/custom/social/discord.js +3 -4
- package/dist/icons/custom/social/discord.js.map +2 -2
- package/dist/icons/custom/social/index.d.ts +4 -0
- package/dist/icons/custom/social/index.d.ts.map +1 -0
- package/dist/icons/custom/social/tiktok.d.ts +5 -0
- package/dist/icons/custom/social/tiktok.d.ts.map +1 -0
- package/dist/icons/custom/social/tiktok.js +3 -4
- package/dist/icons/custom/social/tiktok.js.map +2 -2
- package/dist/icons/custom/social/twitter-x.d.ts +5 -0
- package/dist/icons/custom/social/twitter-x.d.ts.map +1 -0
- package/dist/icons/custom/social/twitter-x.js +19 -22
- package/dist/icons/custom/social/twitter-x.js.map +2 -2
- package/dist/icons/custom/square-aspect-ratio.d.ts +5 -0
- package/dist/icons/custom/square-aspect-ratio.d.ts.map +1 -0
- package/dist/icons/custom/square-aspect-ratio.js +4 -1
- package/dist/icons/custom/square-aspect-ratio.js.map +2 -2
- package/dist/icons/custom/tick-in-circle.d.ts +8 -0
- package/dist/icons/custom/tick-in-circle.d.ts.map +1 -0
- package/dist/icons/custom/tick-in-circle.js +25 -25
- package/dist/icons/custom/tick-in-circle.js.map +2 -2
- package/dist/icons/custom/tick-small.d.ts +5 -0
- package/dist/icons/custom/tick-small.d.ts.map +1 -0
- package/dist/icons/custom/tick-small.js +8 -10
- package/dist/icons/custom/tick-small.js.map +2 -2
- package/dist/icons/custom/tick.d.ts +5 -0
- package/dist/icons/custom/tick.d.ts.map +1 -0
- package/dist/icons/custom/tick.js +2 -2
- package/dist/icons/custom/tick.js.map +2 -2
- package/dist/icons/custom/types.d.ts +3 -0
- package/dist/icons/custom/types.d.ts.map +1 -0
- package/dist/icons/custom/types.js +1 -0
- package/dist/icons/custom/types.js.map +7 -0
- package/dist/icons/custom/ultra-wide-aspect-ratio.d.ts +5 -0
- package/dist/icons/custom/ultra-wide-aspect-ratio.d.ts.map +1 -0
- package/dist/icons/custom/ultra-wide-aspect-ratio.js +4 -1
- package/dist/icons/custom/ultra-wide-aspect-ratio.js.map +2 -2
- package/dist/icons/custom/uppbeat-credit.d.ts +5 -0
- package/dist/icons/custom/uppbeat-credit.d.ts.map +1 -0
- package/dist/icons/custom/uppbeat-credit.js +2 -4
- package/dist/icons/custom/uppbeat-credit.js.map +2 -2
- package/dist/icons/custom/vertical-orientation.d.ts +5 -0
- package/dist/icons/custom/vertical-orientation.d.ts.map +1 -0
- package/dist/icons/custom/vertical-orientation.js +4 -1
- package/dist/icons/custom/vertical-orientation.js.map +2 -2
- package/dist/icons/custom/view-credit-note.d.ts +5 -0
- package/dist/icons/custom/view-credit-note.d.ts.map +1 -0
- package/dist/icons/custom/view-credit-note.js +4 -1
- package/dist/icons/custom/view-credit-note.js.map +2 -2
- package/dist/icons/index.d.ts +28 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +4 -5
- package/dist/icons/index.js.map +2 -2
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +12 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/styles/storybook.css +2 -2
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/theme/index.d.ts +142 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +1 -1
- package/dist/theme/index.js.map +2 -2
- package/package.json +4 -3
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module Carousel
|
|
3
|
+
*
|
|
4
|
+
* Touch-enabled carousel/slider built on Embla Carousel.
|
|
5
|
+
* Supports horizontal/vertical orientation, keyboard navigation, and custom plugins.
|
|
6
|
+
*
|
|
7
|
+
* @see {@link https://ui.shadcn.com/docs/components/carousel Shadcn Carousel}
|
|
8
|
+
* @see {@link https://www.embla-carousel.com/ Embla Carousel}
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Basic carousel
|
|
12
|
+
* <Carousel>
|
|
13
|
+
* <CarouselContent>
|
|
14
|
+
* <CarouselItem>Slide 1</CarouselItem>
|
|
15
|
+
* <CarouselItem>Slide 2</CarouselItem>
|
|
16
|
+
* <CarouselItem>Slide 3</CarouselItem>
|
|
17
|
+
* </CarouselContent>
|
|
18
|
+
* <CarouselPrevious />
|
|
19
|
+
* <CarouselNext />
|
|
20
|
+
* </Carousel>
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // With API access and autoplay
|
|
24
|
+
* const [api, setApi] = useState<CarouselApi>();
|
|
25
|
+
*
|
|
26
|
+
* <Carousel setApi={setApi} opts={{ loop: true }}>
|
|
27
|
+
* <CarouselContent>...</CarouselContent>
|
|
28
|
+
* </Carousel>
|
|
29
|
+
*/
|
|
30
|
+
import useEmblaCarousel, { type UseEmblaCarouselType } from "embla-carousel-react";
|
|
31
|
+
import type * as React from "react";
|
|
32
|
+
import type { Ref } from "react";
|
|
33
|
+
import { Button } from "./button";
|
|
34
|
+
/** Embla Carousel API type for external control */
|
|
35
|
+
type CarouselApi = UseEmblaCarouselType[1];
|
|
36
|
+
type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
|
|
37
|
+
type CarouselOptions = UseCarouselParameters[0];
|
|
38
|
+
type CarouselPlugin = UseCarouselParameters[1];
|
|
39
|
+
interface CarouselProps {
|
|
40
|
+
opts?: CarouselOptions;
|
|
41
|
+
orientation?: "horizontal" | "vertical";
|
|
42
|
+
plugins?: CarouselPlugin;
|
|
43
|
+
setApi?: (api: CarouselApi) => void;
|
|
44
|
+
}
|
|
45
|
+
type CarouselContextProps = {
|
|
46
|
+
carouselRef: ReturnType<typeof useEmblaCarousel>[0];
|
|
47
|
+
api: ReturnType<typeof useEmblaCarousel>[1];
|
|
48
|
+
scrollPrev: () => void;
|
|
49
|
+
scrollNext: () => void;
|
|
50
|
+
canScrollPrev: boolean;
|
|
51
|
+
canScrollNext: boolean;
|
|
52
|
+
} & CarouselProps;
|
|
53
|
+
/**
|
|
54
|
+
* Hook to access carousel state and controls from child components.
|
|
55
|
+
* Must be used within a Carousel component.
|
|
56
|
+
*
|
|
57
|
+
* @returns Carousel API, scroll functions, and navigation state
|
|
58
|
+
* @throws Error if used outside of Carousel
|
|
59
|
+
*/
|
|
60
|
+
export declare function useCarousel(): CarouselContextProps;
|
|
61
|
+
/**
|
|
62
|
+
* Root carousel container. Provides context for child components.
|
|
63
|
+
*
|
|
64
|
+
* @param opts - Embla Carousel options (loop, align, dragFree, etc.)
|
|
65
|
+
* @param plugins - Embla plugins (autoplay, etc.)
|
|
66
|
+
* @param orientation - `"horizontal"` (default) or `"vertical"`
|
|
67
|
+
* @param setApi - Callback to receive the carousel API
|
|
68
|
+
*/
|
|
69
|
+
declare const Carousel: ({ orientation, opts, setApi, plugins, className, children, ref, ...props }: React.HTMLAttributes<HTMLDivElement> & CarouselProps & {
|
|
70
|
+
ref?: Ref<HTMLDivElement>;
|
|
71
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
72
|
+
/**
|
|
73
|
+
* Container for carousel slides. Handles overflow and flex layout.
|
|
74
|
+
* @param containerClassName - Classes for the outer overflow container
|
|
75
|
+
*/
|
|
76
|
+
declare const CarouselContent: ({ className, containerClassName, ref, ...props }: React.HTMLAttributes<HTMLDivElement> & {
|
|
77
|
+
containerClassName?: string;
|
|
78
|
+
ref?: Ref<HTMLDivElement>;
|
|
79
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
80
|
+
/** Props for CarouselItem component */
|
|
81
|
+
interface CarouselItemProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
82
|
+
ref?: Ref<HTMLDivElement>;
|
|
83
|
+
useCustomStyles?: boolean;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Individual slide within the carousel.
|
|
87
|
+
* @param useCustomStyles - Use responsive grid-based sizing instead of full-width
|
|
88
|
+
*/
|
|
89
|
+
declare const CarouselItem: ({ className, useCustomStyles, ref, ...props }: CarouselItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
90
|
+
/** Previous slide button. Auto-disabled when at the start. */
|
|
91
|
+
declare const CarouselPrevious: ({ className, variant, size, ref, ...props }: React.ComponentProps<typeof Button> & {
|
|
92
|
+
ref?: Ref<HTMLButtonElement>;
|
|
93
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
94
|
+
/** Next slide button. Auto-disabled when at the end. */
|
|
95
|
+
declare const CarouselNext: ({ className, variant, size, ref, ...props }: React.ComponentProps<typeof Button> & {
|
|
96
|
+
ref?: Ref<HTMLButtonElement>;
|
|
97
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
98
|
+
export { Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CarouselProps, };
|
|
99
|
+
//# sourceMappingURL=carousel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../../src/components/carousel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,gBAAgB,EAAE,EACvB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAWjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,mDAAmD;AACnD,KAAK,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAC3C,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AACjE,KAAK,eAAe,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAChD,KAAK,cAAc,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAE/C,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACrC;AAED,KAAK,oBAAoB,GAAG;IAC1B,WAAW,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,GAAG,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CACxB,GAAG,aAAa,CAAC;AAIlB;;;;;;GAMG;AACH,wBAAgB,WAAW,yBAQ1B;AAED;;;;;;;GAOG;AACH,QAAA,MAAM,QAAQ,GAAI,4EASf,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GACrC,aAAa,GAAG;IACd,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B,4CAsGF,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,eAAe,GAAI,kDAKtB,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IACxC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B,4CAmBA,CAAC;AAEF,uCAAuC;AACvC,UAAU,iBAAkB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACtE,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,QAAA,MAAM,YAAY,GAAI,+CAKnB,iBAAiB,4CAoBnB,CAAC;AAEF,8DAA8D;AAC9D,QAAA,MAAM,gBAAgB,GAAI,6CAMvB,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IACvC,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;CAC9B,4CAwBA,CAAC;AAEF,wDAAwD;AACxD,QAAA,MAAM,YAAY,GAAI,6CAMnB,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IACvC,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;CAC9B,4CAwBA,CAAC;AAEF,OAAO,EACL,QAAQ,EACR,KAAK,WAAW,EAChB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,KAAK,aAAa,GACnB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/components/carousel.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * @module Carousel\n *\n * Touch-enabled carousel/slider built on Embla Carousel.\n * Supports horizontal/vertical orientation, keyboard navigation, and custom plugins.\n *\n * @see {@link https://ui.shadcn.com/docs/components/carousel Shadcn Carousel}\n * @see {@link https://www.embla-carousel.com/ Embla Carousel}\n *\n * @example\n * // Basic carousel\n * <Carousel>\n * <CarouselContent>\n * <CarouselItem>Slide 1</CarouselItem>\n * <CarouselItem>Slide 2</CarouselItem>\n * <CarouselItem>Slide 3</CarouselItem>\n * </CarouselContent>\n * <CarouselPrevious />\n * <CarouselNext />\n * </Carousel>\n *\n * @example\n * // With API access and autoplay\n * const [api, setApi] = useState<CarouselApi>();\n *\n * <Carousel setApi={setApi} opts={{ loop: true }}>\n * <CarouselContent>...</CarouselContent>\n * </Carousel>\n */\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\n/** Embla Carousel API type for external control */\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ninterface CarouselProps {\n opts?: CarouselOptions;\n
|
|
4
|
+
"sourcesContent": ["/**\n * @module Carousel\n *\n * Touch-enabled carousel/slider built on Embla Carousel.\n * Supports horizontal/vertical orientation, keyboard navigation, and custom plugins.\n *\n * @see {@link https://ui.shadcn.com/docs/components/carousel Shadcn Carousel}\n * @see {@link https://www.embla-carousel.com/ Embla Carousel}\n *\n * @example\n * // Basic carousel\n * <Carousel>\n * <CarouselContent>\n * <CarouselItem>Slide 1</CarouselItem>\n * <CarouselItem>Slide 2</CarouselItem>\n * <CarouselItem>Slide 3</CarouselItem>\n * </CarouselContent>\n * <CarouselPrevious />\n * <CarouselNext />\n * </Carousel>\n *\n * @example\n * // With API access and autoplay\n * const [api, setApi] = useState<CarouselApi>();\n *\n * <Carousel setApi={setApi} opts={{ loop: true }}>\n * <CarouselContent>...</CarouselContent>\n * </Carousel>\n */\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\n/** Embla Carousel API type for external control */\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ninterface CarouselProps {\n opts?: CarouselOptions;\n orientation?: \"horizontal\" | \"vertical\";\n plugins?: CarouselPlugin;\n setApi?: (api: CarouselApi) => void;\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = createContext<CarouselContextProps | null>(null);\n\n/**\n * Hook to access carousel state and controls from child components.\n * Must be used within a Carousel component.\n *\n * @returns Carousel API, scroll functions, and navigation state\n * @throws Error if used outside of Carousel\n */\nexport function useCarousel() {\n const context = useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\n/**\n * Root carousel container. Provides context for child components.\n *\n * @param opts - Embla Carousel options (loop, align, dragFree, etc.)\n * @param plugins - Embla plugins (autoplay, etc.)\n * @param orientation - `\"horizontal\"` (default) or `\"vertical\"`\n * @param setApi - Callback to receive the carousel API\n */\nconst Carousel = ({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> &\n CarouselProps & {\n ref?: Ref<HTMLDivElement>;\n }) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n );\n\n const [canScrollPrev, setCanScrollPrev] = useState(false);\n const [canScrollNext, setCanScrollNext] = useState(false);\n\n const onSelect = useCallback((carouselApi: CarouselApi) => {\n if (!carouselApi) {\n return;\n }\n\n setCanScrollPrev(carouselApi.canScrollPrev());\n setCanScrollNext(carouselApi.canScrollNext());\n }, []);\n\n const scrollPrev = useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext]\n );\n\n const carouselContextValue = useMemo(\n () => ({\n carouselRef,\n api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }),\n [\n api,\n canScrollNext,\n canScrollPrev,\n carouselRef,\n opts,\n orientation,\n scrollNext,\n scrollPrev,\n ]\n );\n\n useEffect(() => {\n if (!(api && setApi)) {\n return;\n }\n\n setApi(api);\n }, [api, setApi]);\n\n useEffect(() => {\n if (!api) {\n return;\n }\n\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider value={carouselContextValue}>\n <div\n aria-roledescription=\"carousel\"\n className={cn(\"relative\", className)}\n onKeyDownCapture={handleKeyDown}\n ref={ref}\n role=\"region\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n};\n\n/**\n * Container for carousel slides. Handles overflow and flex layout.\n * @param containerClassName - Classes for the outer overflow container\n */\nconst CarouselContent = ({\n className,\n containerClassName,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & {\n containerClassName?: string;\n ref?: Ref<HTMLDivElement>;\n}) => {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div\n className={cn(\"overflow-hidden\", containerClassName)}\n ref={carouselRef}\n >\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n );\n};\n\n/** Props for CarouselItem component */\ninterface CarouselItemProps extends React.HTMLAttributes<HTMLDivElement> {\n ref?: Ref<HTMLDivElement>;\n useCustomStyles?: boolean;\n}\n\n/**\n * Individual slide within the carousel.\n * @param useCustomStyles - Use responsive grid-based sizing instead of full-width\n */\nconst CarouselItem = ({\n className,\n useCustomStyles,\n ref,\n ...props\n}: CarouselItemProps) => {\n const { orientation } = useCarousel();\n\n return (\n <div\n aria-roledescription=\"slide\"\n className={cn(\n useCustomStyles\n ? \"min-w-0 shrink-0 grow-0 @[1150px]:basis-1/6 @[1400px]:basis-[14.28%] @[1580px]:basis-[12.5%] @[540px]:basis-1/4 @[900px]:basis-1/5 basis-1/3 overflow-hidden px-0 pr-2\"\n : cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\"\n ),\n className\n )}\n ref={ref}\n role=\"group\"\n {...props}\n />\n );\n};\n\n/** Previous slide button. Auto-disabled when at the start. */\nconst CarouselPrevious = ({\n className,\n variant = \"subtle\",\n size = \"icon\",\n ref,\n ...props\n}: React.ComponentProps<typeof Button> & {\n ref?: Ref<HTMLButtonElement>;\n}) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n !canScrollPrev && \"!cursor-default\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n ref={ref}\n size={size}\n variant={variant}\n {...props}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n};\n\n/** Next slide button. Auto-disabled when at the end. */\nconst CarouselNext = ({\n className,\n variant = \"subtle\",\n size = \"icon\",\n ref,\n ...props\n}: React.ComponentProps<typeof Button> & {\n ref?: Ref<HTMLButtonElement>;\n}) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n !canScrollNext && \"!cursor-default\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n ref={ref}\n size={size}\n variant={variant}\n {...props}\n >\n <ArrowRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n};\n\nexport {\n Carousel,\n type CarouselApi,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n type CarouselProps,\n};\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Checkbox as CheckboxPrimitive } from "radix-ui";
|
|
2
|
+
import type * as React from "react";
|
|
3
|
+
import type { Ref } from "react";
|
|
4
|
+
/**
|
|
5
|
+
* Props for the Checkbox component.
|
|
6
|
+
* @property variant - Visual style: `"default"` (square) or `"rounded"` (circular)
|
|
7
|
+
*/
|
|
8
|
+
interface CheckboxProps extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {
|
|
9
|
+
ref?: Ref<React.ElementRef<typeof CheckboxPrimitive.Root>>;
|
|
10
|
+
variant?: "default" | "rounded";
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Interactive checkbox with check indicator.
|
|
14
|
+
* Supports checked, unchecked, and indeterminate states.
|
|
15
|
+
*/
|
|
16
|
+
declare const Checkbox: ({ className, variant, ref, ...props }: CheckboxProps) => import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
/**
|
|
18
|
+
* Props for the DummyCheckbox component.
|
|
19
|
+
* @property variant - Visual style: `"default"` or `"rounded"`
|
|
20
|
+
* @property checked - Whether to show the check indicator
|
|
21
|
+
*/
|
|
22
|
+
interface DummyCheckboxProps extends React.ComponentPropsWithoutRef<"div"> {
|
|
23
|
+
checked?: boolean;
|
|
24
|
+
ref?: Ref<HTMLDivElement>;
|
|
25
|
+
variant?: "default" | "rounded";
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Non-interactive checkbox for display purposes only.
|
|
29
|
+
* Visually identical to Checkbox but without click/keyboard handling.
|
|
30
|
+
* Useful for list items where the parent handles selection.
|
|
31
|
+
*/
|
|
32
|
+
declare const DummyCheckbox: ({ className, variant, checked, ref, ...props }: DummyCheckboxProps) => import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export { Checkbox, type CheckboxProps, DummyCheckbox };
|
|
34
|
+
//# sourceMappingURL=checkbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAkBjC;;;GAGG;AACH,UAAU,aACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC;IACrE,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACjC;AAED;;;GAGG;AACH,QAAA,MAAM,QAAQ,GAAI,uCAKf,aAAa,4CAYf,CAAC;AAEF;;;;GAIG;AACH,UAAU,kBAAmB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACjC;AAED;;;;GAIG;AACH,QAAA,MAAM,aAAa,GAAI,gDAMpB,kBAAkB,4CAepB,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/components/checkbox.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * @module Checkbox\n *\n * Toggle control for binary choices. Built on Radix UI Checkbox primitive.\n *\n * @see {@link https://ui.shadcn.com/docs/components/checkbox Shadcn Checkbox}\n * @see {@link https://www.radix-ui.com/primitives/docs/components/checkbox Radix Checkbox}\n *\n * @example\n * // Basic checkbox\n * <Checkbox id=\"terms\" />\n * <label htmlFor=\"terms\">Accept terms</label>\n *\n * @example\n * // Controlled checkbox\n * const [checked, setChecked] = useState(false);\n * <Checkbox checked={checked} onCheckedChange={setChecked} />\n *\n * @example\n * // Rounded variant\n * <Checkbox variant=\"rounded\" />\n */\nimport { cva } from \"class-variance-authority\";\nimport { Check } from \"lucide-react\";\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\n/** CVA variants for checkbox styling */\nconst checkboxVariants = cva(\n \"peer h-4 w-4 shrink-0 rounded border border-gray-200 border-solid ring-offset-white hover:bg-gray-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-brand-primary data-[state=checked]:text-white data-[state=checked]:hover:bg-brand-primary-hover dark:border-gray-800 dark:ring-offset-gray-950 dark:data-[state=checked]:bg-brand-primary dark:data-[state=checked]:text-white dark:focus-visible:ring-[var(--focus-ring)] dark:hover:bg-gray-900 dark:data-[state=checked]:hover:bg-brand-primary-hover\",\n {\n variants: {\n variant: {\n default: \"\",\n rounded:\n \"rounded-full dark:border-gray-500 [&[data-state='checked']]:border-brand-primary [&[data-state='checked']]:bg-brand-primary\",\n },\n },\n }\n);\n\n/**\n * Props for the Checkbox component.\n * @property variant - Visual style: `\"default\"` (square) or `\"rounded\"` (circular)\n */\ninterface CheckboxProps\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n variant?: \"default\" | \"rounded\";\n
|
|
4
|
+
"sourcesContent": ["/**\n * @module Checkbox\n *\n * Toggle control for binary choices. Built on Radix UI Checkbox primitive.\n *\n * @see {@link https://ui.shadcn.com/docs/components/checkbox Shadcn Checkbox}\n * @see {@link https://www.radix-ui.com/primitives/docs/components/checkbox Radix Checkbox}\n *\n * @example\n * // Basic checkbox\n * <Checkbox id=\"terms\" />\n * <label htmlFor=\"terms\">Accept terms</label>\n *\n * @example\n * // Controlled checkbox\n * const [checked, setChecked] = useState(false);\n * <Checkbox checked={checked} onCheckedChange={setChecked} />\n *\n * @example\n * // Rounded variant\n * <Checkbox variant=\"rounded\" />\n */\nimport { cva } from \"class-variance-authority\";\nimport { Check } from \"lucide-react\";\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\n/** CVA variants for checkbox styling */\nconst checkboxVariants = cva(\n \"peer h-4 w-4 shrink-0 rounded border border-gray-200 border-solid ring-offset-white hover:bg-gray-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-brand-primary data-[state=checked]:text-white data-[state=checked]:hover:bg-brand-primary-hover dark:border-gray-800 dark:ring-offset-gray-950 dark:data-[state=checked]:bg-brand-primary dark:data-[state=checked]:text-white dark:focus-visible:ring-[var(--focus-ring)] dark:hover:bg-gray-900 dark:data-[state=checked]:hover:bg-brand-primary-hover\",\n {\n variants: {\n variant: {\n default: \"\",\n rounded:\n \"rounded-full dark:border-gray-500 [&[data-state='checked']]:border-brand-primary [&[data-state='checked']]:bg-brand-primary\",\n },\n },\n }\n);\n\n/**\n * Props for the Checkbox component.\n * @property variant - Visual style: `\"default\"` (square) or `\"rounded\"` (circular)\n */\ninterface CheckboxProps\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n ref?: Ref<React.ElementRef<typeof CheckboxPrimitive.Root>>;\n variant?: \"default\" | \"rounded\";\n}\n\n/**\n * Interactive checkbox with check indicator.\n * Supports checked, unchecked, and indeterminate states.\n */\nconst Checkbox = ({\n className,\n variant = \"default\",\n ref,\n ...props\n}: CheckboxProps) => (\n <CheckboxPrimitive.Root\n className={cn(checkboxVariants({ variant }), className)}\n ref={ref}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n);\n\n/**\n * Props for the DummyCheckbox component.\n * @property variant - Visual style: `\"default\"` or `\"rounded\"`\n * @property checked - Whether to show the check indicator\n */\ninterface DummyCheckboxProps extends React.ComponentPropsWithoutRef<\"div\"> {\n checked?: boolean;\n ref?: Ref<HTMLDivElement>;\n variant?: \"default\" | \"rounded\";\n}\n\n/**\n * Non-interactive checkbox for display purposes only.\n * Visually identical to Checkbox but without click/keyboard handling.\n * Useful for list items where the parent handles selection.\n */\nconst DummyCheckbox = ({\n className,\n variant = \"default\",\n checked,\n ref,\n ...props\n}: DummyCheckboxProps) => (\n <div\n className={cn(checkboxVariants({ variant }), className)}\n data-state={checked ? \"checked\" : \"unchecked\"}\n ref={ref}\n {...props}\n >\n <div\n className={cn(\n checked ? \"flex items-center justify-center text-current\" : \"hidden\"\n )}\n >\n <Check className=\"h-4 w-4\" />\n </div>\n </div>\n);\n\nexport { Checkbox, type CheckboxProps, DummyCheckbox };\n"],
|
|
5
5
|
"mappings": "AAwEM;AAlDN,SAAS,WAAW;AACpB,SAAS,aAAa;AACtB,SAAS,YAAY,yBAAyB;AAI9C,SAAS,UAAU;AAGnB,MAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACF;AAgBA,MAAM,WAAW,CAAC;AAAA,EAChB;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC,kBAAkB;AAAA,EAAlB;AAAA,IACC,WAAW,GAAG,iBAAiB,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,IACtD;AAAA,IACC,GAAG;AAAA,IAEJ;AAAA,MAAC,kBAAkB;AAAA,MAAlB;AAAA,QACC,WAAW,GAAG,+CAA+C;AAAA,QAE7D,8BAAC,SAAM,WAAU,WAAU;AAAA;AAAA,IAC7B;AAAA;AACF;AAmBF,MAAM,gBAAgB,CAAC;AAAA,EACrB;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW,GAAG,iBAAiB,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,IACtD,cAAY,UAAU,YAAY;AAAA,IAClC;AAAA,IACC,GAAG;AAAA,IAEJ;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT,UAAU,kDAAkD;AAAA,QAC9D;AAAA,QAEA,8BAAC,SAAM,WAAU,WAAU;AAAA;AAAA,IAC7B;AAAA;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ContextMenu
|
|
3
|
+
*
|
|
4
|
+
* Right-click context menu with full keyboard navigation and accessibility.
|
|
5
|
+
* Built on Radix UI Context Menu primitive.
|
|
6
|
+
*
|
|
7
|
+
* @see {@link https://ui.shadcn.com/docs/components/context-menu Shadcn Context Menu}
|
|
8
|
+
* @see {@link https://www.radix-ui.com/primitives/docs/components/context-menu Radix Context Menu}
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Basic context menu
|
|
12
|
+
* <ContextMenu>
|
|
13
|
+
* <ContextMenuTrigger>Right click here</ContextMenuTrigger>
|
|
14
|
+
* <ContextMenuContent>
|
|
15
|
+
* <ContextMenuItem>Edit</ContextMenuItem>
|
|
16
|
+
* <ContextMenuItem>Duplicate</ContextMenuItem>
|
|
17
|
+
* <ContextMenuSeparator />
|
|
18
|
+
* <ContextMenuItem>Delete</ContextMenuItem>
|
|
19
|
+
* </ContextMenuContent>
|
|
20
|
+
* </ContextMenu>
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // With submenus and keyboard shortcuts
|
|
24
|
+
* <ContextMenu>
|
|
25
|
+
* <ContextMenuTrigger>Right click</ContextMenuTrigger>
|
|
26
|
+
* <ContextMenuContent>
|
|
27
|
+
* <ContextMenuItem>
|
|
28
|
+
* Copy <ContextMenuShortcut>⌘C</ContextMenuShortcut>
|
|
29
|
+
* </ContextMenuItem>
|
|
30
|
+
* <ContextMenuSub>
|
|
31
|
+
* <ContextMenuSubTrigger>Share</ContextMenuSubTrigger>
|
|
32
|
+
* <ContextMenuSubContent>
|
|
33
|
+
* <ContextMenuItem>Email</ContextMenuItem>
|
|
34
|
+
* <ContextMenuItem>Messages</ContextMenuItem>
|
|
35
|
+
* </ContextMenuSubContent>
|
|
36
|
+
* </ContextMenuSub>
|
|
37
|
+
* </ContextMenuContent>
|
|
38
|
+
* </ContextMenu>
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* // With checkbox and radio items
|
|
42
|
+
* <ContextMenuContent>
|
|
43
|
+
* <ContextMenuCheckboxItem checked={showToolbar}>
|
|
44
|
+
* Show Toolbar
|
|
45
|
+
* </ContextMenuCheckboxItem>
|
|
46
|
+
* <ContextMenuRadioGroup value={view}>
|
|
47
|
+
* <ContextMenuLabel>View</ContextMenuLabel>
|
|
48
|
+
* <ContextMenuRadioItem value="grid">Grid</ContextMenuRadioItem>
|
|
49
|
+
* <ContextMenuRadioItem value="list">List</ContextMenuRadioItem>
|
|
50
|
+
* </ContextMenuRadioGroup>
|
|
51
|
+
* </ContextMenuContent>
|
|
52
|
+
*/
|
|
53
|
+
import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
|
|
54
|
+
import type * as React from "react";
|
|
55
|
+
import type { Ref } from "react";
|
|
56
|
+
/** Root component that manages context menu state. */
|
|
57
|
+
declare const ContextMenu: React.FC<ContextMenuPrimitive.ContextMenuProps>;
|
|
58
|
+
/** Element that triggers the context menu on right-click. */
|
|
59
|
+
declare const ContextMenuTrigger: React.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuTriggerProps & React.RefAttributes<HTMLSpanElement>>;
|
|
60
|
+
/** Groups related menu items together. */
|
|
61
|
+
declare const ContextMenuGroup: React.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
62
|
+
/** Portal for rendering menu content outside the DOM hierarchy. */
|
|
63
|
+
declare const ContextMenuPortal: React.FC<ContextMenuPrimitive.ContextMenuPortalProps>;
|
|
64
|
+
/** Container for nested submenu structure. */
|
|
65
|
+
declare const ContextMenuSub: React.FC<ContextMenuPrimitive.ContextMenuSubProps>;
|
|
66
|
+
/** Container for radio item selection group. */
|
|
67
|
+
declare const ContextMenuRadioGroup: React.ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
68
|
+
/**
|
|
69
|
+
* Trigger for opening a submenu. Shows chevron indicator.
|
|
70
|
+
* @param inset - Add left padding to align with items that have icons
|
|
71
|
+
*/
|
|
72
|
+
interface ContextMenuSubTriggerProps extends Omit<React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger>, "ref"> {
|
|
73
|
+
inset?: boolean;
|
|
74
|
+
ref?: Ref<React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>>;
|
|
75
|
+
}
|
|
76
|
+
declare const ContextMenuSubTrigger: ({ className, inset, children, ref, ...props }: ContextMenuSubTriggerProps) => import("react/jsx-runtime").JSX.Element;
|
|
77
|
+
/** Content container for submenu items. Animated on open/close. */
|
|
78
|
+
interface ContextMenuSubContentProps extends Omit<React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>, "ref"> {
|
|
79
|
+
ref?: Ref<React.ElementRef<typeof ContextMenuPrimitive.SubContent>>;
|
|
80
|
+
}
|
|
81
|
+
declare const ContextMenuSubContent: ({ className, ref, ...props }: ContextMenuSubContentProps) => import("react/jsx-runtime").JSX.Element;
|
|
82
|
+
/** Main content container for the context menu. Renders in a portal with overlay. */
|
|
83
|
+
interface ContextMenuContentProps extends Omit<React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>, "ref"> {
|
|
84
|
+
ref?: Ref<React.ElementRef<typeof ContextMenuPrimitive.Content>>;
|
|
85
|
+
}
|
|
86
|
+
declare const ContextMenuContent: ({ className, ref, ...props }: ContextMenuContentProps) => import("react/jsx-runtime").JSX.Element;
|
|
87
|
+
/**
|
|
88
|
+
* Clickable menu item. Closes menu on selection.
|
|
89
|
+
* @param inset - Add left padding to align with items that have icons
|
|
90
|
+
*/
|
|
91
|
+
interface ContextMenuItemProps extends Omit<React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item>, "ref"> {
|
|
92
|
+
inset?: boolean;
|
|
93
|
+
ref?: Ref<React.ElementRef<typeof ContextMenuPrimitive.Item>>;
|
|
94
|
+
}
|
|
95
|
+
declare const ContextMenuItem: ({ className, inset, ref, ...props }: ContextMenuItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
96
|
+
/** Toggleable checkbox menu item with check indicator when selected. */
|
|
97
|
+
interface ContextMenuCheckboxItemProps extends Omit<React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>, "ref"> {
|
|
98
|
+
ref?: Ref<React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>>;
|
|
99
|
+
}
|
|
100
|
+
declare const ContextMenuCheckboxItem: ({ className, children, checked, ref, ...props }: ContextMenuCheckboxItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
101
|
+
/** Radio option within a ContextMenuRadioGroup. Shows dot indicator when selected. */
|
|
102
|
+
interface ContextMenuRadioItemProps extends Omit<React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>, "ref"> {
|
|
103
|
+
ref?: Ref<React.ElementRef<typeof ContextMenuPrimitive.RadioItem>>;
|
|
104
|
+
}
|
|
105
|
+
declare const ContextMenuRadioItem: ({ className, children, ref, ...props }: ContextMenuRadioItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
106
|
+
/**
|
|
107
|
+
* Non-interactive label for grouping menu items.
|
|
108
|
+
* @param inset - Add left padding to align with items that have icons
|
|
109
|
+
*/
|
|
110
|
+
interface ContextMenuLabelProps extends Omit<React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label>, "ref"> {
|
|
111
|
+
inset?: boolean;
|
|
112
|
+
ref?: Ref<React.ElementRef<typeof ContextMenuPrimitive.Label>>;
|
|
113
|
+
}
|
|
114
|
+
declare const ContextMenuLabel: ({ className, inset, ref, ...props }: ContextMenuLabelProps) => import("react/jsx-runtime").JSX.Element;
|
|
115
|
+
/** Visual divider between menu item groups. */
|
|
116
|
+
interface ContextMenuSeparatorProps extends Omit<React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>, "ref"> {
|
|
117
|
+
ref?: Ref<React.ElementRef<typeof ContextMenuPrimitive.Separator>>;
|
|
118
|
+
}
|
|
119
|
+
declare const ContextMenuSeparator: ({ className, ref, ...props }: ContextMenuSeparatorProps) => import("react/jsx-runtime").JSX.Element;
|
|
120
|
+
/** Displays keyboard shortcut hint aligned to the right of a menu item. */
|
|
121
|
+
declare const ContextMenuShortcut: {
|
|
122
|
+
({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): import("react/jsx-runtime").JSX.Element;
|
|
123
|
+
displayName: string;
|
|
124
|
+
};
|
|
125
|
+
export { ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, };
|
|
126
|
+
//# sourceMappingURL=context-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../src/components/context-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module Dialog
|
|
3
|
+
*
|
|
4
|
+
* Modal dialog overlay for focused user interaction. Built on Radix UI Dialog primitive.
|
|
5
|
+
* Includes backdrop overlay, close button, and focus trapping.
|
|
6
|
+
*
|
|
7
|
+
* @see {@link https://ui.shadcn.com/docs/components/dialog Shadcn Dialog}
|
|
8
|
+
* @see {@link https://www.radix-ui.com/primitives/docs/components/dialog Radix Dialog}
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Basic dialog
|
|
12
|
+
* <Dialog>
|
|
13
|
+
* <DialogTrigger asChild>
|
|
14
|
+
* <Button>Open Dialog</Button>
|
|
15
|
+
* </DialogTrigger>
|
|
16
|
+
* <DialogContent>
|
|
17
|
+
* <DialogHeader>
|
|
18
|
+
* <DialogTitle>Are you sure?</DialogTitle>
|
|
19
|
+
* <DialogDescription>
|
|
20
|
+
* This action cannot be undone.
|
|
21
|
+
* </DialogDescription>
|
|
22
|
+
* </DialogHeader>
|
|
23
|
+
* <DialogFooter>
|
|
24
|
+
* <Button>Confirm</Button>
|
|
25
|
+
* </DialogFooter>
|
|
26
|
+
* </DialogContent>
|
|
27
|
+
* </Dialog>
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* // Controlled dialog
|
|
31
|
+
* const [open, setOpen] = useState(false);
|
|
32
|
+
*
|
|
33
|
+
* <Dialog open={open} onOpenChange={setOpen}>
|
|
34
|
+
* <DialogContent>
|
|
35
|
+
* <DialogHeader>
|
|
36
|
+
* <DialogTitle>Edit Profile</DialogTitle>
|
|
37
|
+
* </DialogHeader>
|
|
38
|
+
* <form onSubmit={() => setOpen(false)}>
|
|
39
|
+
* ...
|
|
40
|
+
* </form>
|
|
41
|
+
* </DialogContent>
|
|
42
|
+
* </Dialog>
|
|
43
|
+
*/
|
|
44
|
+
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
45
|
+
import type * as React from "react";
|
|
46
|
+
import type { Ref } from "react";
|
|
47
|
+
/** Root component that manages dialog open/closed state. */
|
|
48
|
+
declare const Dialog: React.FC<DialogPrimitive.DialogProps>;
|
|
49
|
+
/** Element that opens the dialog when clicked. Use `asChild` to wrap custom buttons. */
|
|
50
|
+
declare const DialogTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
51
|
+
/** Portal for rendering dialog outside the DOM hierarchy. */
|
|
52
|
+
declare const DialogPortal: React.FC<DialogPrimitive.DialogPortalProps>;
|
|
53
|
+
/** Closes the dialog when clicked. Use `asChild` to wrap custom close buttons. */
|
|
54
|
+
declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
|
|
55
|
+
/** Semi-transparent backdrop behind the dialog. Animated fade on open/close. */
|
|
56
|
+
declare const DialogOverlay: ({ className, ref, ...props }: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay> & {
|
|
57
|
+
ref?: Ref<React.ElementRef<typeof DialogPrimitive.Overlay>>;
|
|
58
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
59
|
+
/**
|
|
60
|
+
* Main dialog container. Centered on screen with close button.
|
|
61
|
+
* Includes overlay, focus trap, and Escape key handling.
|
|
62
|
+
*/
|
|
63
|
+
declare const DialogContent: ({ className, children, ref, ...props }: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {
|
|
64
|
+
ref?: Ref<React.ElementRef<typeof DialogPrimitive.Content>>;
|
|
65
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
66
|
+
/** Header section for dialog title and description. Centered on mobile, left-aligned on desktop. */
|
|
67
|
+
declare const DialogHeader: {
|
|
68
|
+
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
|
|
69
|
+
displayName: string;
|
|
70
|
+
};
|
|
71
|
+
/** Footer section for action buttons. Stacks on mobile, horizontal on desktop. */
|
|
72
|
+
declare const DialogFooter: {
|
|
73
|
+
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
|
|
74
|
+
displayName: string;
|
|
75
|
+
};
|
|
76
|
+
/** Dialog title with Echo typography. Required for accessibility. */
|
|
77
|
+
declare const DialogTitle: ({ className, ref, ...props }: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title> & {
|
|
78
|
+
ref?: Ref<React.ElementRef<typeof DialogPrimitive.Title>>;
|
|
79
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
80
|
+
/** Accessible description text below the title. */
|
|
81
|
+
declare const DialogDescription: ({ className, ref, ...props }: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description> & {
|
|
82
|
+
ref?: Ref<React.ElementRef<typeof DialogPrimitive.Description>>;
|
|
83
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
84
|
+
export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, };
|
|
85
|
+
//# sourceMappingURL=dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/components/dialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAOjC,4DAA4D;AAC5D,QAAA,MAAM,MAAM,uCAAuB,CAAC;AAEpC,wFAAwF;AACxF,QAAA,MAAM,aAAa,8GAA0B,CAAC;AAE9C,6DAA6D;AAC7D,QAAA,MAAM,YAAY,6CAAyB,CAAC;AAE5C,kFAAkF;AAClF,QAAA,MAAM,WAAW,4GAAwB,CAAC;AAE1C,gFAAgF;AAChF,QAAA,MAAM,aAAa,GAAI,8BAIpB,KAAK,CAAC,wBAAwB,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;IAClE,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;CAC7D,4CASA,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,aAAa,GAAI,wCAKpB,KAAK,CAAC,wBAAwB,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;IAClE,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;CAC7D,4CAuBA,CAAC;AAEF,oGAAoG;AACpG,QAAA,MAAM,YAAY;8BAGf,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAC;AAGF,kFAAkF;AAClF,QAAA,MAAM,YAAY;8BAGf,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAC;AAGF,qEAAqE;AACrE,QAAA,MAAM,WAAW,GAAI,8BAIlB,KAAK,CAAC,wBAAwB,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,GAAG;IAChE,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;CAC3D,4CASA,CAAC;AAEF,mDAAmD;AACnD,QAAA,MAAM,iBAAiB,GAAI,8BAIxB,KAAK,CAAC,wBAAwB,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC,GAAG;IACtE,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;CACjE,4CAMA,CAAC;AAEF,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GACd,CAAC"}
|
|
@@ -3,8 +3,8 @@ import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
|
3
3
|
import { X } from "lucide-react";
|
|
4
4
|
import { cn } from "../lib/utils";
|
|
5
5
|
import { Button } from "./button";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { headingVariants } from "./typography/heading";
|
|
7
|
+
import { textVariants } from "./typography/text";
|
|
8
8
|
const Dialog = DialogPrimitive.Root;
|
|
9
9
|
const DialogTrigger = DialogPrimitive.Trigger;
|
|
10
10
|
const DialogPortal = DialogPrimitive.Portal;
|
|
@@ -89,12 +89,29 @@ const DialogTitle = ({
|
|
|
89
89
|
className,
|
|
90
90
|
ref,
|
|
91
91
|
...props
|
|
92
|
-
}) => /* @__PURE__ */ jsx(
|
|
92
|
+
}) => /* @__PURE__ */ jsx(
|
|
93
|
+
DialogPrimitive.Title,
|
|
94
|
+
{
|
|
95
|
+
className: cn(
|
|
96
|
+
headingVariants({ variant: "h5", fontFamily: "brand" }),
|
|
97
|
+
className
|
|
98
|
+
),
|
|
99
|
+
ref,
|
|
100
|
+
...props
|
|
101
|
+
}
|
|
102
|
+
);
|
|
93
103
|
const DialogDescription = ({
|
|
94
104
|
className,
|
|
95
105
|
ref,
|
|
96
106
|
...props
|
|
97
|
-
}) => /* @__PURE__ */ jsx(
|
|
107
|
+
}) => /* @__PURE__ */ jsx(
|
|
108
|
+
DialogPrimitive.Description,
|
|
109
|
+
{
|
|
110
|
+
className: cn(textVariants(), "text-sm", className),
|
|
111
|
+
ref,
|
|
112
|
+
...props
|
|
113
|
+
}
|
|
114
|
+
);
|
|
98
115
|
export {
|
|
99
116
|
Dialog,
|
|
100
117
|
DialogClose,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/components/dialog.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * @module Dialog\n *\n * Modal dialog overlay for focused user interaction. Built on Radix UI Dialog primitive.\n * Includes backdrop overlay, close button, and focus trapping.\n *\n * @see {@link https://ui.shadcn.com/docs/components/dialog Shadcn Dialog}\n * @see {@link https://www.radix-ui.com/primitives/docs/components/dialog Radix Dialog}\n *\n * @example\n * // Basic dialog\n * <Dialog>\n * <DialogTrigger asChild>\n * <Button>Open Dialog</Button>\n * </DialogTrigger>\n * <DialogContent>\n * <DialogHeader>\n * <DialogTitle>Are you sure?</DialogTitle>\n * <DialogDescription>\n * This action cannot be undone.\n * </DialogDescription>\n * </DialogHeader>\n * <DialogFooter>\n * <Button>Confirm</Button>\n * </DialogFooter>\n * </DialogContent>\n * </Dialog>\n *\n * @example\n * // Controlled dialog\n * const [open, setOpen] = useState(false);\n *\n * <Dialog open={open} onOpenChange={setOpen}>\n * <DialogContent>\n * <DialogHeader>\n * <DialogTitle>Edit Profile</DialogTitle>\n * </DialogHeader>\n * <form onSubmit={() => setOpen(false)}>\n * ...\n * </form>\n * </DialogContent>\n * </Dialog>\n */\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport {
|
|
5
|
-
"mappings": "AAyEE,cAqCM,YArCN;AA9BF,YAAY,qBAAqB;AACjC,SAAS,SAAS;AAIlB,SAAS,UAAU;AACnB,SAAS,cAAc;AACvB,SAAS,
|
|
4
|
+
"sourcesContent": ["/**\n * @module Dialog\n *\n * Modal dialog overlay for focused user interaction. Built on Radix UI Dialog primitive.\n * Includes backdrop overlay, close button, and focus trapping.\n *\n * @see {@link https://ui.shadcn.com/docs/components/dialog Shadcn Dialog}\n * @see {@link https://www.radix-ui.com/primitives/docs/components/dialog Radix Dialog}\n *\n * @example\n * // Basic dialog\n * <Dialog>\n * <DialogTrigger asChild>\n * <Button>Open Dialog</Button>\n * </DialogTrigger>\n * <DialogContent>\n * <DialogHeader>\n * <DialogTitle>Are you sure?</DialogTitle>\n * <DialogDescription>\n * This action cannot be undone.\n * </DialogDescription>\n * </DialogHeader>\n * <DialogFooter>\n * <Button>Confirm</Button>\n * </DialogFooter>\n * </DialogContent>\n * </Dialog>\n *\n * @example\n * // Controlled dialog\n * const [open, setOpen] = useState(false);\n *\n * <Dialog open={open} onOpenChange={setOpen}>\n * <DialogContent>\n * <DialogHeader>\n * <DialogTitle>Edit Profile</DialogTitle>\n * </DialogHeader>\n * <form onSubmit={() => setOpen(false)}>\n * ...\n * </form>\n * </DialogContent>\n * </Dialog>\n */\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { headingVariants } from \"./typography/heading\";\nimport { textVariants } from \"./typography/text\";\n\n/** Root component that manages dialog open/closed state. */\nconst Dialog = DialogPrimitive.Root;\n\n/** Element that opens the dialog when clicked. Use `asChild` to wrap custom buttons. */\nconst DialogTrigger = DialogPrimitive.Trigger;\n\n/** Portal for rendering dialog outside the DOM hierarchy. */\nconst DialogPortal = DialogPrimitive.Portal;\n\n/** Closes the dialog when clicked. Use `asChild` to wrap custom close buttons. */\nconst DialogClose = DialogPrimitive.Close;\n\n/** Semi-transparent backdrop behind the dialog. Animated fade on open/close. */\nconst DialogOverlay = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay> & {\n ref?: Ref<React.ElementRef<typeof DialogPrimitive.Overlay>>;\n}) => (\n <DialogPrimitive.Overlay\n className={cn(\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/60 data-[state=closed]:animate-out data-[state=open]:animate-in\",\n className\n )}\n ref={ref}\n {...props}\n />\n);\n\n/**\n * Main dialog container. Centered on screen with close button.\n * Includes overlay, focus trap, and Escape key handling.\n */\nconst DialogContent = ({\n className,\n children,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n ref?: Ref<React.ElementRef<typeof DialogPrimitive.Content>>;\n}) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n className={cn(\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-gray-150 border-solid bg-white p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:rounded-lg dark:border-gray-800 dark:bg-gray-950\",\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n asChild\n className=\"absolute top-4 right-4 opacity-100 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-gray-950 focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-gray-100 data-[state=open]:text-gray-500 dark:ring-offset-gray-950 dark:data-[state=open]:bg-gray-800 dark:data-[state=open]:text-gray-400 dark:focus:ring-gray-300\"\n >\n <Button aria-label=\"Close\" size=\"icon\" variant=\"transparent\">\n <X className=\"h-5 w-5\" />\n <span className=\"sr-only\">Close</span>\n </Button>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n);\n\n/** Header section for dialog title and description. Centered on mobile, left-aligned on desktop. */\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\n/** Footer section for action buttons. Stacks on mobile, horizontal on desktop. */\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\n/** Dialog title with Echo typography. Required for accessibility. */\nconst DialogTitle = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title> & {\n ref?: Ref<React.ElementRef<typeof DialogPrimitive.Title>>;\n}) => (\n <DialogPrimitive.Title\n className={cn(\n headingVariants({ variant: \"h5\", fontFamily: \"brand\" }),\n className\n )}\n ref={ref}\n {...props}\n />\n);\n\n/** Accessible description text below the title. */\nconst DialogDescription = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description> & {\n ref?: Ref<React.ElementRef<typeof DialogPrimitive.Description>>;\n}) => (\n <DialogPrimitive.Description\n className={cn(textVariants(), \"text-sm\", className)}\n ref={ref}\n {...props}\n />\n);\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n"],
|
|
5
|
+
"mappings": "AAyEE,cAqCM,YArCN;AA9BF,YAAY,qBAAqB;AACjC,SAAS,SAAS;AAIlB,SAAS,UAAU;AACnB,SAAS,cAAc;AACvB,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAG7B,MAAM,SAAS,gBAAgB;AAG/B,MAAM,gBAAgB,gBAAgB;AAGtC,MAAM,eAAe,gBAAgB;AAGrC,MAAM,cAAc,gBAAgB;AAGpC,MAAM,gBAAgB,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAGE;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA;AACN;AAOF,MAAM,gBAAgB,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAGE,qBAAC,gBACC;AAAA,sBAAC,iBAAc;AAAA,EACf;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD;AAAA,UAAC,gBAAgB;AAAA,UAAhB;AAAA,YACC,SAAO;AAAA,YACP,WAAU;AAAA,YAEV,+BAAC,UAAO,cAAW,SAAQ,MAAK,QAAO,SAAQ,eAC7C;AAAA,kCAAC,KAAE,WAAU,WAAU;AAAA,cACvB,oBAAC,UAAK,WAAU,WAAU,mBAAK;AAAA,eACjC;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAAA,GACF;AAIF,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,aAAa,cAAc;AAG3B,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,aAAa,cAAc;AAG3B,MAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAGE;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW;AAAA,MACT,gBAAgB,EAAE,SAAS,MAAM,YAAY,QAAQ,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA;AACN;AAIF,MAAM,oBAAoB,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAGE;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW,GAAG,aAAa,GAAG,WAAW,SAAS;AAAA,IAClD;AAAA,IACC,GAAG;AAAA;AACN;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|