@bug-on/m3-expressive 1.3.0 → 1.3.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 (69) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +88 -60
  3. package/dist/buttons.d.mts +3 -3
  4. package/dist/buttons.d.ts +3 -3
  5. package/dist/buttons.js +185 -40
  6. package/dist/buttons.js.map +1 -1
  7. package/dist/buttons.mjs +186 -41
  8. package/dist/buttons.mjs.map +1 -1
  9. package/dist/{core-CAU8g2HY.d.mts → core-D8FdHY6I.d.mts} +1 -1
  10. package/dist/{core-DRrLnsnJ.d.ts → core-DyEy8H9Z.d.ts} +1 -1
  11. package/dist/core.d.mts +2 -2
  12. package/dist/core.d.ts +2 -2
  13. package/dist/core.js +156 -25
  14. package/dist/core.js.map +1 -1
  15. package/dist/core.mjs +157 -26
  16. package/dist/core.mjs.map +1 -1
  17. package/dist/feedback.d.mts +20 -0
  18. package/dist/feedback.d.ts +20 -0
  19. package/dist/feedback.js +157 -26
  20. package/dist/feedback.js.map +1 -1
  21. package/dist/feedback.mjs +158 -27
  22. package/dist/feedback.mjs.map +1 -1
  23. package/dist/forms.d.mts +4 -2
  24. package/dist/forms.d.ts +4 -2
  25. package/dist/forms.js +5065 -2980
  26. package/dist/forms.js.map +1 -1
  27. package/dist/forms.mjs +5064 -2982
  28. package/dist/forms.mjs.map +1 -1
  29. package/dist/{icon-button-USJo7AqO.d.mts → icon-button-CxyJv7UV.d.mts} +1 -1
  30. package/dist/{icon-button-CqdQBsRe.d.ts → icon-button-Di8VX6ou.d.ts} +1 -1
  31. package/dist/index.d.mts +12 -82
  32. package/dist/index.d.ts +12 -82
  33. package/dist/index.js +2875 -1226
  34. package/dist/index.js.map +1 -1
  35. package/dist/index.mjs +2723 -1086
  36. package/dist/index.mjs.map +1 -1
  37. package/dist/layout.d.mts +481 -33
  38. package/dist/layout.d.ts +481 -33
  39. package/dist/layout.js +1653 -243
  40. package/dist/layout.js.map +1 -1
  41. package/dist/layout.mjs +1626 -232
  42. package/dist/layout.mjs.map +1 -1
  43. package/dist/{md3-D0_Z7IXj.d.mts → md3-BQhRygSi.d.mts} +1 -1
  44. package/dist/{md3-D0_Z7IXj.d.ts → md3-BQhRygSi.d.ts} +1 -1
  45. package/dist/menu-types-rZNQFO7Y.d.mts +315 -0
  46. package/dist/menu-types-rZNQFO7Y.d.ts +315 -0
  47. package/dist/navigation.d.mts +5 -289
  48. package/dist/navigation.d.ts +5 -289
  49. package/dist/navigation.js +575 -271
  50. package/dist/navigation.js.map +1 -1
  51. package/dist/navigation.mjs +568 -265
  52. package/dist/navigation.mjs.map +1 -1
  53. package/dist/overlays.d.mts +2 -2
  54. package/dist/overlays.d.ts +2 -2
  55. package/dist/overlays.js +156 -25
  56. package/dist/overlays.js.map +1 -1
  57. package/dist/overlays.mjs +157 -26
  58. package/dist/overlays.mjs.map +1 -1
  59. package/dist/pickers.js +156 -25
  60. package/dist/pickers.js.map +1 -1
  61. package/dist/pickers.mjs +157 -26
  62. package/dist/pickers.mjs.map +1 -1
  63. package/dist/{side-sheet-modal-Dgjt739k.d.mts → side-sheet-modal-64FGhDxL.d.mts} +1 -1
  64. package/dist/{side-sheet-modal-DdEZR6Vl.d.ts → side-sheet-modal-Bd5Qqvp9.d.ts} +1 -1
  65. package/dist/{split-button-trailing-uncheckable-26qlZvKT.d.mts → split-button-trailing-uncheckable-CGzk7KcG.d.ts} +3 -1
  66. package/dist/{split-button-trailing-uncheckable-CXUVrH64.d.ts → split-button-trailing-uncheckable-gAz6OAIi.d.mts} +3 -1
  67. package/dist/{text-field-DWC7qOvp.d.ts → text-field-4OlT9o8s.d.mts} +206 -55
  68. package/dist/{text-field-DWC7qOvp.d.mts → text-field-DARNdj14.d.ts} +206 -55
  69. package/package.json +3 -3
package/dist/layout.d.ts CHANGED
@@ -1,35 +1,205 @@
1
1
  import * as class_variance_authority_types from 'class-variance-authority/types';
2
- import { VariantProps } from 'class-variance-authority';
2
+ import * as React$1 from 'react';
3
+ import { HTMLAttributes, ReactNode } from 'react';
3
4
  import { HTMLMotionProps } from 'motion/react';
4
- import * as React from 'react';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
6
  import { b as ScrollAreaProps } from './scroll-area-CVS6HyLl.js';
7
7
  export { S as ScrollArea, a as ScrollAreaOrientation, c as ScrollAreaScrollbar, d as ScrollAreaType } from './scroll-area-CVS6HyLl.js';
