@neynar/ui 0.1.1 → 0.1.2

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.
Files changed (173) hide show
  1. package/dist/components/ui/accordion.d.ts +1 -25
  2. package/dist/components/ui/accordion.d.ts.map +1 -1
  3. package/dist/components/ui/alert-dialog.d.ts +240 -46
  4. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  5. package/dist/components/ui/alert.d.ts +73 -11
  6. package/dist/components/ui/alert.d.ts.map +1 -1
  7. package/dist/components/ui/aspect-ratio.d.ts +44 -10
  8. package/dist/components/ui/aspect-ratio.d.ts.map +1 -1
  9. package/dist/components/ui/avatar.d.ts +117 -33
  10. package/dist/components/ui/avatar.d.ts.map +1 -1
  11. package/dist/components/ui/badge.d.ts +50 -71
  12. package/dist/components/ui/badge.d.ts.map +1 -1
  13. package/dist/components/ui/breadcrumb.d.ts +231 -49
  14. package/dist/components/ui/breadcrumb.d.ts.map +1 -1
  15. package/dist/components/ui/button.d.ts +189 -71
  16. package/dist/components/ui/button.d.ts.map +1 -1
  17. package/dist/components/ui/calendar.d.ts +197 -40
  18. package/dist/components/ui/calendar.d.ts.map +1 -1
  19. package/dist/components/ui/card.d.ts +7 -22
  20. package/dist/components/ui/card.d.ts.map +1 -1
  21. package/dist/components/ui/carousel.d.ts +369 -99
  22. package/dist/components/ui/carousel.d.ts.map +1 -1
  23. package/dist/components/ui/chart.d.ts.map +1 -1
  24. package/dist/components/ui/checkbox.d.ts +110 -38
  25. package/dist/components/ui/checkbox.d.ts.map +1 -1
  26. package/dist/components/ui/collapsible.d.ts +246 -61
  27. package/dist/components/ui/collapsible.d.ts.map +1 -1
  28. package/dist/components/ui/combobox.d.ts +207 -159
  29. package/dist/components/ui/combobox.d.ts.map +1 -1
  30. package/dist/components/ui/command.d.ts +336 -67
  31. package/dist/components/ui/command.d.ts.map +1 -1
  32. package/dist/components/ui/container.d.ts +159 -64
  33. package/dist/components/ui/container.d.ts.map +1 -1
  34. package/dist/components/ui/context-menu.d.ts +321 -39
  35. package/dist/components/ui/context-menu.d.ts.map +1 -1
  36. package/dist/components/ui/date-picker.d.ts +113 -86
  37. package/dist/components/ui/date-picker.d.ts.map +1 -1
  38. package/dist/components/ui/dialog.d.ts +106 -25
  39. package/dist/components/ui/dialog.d.ts.map +1 -1
  40. package/dist/components/ui/drawer.d.ts +388 -59
  41. package/dist/components/ui/drawer.d.ts.map +1 -1
  42. package/dist/components/ui/dropdown-menu.d.ts +521 -74
  43. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  44. package/dist/components/ui/empty-state.d.ts +148 -76
  45. package/dist/components/ui/empty-state.d.ts.map +1 -1
  46. package/dist/components/ui/hover-card.d.ts +253 -34
  47. package/dist/components/ui/hover-card.d.ts.map +1 -1
  48. package/dist/components/ui/input.d.ts +143 -44
  49. package/dist/components/ui/input.d.ts.map +1 -1
  50. package/dist/components/ui/label.d.ts +0 -8
  51. package/dist/components/ui/label.d.ts.map +1 -1
  52. package/dist/components/ui/menubar.d.ts +288 -46
  53. package/dist/components/ui/menubar.d.ts.map +1 -1
  54. package/dist/components/ui/navigation-menu.d.ts +444 -127
  55. package/dist/components/ui/navigation-menu.d.ts.map +1 -1
  56. package/dist/components/ui/pagination.d.ts +342 -66
  57. package/dist/components/ui/pagination.d.ts.map +1 -1
  58. package/dist/components/ui/popover.d.ts +0 -8
  59. package/dist/components/ui/popover.d.ts.map +1 -1
  60. package/dist/components/ui/progress.d.ts +88 -30
  61. package/dist/components/ui/progress.d.ts.map +1 -1
  62. package/dist/components/ui/radio-group.d.ts +189 -45
  63. package/dist/components/ui/radio-group.d.ts.map +1 -1
  64. package/dist/components/ui/resizable.d.ts +178 -62
  65. package/dist/components/ui/resizable.d.ts.map +1 -1
  66. package/dist/components/ui/scroll-area.d.ts +180 -21
  67. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  68. package/dist/components/ui/select.d.ts +382 -60
  69. package/dist/components/ui/select.d.ts.map +1 -1
  70. package/dist/components/ui/separator.d.ts +52 -39
  71. package/dist/components/ui/separator.d.ts.map +1 -1
  72. package/dist/components/ui/sheet.d.ts +144 -27
  73. package/dist/components/ui/sheet.d.ts.map +1 -1
  74. package/dist/components/ui/sidebar.d.ts +81 -31
  75. package/dist/components/ui/sidebar.d.ts.map +1 -1
  76. package/dist/components/ui/skeleton.d.ts +94 -32
  77. package/dist/components/ui/skeleton.d.ts.map +1 -1
  78. package/dist/components/ui/slider.d.ts +37 -31
  79. package/dist/components/ui/slider.d.ts.map +1 -1
  80. package/dist/components/ui/sonner.d.ts +280 -46
  81. package/dist/components/ui/sonner.d.ts.map +1 -1
  82. package/dist/components/ui/stack.d.ts +289 -148
  83. package/dist/components/ui/stack.d.ts.map +1 -1
  84. package/dist/components/ui/stories/aspect-ratio.stories.d.ts +1 -2
  85. package/dist/components/ui/stories/aspect-ratio.stories.d.ts.map +1 -1
  86. package/dist/components/ui/stories/container.stories.d.ts +2 -3
  87. package/dist/components/ui/stories/container.stories.d.ts.map +1 -1
  88. package/dist/components/ui/stories/empty-state.stories.d.ts +2 -2
  89. package/dist/components/ui/stories/scroll-area.stories.d.ts +1 -2
  90. package/dist/components/ui/stories/scroll-area.stories.d.ts.map +1 -1
  91. package/dist/components/ui/stories/stack.stories.d.ts +1 -1
  92. package/dist/components/ui/stories/text-field.stories.d.ts +7 -1
  93. package/dist/components/ui/stories/text-field.stories.d.ts.map +1 -1
  94. package/dist/components/ui/switch.d.ts +44 -38
  95. package/dist/components/ui/switch.d.ts.map +1 -1
  96. package/dist/components/ui/table.d.ts +33 -0
  97. package/dist/components/ui/table.d.ts.map +1 -1
  98. package/dist/components/ui/tabs.d.ts +4 -22
  99. package/dist/components/ui/tabs.d.ts.map +1 -1
  100. package/dist/components/ui/text-field.d.ts +170 -84
  101. package/dist/components/ui/text-field.d.ts.map +1 -1
  102. package/dist/components/ui/textarea.d.ts +106 -29
  103. package/dist/components/ui/textarea.d.ts.map +1 -1
  104. package/dist/components/ui/theme-toggle.d.ts +190 -65
  105. package/dist/components/ui/theme-toggle.d.ts.map +1 -1
  106. package/dist/components/ui/theme.d.ts +107 -23
  107. package/dist/components/ui/theme.d.ts.map +1 -1
  108. package/dist/components/ui/toggle-group.d.ts +143 -67
  109. package/dist/components/ui/toggle-group.d.ts.map +1 -1
  110. package/dist/components/ui/toggle.d.ts +118 -30
  111. package/dist/components/ui/toggle.d.ts.map +1 -1
  112. package/dist/components/ui/tooltip.d.ts +152 -28
  113. package/dist/components/ui/tooltip.d.ts.map +1 -1
  114. package/dist/components/ui/typography.d.ts +452 -134
  115. package/dist/components/ui/typography.d.ts.map +1 -1
  116. package/dist/index.js +9388 -8281
  117. package/dist/index.js.map +1 -1
  118. package/dist/tsconfig.tsbuildinfo +1 -1
  119. package/llms.txt +173 -3
  120. package/package.json +5 -2
  121. package/src/components/ui/accordion.tsx +112 -27
  122. package/src/components/ui/alert-dialog.tsx +401 -46
  123. package/src/components/ui/alert.tsx +114 -11
  124. package/src/components/ui/aspect-ratio.tsx +69 -14
  125. package/src/components/ui/avatar.tsx +179 -33
  126. package/src/components/ui/badge.tsx +74 -75
  127. package/src/components/ui/breadcrumb.tsx +335 -50
  128. package/src/components/ui/button.tsx +198 -90
  129. package/src/components/ui/calendar.tsx +867 -43
  130. package/src/components/ui/card.tsx +140 -33
  131. package/src/components/ui/carousel.tsx +529 -98
  132. package/src/components/ui/chart.tsx +222 -1
  133. package/src/components/ui/checkbox.tsx +176 -38
  134. package/src/components/ui/collapsible.tsx +321 -67
  135. package/src/components/ui/combobox.tsx +284 -83
  136. package/src/components/ui/command.tsx +527 -67
  137. package/src/components/ui/container.tsx +217 -65
  138. package/src/components/ui/context-menu.tsx +716 -51
  139. package/src/components/ui/date-picker.tsx +228 -38
  140. package/src/components/ui/dialog.tsx +270 -33
  141. package/src/components/ui/drawer.tsx +546 -67
  142. package/src/components/ui/dropdown-menu.tsx +657 -74
  143. package/src/components/ui/empty-state.tsx +241 -82
  144. package/src/components/ui/hover-card.tsx +328 -39
  145. package/src/components/ui/input.tsx +207 -44
  146. package/src/components/ui/label.tsx +98 -8
  147. package/src/components/ui/menubar.tsx +587 -54
  148. package/src/components/ui/navigation-menu.tsx +557 -128
  149. package/src/components/ui/pagination.tsx +561 -79
  150. package/src/components/ui/popover.tsx +119 -8
  151. package/src/components/ui/progress.tsx +131 -29
  152. package/src/components/ui/radio-group.tsx +260 -51
  153. package/src/components/ui/resizable.tsx +289 -63
  154. package/src/components/ui/scroll-area.tsx +377 -66
  155. package/src/components/ui/select.tsx +545 -60
  156. package/src/components/ui/separator.tsx +146 -40
  157. package/src/components/ui/sheet.tsx +348 -31
  158. package/src/components/ui/sidebar.tsx +471 -29
  159. package/src/components/ui/skeleton.tsx +114 -32
  160. package/src/components/ui/slider.tsx +77 -31
  161. package/src/components/ui/sonner.tsx +574 -46
  162. package/src/components/ui/stack.tsx +423 -101
  163. package/src/components/ui/switch.tsx +78 -39
  164. package/src/components/ui/table.tsx +170 -4
  165. package/src/components/ui/tabs.tsx +108 -22
  166. package/src/components/ui/text-field.tsx +226 -81
  167. package/src/components/ui/textarea.tsx +180 -29
  168. package/src/components/ui/theme-toggle.tsx +313 -65
  169. package/src/components/ui/theme.tsx +117 -23
  170. package/src/components/ui/toggle-group.tsx +280 -69
  171. package/src/components/ui/toggle.tsx +124 -35
  172. package/src/components/ui/tooltip.tsx +239 -29
  173. package/src/components/ui/typography.tsx +1115 -165
