@tinybigui/react 0.15.0 → 0.17.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/index.css CHANGED
@@ -49,5 +49,13 @@
49
49
  stroke-dashoffset: -124px;
50
50
  }
51
51
  }
52
- @theme { --animate-progress-linear-indeterminate-1: progress-linear-indeterminate-1 var(--md-sys-motion-duration-long2) var(--md-sys-motion-easing-standard) infinite; --animate-progress-linear-indeterminate-2: progress-linear-indeterminate-2 var(--md-sys-motion-duration-long2) var(--md-sys-motion-easing-standard) infinite; --animate-progress-circular-rotate: progress-circular-rotate var(--md-sys-motion-duration-long4) linear infinite; --animate-progress-circular-dash: progress-circular-dash var(--md-sys-motion-duration-long4) var(--md-sys-motion-easing-standard) infinite; }
52
+ @keyframes progress-wave-translate {
53
+ 0% {
54
+ transform: translateX(0);
55
+ }
56
+ 100% {
57
+ transform: translateX(var(--progress-wave-wavelength, -40px));
58
+ }
59
+ }
60
+ @theme { --animate-progress-linear-indeterminate-1: progress-linear-indeterminate-1 var(--md-sys-motion-duration-long2) var(--md-sys-motion-easing-standard) infinite; --animate-progress-linear-indeterminate-2: progress-linear-indeterminate-2 var(--md-sys-motion-duration-long2) var(--md-sys-motion-easing-standard) infinite; --animate-progress-circular-rotate: progress-circular-rotate var(--md-sys-motion-duration-long4) linear infinite; --animate-progress-circular-dash: progress-circular-dash var(--md-sys-motion-duration-long4) var(--md-sys-motion-easing-standard) infinite; --animate-progress-wave-translate: progress-wave-translate var(--md-sys-motion-duration-extra-long4) linear infinite; }
53
61
  /*# sourceMappingURL=index.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Progress/Progress.css"],"sourcesContent":["/*\n * Progress Indicator Animations\n * Material Design 3 motion tokens for indeterminate progress states.\n *\n * Keyframes are defined here (co-located with the component) per project\n * convention — they are NOT added to the global tokens.css.\n *\n * Motion tokens referenced (from packages/tokens/src/tokens.css):\n * --md-sys-motion-duration-medium4 : 400ms (determinate transitions — applied via Tailwind)\n * --md-sys-motion-duration-long2 : 500ms (linear indeterminate cycle)\n * --md-sys-motion-duration-long4 : 600ms (circular indeterminate rotation)\n * --md-sys-motion-easing-standard : cubic-bezier(0.2, 0, 0, 1)\n */\n\n/* ---------------------------------------------------------------------------\n LINEAR INDETERMINATE\n Two-segment bar animation per MD3 spec.\n First segment: starts narrow at left, expands, then slides off right.\n Second segment: follows the first with a short delay.\n Duration: long2 = 500ms per cycle (repeating).\n --------------------------------------------------------------------------- */\n\n@keyframes progress-linear-indeterminate-1 {\n 0% {\n left: -35%;\n right: 100%;\n }\n 60% {\n left: 100%;\n right: -90%;\n }\n 100% {\n left: 100%;\n right: -90%;\n }\n}\n\n@keyframes progress-linear-indeterminate-2 {\n 0% {\n left: -200%;\n right: 100%;\n }\n 60% {\n left: 107%;\n right: -8%;\n }\n 100% {\n left: 107%;\n right: -8%;\n }\n}\n\n/* ---------------------------------------------------------------------------\n CIRCULAR INDETERMINATE\n Two-part animation per MD3 spec:\n 1. Container rotation: continuous 360° spin.\n 2. Dash animation: stroke-dasharray pulses between a short and long arc.\n Rotation duration: long4 = 600ms per cycle (repeating).\n --------------------------------------------------------------------------- */\n\n@keyframes progress-circular-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes progress-circular-dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -35px;\n }\n 100% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -124px;\n }\n}\n\n/* ---------------------------------------------------------------------------\n TAILWIND @theme INTEGRATION\n Register animations so they can be used as Tailwind utilities:\n animate-progress-linear-indeterminate-1\n animate-progress-linear-indeterminate-2\n animate-progress-circular-rotate\n animate-progress-circular-dash\n --------------------------------------------------------------------------- */\n\n@theme {\n --animate-progress-linear-indeterminate-1: progress-linear-indeterminate-1\n var(--md-sys-motion-duration-long2) var(--md-sys-motion-easing-standard) infinite;\n\n --animate-progress-linear-indeterminate-2: progress-linear-indeterminate-2\n var(--md-sys-motion-duration-long2) var(--md-sys-motion-easing-standard) infinite;\n\n --animate-progress-circular-rotate: progress-circular-rotate var(--md-sys-motion-duration-long4)\n linear infinite;\n\n --animate-progress-circular-dash: progress-circular-dash var(--md-sys-motion-duration-long4)\n var(--md-sys-motion-easing-standard) infinite;\n}\n"],"mappings":";AAsBA,WAAW;AACT;AACE,UAAM;AACN,WAAO;AACT;AACA;AACE,UAAM;AACN,WAAO;AACT;AACA;AACE,UAAM;AACN,WAAO;AACT;AACF;AAEA,WAAW;AACT;AACE,UAAM;AACN,WAAO;AACT;AACA;AACE,UAAM;AACN,WAAO;AACT;AACA;AACE,UAAM;AACN,WAAO;AACT;AACF;AAUA,WAAW;AACT;AACE,eAAW,OAAO;AACpB;AACA;AACE,eAAW,OAAO;AACpB;AACF;AAEA,WAAW;AACT;AACE,sBAAkB,CAAC,EAAE;AACrB,uBAAmB;AACrB;AACA;AACE,sBAAkB,EAAE,EAAE;AACtB,uBAAmB;AACrB;AACA;AACE,sBAAkB,EAAE,EAAE;AACtB,uBAAmB;AACrB;AACF;AAWA,OAAO,EACL,yCAAyC,EAAE,gCACzC,IAAI,gCAAgC,IAAI,iCAAiC,QAAQ,EAEnF,yCAAyC,EAAE,gCACzC,IAAI,gCAAgC,IAAI,iCAAiC,QAAQ,EAEnF,kCAAkC,EAAE,yBAAyB,IAAI,gCAC/D,OAAO,QAAQ,EAEjB,gCAAgC,EAAE,uBAAuB,IAAI,gCAC3D,IAAI,iCAAiC,QAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/components/Progress/Progress.css"],"sourcesContent":["/*\n * Progress Indicator Animations\n * Material Design 3 motion tokens for indeterminate and wavy progress states.\n *\n * Keyframes are defined here (co-located with the component) per project\n * convention — they are NOT added to the global tokens.css.\n *\n * All timing values reference MD3 motion token CSS custom properties.\n * Hardcoded durations are forbidden — use the token vars below.\n *\n * Motion tokens referenced (from packages/tokens/src/tokens.css):\n * --md-sys-motion-duration-long2 : 500ms (linear indeterminate cycle)\n * --md-sys-motion-duration-long4 : 600ms (circular indeterminate rotation)\n * --md-sys-motion-duration-extra-long4 : 1000ms (wave horizontal translation)\n * --md-sys-motion-easing-standard : cubic-bezier(0.2, 0, 0, 1)\n */\n\n/* ---------------------------------------------------------------------------\n LINEAR INDETERMINATE\n Two-segment bar animation per MD3 spec.\n First segment: starts narrow at left, expands, then slides off right.\n Second segment: follows the first with a short delay.\n Duration: long2 = 500ms per cycle (repeating).\n --------------------------------------------------------------------------- */\n\n@keyframes progress-linear-indeterminate-1 {\n 0% {\n left: -35%;\n right: 100%;\n }\n 60% {\n left: 100%;\n right: -90%;\n }\n 100% {\n left: 100%;\n right: -90%;\n }\n}\n\n@keyframes progress-linear-indeterminate-2 {\n 0% {\n left: -200%;\n right: 100%;\n }\n 60% {\n left: 107%;\n right: -8%;\n }\n 100% {\n left: 107%;\n right: -8%;\n }\n}\n\n/* ---------------------------------------------------------------------------\n CIRCULAR INDETERMINATE\n Two-part animation per MD3 spec:\n 1. Container rotation: continuous 360° spin.\n 2. Dash animation: stroke-dasharray pulses between a short and long arc.\n Rotation duration: long4 = 600ms per cycle (repeating).\n --------------------------------------------------------------------------- */\n\n@keyframes progress-circular-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes progress-circular-dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -35px;\n }\n 100% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -124px;\n }\n}\n\n/* ---------------------------------------------------------------------------\n WAVY TRANSLATION\n Horizontal wave motion: the wavy path translates one full wavelength so\n the wave appears to flow continuously.\n Duration: extra-long4 = 1000ms per cycle (repeating).\n --------------------------------------------------------------------------- */\n\n@keyframes progress-wave-translate {\n 0% {\n transform: translateX(0);\n }\n 100% {\n /* Translate exactly one wavelength. The wavelength is baked into the SVG\n path so the visual loop is seamless. The actual translate distance is\n set via --progress-wave-wavelength CSS custom property on the element. */\n transform: translateX(var(--progress-wave-wavelength, -40px));\n }\n}\n\n/* ---------------------------------------------------------------------------\n TAILWIND @theme INTEGRATION\n Register animations so they can be used as Tailwind utilities.\n --------------------------------------------------------------------------- */\n\n@theme {\n --animate-progress-linear-indeterminate-1: progress-linear-indeterminate-1\n var(--md-sys-motion-duration-long2) var(--md-sys-motion-easing-standard) infinite;\n\n --animate-progress-linear-indeterminate-2: progress-linear-indeterminate-2\n var(--md-sys-motion-duration-long2) var(--md-sys-motion-easing-standard) infinite;\n\n --animate-progress-circular-rotate: progress-circular-rotate var(--md-sys-motion-duration-long4)\n linear infinite;\n\n --animate-progress-circular-dash: progress-circular-dash var(--md-sys-motion-duration-long4)\n var(--md-sys-motion-easing-standard) infinite;\n\n --animate-progress-wave-translate: progress-wave-translate\n var(--md-sys-motion-duration-extra-long4) linear infinite;\n}\n"],"mappings":";AAyBA,WAAW;AACT;AACE,UAAM;AACN,WAAO;AACT;AACA;AACE,UAAM;AACN,WAAO;AACT;AACA;AACE,UAAM;AACN,WAAO;AACT;AACF;AAEA,WAAW;AACT;AACE,UAAM;AACN,WAAO;AACT;AACA;AACE,UAAM;AACN,WAAO;AACT;AACA;AACE,UAAM;AACN,WAAO;AACT;AACF;AAUA,WAAW;AACT;AACE,eAAW,OAAO;AACpB;AACA;AACE,eAAW,OAAO;AACpB;AACF;AAEA,WAAW;AACT;AACE,sBAAkB,CAAC,EAAE;AACrB,uBAAmB;AACrB;AACA;AACE,sBAAkB,EAAE,EAAE;AACtB,uBAAmB;AACrB;AACA;AACE,sBAAkB,EAAE,EAAE;AACtB,uBAAmB;AACrB;AACF;AASA,WAAW;AACT;AACE,eAAW,WAAW;AACxB;AACA;AAIE,eAAW,WAAW,IAAI,0BAA0B,EAAE;AACxD;AACF;AAOA,OAAO,EACL,yCAAyC,EAAE,gCACzC,IAAI,gCAAgC,IAAI,iCAAiC,QAAQ,EAEnF,yCAAyC,EAAE,gCACzC,IAAI,gCAAgC,IAAI,iCAAiC,QAAQ,EAEnF,kCAAkC,EAAE,yBAAyB,IAAI,gCAC/D,OAAO,QAAQ,EAEjB,gCAAgC,EAAE,uBAAuB,IAAI,gCAC3D,IAAI,iCAAiC,QAAQ,EAE/C,iCAAiC,EAAE,wBACjC,IAAI,sCAAsC,OAAO,QAAQ;","names":[]}