8
+ import { VariantProps } from 'class-variance-authority';
8
9
  export { D as DEFAULT_FONT_VARIATION_AXES, F as FontVariationAxes, M as MD3_EXPRESSIVE_FONT_VARIATION, T as TextStyle, a as Typography, b as TypographyContext, c as TypographyKeyTokens, d as TypographyProvider, e as TypographyProviderProps, f as TypographyTokens, g as TypographyTokensOptions, s as serializeFontVariationAxes, u as useTypography } from './typography-339RV6v7.js';
9
10
  import '@radix-ui/react-scroll-area';
10
11
 
11
- declare const cardVariants: (props?: ({
12
- variant?: "outlined" | "elevated" | "filled" | null | undefined;
13
- } & class_variance_authority_types.ClassProp) | undefined) => string;
12
+ /**
13
+ * @file card-tokens.ts
14
+ *
15
+ * MD3 Expressive Card Elevation & Motion Tokens.
16
+ *
17
+ * Elevation levels translated from:
18
+ * - ElevatedCardTokens.kt
19
+ * - FilledCardTokens.kt
20
+ * - OutlinedCardTokens.kt
21
+ * - Elevation.kt
22
+ *
23
+ * Elevation Levels:
24
+ * - Level 0: 0dp (Flat - "none")
25
+ * - Level 1: 1dp (Slight elevation - Elevated rest)
26
+ * - Level 2: 3dp (Hover / Focus elevation for Elevated, Hover for Filled/Outlined)
27
+ * - Level 3: 6dp (Dragged state elevation)
28
+ * - Level 4: 8dp (Pickers/Popups elevation)
29
+ * - Level 5: 12dp (Modals/Dialogs elevation)
30
+ */
31
+ declare const SHADOW: {
32
+ readonly level0: "none";
33
+ readonly level1: "0px 1px 2px 0px rgba(0,0,0,.3), 0px 1px 3px 1px rgba(0,0,0,.15)";
34
+ readonly level2: "0px 1px 2px 0px rgba(0,0,0,.3), 0px 2px 6px 2px rgba(0,0,0,.15)";
35
+ readonly level3: "0px 4px 8px 3px rgba(0,0,0,.15), 0px 1px 3px 0px rgba(0,0,0,.3)";
36
+ readonly level4: "0px 6px 10px 4px rgba(0,0,0,.15), 0px 2px 3px 0px rgba(0,0,0,.3)";
37
+ readonly level5: "0px 8px 12px 6px rgba(0,0,0,.15), 0px 4px 4px 0px rgba(0,0,0,.3)";
38
+ };
39
+ type ShadowLevel = keyof typeof SHADOW;
40
+ type ElevationLevel = 0 | 1 | 2 | 3 | 4 | 5;
41
+ type CardElevationConfig = ElevationLevel | {
42
+ rest?: ElevationLevel | string;
43
+ hover?: ElevationLevel | string;
44
+ pressed?: ElevationLevel | string;
45
+ dragged?: ElevationLevel | string;
46
+ };
47
+ /**
48
+ * Resolves a numeric level (0–5) or custom box-shadow string to an MD3 shadow value.
49
+ */
50
+ declare function resolveElevationShadow(level: ElevationLevel | string | undefined): string | undefined;
51
+ /**
52
+ * Maps each card variant to its elevation level across interaction states.
53
+ * - Elevated: Rest (Level 1) -> Hover/Focus (Level 2) -> Pressed (Level 1) -> Dragged (Level 3)
54
+ * - Filled: Rest (Level 0) -> Hover/Focus (Level 1) -> Pressed (Level 0) -> Dragged (Level 3)
55
+ * - Outlined: Rest (Level 0) -> Hover/Focus (Level 1) -> Pressed (Level 0) -> Dragged (Level 3)
56
+ */
57
+ declare const VARIANT_ELEVATION: {
58
+ readonly elevated: {
59
+ readonly rest: "0px 1px 2px 0px rgba(0,0,0,.3), 0px 1px 3px 1px rgba(0,0,0,.15)";
60
+ readonly hover: "0px 1px 2px 0px rgba(0,0,0,.3), 0px 2px 6px 2px rgba(0,0,0,.15)";
61
+ readonly pressed: "0px 1px 2px 0px rgba(0,0,0,.3), 0px 1px 3px 1px rgba(0,0,0,.15)";
62
+ readonly dragged: "0px 4px 8px 3px rgba(0,0,0,.15), 0px 1px 3px 0px rgba(0,0,0,.3)";
63
+ readonly disabled: "0px 1px 2px 0px rgba(0,0,0,.3), 0px 1px 3px 1px rgba(0,0,0,.15)";
64
+ };
65
+ readonly filled: {
66
+ readonly rest: "none";
67
+ readonly hover: "0px 1px 2px 0px rgba(0,0,0,.3), 0px 1px 3px 1px rgba(0,0,0,.15)";
68
+ readonly pressed: "none";
69
+ readonly dragged: "0px 4px 8px 3px rgba(0,0,0,.15), 0px 1px 3px 0px rgba(0,0,0,.3)";
70
+ readonly disabled: "none";
71
+ };
72
+ readonly outlined: {
73
+ readonly rest: "none";
74
+ readonly hover: "0px 1px 2px 0px rgba(0,0,0,.3), 0px 1px 3px 1px rgba(0,0,0,.15)";
75
+ readonly pressed: "none";
76
+ readonly dragged: "0px 4px 8px 3px rgba(0,0,0,.15), 0px 1px 3px 0px rgba(0,0,0,.3)";
77
+ readonly disabled: "none";
78
+ };
79
+ };
80
+ type CardVariant = keyof typeof VARIANT_ELEVATION;
81
+ interface CardElevationOptions {
82
+ variant?: CardVariant;
83
+ disabled?: boolean;
84
+ draggable?: boolean;
85
+ elevation?: CardElevationConfig;
86
+ disableElevation?: boolean;
87
+ hoverEffect?: boolean;
88
+ }
89
+ /**
90
+ * Hook: Card Elevation Animation
91
+ * Calculates animated boxShadow states based on variant, overrides, and interaction flags.
92
+ */
93
+ declare function useCardElevation({ variant, disabled, draggable, elevation, disableElevation, hoverEffect, }: CardElevationOptions): {
94
+ animate: {
95
+ boxShadow: string;
96
+ };
97
+ whileHover: {
98
+ boxShadow: string;
99
+ } | undefined;
100
+ whileTap: {
101
+ boxShadow: string;
102
+ } | undefined;
103
+ whileFocus: {
104
+ boxShadow: string;
105
+ } | undefined;
106
+ whileDrag: {
107
+ boxShadow: string;
108
+ } | undefined;
109
+ transition: {
110
+ boxShadow: {
111
+ duration: number;
112
+ ease: [number, number, number, number];
113
+ };
114
+ };
115
+ };
116
+
117
+ /**
118
+ * @file types.ts
119
+ *
120
+ * Types and interfaces for the MD3 Expressive Card system.
121
+ */
122
+
14
123
  type MotionDivProps = Omit<HTMLMotionProps<"button">, "children" | "color">;