@@ -1,30 +1,89 @@
1
1
  import * as React from "react";
2
2
  import useEmblaCarousel, { type UseEmblaCarouselType } from "embla-carousel-react";
3
3
  import { Button } from "@/components/ui/button";
4
+ /** Embla Carousel API instance type for programmatic control */
4
5
  type CarouselApi = UseEmblaCarouselType[1];
6
+ /** Parameters for the useEmblaCarousel hook */
5
7
  type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
8
+ /** Embla Carousel configuration options */
6
9
  type CarouselOptions = UseCarouselParameters[0];
10
+ /** Array of Embla Carousel plugins */
7
11
  type CarouselPlugin = UseCarouselParameters[1];
12
+ /** Props for Carousel component (used in component implementation) */
8
13
  type CarouselProps = {
14
+ /** Embla Carousel configuration options */
9
15
  opts?: CarouselOptions;
16
+ /** Array of Embla Carousel plugins for extended functionality */
10
17
  plugins?: CarouselPlugin;
18
+ /** Carousel orientation/layout direction */
11
19
  orientation?: "horizontal" | "vertical";
20
+ /** Callback to receive the Embla Carousel API instance */
12
21
  setApi?: (api: CarouselApi) => void;
13
22
  };
23
+ /** Props for the carousel context provider */
24
+ type CarouselContextProps = {
25
+ /** Ref for the Embla carousel viewport element */
26
+ carouselRef: ReturnType<typeof useEmblaCarousel>[0];
27
+ /** Embla Carousel API instance for programmatic control */
28
+ api: ReturnType<typeof useEmblaCarousel>[1];
29
+ /** Function to scroll to the previous slide */
30
+ scrollPrev: () => void;
31
+ /** Function to scroll to the next slide */
32
+ scrollNext: () => void;
33
+ /** Whether the carousel can scroll to previous slide */
34
+ canScrollPrev: boolean;
35
+ /** Whether the carousel can scroll to next slide */
36
+ canScrollNext: boolean;
37
+ } & CarouselProps;
38
+ /**
39
+ * Hook to access carousel context and controls
40
+ *
41
+ * Must be used within a Carousel component. Provides access to the carousel
42
+ * API and navigation methods for building custom carousel interactions.
43
+ *
44
+ * @returns Carousel context containing API, navigation controls, and state
45
+ * @throws Error when used outside of Carousel component
46
+ *
47
+ * @example
48
+ * ```tsx
49
+ * function CarouselDots() {
50
+ * const { api, scrollNext, canScrollNext } = useCarousel();
51
+ * const [current, setCurrent] = useState(0);
52
+ *
53
+ * useEffect(() => {
54
+ * if (!api) return;
55
+ * setCurrent(api.selectedScrollSnap());
56
+ * api.on('select', () => setCurrent(api.selectedScrollSnap()));
57
+ * }, [api]);
58
+ *
59
+ * return (
60
+ * <div className="flex gap-2">
61
+ * {Array.from({ length: 5 }).map((_, i) => (
62
+ * <button
63
+ * key={i}
64
+ * className={current === i ? "active" : ""}
65
+ * onClick={() => api?.scrollTo(i)}
66
+ * />
67
+ * ))}
68
+ * </div>
69
+ * );
70
+ * }
71
+ * ```
72
+ *
73
+ * @see {@link Carousel} - Main carousel component
74
+ * @since 1.0.0
75
+ */
76
+ declare function useCarousel(): CarouselContextProps;
14
77
  /**
15
78
  * A responsive carousel/slider component for content presentation
16
79
  *
17
80
  * The Carousel component provides a touch-friendly, keyboard-accessible way to
18
81
  * browse through multiple items. Built on Embla Carousel, it supports various
19
- * configurations including autoplay, loop, drag scrolling, and both horizontal
20
- * and vertical orientations.
82
+ * configurations including autoplay, loop, drag scrolling, infinite scroll,
83
+ * momentum scrolling, and both horizontal and vertical orientations.
21
84
  *
22
- * @param opts - Embla Carousel configuration options (align, loop, etc.)
23
- * @param plugins - Array of Embla Carousel plugins (autoplay, etc.)
24
- * @param orientation - Layout direction: "horizontal" or "vertical" (default: "horizontal")
25
- * @param setApi - Callback to receive the carousel API instance
26
- * @param className - Additional CSS classes
27
- * @param children - Carousel content (typically CarouselContent and navigation buttons)
85
+ * Features include responsive breakpoints, plugin system, smooth animations,
86
+ * focus management, RTL support, and extensive customization options.
28
87
  *
29
88
  * @example
30
89
  * ```tsx
@@ -44,9 +103,16 @@ type CarouselProps = {
44
103
  *
45
104
  * @example
46
105
  * ```tsx
47
- * // Multi-item responsive carousel
106
+ * // Multi-item responsive carousel with custom spacing
48
107
  * <Carousel
49
- * opts={{ align: "start", loop: true }}
108
+ * opts={{
109
+ * align: "start",
110
+ * loop: true,
111
+ * slidesToScroll: "auto",
112
+ * breakpoints: {
113
+ * "(min-width: 768px)": { slidesToScroll: 2 }
114
+ * }
115
+ * }}
50
116
  * className="w-full"
51
117
  * >
52
118
  * <CarouselContent className="-ml-2 md:-ml-4">
@@ -68,12 +134,13 @@ type CarouselProps = {
68
134
  *
69
135
  * @example
70
136
  * ```tsx
71
- * // Vertical carousel with autoplay
137
+ * // Vertical carousel with autoplay plugin
72
138
  * import Autoplay from "embla-carousel-autoplay";
73
139
  *
74
140
  * <Carousel
75
141
  * orientation="vertical"
76
- * plugins={[Autoplay({ delay: 3000, stopOnInteraction: true })]}
142
+ * opts={{ loop: true, align: "center" }}
143
+ * plugins={[Autoplay({ delay: 3000, stopOnInteraction: true, stopOnMouseEnter: true })]}
77
144
  * className="h-[400px]"
78
145
  * >
79
146
  * <CarouselContent className="h-full">
@@ -91,47 +158,121 @@ type CarouselProps = {
91
158
  *
92
159
  * @example
93
160
  * ```tsx
94
- * // Controlled carousel with custom indicators
161
+ * // Controlled carousel with custom indicators and API access
162
+ * import { useState, useEffect } from "react";
163
+ *
95
164
  * function ControlledCarousel() {
96
165
  * const [api, setApi] = useState<CarouselApi>();
97
166
  * const [current, setCurrent] = useState(0);
167
+ * const [count, setCount] = useState(0);
98
168
  *
99
169
  * useEffect(() => {
100
170
  * if (!api) return;
101
- * setCurrent(api.selectedScrollSnap());
102
- * api.on('select', () => setCurrent(api.selectedScrollSnap()));
171
+ *
172
+ * setCount(api.scrollSnapList().length);
173
+ * setCurrent(api.selectedScrollSnap() + 1);
174
+ *
175
+ * api.on('select', () => {
176
+ * setCurrent(api.selectedScrollSnap() + 1);
177
+ * });
103
178
  * }, [api]);
104
179
  *
105
180
  * return (
106
- * <div>
107
- * <Carousel setApi={setApi}>
108
- * <CarouselContent>...</CarouselContent>
181
+ * <div className="space-y-4">
182
+ * <Carousel setApi={setApi} opts={{ loop: true }}>
183
+ * <CarouselContent>
184
+ * {slides.map((slide, index) => (
185
+ * <CarouselItem key={index}>{slide.content}</CarouselItem>
186
+ * ))}
187
+ * </CarouselContent>
188
+ * <CarouselPrevious />
189
+ * <CarouselNext />
109
190
  * </Carousel>
110
- * <div className="flex justify-center gap-2 mt-4">
111
- * {Array.from({ length: 5 }).map((_, i) => (
191
+ *
192
+ * // Custom indicators
193
+ * <div className="flex justify-center gap-2">
194
+ * {Array.from({ length: count }).map((_, i) => (
112
195
  * <button
113
196
  * key={i}
114
- * className={current === i ? "bg-primary" : "bg-muted"}
197
+ * className={cn(
198
+ * "w-2 h-2 rounded-full transition-colors",
199
+ * current === i + 1 ? "bg-primary" : "bg-muted"
200
+ * )}
115
201
  * onClick={() => api?.scrollTo(i)}
116
202
  * />
117
203
  * ))}
118
204
  * </div>
205
+ *
206
+ * <div className="text-center text-sm text-muted-foreground">
207
+ * Slide {current} of {count}
208
+ * </div>
119
209
  * </div>
120
210
  * );
121
211
  * }
122
212
  * ```
123
213
  *
214
+ * @example
215
+ * ```tsx
216
+ * // Momentum scrolling carousel with drag-free mode
217
+ * <Carousel
218
+ * opts={{
219
+ * dragFree: true,
220
+ * containScroll: false,
221
+ * skipSnaps: true
222
+ * }}
223
+ * className="w-full"
224
+ * >
225
+ * <CarouselContent>
226
+ * {items.map((item, index) => (
227
+ * <CarouselItem key={index} className="basis-auto">
228
+ * <div className="w-32 h-32 bg-muted rounded-lg" />
229
+ * </CarouselItem>
230
+ * ))}
231
+ * </CarouselContent>
232
+ * </Carousel>
233
+ * ```
234
+ *
235
+ * @example
236
+ * ```tsx
237
+ * // Breakpoint-responsive carousel that disables on larger screens
238
+ * <Carousel
239
+ * opts={{
240
+ * active: true,
241
+ * breakpoints: {
242
+ * "(min-width: 768px)": { active: false }
243
+ * }
244
+ * }}
245
+ * className="md:hidden"
246
+ * >
247
+ * <CarouselContent>
248
+ * {mobileItems.map((item, index) => (
249
+ * <CarouselItem key={index}>{item}</CarouselItem>
250
+ * ))}
251
+ * </CarouselContent>
252
+ * <CarouselPrevious />
253
+ * <CarouselNext />
254
+ * </Carousel>
255
+ * ```
256
+ *
124
257
  * @accessibility
125
- * - Keyboard navigation with arrow keys and tab focus
126
- * - Touch/swipe gestures and mouse drag support
127
- * - Screen reader announcements for slide changes
128
- * - ARIA roles and labels for navigation elements
129
- * - Focus management and visible focus indicators
130
- * - Respects reduced motion preferences
131
- * - RTL layout support
258
+ * - **Keyboard Navigation**: Arrow keys for slide navigation, Tab for focus management
259
+ * - **Touch/Drag Support**: Multi-touch gestures, mouse drag, momentum scrolling
260
+ * - **Screen Reader**: ARIA roles, labels, and announcements for slide changes
261
+ * - **Focus Management**: Automatic focus handling, visible focus indicators
262
+ * - **Motion**: Respects `prefers-reduced-motion` for accessibility
263
+ * - **RTL Support**: Right-to-left layout support with `direction: "rtl"` option
264
+ * - **High Contrast**: Proper color contrast for navigation elements
265
+ *
266
+ * **Keyboard Shortcuts:**
267
+ * - `←/→` or `↑/↓`: Navigate slides (based on orientation)
268
+ * - `Home`: Go to first slide
269
+ * - `End`: Go to last slide
270
+ * - `Tab`: Focus navigation elements
132
271
  *
133
272
  * @see {@link https://ui.shadcn.com/docs/components/carousel} shadcn/ui carousel documentation
134
273
  * @see {@link https://www.embla-carousel.com/} Embla Carousel documentation
274
+ * @see {@link https://www.embla-carousel.com/api/options/} Embla options reference
275
+ * @see {@link https://www.embla-carousel.com/plugins/} Available Embla plugins
135
276
  * @see {@link useCarousel} Hook for accessing carousel controls
136
277
  * @see {@link CarouselContent} Container for carousel items
137
278
  * @see {@link CarouselItem} Individual carousel slide
@@ -139,16 +280,21 @@ type CarouselProps = {
139
280
  * @see {@link CarouselNext} Next navigation button
140
281
  * @since 1.0.0
141
282
  */