package/dist/index.d.cts CHANGED
@@ -2624,25 +2624,25 @@ interface RadioHeadlessProps extends AriaRadioProps {
2624
2624
  * Material Design 3 Radio Component (Layer 3: Styled)
2625
2625
  *
2626
2626
  * Built on React Aria for world-class accessibility.
2627
- * Uses CVA for type-safe variant management.
2628
- * Styled with Tailwind CSS using MD3 design tokens.
2629
- * Must be used within a RadioGroup for proper functionality.
2627
+ * Implements the Variants-vs-States architecture: all interaction/selection/error
2628
+ * states are expressed as data-* attributes on the root and consumed by each
2629
+ * slot via group-data-[x]/radio Tailwind selectors no state variants in CVA.
2630
2630
  *
2631
2631
  * Features:
2632
- * - ✅ 2 states: unselected, selected
2632
+ * - ✅ Unselected / selected states
2633
+ * - ✅ Error/invalid state (via RadioGroup isInvalid)
2633
2634
  * - ✅ Ripple effect (Material Design)
2634
2635
  * - ✅ Full keyboard accessibility (via React Aria)
2635
2636
  * - ✅ Screen reader support (via React Aria)
2636
- * - ✅ Focus management (via React Aria)
2637
+ * - ✅ Focus management with MD3 focus ring (no animate-pulse)
2637
2638
  * - ✅ Form integration (name, value props from RadioGroup)
2638
2639
  *
2639
2640
  * MD3 Specifications:
2640
- * - Radio icon: 20x20dp (within 40x40dp touch target)
2641
- * - Outer circle: 20px
2642
- * - Inner dot: 10px (selected state)
2643
- * - Outline width: 2dp
2644
- * - State layers: 8% hover, 12% focus/pressed
2645
- * - Disabled: 38% opacity
2641
+ * - Radio icon: 20×20dp (within 40×40dp touch target)
2642
+ * - Outer circle border: 2dp
2643
+ * - Inner dot: 10dp (selected state, scale 0→1)
2644
+ * - State layers: 8% hover, 10% focus/pressed
2645
+ * - Disabled: 38% opacity (on root)
2646
2646
  * - Label spacing: 16px (ml-4)
2647
2647
  *
2648
2648
  * @example
@@ -2663,11 +2663,6 @@ interface RadioHeadlessProps extends AriaRadioProps {
2663
2663
  * <Radio value="a">Enabled</Radio>
2664
2664
  * <Radio value="b" isDisabled>Disabled</Radio>
2665
2665
  * </RadioGroup>
2666
- *
2667
- * // Custom styling
2668
- * <Radio value="custom" className="my-custom-class">
2669
- * Custom
2670
- * </Radio>
2671
2666
  * ```
2672
2667
  */
2673
2668
  declare const Radio: React__default.ForwardRefExoticComponent<RadioProps & React__default.RefAttributes<HTMLInputElement>>;
@@ -4150,7 +4145,9 @@ declare const HeadlessDrawerItem: React__default.ForwardRefExoticComponent<Headl
4150
4145
  * Built on React Aria for world-class accessibility.
4151
4146
  * Supports four variants: Linear Determinate, Linear Indeterminate,
4152
4147
  * Circular Determinate, and Circular Indeterminate.
4153
- * Implementation uses CVA + Tailwind CSS classes mapped to MD3 tokens.
4148
+ * Implements MD3 Expressive styling: colorful primary-container track,
4149
+ * 4dp indicator-track gap, fully-rounded segments, thick track option,
4150
+ * and optional wavy shape.
4154
4151
  *
4155
4152
  * @example
4156
4153
  * ```tsx
@@ -4169,6 +4166,9 @@ declare const HeadlessDrawerItem: React__default.ForwardRefExoticComponent<Headl
4169
4166
  * // Circular with size
4170
4167
  * <Progress type="circular" indeterminate size="small" aria-label="Loading" />
4171
4168
  *
4169
+ * // Thick wavy linear (MD3 Expressive)
4170
+ * <Progress type="linear" indeterminate shape="wavy" thickness="thick" aria-label="Loading" />
4171
+ *
4172
4172
  * // Custom range
4173
4173
  * <Progress type="linear" minValue={0} maxValue={200} value={150} label="Progress" />
4174
4174
  * ```
@@ -4191,6 +4191,22 @@ interface ProgressProps extends AriaProgressBarProps {
4191
4191
  * @default "medium"
4192
4192
  */
4193
4193
  size?: "small" | "medium" | "large";
4194
+ /**
4195
+ * Visual shape of the progress indicator.
4196
+ * - `"flat"` — standard rounded rectangular/circular track.
4197
+ * - `"wavy"` — MD3 Expressive sine-wave active indicator.
4198
+ * Increases linear container height to accommodate wave amplitude.
4199
+ * Reduced-motion users receive a flat fallback automatically.
4200
+ * @default "flat"
4201
+ */
4202
+ shape?: "flat" | "wavy";
4203
+ /**
4204
+ * Track thickness.
4205
+ * - `"default"` — 4dp per MD3 baseline spec.
4206
+ * - `"thick"` — 8dp MD3 Expressive variant (fully rounded, `trackCornerRadius` = 4dp).
4207
+ * @default "default"
4208
+ */
4209
+ thickness?: "default" | "thick";
4194
4210
  /**
4195
4211
  * Additional CSS classes (Tailwind).
4196
4212
  */
@@ -4206,7 +4222,7 @@ interface ProgressProps extends AriaProgressBarProps {
4206
4222
  * type="linear"
4207
4223
  * value={50}
4208
4224
  * label="Upload"
4209
- * renderProgress={({ percentage }) => (
4225
+ * renderProgress={({ percentage, shape, thickness }) => (
4210
4226
  * <div style={{ width: `${percentage}%` }} />
4211
4227
  * )}
4212
4228
  * />
@@ -4228,6 +4244,16 @@ interface ProgressHeadlessProps extends AriaProgressBarProps {
4228
4244
  * @default "medium"
4229
4245
  */
4230
4246
  size?: "small" | "medium" | "large";
4247
+ /**
4248
+ * Visual shape of the progress indicator.
4249
+ * @default "flat"
4250
+ */
4251
+ shape?: "flat" | "wavy";
4252
+ /**
4253
+ * Track thickness.
4254
+ * @default "default"
4255
+ */
4256
+ thickness?: "default" | "thick";
4231
4257
  /**
4232
4258
  * Additional CSS classes.
4233
4259
  */
@@ -4245,6 +4271,8 @@ interface ProgressHeadlessProps extends AriaProgressBarProps {
4245
4271
  isIndeterminate: boolean;
4246
4272
  type: "linear" | "circular";
4247
4273
  size: "small" | "medium" | "large";
4274
+ shape: "flat" | "wavy";
4275
+ thickness: "default" | "thick";
4248
4276
  }) => React__default.ReactNode;
4249
4277
  }
4250
4278
 
@@ -4252,23 +4280,20 @@ interface ProgressHeadlessProps extends AriaProgressBarProps {
4252
4280
  * Material Design 3 Progress Indicator (Layer 3: Styled)
4253
4281
  *
4254
4282
  * Built on React Aria for world-class accessibility.
4255
- * Supports four variants driven by `type` + `indeterminate` props:
4283
+ * Implements MD3 Expressive spec:
4284
+ * - Colorful track: primary-container (inactive), primary (active)
4285
+ * - 4dp indicator-track gap (linear + circular)
4286
+ * - Fully-rounded segments
4287
+ * - Optional thick (8dp) track
4288
+ * - Optional wavy shape with amplitude ramp
4289
+ * - useReducedMotion guard: wavy falls back to flat when reduced-motion is set
4290
+ *
4291
+ * Four variants driven by `type` × `indeterminate`:
4256
4292
  * - Linear Determinate
4257
4293
  * - Linear Indeterminate
4258
4294
  * - Circular Determinate
4259
4295
  * - Circular Indeterminate
4260
4296
  *
4261
- * MD3 Specifications:
4262
- * - Linear track height: 4dp (h-1)
4263
- * - Linear track shape: rounded-full
4264
- * - Circular default size: 48dp (medium)
4265
- * - Circular stroke width: 4dp (SVG attribute)
4266
- * - Active track: primary
4267
- * - Inactive track: surface-container-highest
4268
- * - Determinate transitions: duration-medium4 + ease-standard
4269
- * - Indeterminate linear cycle: duration-long2
4270
- * - Indeterminate circular rotation: duration-long4
4271
- *
4272
4297
  * @example
4273
4298
  * ```tsx
4274
4299
  * // Linear determinate
@@ -4283,8 +4308,8 @@ interface ProgressHeadlessProps extends AriaProgressBarProps {
4283
4308
  * // Circular indeterminate
4284
4309
  * <Progress type="circular" indeterminate aria-label="Loading" />
4285
4310
  *
4286
- * // Circular small spinner
4287
- * <Progress type="circular" indeterminate size="small" aria-label="Loading" />
4311
+ * // Thick wavy (MD3 Expressive)
4312
+ * <Progress type="linear" indeterminate shape="wavy" thickness="thick" aria-label="Loading" />
4288
4313
  * ```
4289
4314
  */
4290
4315
  declare const Progress: React__default.ForwardRefExoticComponent<ProgressProps & React__default.RefAttributes<HTMLDivElement>>;
@@ -4300,7 +4325,7 @@ declare const Progress: React__default.ForwardRefExoticComponent<ProgressProps &
4300
4325
  * - Determinate and indeterminate progress support
4301
4326
  * - Internationalized value label formatting via React Aria
4302
4327
  * - Label linkage via aria-labelledby / aria-label
4303
- * - Render prop for custom visual rendering
4328
+ * - Render prop for custom visual rendering (receives shape + thickness)
4304
4329
  *
4305
4330
  * @example
4306
4331
  * ```tsx
@@ -4308,7 +4333,7 @@ declare const Progress: React__default.ForwardRefExoticComponent<ProgressProps &
4308
4333
  * <ProgressHeadless
4309
4334
  * value={50}
4310
4335
  * label="Upload"
4311
- * renderProgress={({ percentage }) => (
4336
+ * renderProgress={({ percentage, shape, thickness }) => (
4312
4337
  * <div style={{ width: `${percentage}%` }} />
4313
4338
  * )}
4314
4339
  * />
package/dist/index.d.ts CHANGED
@@ -2624,25 +2624,25 @@ interface RadioHeadlessProps extends AriaRadioProps {
2624
2624
  * Material Design 3 Radio Component (Layer 3: Styled)
2625
2625
  *
2626
2626
  * Built on React Aria for world-class accessibility.
2627
- * Uses CVA for type-safe variant management.
2628
- * Styled with Tailwind CSS using MD3 design tokens.
2629
- * Must be used within a RadioGroup for proper functionality.
2627
+ * Implements the Variants-vs-States architecture: all interaction/selection/error
2628
+ * states are expressed as data-* attributes on the root and consumed by each
2629
+ * slot via group-data-[x]/radio Tailwind selectors no state variants in CVA.
2630
2630
  *
2631
2631
  * Features:
2632
- * - ✅ 2 states: unselected, selected
2632
+ * - ✅ Unselected / selected states
2633
+ * - ✅ Error/invalid state (via RadioGroup isInvalid)
2633
2634
  * - ✅ Ripple effect (Material Design)
2634
2635
  * - ✅ Full keyboard accessibility (via React Aria)
2635
2636
  * - ✅ Screen reader support (via React Aria)
2636
- * - ✅ Focus management (via React Aria)
2637
+ * - ✅ Focus management with MD3 focus ring (no animate-pulse)
2637
2638
  * - ✅ Form integration (name, value props from RadioGroup)
2638
2639
  *
2639
2640
  * MD3 Specifications:
2640
- * - Radio icon: 20x20dp (within 40x40dp touch target)
2641
- * - Outer circle: 20px
2642
- * - Inner dot: 10px (selected state)
2643
- * - Outline width: 2dp
2644
- * - State layers: 8% hover, 12% focus/pressed
2645
- * - Disabled: 38% opacity
2641
+ * - Radio icon: 20×20dp (within 40×40dp touch target)
2642
+ * - Outer circle border: 2dp
2643
+ * - Inner dot: 10dp (selected state, scale 0→1)
2644
+ * - State layers: 8% hover, 10% focus/pressed
2645
+ * - Disabled: 38% opacity (on root)
2646
2646
  * - Label spacing: 16px (ml-4)
2647
2647
  *
2648
2648
  * @example
@@ -2663,11 +2663,6 @@ interface RadioHeadlessProps extends AriaRadioProps {
2663
2663
  * <Radio value="a">Enabled</Radio>
2664
2664
  * <Radio value="b" isDisabled>Disabled</Radio>
2665
2665
  * </RadioGroup>
2666
- *
2667
- * // Custom styling
2668
- * <Radio value="custom" className="my-custom-class">
2669
- * Custom
2670
- * </Radio>
2671
2666
  * ```
2672
2667
  */
2673
2668
  declare const Radio: React__default.ForwardRefExoticComponent<RadioProps & React__default.RefAttributes<HTMLInputElement>>;
@@ -4150,7 +4145,9 @@ declare const HeadlessDrawerItem: React__default.ForwardRefExoticComponent<Headl
4150
4145
  * Built on React Aria for world-class accessibility.
4151
4146
  * Supports four variants: Linear Determinate, Linear Indeterminate,
4152
4147
  * Circular Determinate, and Circular Indeterminate.
4153
- * Implementation uses CVA + Tailwind CSS classes mapped to MD3 tokens.
4148
+ * Implements MD3 Expressive styling: colorful primary-container track,
4149
+ * 4dp indicator-track gap, fully-rounded segments, thick track option,
4150
+ * and optional wavy shape.
4154
4151
  *
4155
4152
  * @example
4156
4153
  * ```tsx
@@ -4169,6 +4166,9 @@ declare const HeadlessDrawerItem: React__default.ForwardRefExoticComponent<Headl
4169
4166
  * // Circular with size
4170
4167
  * <Progress type="circular" indeterminate size="small" aria-label="Loading" />
4171
4168
  *
4169
+ * // Thick wavy linear (MD3 Expressive)
4170
+ * <Progress type="linear" indeterminate shape="wavy" thickness="thick" aria-label="Loading" />
4171
+ *
4172
4172
  * // Custom range
4173
4173
  * <Progress type="linear" minValue={0} maxValue={200} value={150} label="Progress" />
4174
4174
  * ```
@@ -4191,6 +4191,22 @@ interface ProgressProps extends AriaProgressBarProps {
4191
4191
  * @default "medium"
4192
4192
  */
4193
4193
  size?: "small" | "medium" | "large";
4194
+ /**
4195
+ * Visual shape of the progress indicator.
4196
+ * - `"flat"` — standard rounded rectangular/circular track.
4197
+ * - `"wavy"` — MD3 Expressive sine-wave active indicator.
4198
+ * Increases linear container height to accommodate wave amplitude.
4199
+ * Reduced-motion users receive a flat fallback automatically.
4200
+ * @default "flat"
4201
+ */
4202
+ shape?: "flat" | "wavy";
4203
+ /**
4204
+ * Track thickness.
4205
+ * - `"default"` — 4dp per MD3 baseline spec.
4206
+ * - `"thick"` — 8dp MD3 Expressive variant (fully rounded, `trackCornerRadius` = 4dp).
4207
+ * @default "default"
4208
+ */
4209
+ thickness?: "default" | "thick";
4194
4210
  /**
4195
4211
  * Additional CSS classes (Tailwind).
4196
4212
  */
@@ -4206,7 +4222,7 @@ interface ProgressProps extends AriaProgressBarProps {
4206
4222
  * type="linear"
4207
4223
  * value={50}
4208
4224
  * label="Upload"
4209
- * renderProgress={({ percentage }) => (
4225
+ * renderProgress={({ percentage, shape, thickness }) => (
4210
4226
  * <div style={{ width: `${percentage}%` }} />
4211
4227
  * )}
4212
4228
  * />
@@ -4228,6 +4244,16 @@ interface ProgressHeadlessProps extends AriaProgressBarProps {
4228
4244
  * @default "medium"
4229
4245
  */
4230
4246
  size?: "small" | "medium" | "large";
4247
+ /**
4248
+ * Visual shape of the progress indicator.
4249
+ * @default "flat"
4250
+ */
4251
+ shape?: "flat" | "wavy";
4252
+ /**
4253
+ * Track thickness.
4254
+ * @default "default"
4255
+ */
4256
+ thickness?: "default" | "thick";
4231
4257
  /**
4232
4258
  * Additional CSS classes.
4233
4259
  */
@@ -4245,6 +4271,8 @@ interface ProgressHeadlessProps extends AriaProgressBarProps {
4245
4271
  isIndeterminate: boolean;
4246
4272
  type: "linear" | "circular";
4247
4273
  size: "small" | "medium" | "large";
4274
+ shape: "flat" | "wavy";
4275
+ thickness: "default" | "thick";
4248
4276
  }) => React__default.ReactNode;
4249
4277
  }
4250
4278
 
@@ -4252,23 +4280,20 @@ interface ProgressHeadlessProps extends AriaProgressBarProps {
4252
4280
  * Material Design 3 Progress Indicator (Layer 3: Styled)
4253
4281
  *
4254
4282
  * Built on React Aria for world-class accessibility.
4255
- * Supports four variants driven by `type` + `indeterminate` props:
4283
+ * Implements MD3 Expressive spec:
4284
+ * - Colorful track: primary-container (inactive), primary (active)
4285
+ * - 4dp indicator-track gap (linear + circular)
4286
+ * - Fully-rounded segments
4287
+ * - Optional thick (8dp) track
4288
+ * - Optional wavy shape with amplitude ramp
4289
+ * - useReducedMotion guard: wavy falls back to flat when reduced-motion is set
4290
+ *
4291
+ * Four variants driven by `type` × `indeterminate`:
4256
4292
  * - Linear Determinate
4257
4293
  * - Linear Indeterminate
4258
4294
  * - Circular Determinate
4259
4295
  * - Circular Indeterminate
4260
4296
  *
4261
- * MD3 Specifications:
4262
- * - Linear track height: 4dp (h-1)
4263
- * - Linear track shape: rounded-full
4264
- * - Circular default size: 48dp (medium)
4265
- * - Circular stroke width: 4dp (SVG attribute)
4266
- * - Active track: primary
4267
- * - Inactive track: surface-container-highest
4268
- * - Determinate transitions: duration-medium4 + ease-standard
4269
- * - Indeterminate linear cycle: duration-long2
4270
- * - Indeterminate circular rotation: duration-long4
4271
- *
4272
4297
  * @example
4273
4298
  * ```tsx
4274
4299
  * // Linear determinate
@@ -4283,8 +4308,8 @@ interface ProgressHeadlessProps extends AriaProgressBarProps {
4283
4308
  * // Circular indeterminate
4284
4309
  * <Progress type="circular" indeterminate aria-label="Loading" />
4285
4310
  *
4286
- * // Circular small spinner
4287
- * <Progress type="circular" indeterminate size="small" aria-label="Loading" />
4311
+ * // Thick wavy (MD3 Expressive)
4312
+ * <Progress type="linear" indeterminate shape="wavy" thickness="thick" aria-label="Loading" />
4288
4313
  * ```
4289
4314
  */
4290
4315
  declare const Progress: React__default.ForwardRefExoticComponent<ProgressProps & React__default.RefAttributes<HTMLDivElement>>;
@@ -4300,7 +4325,7 @@ declare const Progress: React__default.ForwardRefExoticComponent<ProgressProps &
4300
4325
  * - Determinate and indeterminate progress support
4301
4326
  * - Internationalized value label formatting via React Aria
4302
4327
  * - Label linkage via aria-labelledby / aria-label
4303
- * - Render prop for custom visual rendering
4328
+ * - Render prop for custom visual rendering (receives shape + thickness)
4304
4329
  *
4305
4330
  * @example
4306
4331
  * ```tsx
@@ -4308,7 +4333,7 @@ declare const Progress: React__default.ForwardRefExoticComponent<ProgressProps &
4308
4333
  * <ProgressHeadless
4309
4334
  * value={50}
4310
4335
  * label="Upload"
4311
- * renderProgress={({ percentage }) => (
4336
+ * renderProgress={({ percentage, shape, thickness }) => (
4312
4337
  * <div style={{ width: `${percentage}%` }} />
4313
4338
  * )}
4314
4339
  * />