15
- interface CardProps extends MotionDivProps, VariantProps<typeof cardVariants> {
16
- /** Disables interaction and reduces opacity (MD3 disabled state). */
124
+ interface CardProps extends MotionDivProps {
125
+ /**
126
+ * Visual style variant of the card.
127
+ * - `elevated`: Surface container low + elevation drop shadow (rest: level1, hover: level2).
128
+ * - `filled`: Surface container highest (rest: level0, hover: level1).
129
+ * - `outlined`: Surface background + outline variant border (rest: level0, hover: level1).
130
+ * @default "elevated"
131
+ */
132
+ variant?: CardVariant;
133
+ /**
134
+ * Custom numeric elevation level (0–5) or granular per-state elevation configuration.
135
+ * - Numeric: `elevation={0}` (flat/none), `elevation={2}`, etc.
136
+ * - Object: `elevation={{ rest: 0, hover: 2, pressed: 1, dragged: 3 }}`
137
+ */
138
+ elevation?: CardElevationConfig;
139
+ /**
140
+ * Disables all elevation drop shadows completely (forces Level 0 / "none").
141
+ * @default false
142
+ */
143
+ disableElevation?: boolean;
144
+ /**
145
+ * Controls whether the ripple effect is enabled on interactive cards.
146
+ * @default true (on interactive cards)
147
+ */
148
+ ripple?: boolean;
149
+ /**
150
+ * Shorthand flag to disable the ripple effect.
151
+ * @default false
152
+ */
153
+ disableRipple?: boolean;
154
+ /**
155
+ * Controls whether hover elevates the card.
156
+ * Set to `false` to disable hover elevation changes while keeping interactivity.
157
+ * @default true
158
+ */
159
+ hoverEffect?: boolean;
160
+ /**
161
+ * Shorthand flag to disable hover elevation changes.
162
+ * @default false
163
+ */
164
+ disableHoverEffect?: boolean;
165
+ /**
166
+ * Controls whether MD3 interactive state layer overlays (hover/focus/active) are shown.
167
+ * @default true
168
+ */
169
+ stateLayer?: boolean;
170
+ /**
171
+ * Shorthand flag to disable the state layer overlay.
172
+ * @default false
173
+ */
174
+ disableStateLayer?: boolean;
175
+ /**
176
+ * Disables interaction and reduces opacity to 38% (MD3 disabled specification).
177
+ * @default false
178
+ */
17
179
  disabled?: boolean;
18
180
  /**
19
181
  * Forces card to be interactive even without `onClick`.
20
- * Useful when card contains child interactive elements.
182
+ * Useful when card contains child interactive elements or is selectable.
183
+ * @default false
21
184
  */
22
185
  interactive?: boolean;
23
186
  /**
24
- * If provided, renders card as `<a>` element. Automatically enables interactive mode.
25
- * Prefer `href` over `onClick` for page navigation.
187
+ * Opts in to MD3 drag state elevation and interaction layer.
188
+ * When true, animates to Level 3 elevation on drag.
189
+ * @default false
190
+ */
191
+ draggable?: boolean;
192
+ /**
193
+ * If provided, renders card as an `<a>` element. Automatically enables interactive mode.
194
+ * Prefer `href` over `onClick` for navigation.
26
195
  */
27
196
  href?: string;
28
197
  /** Target for `<a>` element (effective only when `href` is provided). */
29
- target?: React.AnchorHTMLAttributes<HTMLAnchorElement>["target"];
198
+ target?: React$1.AnchorHTMLAttributes<HTMLAnchorElement>["target"];
30
199
  /** rel for `<a>` element (automatically adds `noreferrer` when `target="_blank"`). */
31
200
  rel?: string;
32
- children?: React.ReactNode;
201
+ /** Card inner children. */
202
+ children?: React$1.ReactNode;
33
203
  /**
34
204
  * Change the component to the underlying child element and merge props/behavior.
35
205
  * Useful when wrapping in Next.js `<Link>` or custom anchor tags.
@@ -37,7 +207,285 @@ interface CardProps extends MotionDivProps, VariantProps<typeof cardVariants> {
37
207
  */
38
208
  asChild?: boolean;
39
209
  }
40
- declare const Card: React.NamedExoticComponent<Omit<CardProps, "ref"> & React.RefAttributes<HTMLElement>>;
210
+ interface CardHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
211
+ /** Leading avatar or icon node. */
212
+ avatar?: React$1.ReactNode;
213
+ /** Primary title text or element. */
214
+ title?: React$1.ReactNode;
215
+ /** Subheader or supporting text below the title. */
216
+ subheader?: React$1.ReactNode;
217
+ /** Trailing action element (e.g., IconButton for overflow menu). */
218
+ action?: React$1.ReactNode;
219
+ }
220
+ interface CardMediaProps extends React$1.HTMLAttributes<HTMLDivElement> {
221
+ /** Image or media source URL. */
222
+ src?: string;
223
+ /** Alternative text for screen readers. */
224
+ alt?: string;
225
+ /**
226
+ * Aspect ratio for the media container.
227
+ * - `video`: 16/9
228
+ * - `square`: 1/1
229
+ * - `wide`: 21/9
230
+ * - `auto`: natural dimensions
231
+ * @default "video"
232
+ */
233
+ aspectRatio?: "video" | "square" | "wide" | "auto" | string;
234
+ /**
235
+ * Custom element or component override (e.g. `img`, `video`, `div`, Next.js `Image`).
236
+ * @default "div" (or "img" when src is provided without children)
237
+ */
238
+ component?: React$1.ElementType;
239
+ }
240
+ interface CardContentProps extends React$1.HTMLAttributes<HTMLDivElement> {
241
+ /** Additional CSS classes for custom padding or layout. */
242
+ className?: string;
243
+ }
244
+ interface CardFooterProps extends React$1.HTMLAttributes<HTMLDivElement> {
245
+ /**
246
+ * Alignment of actions within the footer.
247
+ * @default "end"
248
+ */
249
+ align?: "start" | "center" | "end" | "between";
250
+ }
251
+
252
+ declare const cardVariants: (props?: ({
253
+ variant?: "outlined" | "elevated" | "filled" | null | undefined;
254
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
255
+ declare const Card: React$1.NamedExoticComponent<Omit<CardProps, "ref"> & React$1.RefAttributes<HTMLElement>>;
256
+
257
+ /**
258
+ * @file card-sub-components.tsx
259
+ *
260
+ * Sub-components for MD3 Expressive Card layout anatomy:
261
+ * - CardHeader: Avatar / Icon + Title + Subtitle + Action slot
262
+ * - CardMedia: Responsive media region (image/video) with aspect ratio control
263
+ * - CardContent: Main body text & descriptive content area
264
+ * - CardFooter: Action buttons row with flexible alignment
265
+ *
266
+ * @see https://m3.material.io/components/cards/guidelines#anatomy
267
+ */
268
+
269
+ declare const CardHeader: React$1.ForwardRefExoticComponent<CardHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
270
+ declare const CardMedia: React$1.ForwardRefExoticComponent<CardMediaProps & React$1.RefAttributes<HTMLDivElement>>;
271
+ declare const CardContent: React$1.ForwardRefExoticComponent<CardContentProps & React$1.RefAttributes<HTMLDivElement>>;
272
+ declare const CardFooter: React$1.ForwardRefExoticComponent<CardFooterProps & React$1.RefAttributes<HTMLDivElement>>;
273
+
274
+ /**
275
+ * @file carousel.types.ts
276
+ * MD3 Expressive Carousel — TypeScript prop definitions and keyline types.
277
+ * Spec: https://m3.material.io/components/carousel/specs
278
+ * Accessibility: https://m3.material.io/components/carousel/accessibility
279
+ * Jetpack Compose Reference: docs/m3/carousel/HorizontalMultiBrowseCarousel.md
280
+ */
281
+
282
+ /**
283
+ * Material Design 3 Carousel layout variants.
284
+ * - `multi-browse`: Displays Large, Medium, and Small items simultaneously with dynamic sizing.
285
+ * - `uncontained`: Fixed width items bleeding off container edge.
286
+ * - `uncontained-multi-aspect`: Uncontained with variable aspect ratios (9:16 to 16:9).
287
+ * - `hero`: Single primary Large item with Small preview item. Single-item snap.
288
+ * - `center-aligned-hero`: Centered Large item with Small previews on leading & trailing edges.
289
+ * - `full-screen`: Vertical edge-to-edge carousel with mandatory snap.
290
+ */
291
+ type CarouselLayout = "multi-browse" | "uncontained" | "uncontained-multi-aspect" | "hero" | "center-aligned-hero" | "full-screen";
292
+ type KeylineType = "small" | "medium" | "large";
293
+ interface CarouselKeyline {
294
+ /** Calculated item width in px */
295
+ width: number;
296
+ /** Offset from container start in px */
297
+ offset: number;
298
+ /** Role of this keyline position */
299
+ type: KeylineType;
300
+ /** Cutoff/mask clip percentage [0..1] */
301
+ maskClip: number;
302
+ }
303
+ interface CarouselKeylineResult {
304
+ /** Width of large carousel items (px) */
305
+ largeWidth: number;
306
+ /** Width of medium carousel items (px) */
307
+ mediumWidth: number;
308
+ /** Width of small preview items (px, clamped 40..56) */
309
+ smallWidth: number;
310
+ /** Array of calculated keylines */
311
+ keylines: CarouselKeyline[];
312
+ /** Calculated snap positions (px scrollLeft values) */
313
+ snapPositions: number[];
314
+ /** Pre-calculated maximum accumulated shift in pixels */
315
+ maxAccumulatedShift: number;
316
+ }
317
+ interface CarouselProps<T = unknown> extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
318
+ /** RSC Mode: Pass direct React Nodes (Supports Next.js <Image />) */
319
+ children?: ReactNode;
320
+ /** CSR Mode: Data source array */
321
+ items?: T[];
322
+ /** CSR Mode: Render callback for item rendering */
323
+ renderItem?: (item: T, index: number) => ReactNode;
324
+ /** Material Design 3 Layout Variant (Default: 'multi-browse') */
325
+ layout?: CarouselLayout;
326
+ /** Preferred width for large items in px */
327
+ preferredItemWidth?: number;
328
+ /** Gap between adjacent items in px (Default: 8) */
329
+ itemSpacing?: number;
330
+ /** Leading/Trailing padding in px (Default: 16) */
331
+ contentPadding?: number;
332
+ /** Top/Bottom padding in px (Default: 8) */
333
+ verticalPadding?: number;
334
+ /** Controlled state for expanded Grid view */
335
+ isExpanded?: boolean;
336
+ /** Callback fired when 'Show all' is clicked */
337
+ onShowAllClick?: () => void;
338
+ /** Label text for 'Show all' button (Default: 'Show all') */
339
+ showAllLabel?: string;
340
+ /** Disable user touch/scroll gestures (Default: true) */
341
+ userScrollEnabled?: boolean;
342
+ /** Custom accessible label for carousel container */
343
+ "aria-label"?: string;
344
+ }
345
+ /** Context passed to individual item scope renderers */
346
+ interface CarouselItemScope {
347
+ index: number;
348
+ totalItems: number;
349
+ isFocused: boolean;
350
+ isSelected: boolean;
351
+ }
352
+
353
+ declare function Carousel<T = unknown>({ children, items, renderItem, layout, preferredItemWidth, itemSpacing, contentPadding, verticalPadding, isExpanded: controlledExpanded, onShowAllClick, showAllLabel, userScrollEnabled, className, style, ...props }: CarouselProps<T>): react_jsx_runtime.JSX.Element;
354
+
355
+ /**
356
+ * @file carousel.tokens.ts
357
+ * MD3 Expressive Carousel — Design tokens ported from Material 3 Carousel Specs.
358
+ * All dimensional values are in px (dp equivalents for web).
359
+ * Colors reference CSS custom properties — no hardcoded hex.
360
+ * @see docs/m3/carousel/Carousel_Specs_Material_Design_3.md
361
+ */
362
+ declare const CarouselTokens: {
363
+ /** Corner radius shape (M3 extraLarge shape: 28dp) */
364
+ readonly containerRadius: 28;
365
+ /** Small item dimension limits (dp) */
366
+ readonly smallItemMin: 40;
367
+ readonly smallItemMax: 56;
368
+ /** Layout defaults (dp) */
369
+ readonly itemSpacing: 8;
370
+ readonly contentPadding: 16;
371
+ readonly verticalPadding: 8;
372
+ /** Interactive state overlays */
373
+ readonly hoverOpacity: 0.08;
374
+ readonly focusOpacity: 0.1;
375
+ readonly pressedOpacity: 0.1;
376
+ readonly disabledOpacity: 0.38;
377
+ /** Focus indicator dimensions */
378
+ readonly focusThickness: 3;
379
+ readonly focusOffset: 2;
380
+ /** Touch target minimum size for accessibility (WCAG 2.1 AAA / M3) */
381
+ readonly minTouchTargetSize: 48;
382
+ /** CSS Custom Property token maps for fallback and runtime injection */
383
+ readonly cssVars: {
384
+ readonly shape: "--carousel-item-shape";
385
+ readonly spacing: "--carousel-item-spacing";
386
+ readonly contentPadding: "--carousel-content-padding";
387
+ readonly verticalPadding: "--carousel-vertical-padding";
388
+ readonly smallMin: "--carousel-small-item-min";
389
+ readonly smallMax: "--carousel-small-item-max";
390
+ readonly hoverOpacity: "--carousel-hover-opacity";
391
+ readonly focusThickness: "--carousel-focus-thickness";
392
+ readonly focusOffset: "--carousel-focus-offset";
393
+ readonly pressedOpacity: "--carousel-pressed-opacity";
394
+ readonly disabledOpacity: "--carousel-disabled-opacity";
395
+ };
396
+ };
397
+
398
+ interface CarouselGridProps<T = unknown> extends React$1.HTMLAttributes<HTMLDivElement> {
399
+ children?: React$1.ReactNode;
400
+ items?: T[];
401
+ renderItem?: (item: T, index: number) => React$1.ReactNode;
402
+ preferredItemWidth?: number;
403
+ }
404
+ declare function CarouselGrid<T = unknown>({ children, items, renderItem, preferredItemWidth, className, style, ...props }: CarouselGridProps<T>): react_jsx_runtime.JSX.Element;
405
+
406
+ /**
407
+ * @file carousel-item.tsx
408
+ * Single Carousel slide wrapper supporting ARIA roles, dynamic clip-path masks,
409
+ * inner parallax content translation, and MD3 touch ripples.
410
+ *
411
+ * @see docs/m3/carousel/Carousel_Specs_Material_Design_3.md
412
+ * @see docs/m3/carousel/Carousel_Accessibility_Material_Design_3.md
413
+ */
414
+
415
+ interface CarouselItemProps extends React$1.HTMLAttributes<HTMLDivElement> {
416
+ index: number;
417
+ totalItems: number;
418
+ layout?: CarouselLayout;
419
+ width?: number;
420
+ minContentWidth?: number;
421
+ maskClipPercent?: number;
422
+ parallaxOffset?: number;
423
+ isFocused?: boolean;
424
+ isScrolling?: boolean;
425
+ disabled?: boolean;
426
+ children: React$1.ReactNode;
427
+ }
428
+ declare const CarouselItem: React$1.ForwardRefExoticComponent<CarouselItemProps & React$1.RefAttributes<HTMLDivElement>>;
429
+
430
+ interface CarouselScrollClientProps<T = unknown> extends CarouselProps<T> {
431
+ totalItemsCount: number;
432
+ }
433
+ declare function CarouselScrollClient<T = unknown>({ children, items, renderItem, layout, preferredItemWidth, itemSpacing, contentPadding, verticalPadding, userScrollEnabled, totalItemsCount, className, style, ...props }: CarouselScrollClientProps<T>): react_jsx_runtime.JSX.Element;
434
+
435
+ /**
436
+ * @file useCarouselA11y.ts
437
+ * Custom hook providing WCAG 2.1 AA compliant keyboard navigation and ARIA attribute mapping.
438
+ *
439
+ * Navigation rules per Material Design 3 Specs:
440
+ * - Tab: Initial focus on first item (index 0).
441
+ * - ArrowLeft / ArrowRight: Moves focus to previous or next item and scrolls it into view.
442
+ * - ArrowUp / ArrowDown: Exits carousel navigation to move focus to adjacent page elements.
443
+ * - Space / Enter: Activates the currently focused carousel item.
444
+ *
445
+ * @see docs/m3/carousel/Carousel_Accessibility_Material_Design_3.md
446
+ */
447
+ interface UseCarouselA11yOptions {
448
+ totalItems: number;
449
+ onItemSelect?: (index: number) => void;
450
+ onExitNavigation?: () => void;
451
+ scrollToIndex?: (index: number) => void;
452
+ }
453
+ declare function useCarouselA11y({ totalItems, onItemSelect, onExitNavigation, scrollToIndex, }: UseCarouselA11yOptions): {
454
+ focusedIndex: number;
455
+ setFocusedIndex: React$1.Dispatch<React$1.SetStateAction<number>>;
456
+ handleKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => void;
457
+ getItemA11yProps: (index: number, customLabel?: string) => {
458
+ role: "group";
459
+ "aria-roledescription": string;
460
+ "aria-label": string;
461
+ tabIndex: number;
462
+ onFocus: () => void;
463
+ };
464
+ };
465
+
466
+ /**
467
+ * @file useCarouselKeylines.ts
468
+ * Custom hook calculating M3 Carousel keyline matrices, item widths,
469
+ * snap positions, dynamic clip-path mask percentages, and parallax offsets.
470
+ *
471
+ * Specification: Material Design 3 Carousel Specs
472
+ * @see docs/m3/carousel/Carousel_Specs_Material_Design_3.md
473
+ */
474
+
475
+ interface UseCarouselKeylinesOptions {
476
+ containerWidth: number;
477
+ preferredItemWidth?: number;
478
+ layout?: CarouselLayout;
479
+ itemSpacing?: number;
480
+ contentPadding?: number;
481
+ totalItems: number;
482
+ scrollX?: number;
483
+ }
484
+ declare function useCarouselKeylines({ containerWidth, preferredItemWidth, layout, itemSpacing, contentPadding, totalItems, scrollX: _scrollX, }: UseCarouselKeylinesOptions): CarouselKeylineResult & {
485
+ getItemMaskClip: (index: number) => number;
486
+ getItemParallaxOffset: (index: number) => number;
487
+ getItemWidth: (index: number) => number;
488
+ };
41
489
 
42
490
  interface CodeBlockProps {
43
491
  /** Raw code string to display and copy. */
@@ -87,7 +535,7 @@ declare function CodeBlock({ code, language, className, html, }: CodeBlockProps)
87
535
  * @see https://m3.material.io/components/divider/overview
88
536
  */
89
537
 
90
- type SafeHTMLDivAttrs = Omit<React.HTMLAttributes<HTMLDivElement>, "onDrag" | "onDragStart" | "onDragEnd" | "onDragEnter" | "onDragLeave" | "onDragOver" | "onDrop">;
538
+ type SafeHTMLDivAttrs = Omit<React$1.HTMLAttributes<HTMLDivElement>, "onDrag" | "onDragStart" | "onDragEnd" | "onDragEnter" | "onDragLeave" | "onDragOver" | "onDrop">;
91
539
  interface DividerProps extends SafeHTMLDivAttrs {
92
540
  /**
93
541
  * Visual variant controlling indentation.
@@ -216,7 +664,7 @@ declare function buildWavePath(startX: number, endX: number, amplitude?: number,
216
664
  *
217
665
  * @see https://m3.material.io/components/divider/overview
218
666
  */
219
- declare const Divider: React.NamedExoticComponent<DividerProps & React.RefAttributes<HTMLDivElement>>;
667
+ declare const Divider: React$1.NamedExoticComponent<DividerProps & React$1.RefAttributes<HTMLDivElement>>;
220
668
 
221
669
  type ListSelectionMode = "none" | "single-action" | "multi-action" | "single-select" | "multi-select";
222
670
  type ListStyle = "standard" | "segmented";
@@ -224,7 +672,7 @@ type ListVariant = "baseline" | "expressive";
224
672
  type ListItemPosition = "solo" | "leading" | "middle" | "trailing";
225
673
  type ListItemLeadingType = "none" | "icon" | "avatar" | "image" | "video" | "checkbox" | "radio" | "custom";
226
674
  type ListItemTrailingType = "none" | "icon" | "icon-button" | "text" | "checkbox" | "radio" | "switch" | "custom";
227
- interface ListProps extends Omit<React.HTMLAttributes<HTMLUListElement>, "onChange"> {
675
+ interface ListProps extends Omit<React$1.HTMLAttributes<HTMLUListElement>, "onChange"> {
228
676
  /** List variant, supports 'baseline' and 'expressive'. Default: 'baseline' */
229
677
  variant?: ListVariant;
230
678
  /** Display style, supports 'standard' (no gap) and 'segmented' (2px gap). Default: 'standard' */
@@ -247,20 +695,20 @@ interface ListProps extends Omit<React.HTMLAttributes<HTMLUListElement>, "onChan
247
695
  outerRadius?: number;
248
696
  /** Custom inner corner radius (for adjacent list items). Default per MD3 Expressive spec is 4px */
249
697
  innerRadius?: number;
250
- children?: React.ReactNode;
698
+ children?: React$1.ReactNode;
251
699
  }
252
- type SafeHTMLLIAttrs = Omit<React.HTMLAttributes<HTMLLIElement>, "onClick" | "color" | "onDrag" | "onDragStart" | "onDragEnd" | "onDragEnter" | "onDragLeave" | "onDragOver" | "onDrop" | "onAnimationStart" | "onAnimationEnd" | "onAnimationIteration" | "onTransitionEnd">;
700
+ type SafeHTMLLIAttrs = Omit<React$1.HTMLAttributes<HTMLLIElement>, "onClick" | "color" | "onDrag" | "onDragStart" | "onDragEnd" | "onDragEnter" | "onDragLeave" | "onDragOver" | "onDrop" | "onAnimationStart" | "onAnimationEnd" | "onAnimationIteration" | "onTransitionEnd">;
253
701
  interface ListItemProps extends SafeHTMLLIAttrs {
254
702
  /** Unique identifier value for the ListItem */
255
703
  value: string;
256
704
  /** Main headline title of the item */
257
- headline: React.ReactNode;
705
+ headline: React$1.ReactNode;
258
706
  /** Supporting text displayed below the headline */
259
- supportingText?: React.ReactNode;
707
+ supportingText?: React$1.ReactNode;
260
708
  /** Max lines for supporting text (1 or 2) to calculate height. Default: 1 */
261
709
  supportingTextLines?: 1 | 2;
262
710
  /** Small overline text displayed above the main headline */
263
- overline?: React.ReactNode;
711
+ overline?: React$1.ReactNode;
264
712
  /** Type of element rendered at the start of the list item */
265
713
  leadingType?: ListItemLeadingType;
266
714
  /** Source URL for image or video when leadingType is 'image' or 'video' */
@@ -268,13 +716,13 @@ interface ListItemProps extends SafeHTMLLIAttrs {
268
716
  /** Alt text for image */
269
717
  leadingAlt?: string;
270
718
  /** Custom leading content (used when leadingType = 'custom') */
271
- leadingContent?: React.ReactNode;
719
+ leadingContent?: React$1.ReactNode;
272
720
  /** Type of element rendered at the end of the list item */
273
721
  trailingType?: ListItemTrailingType;
274
722
  /** Text displayed at the end of the list item */
275
723
  trailingText?: string;
276
724
  /** Custom content or callback for trailing element */
277
- trailingContent?: React.ReactNode;
725
+ trailingContent?: React$1.ReactNode;
278
726
  /** Disable interaction */
279
727
  disabled?: boolean;
280
728
  /** Selected state (for single-select / multi-select) */
@@ -282,7 +730,7 @@ interface ListItemProps extends SafeHTMLLIAttrs {
282
730
  /** Target URL if rendering ListItem as an anchor <a> tag */
283
731
  href?: string;
284
732
  /** Callback when clicking on ListItem */
285
- onClick?: (event: React.MouseEvent<HTMLElement>) => void;
733
+ onClick?: (event: React$1.MouseEvent<HTMLElement>) => void;
286
734
  /** Force interactive mode (hover/focus overlay, ripple) even without onClick/href */
287
735
  interactive?: boolean;
288
736
  /** Enable drag handle icon drag restriction */
@@ -292,14 +740,14 @@ interface ListItemProps extends SafeHTMLLIAttrs {
292
740
  /** Internal item index passed automatically by parent List */
293
741
  _listIndex?: number;
294
742
  }
295
- interface ListDividerProps extends React.HTMLAttributes<HTMLLIElement> {
743
+ interface ListDividerProps extends React$1.HTMLAttributes<HTMLLIElement> {
296
744
  /** Indent start of divider */
297
745
  inset?: boolean;
298
746
  /** Indent style: 'icon' (56px indent), 'avatar' (72px indent), or 'custom' */
299
747
  insetType?: "icon" | "avatar" | "custom";
300
748
  }
301
749
 
302
- declare const List: React.NamedExoticComponent<ListProps & React.RefAttributes<HTMLUListElement>>;
750
+ declare const List: React$1.NamedExoticComponent<ListProps & React$1.RefAttributes<HTMLUListElement>>;
303
751
 
304
752
  interface ListContextValue {
305
753
  selectionMode: ListSelectionMode;
@@ -312,12 +760,12 @@ interface ListContextValue {
312
760
  outerRadius: number;
313
761
  innerRadius: number;
314
762
  }
315
- declare const ListContext: React.Context<ListContextValue | null>;
763
+ declare const ListContext: React$1.Context<ListContextValue | null>;
316
764
  declare const useListContext: () => ListContextValue | null;
317
765
 
318
- declare const ListDivider: React.NamedExoticComponent<ListDividerProps & React.RefAttributes<HTMLLIElement>>;
766
+ declare const ListDivider: React$1.NamedExoticComponent<ListDividerProps & React$1.RefAttributes<HTMLLIElement>>;
319
767
 
320
- declare const ListItem: React.NamedExoticComponent<ListItemProps & React.RefAttributes<HTMLLIElement>>;
768
+ declare const ListItem: React$1.NamedExoticComponent<ListItemProps & React$1.RefAttributes<HTMLLIElement>>;
321
769
 
322
770
  declare const LIST_TOKENS: {
323
771
  readonly oneLineHeight: 56;
@@ -381,11 +829,11 @@ declare function getExpressiveShape(state: "resting" | "hovered" | "focused" | "
381
829
  declare const typographyVariants: (props?: ({
382
830
  variant?: "display-lg" | "display-md" | "display-sm" | "headline-lg" | "headline-md" | "headline-sm" | "title-lg" | "title-md" | "title-sm" | "label-lg" | "label-md" | "label-sm" | "body-lg" | "body-md" | "body-sm" | null | undefined;
383
831
  } & class_variance_authority_types.ClassProp) | undefined) => string;
384
- interface TextProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof typographyVariants> {
832
+ interface TextProps extends React$1.HTMLAttributes<HTMLElement>, VariantProps<typeof typographyVariants> {
385
833
  /**
386
834
  * Custom HTML element tag override.
387
835
  */
388
- as?: React.ElementType;
836
+ as?: React$1.ElementType;
389
837
  /**
390
838
  * Text color override (CSS color value or Tailwind color class).
391
839
  */
@@ -395,7 +843,7 @@ interface TextProps extends React.HTMLAttributes<HTMLElement>, VariantProps<type
395
843
  */
396
844
  weight?: string | number;
397
845
  }
398
- declare const Text: React.ForwardRefExoticComponent<TextProps & React.RefAttributes<HTMLElement>>;
846
+ declare const Text: React$1.ForwardRefExoticComponent<TextProps & React$1.RefAttributes<HTMLElement>>;
399
847
 
400
848
  /**
401
849
  * A single entry in the Table of Contents.
@@ -624,4 +1072,4 @@ declare const TypeScaleTokens: {
624
1072
  };
625
1073
  type TypeScaleTokensType = typeof TypeScaleTokens;
626
1074
 
627
- export { Card, type CardProps, CodeBlock, type CodeBlockProps, Divider, type DividerProps, LIST_TOKENS, List, ListContext, ListDivider, type ListDividerProps, ListItem, type ListItemLeadingType, type ListItemProps, type ListItemTrailingType, type ListProps, type ListSelectionMode, type ListStyle, type ListVariant, ScrollAreaProps, TableOfContents, type TableOfContentsProps, Text, type TextProps, type ToCItem, TypeScaleTokens, type TypeScaleTokensType, buildWavePath, getExpressiveShape, getListItemHeight, shouldTopAlign, typographyVariants, useListContext };
1075
+ export { Card, CardContent, type CardContentProps, type CardElevationConfig, type CardElevationOptions, CardFooter, type CardFooterProps, CardHeader, type CardHeaderProps, CardMedia, type CardMediaProps, type CardProps, type CardVariant, Carousel, CarouselGrid, CarouselItem, type CarouselItemScope, type CarouselKeyline, type CarouselKeylineResult, type CarouselLayout, type CarouselProps, CarouselScrollClient, CarouselTokens, CodeBlock, type CodeBlockProps, Divider, type DividerProps, type ElevationLevel, type KeylineType, LIST_TOKENS, List, ListContext, ListDivider, type ListDividerProps, ListItem, type ListItemLeadingType, type ListItemProps, type ListItemTrailingType, type ListProps, type ListSelectionMode, type ListStyle, type ListVariant, type MotionDivProps, SHADOW, ScrollAreaProps, type ShadowLevel, TableOfContents, type TableOfContentsProps, Text, type TextProps, type ToCItem, TypeScaleTokens, type TypeScaleTokensType, VARIANT_ELEVATION, buildWavePath, cardVariants, getExpressiveShape, getListItemHeight, resolveElevationShadow, shouldTopAlign, typographyVariants, useCardElevation, useCarouselA11y, useCarouselKeylines, useListContext };