142
- declare function Carousel({ orientation, opts, setApi, plugins, className, children, ...props }: React.ComponentProps<"div"> & CarouselProps): import("react/jsx-runtime").JSX.Element;
283
+ declare function Carousel({ orientation, opts, setApi, plugins, className, children, ...props }: CarouselProps & React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
284
+ /** Props for CarouselContent component (used in component implementation) */
285
+ type CarouselContentProps = {
286
+ /** Additional CSS classes for custom spacing and styling */
287
+ className?: string;
288
+ /** CarouselItem components and other slide content */
289
+ children?: React.ReactNode;
290
+ } & Omit<React.HTMLAttributes<HTMLDivElement>, "className" | "children">;
143
291
  /**
144
292
  * Container component for carousel items that handles the scrolling viewport
145
293
  *
146
294
  * Wraps all carousel items and manages the scrollable area. This component
147
- * must be a direct child of Carousel and handles orientation-specific layouts
148
- * and overflow behavior.
149
- *
150
- * @param className - Additional CSS classes for custom spacing and styling
151
- * @param children - CarouselItem components
295
+ * must be a direct child of Carousel and handles orientation-specific layouts,
296
+ * overflow behavior, and slide spacing. The outer div provides overflow clipping
297
+ * while the inner div contains the flex layout for slides.
152
298
  *
153
299
  * @example
154
300
  * ```tsx
@@ -162,47 +308,75 @@ declare function Carousel({ orientation, opts, setApi, plugins, className, child
162
308
  *
163
309
  * @example
164
310
  * ```tsx
165
- * // With custom spacing (horizontal)
311
+ * // Multi-item carousel with responsive spacing
166
312
  * <CarouselContent className="-ml-2 md:-ml-4">
167
- * <CarouselItem className="pl-2 md:pl-4">Slide 1</CarouselItem>
168
- * <CarouselItem className="pl-2 md:pl-4">Slide 2</CarouselItem>
313
+ * <CarouselItem className="pl-2 md:pl-4 md:basis-1/2 lg:basis-1/3">
314
+ * <Card>Product 1</Card>
315
+ * </CarouselItem>
316
+ * <CarouselItem className="pl-2 md:pl-4 md:basis-1/2 lg:basis-1/3">
317
+ * <Card>Product 2</Card>
318
+ * </CarouselItem>
169
319
  * </CarouselContent>
170
320
  * ```
171
321
  *
172
322
  * @example
173
323
  * ```tsx
174
- * // Vertical orientation spacing
324
+ * // Vertical orientation with custom height
175
325
  * <CarouselContent className="-mt-4 h-[300px]">
176
- * <CarouselItem className="pt-4">Slide 1</CarouselItem>
177
- * <CarouselItem className="pt-4">Slide 2</CarouselItem>
326
+ * <CarouselItem className="pt-4 basis-1/2">
327
+ * <div className="h-full bg-muted rounded-lg">Slide 1</div>
328
+ * </CarouselItem>
329
+ * <CarouselItem className="pt-4 basis-1/2">
330
+ * <div className="h-full bg-muted rounded-lg">Slide 2</div>
331
+ * </CarouselItem>
332
+ * </CarouselContent>
333
+ * ```
334
+ *
335
+ * @example
336
+ * ```tsx
337
+ * // Custom slide spacing with CSS variables
338
+ * <CarouselContent
339
+ * className="-ml-4"
340
+ * style={{ '--slide-spacing': '1rem' } as React.CSSProperties}
341
+ * >
342
+ * <CarouselItem className="pl-4">
343
+ * Content with custom spacing
344
+ * </CarouselItem>
178
345
  * </CarouselContent>
179
346
  * ```
180
347
  *
181
348
  * @accessibility
182
349
  * - Provides scrollable container with proper overflow handling
183
350
  * - Maintains responsive layout for horizontal/vertical orientations
184
- * - Works with screen readers for content navigation
351
+ * - Supports screen reader navigation through slide content
352
+ * - Preserves focus management within slides
353
+ * - Uses semantic HTML structure for assistive technologies
185
354
  *
186
355
  * @see {@link Carousel} Main carousel component
187
356
  * @see {@link CarouselItem} Individual carousel slides
188
357
  * @since 1.0.0
189
358
  */
190
- declare function CarouselContent({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
359
+ declare function CarouselContent({ className, ...props }: CarouselContentProps): import("react/jsx-runtime").JSX.Element;
360
+ /** Props for CarouselItem component (used in component implementation) */
361
+ type CarouselItemProps = {
362
+ /** Additional CSS classes for sizing, spacing, and styling */
363
+ className?: string;
364
+ /** Content to display within the slide */
365
+ children?: React.ReactNode;
366
+ } & Omit<React.HTMLAttributes<HTMLDivElement>, "className" | "children">;
191
367
  /**
192
368
  * Individual slide/item component within the carousel
193
369
  *
194
370
  * Represents a single slide in the carousel that can contain any content.
195
371
  * Automatically handles sizing, spacing, and orientation-specific layouts
196
- * based on the parent carousel configuration.
197
- *
198
- * @param className - Additional CSS classes for sizing (basis-*) and spacing
199
- * @param children - Content to display within the slide
372
+ * based on the parent carousel configuration. Each slide is a flex item
373
+ * with configurable basis for responsive layouts.
200
374
  *
201
375
  * @example
202
376
  * ```tsx
203
377
  * // Basic slide with content
204
378
  * <CarouselItem>
205
- * <div className="p-6">
379
+ * <div className="p-6 bg-muted rounded-lg">
206
380
  * <h3 className="text-lg font-semibold">Slide Title</h3>
207
381
  * <p className="text-muted-foreground">Slide description</p>
208
382
  * </div>
@@ -211,60 +385,95 @@ declare function CarouselContent({ className, ...props }: React.ComponentProps<"
211
385
  *
212
386
  * @example
213
387
  * ```tsx
214
- * // Card-based slide
388
+ * // Card-based slide with structured content
215
389
  * <CarouselItem>
216
- * <Card>
390
+ * <Card className="h-full">
217
391
  * <CardHeader>
218
392
  * <CardTitle>Product Name</CardTitle>
393
+ * <CardDescription>Product category</CardDescription>
219
394
  * </CardHeader>
220
395
  * <CardContent>
221
- * <img src="product.jpg" alt="Product" className="w-full" />
222
- * <p className="mt-2">$99.99</p>
396
+ * <img src="product.jpg" alt="Product" className="w-full aspect-square object-cover" />
397
+ * <p className="mt-2 text-2xl font-bold">$99.99</p>
223
398
  * </CardContent>
399
+ * <CardFooter>
400
+ * <Button className="w-full">Add to Cart</Button>
401
+ * </CardFooter>
224
402
  * </Card>
225
403
  * </CarouselItem>
226
404
  * ```
227
405
  *
228
406
  * @example
229
407
  * ```tsx
230
- * // Responsive sizing - multiple items visible
231
- * <CarouselItem className="md:basis-1/2 lg:basis-1/3">
232
- * <div className="aspect-square bg-muted rounded-lg" />
408
+ * // Responsive multi-item carousel
409
+ * <CarouselItem className="pl-4 basis-full sm:basis-1/2 lg:basis-1/3">
410
+ * <div className="aspect-square bg-gradient-to-br from-blue-400 to-purple-600 rounded-lg p-6 text-white">
411
+ * <h4 className="font-semibold">Feature {index + 1}</h4>
412
+ * <p className="text-sm opacity-90">Description text</p>
413
+ * </div>
414
+ * </CarouselItem>
415
+ * ```
416
+ *
417
+ * @example
418
+ * ```tsx
419
+ * // Auto-sized slides for variable content
420
+ * <CarouselItem className="basis-auto">
421
+ * <Badge variant="secondary" className="text-nowrap px-4 py-2">
422
+ * {tag.label}
423
+ * </Badge>
233
424
  * </CarouselItem>
234
425
  * ```
235
426
  *
236
427
  * @example
237
428
  * ```tsx
238
- * // Custom sizing with fixed width
429
+ * // Image gallery slide with aspect ratio
239
430
  * <CarouselItem className="basis-4/5">
240
- * <div className="w-full h-48 bg-gradient-to-r from-blue-500 to-purple-600" />
431
+ * <div className="relative aspect-video bg-muted rounded-lg overflow-hidden">
432
+ * <img
433
+ * src={image.src}
434
+ * alt={image.alt}
435
+ * className="object-cover w-full h-full"
436
+ * />
437
+ * <div className="absolute inset-0 bg-black/20 flex items-end p-4">
438
+ * <h5 className="text-white font-medium">{image.title}</h5>
439
+ * </div>
440
+ * </div>
241
441
  * </CarouselItem>
242
442
  * ```
243
443
  *
244
444
  * @accessibility
245
- * - Labeled as a slide with proper ARIA role for screen readers
246
- * - Maintains focus behavior and keyboard navigation
247
- * - Preserves content structure for assistive technologies
445
+ * - **ARIA Role**: Labeled as "slide" with proper role for screen readers
446
+ * - **Focus Management**: Maintains focus behavior and keyboard navigation
447
+ * - **Content Structure**: Preserves semantic structure for assistive technologies
448
+ * - **Interactive Elements**: Supports focusable elements within slides
449
+ * - **Screen Reader**: Announces slide position and content appropriately
248
450
  *
249
451
  * @see {@link Carousel} Main carousel component
250
452
  * @see {@link CarouselContent} Container for carousel items
251
453
  * @since 1.0.0
252
454
  */
253
- declare function CarouselItem({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
455
+ declare function CarouselItem({ className, ...props }: CarouselItemProps): import("react/jsx-runtime").JSX.Element;
456
+ /** Props for CarouselPrevious component (used in component implementation) */
457
+ type CarouselPreviousProps = {
458
+ /** Additional CSS classes for custom positioning and styling */
459
+ className?: string;
460
+ /** Button variant styling */
461
+ variant?: React.ComponentProps<typeof Button>["variant"];
462
+ /** Button size */
463
+ size?: React.ComponentProps<typeof Button>["size"];
464
+ } & Omit<React.ComponentProps<typeof Button>, "className" | "variant" | "size">;
254
465
  /**
255
466
  * Navigation button to go to the previous carousel slide
256
467
  *
257
468
  * Renders a previous navigation button that automatically handles disabled
258
- * states when at the beginning of the carousel. Supports both horizontal
259
- * and vertical orientations with appropriate positioning.
260
- *
261
- * @param className - Additional CSS classes for custom positioning and styling
262
- * @param variant - Button variant (default: "outline")
263
- * @param size - Button size (default: "icon")
469
+ * states when at the beginning of the carousel (unless loop is enabled).
470
+ * Supports both horizontal and vertical orientations with appropriate
471
+ * positioning and icon rotation. Integrates with the carousel context
472
+ * to provide seamless navigation.
264
473
  *
265
474
  * @example
266
475
  * ```tsx
267
- * // Basic usage
476
+ * // Basic usage with default styling
268
477
  * <Carousel>
269
478
  * <CarouselContent>
270
479
  * <CarouselItem>Slide 1</CarouselItem>
@@ -277,9 +486,9 @@ declare function CarouselItem({ className, ...props }: React.ComponentProps<"div
277
486
  *
278
487
  * @example
279
488
  * ```tsx
280
- * // Custom styling
489
+ * // Custom positioned button
281
490
  * <CarouselPrevious
282
- * className="-left-8 bg-background shadow-md"
491
+ * className="-left-8 bg-background shadow-md hover:shadow-lg"
283
492
  * variant="ghost"
284
493
  * size="sm"
285
494
  * />
@@ -287,41 +496,75 @@ declare function CarouselItem({ className, ...props }: React.ComponentProps<"div
287
496
  *
288
497
  * @example
289
498
  * ```tsx
290
- * // Vertical carousel positioning
291
- * <Carousel orientation="vertical">
499
+ * // Vertical carousel with rotated icons
500
+ * <Carousel orientation="vertical" className="h-[400px]">
292
501
  * <CarouselContent>...</CarouselContent>
293
- * <CarouselPrevious />
294
- * <CarouselNext />
502
+ * <CarouselPrevious className="-top-8" />
503
+ * <CarouselNext className="-bottom-8" />
295
504
  * </Carousel>
296
505
  * ```
297
506
  *
507
+ * @example
508
+ * ```tsx
509
+ * // Inside carousel bounds positioning
510
+ * <div className="relative">
511
+ * <Carousel>
512
+ * <CarouselContent>...</CarouselContent>
513
+ * <CarouselPrevious className="absolute left-4 top-1/2 -translate-y-1/2 z-10" />
514
+ * <CarouselNext className="absolute right-4 top-1/2 -translate-y-1/2 z-10" />
515
+ * </Carousel>
516
+ * </div>
517
+ * ```
518
+ *
519
+ * @example
520
+ * ```tsx
521
+ * // Custom button content and accessibility
522
+ * <CarouselPrevious
523
+ * variant="secondary"
524
+ * className="w-auto px-4"
525
+ * aria-label="Go to previous product"
526
+ * >
527
+ * <ArrowLeft className="w-4 h-4 mr-2" />
528
+ * Previous
529
+ * </CarouselPrevious>
530
+ * ```
531
+ *
298
532
  * @accessibility
299
- * - Keyboard accessible with proper focus management
300
- * - Screen reader label "Previous slide" for context
301
- * - Automatically disabled when cannot scroll further
302
- * - High contrast focus indicators
303
- * - Supports reduced motion preferences
533
+ * - **Keyboard Navigation**: Accessible via Tab and Enter/Space
534
+ * - **Screen Reader**: Built-in "Previous slide" label with sr-only text
535
+ * - **Disabled State**: Automatically disabled when cannot scroll further
536
+ * - **Focus Indicators**: High contrast focus ring for keyboard navigation
537
+ * - **Motion**: Respects `prefers-reduced-motion` for animations
538
+ * - **Touch**: Large enough touch target (44px minimum) for mobile accessibility
539
+ * - **Icon**: ArrowLeft icon rotated appropriately for vertical orientation
304
540
  *
305
541
  * @see {@link Carousel} Main carousel component
306
542
  * @see {@link CarouselNext} Next navigation button
307
543
  * @see {@link Button} Underlying button component
308
544
  * @since 1.0.0
309
545
  */
310
- declare function CarouselPrevious({ className, variant, size, ...props }: React.ComponentProps<typeof Button>): import("react/jsx-runtime").JSX.Element;
546
+ declare function CarouselPrevious({ className, variant, size, ...props }: CarouselPreviousProps): import("react/jsx-runtime").JSX.Element;
547
+ /** Props for CarouselNext component (used in component implementation) */
548
+ type CarouselNextProps = {
549
+ /** Additional CSS classes for custom positioning and styling */
550
+ className?: string;
551
+ /** Button variant styling */
552
+ variant?: React.ComponentProps<typeof Button>["variant"];
553
+ /** Button size */
554
+ size?: React.ComponentProps<typeof Button>["size"];
555
+ } & Omit<React.ComponentProps<typeof Button>, "className" | "variant" | "size">;
311
556
  /**
312
557
  * Navigation button to go to the next carousel slide
313
558
  *
314
559
  * Renders a next navigation button that automatically handles disabled
315
- * states when at the end of the carousel. Supports both horizontal
316
- * and vertical orientations with appropriate positioning.
317
- *
318
- * @param className - Additional CSS classes for custom positioning and styling
319
- * @param variant - Button variant (default: "outline")
320
- * @param size - Button size (default: "icon")
560
+ * states when at the end of the carousel (unless loop is enabled).
561
+ * Supports both horizontal and vertical orientations with appropriate
562
+ * positioning and icon rotation. Integrates with the carousel context
563
+ * to provide seamless navigation.
321
564
  *
322
565
  * @example
323
566
  * ```tsx
324
- * // Basic usage
567
+ * // Basic usage with default styling
325
568
  * <Carousel>
326
569
  * <CarouselContent>
327
570
  * <CarouselItem>Slide 1</CarouselItem>
@@ -334,9 +577,9 @@ declare function CarouselPrevious({ className, variant, size, ...props }: React.
334
577
  *
335
578
  * @example
336
579
  * ```tsx
337
- * // Custom styling
580
+ * // Custom positioned button
338
581
  * <CarouselNext
339
- * className="-right-8 bg-background shadow-md"
582
+ * className="-right-8 bg-background shadow-md hover:shadow-lg"
340
583
  * variant="ghost"
341
584
  * size="sm"
342
585
  * />
@@ -344,26 +587,53 @@ declare function CarouselPrevious({ className, variant, size, ...props }: React.
344
587
  *
345
588
  * @example
346
589
  * ```tsx
347
- * // Vertical carousel positioning
348
- * <Carousel orientation="vertical">
590
+ * // Vertical carousel with rotated icons
591
+ * <Carousel orientation="vertical" className="h-[400px]">
349
592
  * <CarouselContent>...</CarouselContent>
350
- * <CarouselPrevious />
351
- * <CarouselNext />
593
+ * <CarouselPrevious className="-top-8" />
594
+ * <CarouselNext className="-bottom-8" />
352
595
  * </Carousel>
353
596
  * ```
354
597
  *
598
+ * @example
599
+ * ```tsx
600
+ * // Inside carousel bounds positioning
601
+ * <div className="relative">
602
+ * <Carousel>
603
+ * <CarouselContent>...</CarouselContent>
604
+ * <CarouselPrevious className="absolute left-4 top-1/2 -translate-y-1/2 z-10" />
605
+ * <CarouselNext className="absolute right-4 top-1/2 -translate-y-1/2 z-10" />
606
+ * </Carousel>
607
+ * </div>
608
+ * ```
609
+ *
610
+ * @example
611
+ * ```tsx
612
+ * // Custom button content and accessibility
613
+ * <CarouselNext
614
+ * variant="secondary"
615
+ * className="w-auto px-4"
616
+ * aria-label="Go to next product"
617
+ * >
618
+ * Next
619
+ * <ArrowRight className="w-4 h-4 ml-2" />
620
+ * </CarouselNext>
621
+ * ```
622
+ *
355
623
  * @accessibility
356
- * - Keyboard accessible with proper focus management
357
- * - Screen reader label "Next slide" for context
358
- * - Automatically disabled when cannot scroll further
359
- * - High contrast focus indicators
360
- * - Supports reduced motion preferences
624
+ * - **Keyboard Navigation**: Accessible via Tab and Enter/Space
625
+ * - **Screen Reader**: Built-in "Next slide" label with sr-only text
626
+ * - **Disabled State**: Automatically disabled when cannot scroll further
627
+ * - **Focus Indicators**: High contrast focus ring for keyboard navigation
628
+ * - **Motion**: Respects `prefers-reduced-motion` for animations
629
+ * - **Touch**: Large enough touch target (44px minimum) for mobile accessibility
630
+ * - **Icon**: ArrowRight icon rotated appropriately for vertical orientation
361
631
  *
362
632
  * @see {@link Carousel} Main carousel component
363
633
  * @see {@link CarouselPrevious} Previous navigation button
364
634
  * @see {@link Button} Underlying button component
365
635
  * @since 1.0.0
366
636
  */
367
- declare function CarouselNext({ className, variant, size, ...props }: React.ComponentProps<typeof Button>): import("react/jsx-runtime").JSX.Element;
368
- export { type CarouselApi, Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext, };
637
+ declare function CarouselNext({ className, variant, size, ...props }: CarouselNextProps): import("react/jsx-runtime").JSX.Element;
638
+ export { type CarouselApi, type CarouselProps, type CarouselContentProps, type CarouselItemProps, type CarouselPreviousProps, type CarouselNextProps, Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext, useCarousel, };
369
639
  //# sourceMappingURL=carousel.d.ts.map