@bug-on/m3-expressive 1.2.0 → 1.2.1

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 (54) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/buttons.d.mts +2 -2
  3. package/dist/buttons.d.ts +2 -2
  4. package/dist/buttons.js +678 -605
  5. package/dist/buttons.js.map +1 -1
  6. package/dist/buttons.mjs +677 -604
  7. package/dist/buttons.mjs.map +1 -1
  8. package/dist/core.js +86 -61
  9. package/dist/core.js.map +1 -1
  10. package/dist/core.mjs +86 -61
  11. package/dist/core.mjs.map +1 -1
  12. package/dist/feedback.js +85 -61
  13. package/dist/feedback.js.map +1 -1
  14. package/dist/feedback.mjs +85 -61
  15. package/dist/feedback.mjs.map +1 -1
  16. package/dist/forms.d.mts +2 -2
  17. package/dist/forms.d.ts +2 -2
  18. package/dist/forms.js +70 -8
  19. package/dist/forms.js.map +1 -1
  20. package/dist/forms.mjs +70 -8
  21. package/dist/forms.mjs.map +1 -1
  22. package/dist/{icon-button-D-gs0gfj.d.mts → icon-button-sSt6PPLg.d.mts} +6 -0
  23. package/dist/{icon-button-D-gs0gfj.d.ts → icon-button-sSt6PPLg.d.ts} +6 -0
  24. package/dist/index.d.mts +4 -4
  25. package/dist/index.d.ts +4 -4
  26. package/dist/index.js +973 -496
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +967 -497
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/layout.d.mts +18 -1
  31. package/dist/layout.d.ts +18 -1
  32. package/dist/layout.js +65 -8
  33. package/dist/layout.js.map +1 -1
  34. package/dist/layout.mjs +65 -8
  35. package/dist/layout.mjs.map +1 -1
  36. package/dist/navigation.d.mts +134 -9
  37. package/dist/navigation.d.ts +134 -9
  38. package/dist/navigation.js +403 -93
  39. package/dist/navigation.js.map +1 -1
  40. package/dist/navigation.mjs +397 -94
  41. package/dist/navigation.mjs.map +1 -1
  42. package/dist/overlays.js +214 -189
  43. package/dist/overlays.js.map +1 -1
  44. package/dist/overlays.mjs +176 -151
  45. package/dist/overlays.mjs.map +1 -1
  46. package/dist/pickers.js +222 -197
  47. package/dist/pickers.js.map +1 -1
  48. package/dist/pickers.mjs +189 -164
  49. package/dist/pickers.mjs.map +1 -1
  50. package/dist/{split-button-trailing-uncheckable-BkPbiBo3.d.ts → split-button-trailing-uncheckable-BcPD_7uK.d.ts} +44 -6
  51. package/dist/{split-button-trailing-uncheckable-D_PLPb-u.d.mts → split-button-trailing-uncheckable-DtFJkTFr.d.mts} +44 -6
  52. package/dist/{text-field-eAIpz9z1.d.mts → text-field-T4Rg-9Bw.d.mts} +7 -0
  53. package/dist/{text-field-eAIpz9z1.d.ts → text-field-T4Rg-9Bw.d.ts} +7 -0
  54. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -228,7 +228,7 @@ function applyTheme(sourceColorHex, mode = "light", root = document.documentElem
228
228
  const resolved = resolveMode(mode);
229
229
  const colors = generateM3Theme(sourceColorHex, resolved, options);
230
230
  for (const [key, value] of Object.entries(colors)) {
231
- const kebabKey = key.replace(/[A-Z]/g, (m67) => `-${m67.toLowerCase()}`);
231
+ const kebabKey = key.replace(/[A-Z]/g, (m68) => `-${m68.toLowerCase()}`);
232
232
  root.style.setProperty(`--md-sys-color-${kebabKey}`, value);
233
233
  root.style.setProperty(`--color-m3-${kebabKey}`, value);
234
234
  }
@@ -250,7 +250,7 @@ function createMd3ExpressiveTheme(options) {
250
250
  function schemeToCssVariables(scheme) {
251
251
  const result = {};
252
252
  for (const [key, value] of Object.entries(scheme)) {
253
- const kebabKey = key.replace(/[A-Z]/g, (m67) => `-${m67.toLowerCase()}`);
253
+ const kebabKey = key.replace(/[A-Z]/g, (m68) => `-${m68.toLowerCase()}`);
254
254
  result[`--md-sys-color-${kebabKey}`] = value;
255
255
  }
256
256
  return result;
@@ -1087,8 +1087,8 @@ var RoundedPolygon = class _RoundedPolygon {
1087
1087
  );
1088
1088
  const mid = c.pointOnCurve(0.5);
1089
1089
  const md = distanceSquared(mid.x - this.centerX, mid.y - this.centerY);
1090
- const m67 = Math.max(ad, md);
1091
- if (m67 > maxDistSq) maxDistSq = m67;
1090
+ const m68 = Math.max(ad, md);
1091
+ if (m68 > maxDistSq) maxDistSq = m68;
1092
1092
  }
1093
1093
  const d = Math.sqrt(maxDistSq);
1094
1094
  return [
@@ -7044,12 +7044,6 @@ var WIDTH_MORPH_SPRING = {
7044
7044
  damping: 38,
7045
7045
  mass: 0.85
7046
7046
  };
7047
- var NAVBAR_EXPRESSIVE_SPRING = {
7048
- type: "spring",
7049
- stiffness: 430,
7050
- damping: 38,
7051
- mass: 0.8
7052
- };
7053
7047
  var AnimatedCheckLabel = React59.memo(function AnimatedCheckLabel2({
7054
7048
  selected,
7055
7049
  size,
@@ -7087,23 +7081,6 @@ var AnimatedCheckLabel = React59.memo(function AnimatedCheckLabel2({
7087
7081
  }
7088
7082
  );
7089
7083
  });
7090
- var AnimatedNavbarLabel = React59.memo(function AnimatedNavbarLabel2({
7091
- show,
7092
- children
7093
- }) {
7094
- return /* @__PURE__ */ jsx(AnimatePresence, { initial: false, mode: "popLayout", children: show && /* @__PURE__ */ jsx(
7095
- m.span,
7096
- {
7097
- initial: { width: 0, opacity: 0, scale: 0.8 },
7098
- animate: { width: "auto", opacity: 1, scale: 1 },
7099
- exit: { width: 0, opacity: 0, scale: 0.8 },
7100
- transition: NAVBAR_EXPRESSIVE_SPRING,
7101
- className: "overflow-hidden whitespace-nowrap text-sm font-semibold tracking-[0.01em] ml-1.5",
7102
- children
7103
- },
7104
- "navbar-label"
7105
- ) });
7106
- });
7107
7084
  function resolveConnectedShapes(variant, orientation, isFirst, isLast, itemSize) {
7108
7085
  const defaults = ButtonGroupDefaults.connectedLeadingButtonShapes(itemSize);
7109
7086
  if (variant !== "connected") return defaults;
@@ -7124,7 +7101,7 @@ function resolveConnectedShapes(variant, orientation, isFirst, isLast, itemSize)
7124
7101
  }
7125
7102
  return defaults;
7126
7103
  }
7127
- function resolveIconAndLabel(element, isSelected, itemSize, variant, showCheck, iconBehavior, labelBehavior) {
7104
+ function resolveIconAndLabel(element, isSelected, itemSize, showCheck, iconBehavior, labelBehavior) {
7128
7105
  let icon = element.props.icon;
7129
7106
  let label = element.props.children;
7130
7107
  const animateCheckInLabel = showCheck && iconBehavior !== "none" && iconBehavior !== "selected" && label !== void 0;
@@ -7140,9 +7117,6 @@ function resolveIconAndLabel(element, isSelected, itemSize, variant, showCheck,
7140
7117
  }
7141
7118
  if (animateCheckInLabel && label !== void 0) {
7142
7119
  label = /* @__PURE__ */ jsx(AnimatedCheckLabel, { selected: isSelected, size: itemSize, children: label });
7143
- } else if (variant === "navbar" && label !== void 0) {
7144
- const showLabel = !labelBehavior || labelBehavior === "all" || labelBehavior === "selected" && isSelected;
7145
- label = /* @__PURE__ */ jsx(AnimatedNavbarLabel, { show: showLabel, children: label });
7146
7120
  }
7147
7121
  return { icon, label };
7148
7122
  }
@@ -7177,13 +7151,11 @@ function resolveFlexTargets(variant, orientation, isSelected, isPressed, hasSele
7177
7151
  function buildMotionProps(variant, isSelected, isPressed, itemSize, shapes, flex, existingAnimate, existingWhileTap) {
7178
7152
  var _a, _b;
7179
7153
  const props = { animate: __spreadValues({}, existingAnimate) };
7180
- if (variant !== "navbar") {
7181
- if (flex.flexGrow !== void 0) {
7182
- props.animate.flexGrow = flex.flexGrow;
7183
- }
7184
- if (flex.paddingInline !== void 0) {
7185
- props.animate.paddingInline = flex.paddingInline;
7186
- }
7154
+ if (flex.flexGrow !== void 0) {
7155
+ props.animate.flexGrow = flex.flexGrow;
7156
+ }
7157
+ if (flex.paddingInline !== void 0) {
7158
+ props.animate.paddingInline = flex.paddingInline;
7187
7159
  }
7188
7160
  if (variant === "standard") {
7189
7161
  const pressedRadius = (_a = PRESSED_RADIUS_MAP[itemSize]) != null ? _a : PRESSED_RADIUS_MAP.sm;
@@ -7234,13 +7206,6 @@ function buildMotionProps(variant, isSelected, isPressed, itemSize, shapes, flex
7234
7206
  });
7235
7207
  props.layout = true;
7236
7208
  }
7237
- if (variant === "navbar") {
7238
- props.layout = true;
7239
- props.transition = {
7240
- layout: WIDTH_MORPH_SPRING,
7241
- default: BUTTON_SHAPE_MORPH_SPRING
7242
- };
7243
- }
7244
7209
  return props;
7245
7210
  }
7246
7211
  var ButtonGroupComponent = React59.forwardRef(
@@ -7280,7 +7245,6 @@ var ButtonGroupComponent = React59.forwardRef(
7280
7245
  const [lockedGroupSize, setLockedGroupSize] = React59.useState(
7281
7246
  null
7282
7247
  );
7283
- const layoutIdGroup = React59.useId();
7284
7248
  const rootRef = React59.useRef(null);
7285
7249
  const setRootRef = React59.useCallback(
7286
7250
  (node) => {
@@ -7363,7 +7327,7 @@ var ButtonGroupComponent = React59.forwardRef(
7363
7327
  className: cn(
7364
7328
  "inline-flex p-0 m-0 border-none max-w-full [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
7365
7329
  orientation === "vertical" ? "flex-col items-stretch overflow-y-auto overflow-x-hidden" : "flex-row overflow-x-auto overflow-y-hidden",
7366
- variant === "standard" ? "gap-3" : variant === "navbar" ? "gap-1.5 h-full" : "gap-0.5",
7330
+ variant === "standard" ? "gap-3" : "gap-0.5",
7367
7331
  fullWidth && "w-full",
7368
7332
  fullWidth && orientation === "vertical" && "h-full",
7369
7333
  className
@@ -7373,7 +7337,7 @@ var ButtonGroupComponent = React59.forwardRef(
7373
7337
  onPointerUp: handlePointerLeaveAndUp
7374
7338
  }, props), {
7375
7339
  children: childrenArray.map((child, index) => {
7376
- var _a2, _b2, _c;
7340
+ var _a2, _b2;
7377
7341
  const element = child;
7378
7342
  const isSelected = element.props.selected === true;
7379
7343
  const isFirst = index === 0;
@@ -7385,7 +7349,6 @@ var ButtonGroupComponent = React59.forwardRef(
7385
7349
  element,
7386
7350
  isSelected,
7387
7351
  itemSize,
7388
- variant,
7389
7352
  showCheck,
7390
7353
  iconBehavior,
7391
7354
  labelBehavior
@@ -7411,7 +7374,7 @@ var ButtonGroupComponent = React59.forwardRef(
7411
7374
  basePx
7412
7375
  );
7413
7376
  const dynamicStyle = __spreadValues({}, element.props.style);
7414
- if (variant !== "navbar" && flex.flexGrow !== void 0 && fullWidth) {
7377
+ if (flex.flexGrow !== void 0 && fullWidth) {
7415
7378
  dynamicStyle.flexBasis = 0;
7416
7379
  dynamicStyle.flexShrink = 1;
7417
7380
  dynamicStyle.minWidth = 0;
@@ -7429,13 +7392,7 @@ var ButtonGroupComponent = React59.forwardRef(
7429
7392
  existingWhileTap
7430
7393
  );
7431
7394
  const connectedClasses = variant === "connected" && isSelected ? "z-20" : "";
7432
- const navbarFlexStyle = flex.flexGrow !== void 0 ? {
7433
- flexBasis: fullWidth && labelBehavior !== "selected" ? 0 : "auto",
7434
- flexShrink: fullWidth ? 1 : 0,
7435
- flexGrow: flex.flexGrow,
7436
- minWidth: labelBehavior !== "selected" ? 0 : "fit-content"
7437
- } : {};
7438
- const clonedElement = React59.cloneElement(element, __spreadValues(__spreadProps(__spreadValues(__spreadValues(__spreadValues({
7395
+ const clonedElement = React59.cloneElement(element, __spreadValues(__spreadProps(__spreadValues({
7439
7396
  key: (_b2 = element.key) != null ? _b2 : index,
7440
7397
  tabIndex: isFirst ? 0 : -1,
7441
7398
  size: size || element.props.size,
@@ -7444,71 +7401,20 @@ var ButtonGroupComponent = React59.forwardRef(
7444
7401
  }, variant === "connected" && {
7445
7402
  colorStyle: element.props.colorStyle || "tonal",
7446
7403
  selectedColorStyle: element.props.selectedColorStyle || "filled"
7447
- }), variant === "navbar" && {
7448
- colorStyle: "text",
7449
- selectedColorStyle: "text",
7450
- className: cn(
7451
- element.props.className,
7452
- "w-full! h-full! px-3! min-w-0! relative z-20 flex items-center justify-center",
7453
- isSelected ? "text-m3-on-secondary-container! hover:bg-transparent! active:bg-transparent!" : "text-m3-on-surface-variant! hover:bg-transparent! active:bg-transparent!",
7454
- itemClassName
7455
- )
7456
- }), variant !== "navbar" && {
7404
+ }), {
7457
7405
  className: cn(
7458
7406
  element.props.className,
7459
7407
  connectedClasses,
7460
7408
  "focus-visible:z-10 hover:z-10 relative min-w-0",
7461
7409
  orientation === "vertical" && "w-full",
7462
7410
  itemClassName
7463
- )
7464
- }), {
7465
- style: variant === "navbar" ? __spreadProps(__spreadValues({}, dynamicStyle), { minWidth: 0 }) : dynamicStyle,
7411
+ ),
7412
+ style: dynamicStyle,
7466
7413
  onPointerDown: (e) => {
7467
7414
  setPressedIndex(index);
7468
7415
  if (element.props.onPointerDown) element.props.onPointerDown(e);
7469
7416
  }
7470
7417
  }), motionProps));
7471
- if (variant === "navbar") {
7472
- return /* @__PURE__ */ jsxs(
7473
- m.div,
7474
- {
7475
- layout: true,
7476
- whileTap: { scale: 0.96 },
7477
- transition: NAVBAR_EXPRESSIVE_SPRING,
7478
- className: "group relative h-full flex items-center justify-center min-w-0",
7479
- style: navbarFlexStyle,
7480
- children: [
7481
- /* @__PURE__ */ jsxs(
7482
- "div",
7483
- {
7484
- className: "absolute inset-x-1 inset-y-0 m-auto flex items-center justify-center pointer-events-none",
7485
- style: { zIndex: 1 },
7486
- children: [
7487
- /* @__PURE__ */ jsx(
7488
- "div",
7489
- {
7490
- className: "w-full h-[40px] bg-m3-on-surface-variant/8 opacity-0 group-hover:opacity-100 transition-opacity duration-200",
7491
- style: { borderRadius: PILL_BORDER_RADIUS }
7492
- }
7493
- ),
7494
- /* @__PURE__ */ jsx(AnimatePresence, { children: isSelected && /* @__PURE__ */ jsx(
7495
- m.div,
7496
- {
7497
- layoutId: `navbar-active-indicator-${layoutIdGroup}`,
7498
- className: "absolute inset-0 m-auto w-full h-[40px] bg-m3-secondary-container",
7499
- style: { borderRadius: PILL_BORDER_RADIUS },
7500
- transition: NAVBAR_EXPRESSIVE_SPRING
7501
- }
7502
- ) })
7503
- ]
7504
- }
7505
- ),
7506
- clonedElement
7507
- ]
7508
- },
7509
- (_c = element.key) != null ? _c : index
7510
- );
7511
- }
7512
7418
  return clonedElement;
7513
7419
  })
7514
7420
  })
@@ -7613,6 +7519,8 @@ var ExtendedFABComponent = React59.forwardRef(
7613
7519
  scrollThreshold = 50,
7614
7520
  collapsed,
7615
7521
  onCollapsedChange,
7522
+ asChild = false,
7523
+ children,
7616
7524
  onClick,
7617
7525
  onKeyDown,
7618
7526
  layoutId,
@@ -7632,6 +7540,8 @@ var ExtendedFABComponent = React59.forwardRef(
7632
7540
  "scrollThreshold",
7633
7541
  "collapsed",
7634
7542
  "onCollapsedChange",
7543
+ "asChild",
7544
+ "children",
7635
7545
  "onClick",
7636
7546
  "onKeyDown",
7637
7547
  "layoutId",
@@ -7683,7 +7593,109 @@ var ExtendedFABComponent = React59.forwardRef(
7683
7593
  },
7684
7594
  [loading, onClick, onKeyDown]
7685
7595
  );
7686
- return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsx(AnimatePresence, { children: visible && !(isCollapsed && !hasIcon) && /* @__PURE__ */ jsxs(
7596
+ const containerClassName = cn(
7597
+ "relative shrink-0 inline-flex items-center select-none cursor-pointer overflow-hidden",
7598
+ "transition-[box-shadow,filter] duration-200",
7599
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2",
7600
+ "disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none",
7601
+ colors.bg,
7602
+ colors.text,
7603
+ lowered ? "shadow-sm" : "shadow-md",
7604
+ (_d = SIZE_HEIGHT[size]) != null ? _d : "h-14",
7605
+ SIZE_TEXT[size],
7606
+ isCollapsed ? cn("px-0 justify-center", SIZE_WIDTH_COLLAPSED[size]) : cn(
7607
+ hasIcon ? "justify-start" : "justify-center",
7608
+ SIZE_PADDING[size],
7609
+ hasIcon && SIZE_GAP[size]
7610
+ ),
7611
+ dir === "rtl" || restProps.dir === "rtl" ? "flex-row-reverse" : "flex-row",
7612
+ loading && "pointer-events-none opacity-75 cursor-not-allowed",
7613
+ className
7614
+ );
7615
+ const innerContent = /* @__PURE__ */ jsxs(Fragment, { children: [
7616
+ /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
7617
+ hasIcon && /* @__PURE__ */ jsx(
7618
+ m.span,
7619
+ {
7620
+ layout: "position",
7621
+ className: cn(
7622
+ "flex items-center justify-center shrink-0",
7623
+ sizeIcon.cls
7624
+ ),
7625
+ children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", initial: false, children: loading ? /* @__PURE__ */ jsx(
7626
+ m.span,
7627
+ __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
7628
+ transition: SPRING_TRANSITION,
7629
+ className: "flex items-center justify-center shrink-0 w-full h-full",
7630
+ children: loadingVariant === "loading-indicator" ? /* @__PURE__ */ jsx(
7631
+ LoadingIndicator,
7632
+ {
7633
+ size: sizeIcon.px,
7634
+ color: "currentColor",
7635
+ "aria-label": "Loading"
7636
+ }
7637
+ ) : /* @__PURE__ */ jsx(
7638
+ ProgressIndicator,
7639
+ {
7640
+ variant: "circular",
7641
+ size: sizeIcon.px,
7642
+ color: "currentColor",
7643
+ trackColor: "transparent",
7644
+ "aria-label": "Loading"
7645
+ }
7646
+ )
7647
+ }),
7648
+ "loading"
7649
+ ) : icon && /* @__PURE__ */ jsx(
7650
+ m.span,
7651
+ __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
7652
+ transition: SPRING_TRANSITION,
7653
+ "aria-hidden": "true",
7654
+ className: "flex items-center justify-center shrink-0 w-full h-full [&>svg]:w-full [&>svg]:h-full",
7655
+ children: icon
7656
+ }),
7657
+ "icon"
7658
+ ) })
7659
+ }
7660
+ ),
7661
+ /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: !isCollapsed && /* @__PURE__ */ jsx(
7662
+ m.span,
7663
+ {
7664
+ layout: "position",
7665
+ initial: { opacity: 0, width: 0 },
7666
+ animate: { opacity: 1, width: "auto" },
7667
+ exit: { opacity: 0, width: 0 },
7668
+ transition: {
7669
+ opacity: { duration: 0.15, ease: "linear" },
7670
+ width: SPRING_TRANSITION
7671
+ },
7672
+ className: "overflow-hidden whitespace-nowrap",
7673
+ children: label
7674
+ },
7675
+ "label"
7676
+ ) })
7677
+ ] });
7678
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsx(AnimatePresence, { children: visible && !(isCollapsed && !hasIcon) && (asChild ? /* @__PURE__ */ jsx(
7679
+ Slot,
7680
+ __spreadProps(__spreadValues({
7681
+ ref: localRef,
7682
+ "aria-label": ariaLabel || label,
7683
+ "aria-busy": loading || void 0,
7684
+ "aria-disabled": loading || restProps.disabled,
7685
+ onClick: handleClick,
7686
+ onPointerDown,
7687
+ onKeyDown: handleKeyDown,
7688
+ style: __spreadProps(__spreadValues({}, style), {
7689
+ borderRadius: `${radiusConfig.default}px`
7690
+ }),
7691
+ className: containerClassName
7692
+ }, restProps), {
7693
+ children: React59.cloneElement(
7694
+ React59.Children.only(children),
7695
+ { children: innerContent }
7696
+ )
7697
+ })
7698
+ ) : /* @__PURE__ */ jsx(
7687
7699
  m.button,
7688
7700
  __spreadProps(__spreadValues({
7689
7701
  ref: localRef,
@@ -7715,91 +7727,11 @@ var ExtendedFABComponent = React59.forwardRef(
7715
7727
  opacity: { duration: 0.2, ease: "linear" },
7716
7728
  layout: SPRING_TRANSITION
7717
7729
  },
7718
- className: cn(
7719
- "relative shrink-0 inline-flex items-center select-none cursor-pointer overflow-hidden",
7720
- "transition-[box-shadow,filter] duration-200",
7721
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2",
7722
- "disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none",
7723
- colors.bg,
7724
- colors.text,
7725
- lowered ? "shadow-sm" : "shadow-md",
7726
- (_d = SIZE_HEIGHT[size]) != null ? _d : "h-14",
7727
- SIZE_TEXT[size],
7728
- isCollapsed ? cn("px-0 justify-center", SIZE_WIDTH_COLLAPSED[size]) : cn(
7729
- hasIcon ? "justify-start" : "justify-center",
7730
- SIZE_PADDING[size],
7731
- hasIcon && SIZE_GAP[size]
7732
- ),
7733
- dir === "rtl" || restProps.dir === "rtl" ? "flex-row-reverse" : "flex-row",
7734
- loading && "pointer-events-none opacity-75 cursor-not-allowed",
7735
- className
7736
- )
7730
+ className: containerClassName
7737
7731
  }, restProps), {
7738
- children: [
7739
- /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
7740
- hasIcon && /* @__PURE__ */ jsx(
7741
- m.span,
7742
- {
7743
- layout: "position",
7744
- className: cn(
7745
- "flex items-center justify-center shrink-0",
7746
- sizeIcon.cls
7747
- ),
7748
- children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", initial: false, children: loading ? /* @__PURE__ */ jsx(
7749
- m.span,
7750
- __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
7751
- transition: SPRING_TRANSITION,
7752
- className: "flex items-center justify-center shrink-0 w-full h-full",
7753
- children: loadingVariant === "loading-indicator" ? /* @__PURE__ */ jsx(
7754
- LoadingIndicator,
7755
- {
7756
- size: sizeIcon.px,
7757
- color: "currentColor",
7758
- "aria-label": "Loading"
7759
- }
7760
- ) : /* @__PURE__ */ jsx(
7761
- ProgressIndicator,
7762
- {
7763
- variant: "circular",
7764
- size: sizeIcon.px,
7765
- color: "currentColor",
7766
- trackColor: "transparent",
7767
- "aria-label": "Loading"
7768
- }
7769
- )
7770
- }),
7771
- "loading"
7772
- ) : icon && /* @__PURE__ */ jsx(
7773
- m.span,
7774
- __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
7775
- transition: SPRING_TRANSITION,
7776
- "aria-hidden": "true",
7777
- className: "flex items-center justify-center shrink-0 w-full h-full [&>svg]:w-full [&>svg]:h-full",
7778
- children: icon
7779
- }),
7780
- "icon"
7781
- ) })
7782
- }
7783
- ),
7784
- /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: !isCollapsed && /* @__PURE__ */ jsx(
7785
- m.span,
7786
- {
7787
- layout: "position",
7788
- initial: { opacity: 0, width: 0 },
7789
- animate: { opacity: 1, width: "auto" },
7790
- exit: { opacity: 0, width: 0 },
7791
- transition: {
7792
- opacity: { duration: 0.15, ease: "linear" },
7793
- width: SPRING_TRANSITION
7794
- },
7795
- className: "overflow-hidden whitespace-nowrap",
7796
- children: label
7797
- },
7798
- "label"
7799
- ) })
7800
- ]
7732
+ children: innerContent
7801
7733
  })
7802
- ) }) });
7734
+ )) }) });
7803
7735
  }
7804
7736
  );
7805
7737
  ExtendedFABComponent.displayName = "ExtendedFAB";
@@ -7888,6 +7820,7 @@ var FABComponent = React59.forwardRef(
7888
7820
  loading = false,
7889
7821
  loadingVariant = "loading-indicator",
7890
7822
  visible = true,
7823
+ asChild = false,
7891
7824
  onClick,
7892
7825
  onKeyDown,
7893
7826
  "aria-label": ariaLabel
@@ -7903,6 +7836,7 @@ var FABComponent = React59.forwardRef(
7903
7836
  "loading",
7904
7837
  "loadingVariant",
7905
7838
  "visible",
7839
+ "asChild",
7906
7840
  "onClick",
7907
7841
  "onKeyDown",
7908
7842
  "aria-label"
@@ -7940,19 +7874,116 @@ var FABComponent = React59.forwardRef(
7940
7874
  },
7941
7875
  [loading, onClick, onKeyDown]
7942
7876
  );
7943
- return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsx(AnimatePresence, { children: visible && /* @__PURE__ */ jsxs(
7877
+ const labelContent = asChild ? React59.Children.only(children).props.children : children;
7878
+ const innerContent = /* @__PURE__ */ jsxs(Fragment, { children: [
7879
+ needsTouchTarget && /* @__PURE__ */ jsx(TouchTarget, {}),
7880
+ /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
7881
+ /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", initial: false, children: loading ? /* @__PURE__ */ jsx(
7882
+ m.span,
7883
+ __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
7884
+ transition: SPRING_TRANSITION,
7885
+ className: cn(
7886
+ "flex items-center justify-center shrink-0",
7887
+ iconClass
7888
+ ),
7889
+ children: loadingVariant === "loading-indicator" ? /* @__PURE__ */ jsx(
7890
+ LoadingIndicator,
7891
+ {
7892
+ size: iconPx,
7893
+ color: "currentColor",
7894
+ "aria-label": "Loading"
7895
+ }
7896
+ ) : /* @__PURE__ */ jsx(
7897
+ ProgressIndicator,
7898
+ {
7899
+ variant: "circular",
7900
+ size: iconPx,
7901
+ color: "currentColor",
7902
+ trackColor: "transparent",
7903
+ "aria-label": "Loading"
7904
+ }
7905
+ )
7906
+ }),
7907
+ "loading"
7908
+ ) : /* @__PURE__ */ jsx(
7909
+ m.span,
7910
+ __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
7911
+ transition: SPRING_TRANSITION,
7912
+ "aria-hidden": "true",
7913
+ className: cn(
7914
+ "flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full",
7915
+ iconClass
7916
+ ),
7917
+ children: icon
7918
+ }),
7919
+ "icon"
7920
+ ) }),
7921
+ /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: extended && labelContent && /* @__PURE__ */ jsx(
7922
+ m.span,
7923
+ {
7924
+ initial: { width: 0, opacity: 0 },
7925
+ animate: { width: "auto", opacity: 1 },
7926
+ exit: { width: 0, opacity: 0 },
7927
+ transition: SPRING_TRANSITION,
7928
+ className: "overflow-hidden whitespace-nowrap ml-3",
7929
+ children: labelContent
7930
+ },
7931
+ "label"
7932
+ ) })
7933
+ ] });
7934
+ const containerClassName = cn(
7935
+ "relative shrink-0 inline-flex items-center justify-center",
7936
+ "select-none cursor-pointer overflow-hidden",
7937
+ "transition-[box-shadow,opacity,filter] duration-200",
7938
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2",
7939
+ "disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none",
7940
+ colors.bg,
7941
+ colors.text,
7942
+ lowered ? "shadow-sm" : colors.shadow,
7943
+ (_d = SIZE_STYLES[size]) != null ? _d : "h-14 w-14",
7944
+ extended && "w-auto px-6",
7945
+ SIZE_TEXT_CLASS[size],
7946
+ loading && "pointer-events-none opacity-75 cursor-not-allowed",
7947
+ className
7948
+ );
7949
+ const computedAriaLabel = ariaLabel || (typeof children === "string" ? children : void 0);
7950
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsx(AnimatePresence, { children: visible && (asChild ? /* @__PURE__ */ jsx(
7951
+ Slot,
7952
+ __spreadProps(__spreadValues({
7953
+ ref,
7954
+ "aria-label": computedAriaLabel,
7955
+ "aria-busy": loading || void 0,
7956
+ "aria-disabled": loading || restProps.disabled,
7957
+ onClick: handleClick,
7958
+ onPointerDown,
7959
+ onKeyDown: handleKeyDown,
7960
+ style: __spreadProps(__spreadValues({}, style), {
7961
+ borderRadius: `${animateRadius}px`
7962
+ }),
7963
+ className: containerClassName
7964
+ }, restProps), {
7965
+ children: React59.cloneElement(
7966
+ React59.Children.only(children),
7967
+ { children: innerContent }
7968
+ )
7969
+ })
7970
+ ) : /* @__PURE__ */ jsx(
7944
7971
  m.button,
7945
7972
  __spreadProps(__spreadValues({
7946
7973
  ref,
7947
7974
  type: "button",
7948
- "aria-label": ariaLabel || (typeof children === "string" ? children : void 0),
7975
+ "aria-label": computedAriaLabel,
7949
7976
  "aria-busy": loading || void 0,
7950
7977
  "aria-disabled": loading || restProps.disabled,
7951
7978
  onClick: handleClick,
7952
7979
  onPointerDown,
7953
7980
  onKeyDown: handleKeyDown,
7954
7981
  style,
7955
- initial: { scale: 0.5, opacity: 0, borderRadius: animateRadius },
7982
+ initial: {
7983
+ scale: 0.5,
7984
+ opacity: 0,
7985
+ borderRadius: animateRadius
7986
+ },
7956
7987
  animate: { scale: 1, opacity: 1, borderRadius: animateRadius },
7957
7988
  exit: { scale: 0.5, opacity: 0 },
7958
7989
  whileTap: { borderRadius: pressedRadius },
@@ -7961,80 +7992,11 @@ var FABComponent = React59.forwardRef(
7961
7992
  scale: SPRING_TRANSITION,
7962
7993
  opacity: { duration: 0.25, ease: "easeOut" }
7963
7994
  },
7964
- className: cn(
7965
- "relative shrink-0 inline-flex items-center justify-center",
7966
- "select-none cursor-pointer overflow-hidden",
7967
- "transition-[box-shadow,opacity,filter] duration-200",
7968
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2",
7969
- "disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none",
7970
- colors.bg,
7971
- colors.text,
7972
- lowered ? "shadow-sm" : colors.shadow,
7973
- (_d = SIZE_STYLES[size]) != null ? _d : "h-14 w-14",
7974
- extended && "w-auto px-6",
7975
- SIZE_TEXT_CLASS[size],
7976
- loading && "pointer-events-none opacity-75 cursor-not-allowed",
7977
- className
7978
- )
7995
+ className: containerClassName
7979
7996
  }, restProps), {
7980
- children: [
7981
- needsTouchTarget && /* @__PURE__ */ jsx(TouchTarget, {}),
7982
- /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
7983
- /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", initial: false, children: loading ? /* @__PURE__ */ jsx(
7984
- m.span,
7985
- __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
7986
- transition: SPRING_TRANSITION,
7987
- className: cn(
7988
- "flex items-center justify-center shrink-0",
7989
- iconClass
7990
- ),
7991
- children: loadingVariant === "loading-indicator" ? /* @__PURE__ */ jsx(
7992
- LoadingIndicator,
7993
- {
7994
- size: iconPx,
7995
- color: "currentColor",
7996
- "aria-label": "Loading"
7997
- }
7998
- ) : /* @__PURE__ */ jsx(
7999
- ProgressIndicator,
8000
- {
8001
- variant: "circular",
8002
- size: iconPx,
8003
- color: "currentColor",
8004
- trackColor: "transparent",
8005
- "aria-label": "Loading"
8006
- }
8007
- )
8008
- }),
8009
- "loading"
8010
- ) : /* @__PURE__ */ jsx(
8011
- m.span,
8012
- __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
8013
- transition: SPRING_TRANSITION,
8014
- "aria-hidden": "true",
8015
- className: cn(
8016
- "flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full",
8017
- iconClass
8018
- ),
8019
- children: icon
8020
- }),
8021
- "icon"
8022
- ) }),
8023
- /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: extended && children && /* @__PURE__ */ jsx(
8024
- m.span,
8025
- {
8026
- initial: { width: 0, opacity: 0 },
8027
- animate: { width: "auto", opacity: 1 },
8028
- exit: { width: 0, opacity: 0 },
8029
- transition: SPRING_TRANSITION,
8030
- className: "overflow-hidden whitespace-nowrap ml-3",
8031
- children
8032
- },
8033
- "label"
8034
- ) })
8035
- ]
7997
+ children: innerContent
8036
7998
  })
8037
- ) }) });
7999
+ )) }) });
8038
8000
  }
8039
8001
  );
8040
8002
  FABComponent.displayName = "FAB";
@@ -8234,7 +8196,9 @@ function FABMenuItem({
8234
8196
  disabled = false,
8235
8197
  colorVariant = "primary",
8236
8198
  className,
8237
- tabIndex = 0
8199
+ tabIndex = 0,
8200
+ asChild = false,
8201
+ children
8238
8202
  }) {
8239
8203
  var _a;
8240
8204
  const colors = (_a = MENU_ITEM_COLORS[colorVariant]) != null ? _a : MENU_ITEM_COLORS.primary;
@@ -8259,7 +8223,55 @@ function FABMenuItem({
8259
8223
  },
8260
8224
  [disabled, onClick]
8261
8225
  );
8262
- return /* @__PURE__ */ jsxs(
8226
+ const innerContent = /* @__PURE__ */ jsxs(Fragment, { children: [
8227
+ /* @__PURE__ */ jsx(TouchTarget, {}),
8228
+ /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
8229
+ /* @__PURE__ */ jsx(
8230
+ "span",
8231
+ {
8232
+ "aria-hidden": "true",
8233
+ className: "relative z-10 flex items-center justify-center size-6 shrink-0 [&>svg]:w-full [&>svg]:h-full pointer-events-none",
8234
+ children: icon
8235
+ }
8236
+ ),
8237
+ label && /* @__PURE__ */ jsx("span", { className: "relative z-10 text-base font-medium leading-none pointer-events-none", children: label })
8238
+ ] });
8239
+ const containerClassName = cn(
8240
+ "relative inline-flex flex-row items-center",
8241
+ "select-none cursor-pointer overflow-hidden",
8242
+ "whitespace-nowrap",
8243
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-1",
8244
+ MENU_ITEM_STYLES.size,
8245
+ MENU_ITEM_STYLES.gap,
8246
+ label ? MENU_ITEM_STYLES.padding : "px-4",
8247
+ !label && "justify-center",
8248
+ colors.bg,
8249
+ colors.text,
8250
+ disabled && "opacity-[0.38] pointer-events-none",
8251
+ className
8252
+ );
8253
+ const containerStyle = {
8254
+ transformOrigin: "right",
8255
+ borderRadius: `${MENU_ITEM_STYLES.cornerRadius}px`
8256
+ };
8257
+ if (asChild) {
8258
+ const child = React59.Children.only(children);
8259
+ return /* @__PURE__ */ jsx(m.div, { variants: MENU_ITEM_VARIANTS, style: containerStyle, children: /* @__PURE__ */ jsx(
8260
+ Slot,
8261
+ {
8262
+ role: "menuitem",
8263
+ tabIndex,
8264
+ "aria-disabled": disabled ? "true" : void 0,
8265
+ "data-disabled": disabled ? "true" : void 0,
8266
+ onClick: handleClick,
8267
+ onPointerDown,
8268
+ onKeyDown: handleKeyDown,
8269
+ className: containerClassName,
8270
+ children: React59.cloneElement(child, { children: innerContent })
8271
+ }
8272
+ ) });
8273
+ }
8274
+ return /* @__PURE__ */ jsx(
8263
8275
  m.div,
8264
8276
  {
8265
8277
  role: "menuitem",
@@ -8270,37 +8282,9 @@ function FABMenuItem({
8270
8282
  onPointerDown,
8271
8283
  onKeyDown: handleKeyDown,
8272
8284
  variants: MENU_ITEM_VARIANTS,
8273
- style: {
8274
- transformOrigin: "right",
8275
- borderRadius: `${MENU_ITEM_STYLES.cornerRadius}px`
8276
- },
8277
- className: cn(
8278
- "relative inline-flex flex-row items-center",
8279
- "select-none cursor-pointer overflow-hidden",
8280
- "whitespace-nowrap",
8281
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-1",
8282
- MENU_ITEM_STYLES.size,
8283
- MENU_ITEM_STYLES.gap,
8284
- label ? MENU_ITEM_STYLES.padding : "px-4",
8285
- !label && "justify-center",
8286
- colors.bg,
8287
- colors.text,
8288
- disabled && "opacity-[0.38] pointer-events-none",
8289
- className
8290
- ),
8291
- children: [
8292
- /* @__PURE__ */ jsx(TouchTarget, {}),
8293
- /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
8294
- /* @__PURE__ */ jsx(
8295
- "span",
8296
- {
8297
- "aria-hidden": "true",
8298
- className: "relative z-10 flex items-center justify-center size-6 shrink-0 [&>svg]:w-full [&>svg]:h-full pointer-events-none",
8299
- children: icon
8300
- }
8301
- ),
8302
- label && /* @__PURE__ */ jsx("span", { className: "relative z-10 text-base font-medium leading-none pointer-events-none", children: label })
8303
- ]
8285
+ style: containerStyle,
8286
+ className: containerClassName,
8287
+ children: innerContent
8304
8288
  }
8305
8289
  );
8306
8290
  }
@@ -8582,6 +8566,7 @@ var IconButtonComponent = React59.forwardRef(
8582
8566
  loading = false,
8583
8567
  loadingVariant = "loading-indicator",
8584
8568
  iconSize,
8569
+ asChild = false,
8585
8570
  children,
8586
8571
  onClick,
8587
8572
  onKeyDown,
@@ -8597,6 +8582,7 @@ var IconButtonComponent = React59.forwardRef(
8597
8582
  "loading",
8598
8583
  "loadingVariant",
8599
8584
  "iconSize",
8585
+ "asChild",
8600
8586
  "children",
8601
8587
  "onClick",
8602
8588
  "onKeyDown",
@@ -8658,7 +8644,87 @@ var IconButtonComponent = React59.forwardRef(
8658
8644
  },
8659
8645
  [loading, onClick, onKeyDown]
8660
8646
  );
8661
- return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsxs(
8647
+ const innerContent = /* @__PURE__ */ jsxs(Fragment, { children: [
8648
+ needsTouchTarget && /* @__PURE__ */ jsx(TouchTarget, {}),
8649
+ /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
8650
+ /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", initial: false, children: loading ? /* @__PURE__ */ jsx(
8651
+ m.span,
8652
+ __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
8653
+ transition: SPRING_TRANSITION,
8654
+ className: cn(
8655
+ "flex items-center justify-center shrink-0",
8656
+ iconSize != null ? void 0 : iconClass
8657
+ ),
8658
+ style: isCustomSize ? { width: `${iconSize}px`, height: `${iconSize}px` } : void 0,
8659
+ children: loadingVariant === "loading-indicator" ? /* @__PURE__ */ jsx(
8660
+ LoadingIndicator,
8661
+ {
8662
+ size: typeof iconPx === "number" ? iconPx : defaultIconPx,
8663
+ color: "currentColor",
8664
+ "aria-label": "Loading"
8665
+ }
8666
+ ) : /* @__PURE__ */ jsx(
8667
+ ProgressIndicator,
8668
+ {
8669
+ variant: "circular",
8670
+ size: typeof iconPx === "number" ? iconPx : defaultIconPx,
8671
+ color: "currentColor",
8672
+ trackColor: "transparent",
8673
+ "aria-label": "Loading"
8674
+ }
8675
+ )
8676
+ }),
8677
+ "loading"
8678
+ ) : /* @__PURE__ */ jsx(
8679
+ m.span,
8680
+ __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
8681
+ transition: SPRING_TRANSITION,
8682
+ "aria-hidden": "true",
8683
+ className: cn(
8684
+ "flex items-center justify-center shrink-0 [&_svg]:w-full [&_svg]:h-full [&_.md-icon]:text-[length:inherit]!",
8685
+ iconSize != null ? void 0 : iconClass
8686
+ ),
8687
+ style: {
8688
+ fontSize: typeof iconPx === "number" ? `${iconPx}px` : iconPx,
8689
+ width: isCustomSize ? `${iconSize}px` : void 0,
8690
+ height: isCustomSize ? `${iconSize}px` : void 0
8691
+ },
8692
+ children: asChild ? React59.Children.only(children).props.children : children
8693
+ }),
8694
+ "content"
8695
+ ) })
8696
+ ] });
8697
+ const containerClassName = cn(
8698
+ baseIconButtonClasses,
8699
+ resolvedColorClass,
8700
+ outlineWidthClass,
8701
+ disabledBgClass,
8702
+ "overflow-hidden",
8703
+ SIZE_STYLES2[size],
8704
+ loading && "pointer-events-none opacity-75 cursor-not-allowed",
8705
+ className
8706
+ );
8707
+ if (asChild) {
8708
+ const child = React59.Children.only(children);
8709
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsx(
8710
+ Slot,
8711
+ __spreadProps(__spreadValues({
8712
+ ref,
8713
+ "aria-pressed": isToggle ? isSelected : void 0,
8714
+ "aria-label": ariaLabel,
8715
+ "aria-busy": loading || void 0,
8716
+ "aria-disabled": loading || restProps.disabled,
8717
+ onClick: handleClick,
8718
+ onPointerDown,
8719
+ onKeyDown: handleKeyDown,
8720
+ style: __spreadProps(__spreadValues({}, style), { borderRadius: `${animateRadius}px` }),
8721
+ className: containerClassName
8722
+ }, restProps), {
8723
+ children: React59.cloneElement(child, { children: innerContent })
8724
+ })
8725
+ ) });
8726
+ }
8727
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsx(
8662
8728
  m.button,
8663
8729
  __spreadProps(__spreadValues({
8664
8730
  ref,
@@ -8674,67 +8740,9 @@ var IconButtonComponent = React59.forwardRef(
8674
8740
  animate: { borderRadius: animateRadius },
8675
8741
  whileTap: { borderRadius: pressedRadius },
8676
8742
  transition: { borderRadius: SPRING_TRANSITION_FAST },
8677
- className: cn(
8678
- baseIconButtonClasses,
8679
- resolvedColorClass,
8680
- outlineWidthClass,
8681
- disabledBgClass,
8682
- "overflow-hidden",
8683
- SIZE_STYLES2[size],
8684
- loading && "pointer-events-none opacity-75 cursor-not-allowed",
8685
- className
8686
- )
8743
+ className: containerClassName
8687
8744
  }, restProps), {
8688
- children: [
8689
- needsTouchTarget && /* @__PURE__ */ jsx(TouchTarget, {}),
8690
- /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
8691
- /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", initial: false, children: loading ? /* @__PURE__ */ jsx(
8692
- m.span,
8693
- __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
8694
- transition: SPRING_TRANSITION,
8695
- className: cn(
8696
- "flex items-center justify-center shrink-0",
8697
- iconSize != null ? void 0 : iconClass
8698
- ),
8699
- style: isCustomSize ? { width: `${iconSize}px`, height: `${iconSize}px` } : void 0,
8700
- children: loadingVariant === "loading-indicator" ? /* @__PURE__ */ jsx(
8701
- LoadingIndicator,
8702
- {
8703
- size: typeof iconPx === "number" ? iconPx : defaultIconPx,
8704
- color: "currentColor",
8705
- "aria-label": "Loading"
8706
- }
8707
- ) : /* @__PURE__ */ jsx(
8708
- ProgressIndicator,
8709
- {
8710
- variant: "circular",
8711
- size: typeof iconPx === "number" ? iconPx : defaultIconPx,
8712
- color: "currentColor",
8713
- trackColor: "transparent",
8714
- "aria-label": "Loading"
8715
- }
8716
- )
8717
- }),
8718
- "loading"
8719
- ) : /* @__PURE__ */ jsx(
8720
- m.span,
8721
- __spreadProps(__spreadValues({}, ICON_SPAN_VARIANTS), {
8722
- transition: SPRING_TRANSITION,
8723
- "aria-hidden": "true",
8724
- className: cn(
8725
- "flex items-center justify-center shrink-0 [&_svg]:w-full [&_svg]:h-full [&_.md-icon]:text-[length:inherit]!",
8726
- iconSize != null ? void 0 : iconClass
8727
- ),
8728
- style: {
8729
- fontSize: typeof iconPx === "number" ? `${iconPx}px` : iconPx,
8730
- width: isCustomSize ? `${iconSize}px` : void 0,
8731
- height: isCustomSize ? `${iconSize}px` : void 0
8732
- },
8733
- children
8734
- }),
8735
- "content"
8736
- ) })
8737
- ]
8745
+ children: innerContent
8738
8746
  })
8739
8747
  ) });
8740
8748
  }
@@ -9054,6 +9062,7 @@ var SplitButtonLeadingComponent = React59.forwardRef(
9054
9062
  icon,
9055
9063
  children,
9056
9064
  disabled,
9065
+ asChild = false,
9057
9066
  onClick,
9058
9067
  onPointerDown,
9059
9068
  onPointerUp,
@@ -9069,6 +9078,7 @@ var SplitButtonLeadingComponent = React59.forwardRef(
9069
9078
  "icon",
9070
9079
  "children",
9071
9080
  "disabled",
9081
+ "asChild",
9072
9082
  "onClick",
9073
9083
  "onPointerDown",
9074
9084
  "onPointerUp",
@@ -9155,12 +9165,73 @@ var SplitButtonLeadingComponent = React59.forwardRef(
9155
9165
  [onBlur]
9156
9166
  );
9157
9167
  const leadingIconSize = LEADING_ICON_SIZE_FOR_SIZE[actualSize];
9158
- return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsxs(
9168
+ const labelContent = asChild ? React59.Children.only(children).props.children : children;
9169
+ const innerContent = /* @__PURE__ */ jsxs(Fragment, { children: [
9170
+ needsTouchTarget && /* @__PURE__ */ jsx(TouchTarget, {}),
9171
+ /* @__PURE__ */ jsx(
9172
+ StateLayer,
9173
+ {
9174
+ hovered: isHovered,
9175
+ focused: isFocused,
9176
+ pressed: isPressed
9177
+ }
9178
+ ),
9179
+ /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
9180
+ icon && /* @__PURE__ */ jsx(
9181
+ "span",
9182
+ {
9183
+ className: "flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full overflow-hidden [&_.md-icon]:text-[length:inherit]!",
9184
+ style: {
9185
+ fontSize: leadingIconSize,
9186
+ width: leadingIconSize,
9187
+ height: leadingIconSize
9188
+ },
9189
+ children: icon
9190
+ }
9191
+ ),
9192
+ labelContent && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center h-full gap-[inherit]", children: labelContent })
9193
+ ] });
9194
+ const containerClassName = cn(
9195
+ splitButtonVariants({
9196
+ variant: actualVariant,
9197
+ size: actualSize,
9198
+ disabled
9199
+ }),
9200
+ typographyClass,
9201
+ className
9202
+ );
9203
+ const mergedStyle = __spreadValues({
9204
+ paddingInlineStart: tokens.leadingPadding.start,
9205
+ paddingInlineEnd: tokens.leadingPadding.end,
9206
+ gap: "8px",
9207
+ borderRadius
9208
+ }, style);
9209
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: asChild ? /* @__PURE__ */ jsx(
9210
+ Slot,
9211
+ __spreadProps(__spreadValues({
9212
+ ref,
9213
+ "aria-disabled": disabled || void 0,
9214
+ onClick: handleClick,
9215
+ onPointerDown: handlePointerDown,
9216
+ onPointerUp: handlePointerUp,
9217
+ onPointerEnter: handlePointerEnter,
9218
+ onPointerLeave: handlePointerLeave,
9219
+ onPointerCancel: handlePointerCancel,
9220
+ onFocus: handleFocus,
9221
+ onBlur: handleBlur,
9222
+ style: mergedStyle,
9223
+ className: containerClassName
9224
+ }, restProps), {
9225
+ children: React59.cloneElement(
9226
+ React59.Children.only(children),
9227
+ { children: innerContent }
9228
+ )
9229
+ })
9230
+ ) : /* @__PURE__ */ jsx(
9159
9231
  m.button,
9160
9232
  __spreadProps(__spreadValues({
9161
9233
  ref,
9162
9234
  type: "button",
9163
- "aria-disabled": disabled,
9164
9235
  disabled,
9165
9236
  onClick: handleClick,
9166
9237
  onPointerDown: handlePointerDown,
@@ -9177,41 +9248,9 @@ var SplitButtonLeadingComponent = React59.forwardRef(
9177
9248
  paddingInlineEnd: tokens.leadingPadding.end,
9178
9249
  gap: "8px"
9179
9250
  }, style),
9180
- className: cn(
9181
- splitButtonVariants({
9182
- variant: actualVariant,
9183
- size: actualSize,
9184
- disabled
9185
- }),
9186
- typographyClass,
9187
- className
9188
- )
9251
+ className: containerClassName
9189
9252
  }, restProps), {
9190
- children: [
9191
- needsTouchTarget && /* @__PURE__ */ jsx(TouchTarget, {}),
9192
- /* @__PURE__ */ jsx(
9193
- StateLayer,
9194
- {
9195
- hovered: isHovered,
9196
- focused: isFocused,
9197
- pressed: isPressed
9198
- }
9199
- ),
9200
- /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
9201
- icon && /* @__PURE__ */ jsx(
9202
- "span",
9203
- {
9204
- className: "flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full overflow-hidden [&_.md-icon]:text-[length:inherit]!",
9205
- style: {
9206
- fontSize: leadingIconSize,
9207
- width: leadingIconSize,
9208
- height: leadingIconSize
9209
- },
9210
- children: icon
9211
- }
9212
- ),
9213
- children && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center h-full gap-[inherit]", children })
9214
- ]
9253
+ children: innerContent
9215
9254
  })
9216
9255
  ) });
9217
9256
  }
@@ -9243,6 +9282,8 @@ var SplitButtonTrailingComponent = React59.forwardRef(
9243
9282
  onPointerCancel,
9244
9283
  onFocus,
9245
9284
  onBlur,
9285
+ asChild = false,
9286
+ children,
9246
9287
  "aria-label": ariaLabel
9247
9288
  } = _b, restProps = __objRest(_b, [
9248
9289
  "className",
@@ -9259,6 +9300,8 @@ var SplitButtonTrailingComponent = React59.forwardRef(
9259
9300
  "onPointerCancel",
9260
9301
  "onFocus",
9261
9302
  "onBlur",
9303
+ "asChild",
9304
+ "children",
9262
9305
  "aria-label"
9263
9306
  ]);
9264
9307
  var _a2, _b2;
@@ -9333,14 +9376,81 @@ var SplitButtonTrailingComponent = React59.forwardRef(
9333
9376
  },
9334
9377
  [onBlur]
9335
9378
  );
9336
- return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsxs(
9379
+ const innerContent = /* @__PURE__ */ jsxs(Fragment, { children: [
9380
+ needsTouchTarget && /* @__PURE__ */ jsx(TouchTarget, {}),
9381
+ /* @__PURE__ */ jsx(
9382
+ StateLayer,
9383
+ {
9384
+ hovered: isHovered,
9385
+ focused: isFocused,
9386
+ pressed: isPressed
9387
+ }
9388
+ ),
9389
+ /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
9390
+ /* @__PURE__ */ jsx(
9391
+ m.div,
9392
+ {
9393
+ animate: {
9394
+ rotate: checked ? 180 : 0,
9395
+ x: checked ? 0 : tokens.opticalCenterOffset
9396
+ },
9397
+ transition: prefersReducedMotion2 ? { duration: 0 } : SPLIT_BUTTON_CHEVRON_SPRING,
9398
+ className: "flex items-center justify-center shrink-0",
9399
+ children: icon != null ? icon : /* @__PURE__ */ jsx(
9400
+ Icon,
9401
+ {
9402
+ name: "arrow_drop_down",
9403
+ size: tokens.trailingIconSize,
9404
+ opticalSize: 24
9405
+ }
9406
+ )
9407
+ }
9408
+ )
9409
+ ] });
9410
+ const containerClassName = cn(
9411
+ splitButtonVariants({
9412
+ variant: actualVariant,
9413
+ size: actualSize,
9414
+ disabled
9415
+ }),
9416
+ className
9417
+ );
9418
+ const mergedStyle = __spreadValues({
9419
+ paddingInlineStart: tokens.trailingPadding.start,
9420
+ paddingInlineEnd: tokens.trailingPadding.end,
9421
+ borderRadius
9422
+ }, style);
9423
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: asChild ? /* @__PURE__ */ jsx(
9424
+ Slot,
9425
+ __spreadProps(__spreadValues({
9426
+ ref,
9427
+ "aria-label": ariaLabel,
9428
+ "aria-expanded": checked,
9429
+ "aria-disabled": disabled,
9430
+ onClick: handleToggle,
9431
+ onPointerDown: handlePointerDown,
9432
+ onPointerUp: handlePointerUp,
9433
+ onPointerEnter: handlePointerEnter,
9434
+ onPointerLeave: handlePointerLeave,
9435
+ onPointerCancel: handlePointerCancel,
9436
+ onFocus: handleFocus,
9437
+ onBlur: handleBlur,
9438
+ style: mergedStyle,
9439
+ className: containerClassName
9440
+ }, restProps), {
9441
+ children: React59.cloneElement(
9442
+ React59.Children.only(children),
9443
+ { children: innerContent }
9444
+ )
9445
+ })
9446
+ ) : /* @__PURE__ */ jsx(
9337
9447
  m.button,
9338
9448
  __spreadProps(__spreadValues({
9339
9449
  ref,
9340
9450
  type: "button",
9341
- "aria-pressed": checked,
9342
- "aria-expanded": checked,
9343
9451
  "aria-label": ariaLabel,
9452
+ "aria-expanded": checked,
9453
+ "aria-disabled": disabled,
9344
9454
  disabled,
9345
9455
  onClick: handleToggle,
9346
9456
  onPointerDown: handlePointerDown,
@@ -9356,46 +9466,9 @@ var SplitButtonTrailingComponent = React59.forwardRef(
9356
9466
  paddingInlineStart: tokens.trailingPadding.start,
9357
9467
  paddingInlineEnd: tokens.trailingPadding.end
9358
9468
  }, style),
9359
- className: cn(
9360
- splitButtonVariants({
9361
- variant: actualVariant,
9362
- size: actualSize,
9363
- disabled
9364
- }),
9365
- className
9366
- )
9469
+ className: containerClassName
9367
9470
  }, restProps), {
9368
- children: [
9369
- needsTouchTarget && /* @__PURE__ */ jsx(TouchTarget, {}),
9370
- /* @__PURE__ */ jsx(
9371
- StateLayer,
9372
- {
9373
- hovered: isHovered,
9374
- focused: isFocused,
9375
- pressed: isPressed
9376
- }
9377
- ),
9378
- /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
9379
- /* @__PURE__ */ jsx(
9380
- m.div,
9381
- {
9382
- animate: {
9383
- rotate: checked ? 180 : 0,
9384
- x: checked ? 0 : tokens.opticalCenterOffset
9385
- },
9386
- transition: prefersReducedMotion2 ? { duration: 0 } : SPLIT_BUTTON_CHEVRON_SPRING,
9387
- className: "flex items-center justify-center shrink-0",
9388
- children: icon != null ? icon : /* @__PURE__ */ jsx(
9389
- Icon,
9390
- {
9391
- name: "arrow_drop_down",
9392
- size: tokens.trailingIconSize,
9393
- opticalSize: 24
9394
- }
9395
- )
9396
- }
9397
- )
9398
- ]
9471
+ children: innerContent
9399
9472
  })
9400
9473
  ) });
9401
9474
  }
@@ -9649,6 +9722,7 @@ var CardImpl = React59.forwardRef(
9649
9722
  target,
9650
9723
  rel: relProp,
9651
9724
  onClick,
9725
+ asChild = false,
9652
9726
  children
9653
9727
  } = _b, props = __objRest(_b, [
9654
9728
  "className",
@@ -9659,10 +9733,11 @@ var CardImpl = React59.forwardRef(
9659
9733
  "target",
9660
9734
  "rel",
9661
9735
  "onClick",
9736
+ "asChild",
9662
9737
  "children"
9663
9738
  ]);
9664
9739
  const safeVariant = variant;
9665
- const isInteractive = !!onClick || !!href || interactive;
9740
+ const isInteractive = !!onClick || !!href || interactive || asChild;
9666
9741
  const elevationProps = useCardElevation(safeVariant, disabled);
9667
9742
  const { ripples, onPointerDown, removeRipple } = useRippleState();
9668
9743
  const baseClass = cn(
@@ -9683,6 +9758,26 @@ var CardImpl = React59.forwardRef(
9683
9758
  // Outlined interactive card: change border color to m3-outline on focus/press/hover
9684
9759
  variant === "outlined" && "hover:border-m3-outline focus-visible:border-m3-outline active:border-m3-outline"
9685
9760
  );
9761
+ if (asChild) {
9762
+ const child = React59.Children.only(children);
9763
+ const innerContent = /* @__PURE__ */ jsxs(Fragment, { children: [
9764
+ /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
9765
+ child.props.children
9766
+ ] });
9767
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsx(
9768
+ Slot,
9769
+ __spreadProps(__spreadValues({
9770
+ ref,
9771
+ className: cn(baseClass, interactiveClass),
9772
+ "aria-disabled": disabled ? true : void 0,
9773
+ tabIndex: disabled ? -1 : 0,
9774
+ onPointerDown,
9775
+ onClick
9776
+ }, props), {
9777
+ children: React59.cloneElement(child, { children: innerContent })
9778
+ })
9779
+ ) });
9780
+ }
9686
9781
  if (!isInteractive) {
9687
9782
  return /* @__PURE__ */ jsx(
9688
9783
  "div",
@@ -10149,7 +10244,9 @@ var ChipImpl = React59.forwardRef(
10149
10244
  avatar,
10150
10245
  onRemove,
10151
10246
  className,
10152
- onClick
10247
+ onClick,
10248
+ asChild = false,
10249
+ children
10153
10250
  } = _b, props = __objRest(_b, [
10154
10251
  "variant",
10155
10252
  "elevated",
@@ -10161,7 +10258,9 @@ var ChipImpl = React59.forwardRef(
10161
10258
  "avatar",
10162
10259
  "onRemove",
10163
10260
  "className",
10164
- "onClick"
10261
+ "onClick",
10262
+ "asChild",
10263
+ "children"
10165
10264
  ]);
10166
10265
  const { ripples, onPointerDown, removeRipple } = useRippleState({
10167
10266
  disabled
@@ -10276,6 +10375,63 @@ var ChipImpl = React59.forwardRef(
10276
10375
  ) : null }),
10277
10376
  /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: label })
10278
10377
  ] });
10378
+ if (asChild) {
10379
+ const child = React59.Children.only(children);
10380
+ const innerContent = /* @__PURE__ */ jsxs(Fragment, { children: [
10381
+ /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
10382
+ mainContent,
10383
+ hasTrailingContent && /* @__PURE__ */ jsx("span", { className: "flex items-center justify-center shrink-0", children: onRemove ? /* @__PURE__ */ jsx(
10384
+ "button",
10385
+ {
10386
+ type: "button",
10387
+ tabIndex: disabled ? -1 : 0,
10388
+ "aria-label": typeof label === "string" ? `Remove ${label}` : "Remove",
10389
+ onClick: (e) => {
10390
+ e.stopPropagation();
10391
+ onRemove(e);
10392
+ },
10393
+ onPointerDown: (e) => e.stopPropagation(),
10394
+ className: cn(
10395
+ "flex items-center justify-center w-8.5 h-full",
10396
+ "cursor-pointer focus-visible:outline-none",
10397
+ "transition-all duration-150",
10398
+ "relative overflow-hidden rounded-r-[7px] rounded-l-none",
10399
+ "before:absolute before:-inset-px before:pointer-events-none before:bg-current",
10400
+ "before:transition-opacity before:duration-200 before:opacity-0 before:rounded-r-[7px]",
10401
+ "hover:before:opacity-[0.08] active:before:opacity-[0.12]",
10402
+ selected ? "text-m3-on-secondary-container" : "text-m3-on-surface-variant"
10403
+ ),
10404
+ children: /* @__PURE__ */ jsx(CloseIcon3, {})
10405
+ }
10406
+ ) : trailingIcon ? /* @__PURE__ */ jsx(
10407
+ "span",
10408
+ {
10409
+ className: cn(
10410
+ "flex items-center justify-center w-4.5 h-4.5 [&_.md-icon]:text-[length:inherit]!",
10411
+ selected ? "text-m3-on-secondary-container" : "text-m3-on-surface-variant"
10412
+ ),
10413
+ style: { fontSize: 18 },
10414
+ "aria-hidden": "true",
10415
+ children: trailingIcon
10416
+ }
10417
+ ) : null })
10418
+ ] });
10419
+ const strippedProps = __spreadValues({}, props);
10420
+ delete strippedProps.children;
10421
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsx(
10422
+ Slot,
10423
+ __spreadProps(__spreadValues({
10424
+ ref,
10425
+ "aria-disabled": disabled || void 0,
10426
+ tabIndex: disabled ? -1 : 0,
10427
+ onClick,
10428
+ onPointerDown,
10429
+ className: containerClass
10430
+ }, strippedProps), {
10431
+ children: React59.cloneElement(child, { children: innerContent })
10432
+ })
10433
+ ) });
10434
+ }
10279
10435
  return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsxs(
10280
10436
  Root8,
10281
10437
  __spreadProps(__spreadValues(__spreadProps(__spreadValues({
@@ -13217,7 +13373,7 @@ var TimePickerDialog = ({
13217
13373
  TimePickerDialog.displayName = "TimePickerDialog";
13218
13374
  var clamp = (value, min, max) => Math.max(min, Math.min(max, value));
13219
13375
  var isValidHourInput = (h, is24hour) => is24hour ? h >= 0 && h <= 23 : h >= 1 && h <= 12;
13220
- var isValidMinuteInput = (m67) => m67 >= 0 && m67 <= 59;
13376
+ var isValidMinuteInput = (m68) => m68 >= 0 && m68 <= 59;
13221
13377
  var to24Hour = (hour12, isPm) => {
13222
13378
  if (isPm) {
13223
13379
  return hour12 === 12 ? 12 : hour12 + 12;
@@ -13253,8 +13409,8 @@ var useTimePickerState = (options) => {
13253
13409
  },
13254
13410
  [is24hour]
13255
13411
  );
13256
- const setMinute = useCallback((m67) => {
13257
- const clamped = clamp(m67, 0, 59);
13412
+ const setMinute = useCallback((m68) => {
13413
+ const clamped = clamp(m68, 0, 59);
13258
13414
  setMinuteState(clamped);
13259
13415
  setMinuteInputState(clamped);
13260
13416
  }, []);
@@ -13268,10 +13424,10 @@ var useTimePickerState = (options) => {
13268
13424
  },
13269
13425
  [is24hour, isPm]
13270
13426
  );
13271
- const setMinuteInput = useCallback((m67) => {
13272
- setMinuteInputState(m67);
13273
- if (isValidMinuteInput(m67)) {
13274
- setMinuteState(m67);
13427
+ const setMinuteInput = useCallback((m68) => {
13428
+ setMinuteInputState(m68);
13429
+ if (isValidMinuteInput(m68)) {
13430
+ setMinuteState(m68);
13275
13431
  }
13276
13432
  }, []);
13277
13433
  const setSelection = useCallback((mode) => {
@@ -15411,7 +15567,7 @@ var NavigationBarItemComponent = React59.forwardRef(
15411
15567
  className,
15412
15568
  "aria-label": ariaLabelProp
15413
15569
  }, ref) => {
15414
- const { variant, itemLayout } = React59.useContext(NavigationBarContext);
15570
+ const { variant, itemLayout, itemClassName: contextItemClassName } = React59.useContext(NavigationBarContext);
15415
15571
  const isForcedHorizontal = itemLayout === "horizontal";
15416
15572
  const isResponsiveHorizontal = (variant === "flexible" || variant === "xr") && itemLayout === void 0;
15417
15573
  const { ripples, onPointerDown, removeRipple } = useRippleState({
@@ -15446,9 +15602,10 @@ var NavigationBarItemComponent = React59.forwardRef(
15446
15602
  onClick: handleClick,
15447
15603
  onPointerDown,
15448
15604
  className: cn(
15449
- "group relative flex flex-1 cursor-pointer transition-colors duration-200 outline-none select-none h-full",
15450
- variant === "xr" ? "items-center justify-center max-[599px]:min-w-28 max-[599px]:max-w-28 max-[599px]:items-start max-[599px]:pt-3 max-[599px]:pb-4" : "items-center justify-center",
15605
+ "group relative flex cursor-pointer transition-colors duration-200 outline-none select-none h-full items-center justify-center min-w-0",
15606
+ variant === "xr" ? isResponsiveHorizontal ? "flex-1 min-[600px]:flex-initial min-[600px]:w-auto" : isForcedHorizontal ? "flex-initial w-auto" : "flex-1" : isForcedHorizontal ? "flex-initial w-auto" : "flex-1",
15451
15607
  disabled && "pointer-events-none opacity-[0.38]",
15608
+ contextItemClassName,
15452
15609
  className
15453
15610
  ),
15454
15611
  children: [
@@ -15456,9 +15613,9 @@ var NavigationBarItemComponent = React59.forwardRef(
15456
15613
  "div",
15457
15614
  {
15458
15615
  className: cn(
15459
- "relative flex items-center justify-center flex-col gap-y-1 w-full",
15460
- isResponsiveHorizontal && "min-[600px]:flex-row min-[600px]:gap-y-0 min-[600px]:gap-x-1 min-[600px]:h-10 min-[600px]:px-4 min-[600px]:rounded-full min-[600px]:w-auto min-[600px]:max-w-42",
15461
- isForcedHorizontal && "flex-row gap-y-0 gap-x-1 h-10 px-4 rounded-full w-auto max-w-42"
15616
+ "relative flex items-center justify-center flex-col gap-y-1 w-full px-1 py-1.5",
15617
+ isResponsiveHorizontal && "min-[600px]:flex-row min-[600px]:gap-y-0 min-[600px]:gap-x-1.5 min-[600px]:h-10 min-[600px]:px-4 min-[600px]:py-0 min-[600px]:rounded-full min-[600px]:w-auto",
15618
+ isForcedHorizontal && "flex-row gap-y-0 gap-x-1.5 h-10 px-4 py-0 rounded-full w-auto"
15462
15619
  ),
15463
15620
  children: [
15464
15621
  /* @__PURE__ */ jsxs(
@@ -15535,7 +15692,7 @@ var navContainerVariants = cva(
15535
15692
  variant: {
15536
15693
  flexible: "bottom-0 left-0 right-0 w-full h-16 pb-safe",
15537
15694
  baseline: "bottom-0 left-0 right-0 w-full h-20 pb-safe",
15538
- xr: "bottom-6 left-1/2 -translate-x-1/2 w-auto max-w-fit h-20 min-[600px]:h-16 rounded-[48px] px-2"
15695
+ xr: "bottom-6 left-1/2 -translate-x-1/2 w-auto max-w-[calc(100%-2rem)] min-[600px]:max-w-fit h-20 min-[600px]:h-16 rounded-[48px] px-2"
15539
15696
  },
15540
15697
  position: {
15541
15698
  fixed: "fixed",
@@ -15563,6 +15720,7 @@ var NavigationBarComponent = React59.forwardRef(
15563
15720
  scrollContainerRef,
15564
15721
  activeIndicatorTransition,
15565
15722
  children,
15723
+ itemClassName,
15566
15724
  className,
15567
15725
  style
15568
15726
  }, ref) => {
@@ -15613,7 +15771,7 @@ var NavigationBarComponent = React59.forwardRef(
15613
15771
  return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsx(
15614
15772
  NavigationBarContext.Provider,
15615
15773
  {
15616
- value: { variant, itemLayout, activeIndicatorTransition },
15774
+ value: { variant, itemLayout, activeIndicatorTransition, itemClassName },
15617
15775
  children: /* @__PURE__ */ jsx(
15618
15776
  m.nav,
15619
15777
  {
@@ -15634,7 +15792,7 @@ var NavigationBarComponent = React59.forwardRef(
15634
15792
  "aria-orientation": "horizontal",
15635
15793
  className: cn(
15636
15794
  "flex w-full h-full mx-auto",
15637
- variant === "xr" ? "gap-0 min-[600px]:gap-1.5" : "max-w-7xl gap-1.5"
15795
+ variant === "xr" ? "gap-0 min-[600px]:gap-1.5 items-center justify-center px-1" : "max-w-7xl gap-1.5"
15638
15796
  ),
15639
15797
  children
15640
15798
  }
@@ -20730,6 +20888,7 @@ var TabsList = React59.memo(TabsListComponent);
20730
20888
  var typographyVariants = cva("m-0 p-0 text-m3-on-surface", {
20731
20889
  variants: {
20732
20890
  variant: {
20891
+ // Short hyphenated
20733
20892
  "display-lg": "text-[57px] leading-[64px] font-normal tracking-[-0.25px]",
20734
20893
  "display-md": "text-[45px] leading-[52px] font-normal tracking-[0px]",
20735
20894
  "display-sm": "text-[36px] leading-[44px] font-normal tracking-[0px]",
@@ -20744,7 +20903,39 @@ var typographyVariants = cva("m-0 p-0 text-m3-on-surface", {
20744
20903
  "label-sm": "text-[11px] leading-[16px] font-medium tracking-[0.5px]",
20745
20904
  "body-lg": "text-[16px] leading-[24px] font-normal tracking-[0.5px]",
20746
20905
  "body-md": "text-[14px] leading-[20px] font-normal tracking-[0.25px]",
20747
- "body-sm": "text-[12px] leading-[16px] font-normal tracking-[0.4px]"
20906
+ "body-sm": "text-[12px] leading-[16px] font-normal tracking-[0.4px]",
20907
+ // Full hyphenated aliases
20908
+ "display-large": "text-[57px] leading-[64px] font-normal tracking-[-0.25px]",
20909
+ "display-medium": "text-[45px] leading-[52px] font-normal tracking-[0px]",
20910
+ "display-small": "text-[36px] leading-[44px] font-normal tracking-[0px]",
20911
+ "headline-large": "text-[32px] leading-[40px] font-normal tracking-[0px]",
20912
+ "headline-medium": "text-[28px] leading-[36px] font-normal tracking-[0px]",
20913
+ "headline-small": "text-[24px] leading-[32px] font-normal tracking-[0px]",
20914
+ "title-large": "text-[22px] leading-[28px] font-normal tracking-[0px]",
20915
+ "title-medium": "text-[16px] leading-[24px] font-medium tracking-[0.15px]",
20916
+ "title-small": "text-[14px] leading-[20px] font-medium tracking-[0.1px]",
20917
+ "label-large": "text-[14px] leading-[20px] font-medium tracking-[0.1px]",
20918
+ "label-medium": "text-[12px] leading-[16px] font-medium tracking-[0.5px]",
20919
+ "label-small": "text-[11px] leading-[16px] font-medium tracking-[0.5px]",
20920
+ "body-large": "text-[16px] leading-[24px] font-normal tracking-[0.5px]",
20921
+ "body-medium": "text-[14px] leading-[20px] font-normal tracking-[0.25px]",
20922
+ "body-small": "text-[12px] leading-[16px] font-normal tracking-[0.4px]",
20923
+ // CamelCase aliases
20924
+ displayLarge: "text-[57px] leading-[64px] font-normal tracking-[-0.25px]",
20925
+ displayMedium: "text-[45px] leading-[52px] font-normal tracking-[0px]",
20926
+ displaySmall: "text-[36px] leading-[44px] font-normal tracking-[0px]",
20927
+ headlineLarge: "text-[32px] leading-[40px] font-normal tracking-[0px]",
20928
+ headlineMedium: "text-[28px] leading-[36px] font-normal tracking-[0px]",
20929
+ headlineSmall: "text-[24px] leading-[32px] font-normal tracking-[0px]",
20930
+ titleLarge: "text-[22px] leading-[28px] font-normal tracking-[0px]",
20931
+ titleMedium: "text-[16px] leading-[24px] font-medium tracking-[0.15px]",
20932
+ titleSmall: "text-[14px] leading-[20px] font-medium tracking-[0.1px]",
20933
+ labelLarge: "text-[14px] leading-[20px] font-medium tracking-[0.1px]",
20934
+ labelMedium: "text-[12px] leading-[16px] font-medium tracking-[0.5px]",
20935
+ labelSmall: "text-[11px] leading-[16px] font-medium tracking-[0.5px]",
20936
+ bodyLarge: "text-[16px] leading-[24px] font-normal tracking-[0.5px]",
20937
+ bodyMedium: "text-[14px] leading-[20px] font-normal tracking-[0.25px]",
20938
+ bodySmall: "text-[12px] leading-[16px] font-normal tracking-[0.4px]"
20748
20939
  }
20749
20940
  },
20750
20941
  defaultVariants: {
@@ -20753,19 +20944,21 @@ var typographyVariants = cva("m-0 p-0 text-m3-on-surface", {
20753
20944
  });
20754
20945
  var Text = React59.forwardRef(
20755
20946
  (_a, ref) => {
20756
- var _b = _a, { className, variant, as: Component } = _b, props = __objRest(_b, ["className", "variant", "as"]);
20947
+ var _b = _a, { className, variant, as: Component, color, weight, style } = _b, props = __objRest(_b, ["className", "variant", "as", "color", "weight", "style"]);
20757
20948
  const defaultComponent = React59.useMemo(() => {
20758
- if ((variant == null ? void 0 : variant.startsWith("display")) || (variant == null ? void 0 : variant.startsWith("headline")))
20759
- return "h1";
20760
- if (variant == null ? void 0 : variant.startsWith("title")) return "h2";
20949
+ const v = variant ? String(variant).toLowerCase() : "";
20950
+ if (v.startsWith("display") || v.startsWith("headline")) return "h1";
20951
+ if (v.startsWith("title")) return "h2";
20761
20952
  return "p";
20762
20953
  }, [variant]);
20763
20954
  const Tag = Component || defaultComponent;
20955
+ const customStyle = __spreadValues(__spreadValues(__spreadValues({}, style), color ? { color } : {}), weight ? { fontWeight: weight } : {});
20764
20956
  return /* @__PURE__ */ jsx(
20765
20957
  Tag,
20766
20958
  __spreadValues({
20767
20959
  ref,
20768
- className: cn(typographyVariants({ variant, className }))
20960
+ className: cn(typographyVariants({ variant, className })),
20961
+ style: customStyle
20769
20962
  }, props)
20770
20963
  );
20771
20964
  }
@@ -20890,7 +21083,6 @@ var FloatingLabel = React59.memo(function FloatingLabel2({
20890
21083
  "absolute pointer-events-none select-none origin-[left_center] leading-6 text-base whitespace-nowrap",
20891
21084
  "px-1 -mx-1",
20892
21085
  // Clear the notch gap and keep text aligned
20893
- variant === "outlined" && isFloated && "bg-m3-surface",
20894
21086
  "left-4",
20895
21087
  isDisabled && "opacity-[0.38]"
20896
21088
  ),
@@ -20966,7 +21158,8 @@ var OutlineContainer = React59.memo(function OutlineContainer2({
20966
21158
  );
20967
21159
  const borderWidth = isFocused || isError ? TF_SIZE.outlineThick : TF_SIZE.outlineThin;
20968
21160
  const leftSegmentWidth = TF_SIZE.paddingStart;
20969
- const notchWidth = isFloated ? labelWidth * TF_TYPOGRAPHY.labelScaleRatio + TF_SIZE.notchPadding * 2 : 0;
21161
+ const isNotched = isFloated && labelWidth > 0;
21162
+ const notchWidth = isNotched ? labelWidth * TF_TYPOGRAPHY.labelScaleRatio + TF_SIZE.notchPadding * 2 : 0;
20970
21163
  const borderTransition = { duration: colorDuration, ease };
20971
21164
  const notchTransition = { duration: notchDuration, ease };
20972
21165
  return /* @__PURE__ */ jsxs(
@@ -21004,7 +21197,7 @@ var OutlineContainer = React59.memo(function OutlineContainer2({
21004
21197
  style: { height: borderWidth },
21005
21198
  animate: {
21006
21199
  borderTopColor: borderColor,
21007
- opacity: isFloated ? 0 : 1,
21200
+ opacity: isNotched ? 0 : 1,
21008
21201
  borderTopWidth: borderWidth,
21009
21202
  borderTopStyle: "solid"
21010
21203
  },
@@ -21456,7 +21649,7 @@ var TextFieldComponent = React59.forwardRef(
21456
21649
  const computedDescribedby = [hasSupporting ? supportingId : "", ariaDescribedby != null ? ariaDescribedby : ""].filter(Boolean).join(" ") || void 0;
21457
21650
  const inputClass = cn(
21458
21651
  "bg-transparent outline-none w-full",
21459
- isInToolbar ? "self-center" : "self-end",
21652
+ !resolvedLabel || isInToolbar ? "self-center" : "self-end",
21460
21653
  "text-base leading-6 text-m3-on-surface",
21461
21654
  "caret-[var(--color-m3-primary)]",
21462
21655
  "placeholder:text-m3-on-surface-variant/60",
@@ -21467,7 +21660,7 @@ var TextFieldComponent = React59.forwardRef(
21467
21660
  id: inputId,
21468
21661
  name,
21469
21662
  value: currentValue,
21470
- placeholder: isFloated ? placeholder != null ? placeholder : "" : "",
21663
+ placeholder: !resolvedLabel || isFloated ? placeholder != null ? placeholder : "" : "",
21471
21664
  disabled,
21472
21665
  readOnly,
21473
21666
  required,
@@ -21499,7 +21692,7 @@ var TextFieldComponent = React59.forwardRef(
21499
21692
  "relative flex flex-col flex-1 min-w-0 h-full",
21500
21693
  paddingStart,
21501
21694
  paddingEnd,
21502
- isInToolbar ? "justify-center" : variant === "filled" ? resolvedDense ? "pt-5 pb-2" : "pt-6 pb-2" : resolvedDense ? "py-3" : "py-4"
21695
+ isInToolbar || !resolvedLabel ? "justify-center" : variant === "filled" ? resolvedDense ? "pt-5 pb-2" : "pt-6 pb-2" : resolvedDense ? "py-3" : "py-4"
21503
21696
  );
21504
21697
  const wrapperClass = cn(
21505
21698
  "group/tf inline-flex flex-col",
@@ -22583,6 +22776,47 @@ var vibrantFloatingToolbarColors = {
22583
22776
  fabContainerColor: "var(--md-sys-color-tertiary-container)",
22584
22777
  fabContentColor: "var(--md-sys-color-on-tertiary-container)"
22585
22778
  };
22779
+ var surfaceContainerHighFloatingToolbarColors = {
22780
+ toolbarContainerColor: "var(--md-sys-color-surface-container-high)",
22781
+ toolbarContentColor: "var(--md-sys-color-on-surface)",
22782
+ fabContainerColor: "var(--md-sys-color-secondary-container)",
22783
+ fabContentColor: "var(--md-sys-color-on-secondary-container)"
22784
+ };
22785
+ var surfaceContainerHighestFloatingToolbarColors = {
22786
+ toolbarContainerColor: "var(--md-sys-color-surface-container-highest)",
22787
+ toolbarContentColor: "var(--md-sys-color-on-surface)",
22788
+ fabContainerColor: "var(--md-sys-color-secondary-container)",
22789
+ fabContentColor: "var(--md-sys-color-on-secondary-container)"
22790
+ };
22791
+ var tertiaryContainerFloatingToolbarColors = {
22792
+ toolbarContainerColor: "var(--md-sys-color-tertiary-container)",
22793
+ toolbarContentColor: "var(--md-sys-color-on-tertiary-container)",
22794
+ fabContainerColor: "var(--md-sys-color-primary-container)",
22795
+ fabContentColor: "var(--md-sys-color-on-primary-container)"
22796
+ };
22797
+ var xrFloatingToolbarColors = {
22798
+ toolbarContainerColor: "color-mix(in srgb, var(--md-sys-color-surface-container-high) 80%, transparent)",
22799
+ toolbarContentColor: "var(--md-sys-color-on-surface)",
22800
+ fabContainerColor: "color-mix(in srgb, var(--md-sys-color-secondary-container) 85%, transparent)",
22801
+ fabContentColor: "var(--md-sys-color-on-secondary-container)"
22802
+ };
22803
+ function getToolbarColors(variant = "standard", customColors) {
22804
+ if (customColors) return customColors;
22805
+ switch (variant) {
22806
+ case "vibrant":
22807
+ return vibrantFloatingToolbarColors;
22808
+ case "surface-high":
22809
+ return surfaceContainerHighFloatingToolbarColors;
22810
+ case "surface-highest":
22811
+ return surfaceContainerHighestFloatingToolbarColors;
22812
+ case "tertiary":
22813
+ return tertiaryContainerFloatingToolbarColors;
22814
+ case "xr":
22815
+ return xrFloatingToolbarColors;
22816
+ default:
22817
+ return standardFloatingToolbarColors;
22818
+ }
22819
+ }
22586
22820
  var BottomDockedToolbar = React59.forwardRef(
22587
22821
  (_a, ref) => {
22588
22822
  var _b = _a, {
@@ -22612,7 +22846,7 @@ var BottomDockedToolbar = React59.forwardRef(
22612
22846
  "className",
22613
22847
  "aria-label"
22614
22848
  ]);
22615
- const colors = customColors || (variant === "vibrant" ? vibrantFloatingToolbarColors : standardFloatingToolbarColors);
22849
+ const colors = getToolbarColors(variant, customColors);
22616
22850
  const { scrollY } = useScroll(
22617
22851
  scrollContainerRef ? { container: scrollContainerRef } : void 0
22618
22852
  );
@@ -22641,6 +22875,7 @@ var BottomDockedToolbar = React59.forwardRef(
22641
22875
  full: "rounded-full"
22642
22876
  };
22643
22877
  const justifyClass = justify === "center" ? "justify-center gap-4" : "justify-between";
22878
+ const isXr = variant === "xr";
22644
22879
  return /* @__PURE__ */ jsx(ToolbarContext.Provider, { value: { orientation: "horizontal" }, children: /* @__PURE__ */ jsxs(
22645
22880
  m.div,
22646
22881
  __spreadProps(__spreadValues({
@@ -22661,11 +22896,12 @@ var BottomDockedToolbar = React59.forwardRef(
22661
22896
  paddingRight: paddingX
22662
22897
  }),
22663
22898
  className: cn(
22664
- "fixed bottom-0 left-0 right-0 w-full z-40",
22899
+ "fixed bottom-0 left-0 right-0 w-full z-40 text-(--toolbar-color) [&_.text-m3-on-surface-variant]:text-current",
22665
22900
  "flex items-center h-16",
22666
22901
  justifyClass,
22667
22902
  SHAPE_CLASSES[shape],
22668
- "shadow-[0_-1px_3px_rgba(0,0,0,0.1)] pointer-events-auto",
22903
+ isXr ? "backdrop-blur-md border-t border-white/10 shadow-lg" : "shadow-[0_-1px_3px_rgba(0,0,0,0.1)]",
22904
+ "pointer-events-auto",
22669
22905
  className
22670
22906
  )
22671
22907
  }, props), {
@@ -22712,6 +22948,13 @@ var ToolbarIconButtonTokens = {
22712
22948
  /** Icon size in dp — larger than standard 24dp to fill the 48dp button properly */
22713
22949
  IconSize: 28
22714
22950
  };
22951
+ var ToolbarToggleButtonTokens = {
22952
+ Height: 48,
22953
+ MinWidth: 95,
22954
+ IconSize: 24,
22955
+ PaddingX: 16,
22956
+ Gap: 8
22957
+ };
22715
22958
  var ALIGNMENT_CLASS = {
22716
22959
  start: "justify-start",
22717
22960
  center: "justify-center",
@@ -22770,7 +23013,8 @@ var FloatingToolbarBase = React59.forwardRef(
22770
23013
  var _b = _a, {
22771
23014
  expanded,
22772
23015
  orientation = "horizontal",
22773
- colors = standardFloatingToolbarColors,
23016
+ variant = "standard",
23017
+ colors: customColors,
22774
23018
  shape = "full",
22775
23019
  contentPadding,
22776
23020
  scrollBehavior,
@@ -22788,6 +23032,7 @@ var FloatingToolbarBase = React59.forwardRef(
22788
23032
  } = _b, props = __objRest(_b, [
22789
23033
  "expanded",
22790
23034
  "orientation",
23035
+ "variant",
22791
23036
  "colors",
22792
23037
  "shape",
22793
23038
  "contentPadding",
@@ -22804,6 +23049,7 @@ var FloatingToolbarBase = React59.forwardRef(
22804
23049
  "style",
22805
23050
  "aria-label"
22806
23051
  ]);
23052
+ const colors = getToolbarColors(variant, customColors);
22807
23053
  const isHorizontal = orientation === "horizontal";
22808
23054
  const isStringPadding = typeof contentPadding === "string";
22809
23055
  const cssVars = __spreadValues(__spreadValues({
@@ -22812,7 +23058,8 @@ var FloatingToolbarBase = React59.forwardRef(
22812
23058
  "--toolbar-size": `${FloatingToolbarTokens.ContainerHeight}px`
22813
23059
  }, isStringPadding ? {} : contentPadding), style);
22814
23060
  const isScrolledOff = scrollBehavior && scrollBehavior.offset < 0;
22815
- const shadowClass = expanded ? "shadow-md" : "shadow-sm";
23061
+ const isXr = variant === "xr";
23062
+ const shadowClass = isXr ? "shadow-lg border border-white/10 backdrop-blur-md" : expanded ? "shadow-md" : "shadow-sm";
22816
23063
  const containerShapeClass = shape === "full" ? "rounded-full" : "rounded-2xl";
22817
23064
  const leadingVariants = buildSlotVariants(
22818
23065
  isHorizontal ? "-100%" : 0,
@@ -22829,7 +23076,7 @@ var FloatingToolbarBase = React59.forwardRef(
22829
23076
  scrollBehavior,
22830
23077
  disableScrollTranslation
22831
23078
  );
22832
- return /* @__PURE__ */ jsx(ToolbarContext.Provider, { value: { orientation }, children: /* @__PURE__ */ jsx(
23079
+ return /* @__PURE__ */ jsx(ToolbarContext.Provider, { value: { orientation, itemClassName }, children: /* @__PURE__ */ jsx(
22833
23080
  m.div,
22834
23081
  {
22835
23082
  ref,
@@ -22851,8 +23098,8 @@ var FloatingToolbarBase = React59.forwardRef(
22851
23098
  color: "var(--toolbar-color)"
22852
23099
  }),
22853
23100
  className: cn(
22854
- "flex pointer-events-auto relative",
22855
- isHorizontal ? "max-w-[90vw] h-(--toolbar-size)" : "max-h-[90vh] w-(--toolbar-size) h-fit",
23101
+ "flex pointer-events-auto relative text-(--toolbar-color) [&_.text-m3-on-surface-variant]:text-current",
23102
+ isHorizontal ? "max-w-[min(90vw,100%)] h-(--toolbar-size)" : "max-h-[min(90vh,100%)] w-(--toolbar-size) h-fit",
22856
23103
  containerShapeClass,
22857
23104
  shadowClass,
22858
23105
  className
@@ -22869,11 +23116,11 @@ var FloatingToolbarBase = React59.forwardRef(
22869
23116
  "div",
22870
23117
  {
22871
23118
  className: cn(
22872
- "flex items-center gap-1 min-w-0 min-h-0",
23119
+ "flex items-center min-w-0 min-h-0",
22873
23120
  isHorizontal ? "flex-row h-full" : "flex-col w-full",
22874
- isStringPadding ? contentPadding : isHorizontal ? "px-4" : "py-6"
23121
+ isStringPadding ? contentPadding : isHorizontal ? "px-2" : "py-2"
22875
23122
  ),
22876
- style: isStringPadding ? void 0 : contentPadding,
23123
+ style: __spreadValues({ gap: itemGap }, isStringPadding ? {} : contentPadding),
22877
23124
  children: [
22878
23125
  /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: expanded && startContent && /* @__PURE__ */ jsx(
22879
23126
  m.div,
@@ -22883,9 +23130,10 @@ var FloatingToolbarBase = React59.forwardRef(
22883
23130
  animate: "visible",
22884
23131
  exit: "hidden",
22885
23132
  className: cn(
22886
- "flex shrink-0 overflow-hidden",
23133
+ "flex shrink-0 items-center overflow-hidden",
22887
23134
  isHorizontal ? "flex-row" : "flex-col"
22888
23135
  ),
23136
+ style: { gap: itemGap },
22889
23137
  children: processNodes(startContent)
22890
23138
  },
22891
23139
  "start"
@@ -22910,9 +23158,10 @@ var FloatingToolbarBase = React59.forwardRef(
22910
23158
  animate: "visible",
22911
23159
  exit: "hidden",
22912
23160
  className: cn(
22913
- "flex shrink-0 overflow-hidden",
23161
+ "flex shrink-0 items-center overflow-hidden",
22914
23162
  isHorizontal ? "flex-row" : "flex-col"
22915
23163
  ),
23164
+ style: { gap: itemGap },
22916
23165
  children: processNodes(endContent)
22917
23166
  },
22918
23167
  "end"
@@ -22938,7 +23187,8 @@ var FloatingToolbarWithFabBase = React59.forwardRef(
22938
23187
  var _b = _a, {
22939
23188
  expanded,
22940
23189
  orientation = "horizontal",
22941
- colors = standardFloatingToolbarColors,
23190
+ variant = "standard",
23191
+ colors: customColors,
22942
23192
  floatingActionButton,
22943
23193
  fabPosition = orientation === "horizontal" ? "end" : "bottom",
22944
23194
  animationDuration = 0.3,
@@ -22949,6 +23199,7 @@ var FloatingToolbarWithFabBase = React59.forwardRef(
22949
23199
  } = _b, props = __objRest(_b, [
22950
23200
  "expanded",
22951
23201
  "orientation",
23202
+ "variant",
22952
23203
  "colors",
22953
23204
  "floatingActionButton",
22954
23205
  "fabPosition",
@@ -22958,6 +23209,7 @@ var FloatingToolbarWithFabBase = React59.forwardRef(
22958
23209
  "className",
22959
23210
  "style"
22960
23211
  ]);
23212
+ const colors = getToolbarColors(variant, customColors);
22961
23213
  const isHorizontal = orientation === "horizontal";
22962
23214
  const effectiveExpanded = expanded && (!scrollBehavior || scrollBehavior.isExpanded);
22963
23215
  const isFabBefore = fabPosition === "start" || fabPosition === "top";
@@ -23035,7 +23287,8 @@ var FloatingToolbarWithFabBase = React59.forwardRef(
23035
23287
  expanded,
23036
23288
  colors,
23037
23289
  disableScrollTranslation: true,
23038
- disableLayoutAnimation: true
23290
+ disableLayoutAnimation: true,
23291
+ className: className ? cn("h-full", className) : void 0
23039
23292
  }, props)
23040
23293
  ) : /* @__PURE__ */ jsx(
23041
23294
  VerticalFloatingToolbar,
@@ -23043,7 +23296,8 @@ var FloatingToolbarWithFabBase = React59.forwardRef(
23043
23296
  expanded,
23044
23297
  colors,
23045
23298
  disableScrollTranslation: true,
23046
- disableLayoutAnimation: true
23299
+ disableLayoutAnimation: true,
23300
+ className: className ? cn("w-full", className) : void 0
23047
23301
  }, props)
23048
23302
  )
23049
23303
  },
@@ -23073,7 +23327,7 @@ var ToolbarDivider = ({
23073
23327
  "aria-orientation": isHorizontalToolbar ? "vertical" : "horizontal",
23074
23328
  className: cn(
23075
23329
  "shrink-0 bg-current opacity-30 border-none",
23076
- isHorizontalToolbar ? "w-px h-8 self-center mx-2" : "h-px w-8 self-center my-2",
23330
+ isHorizontalToolbar ? "w-px h-8 self-center mx-1" : "h-px w-8 self-center my-1",
23077
23331
  className
23078
23332
  ),
23079
23333
  style: {
@@ -23096,20 +23350,47 @@ var VARIANT_TO_COLOR_STYLE = {
23096
23350
  };
23097
23351
  var ToolbarIconButton = React59.forwardRef(
23098
23352
  (_a, ref) => {
23099
- var _b = _a, { emphasis = "standard", toolbarSize = "default", className } = _b, props = __objRest(_b, ["emphasis", "toolbarSize", "className"]);
23353
+ var _b = _a, {
23354
+ emphasis = "standard",
23355
+ toolbarSize = "default",
23356
+ selected,
23357
+ asChild,
23358
+ className
23359
+ } = _b, props = __objRest(_b, [
23360
+ "emphasis",
23361
+ "toolbarSize",
23362
+ "selected",
23363
+ "asChild",
23364
+ "className"
23365
+ ]);
23366
+ const context = useToolbarContext();
23100
23367
  const widthClass = TOOLBAR_ICON_BUTTON_WIDTH[toolbarSize];
23101
23368
  const colorStyle = VARIANT_TO_COLOR_STYLE[emphasis];
23369
+ const iconButtonProps = selected !== void 0 ? {
23370
+ variant: "toggle",
23371
+ selected: Boolean(selected)
23372
+ } : {
23373
+ variant: "default"
23374
+ };
23102
23375
  return /* @__PURE__ */ jsx(
23103
23376
  IconButton,
23104
- __spreadValues({
23377
+ __spreadValues(__spreadProps(__spreadValues({
23105
23378
  ref,
23106
- variant: "default",
23379
+ asChild,
23107
23380
  colorStyle,
23108
23381
  size: "md",
23109
23382
  shape: "round",
23110
- iconSize: ToolbarIconButtonTokens.IconSize,
23111
- className: cn("h-[48px]", widthClass, className)
23112
- }, props)
23383
+ iconSize: ToolbarIconButtonTokens.IconSize
23384
+ }, iconButtonProps), {
23385
+ className: cn(
23386
+ "h-[48px]",
23387
+ widthClass,
23388
+ emphasis === "standard" && !selected && "text-current hover:bg-current/8 active:bg-current/12",
23389
+ emphasis === "standard" && selected && "bg-current/16 text-current hover:bg-current/20 active:bg-current/24",
23390
+ context == null ? void 0 : context.itemClassName,
23391
+ className
23392
+ )
23393
+ }), props)
23113
23394
  );
23114
23395
  }
23115
23396
  );
@@ -23180,6 +23461,195 @@ function useFloatingToolbarScrollBehavior(options = {}) {
23180
23461
  exitDirection
23181
23462
  };
23182
23463
  }
23464
+ var MOTION_PROP_KEYS2 = [
23465
+ "animate",
23466
+ "exit",
23467
+ "initial",
23468
+ "transition",
23469
+ "variants",
23470
+ "whileHover",
23471
+ "whileTap",
23472
+ "whileFocus",
23473
+ "whileDrag",
23474
+ "whileInView",
23475
+ "onAnimationStart",
23476
+ "onAnimationComplete",
23477
+ "onUpdate",
23478
+ "onDragStart",
23479
+ "onDragEnd",
23480
+ "onDrag",
23481
+ "onDirectionLock",
23482
+ "onDragTransitionEnd",
23483
+ "layout",
23484
+ "layoutId",
23485
+ "onLayoutAnimationComplete"
23486
+ ];
23487
+ var ToolbarToggleButton = React59.forwardRef(
23488
+ (_a, ref) => {
23489
+ var _b = _a, {
23490
+ emphasis = "standard",
23491
+ selected = false,
23492
+ icon,
23493
+ children,
23494
+ pressScale = 0.95,
23495
+ pressBounceOffset = 6,
23496
+ ripple = true,
23497
+ asChild = false,
23498
+ className,
23499
+ type = "button",
23500
+ disabled,
23501
+ onPointerDown: onPointerDownProp
23502
+ } = _b, props = __objRest(_b, [
23503
+ "emphasis",
23504
+ "selected",
23505
+ "icon",
23506
+ "children",
23507
+ "pressScale",
23508
+ "pressBounceOffset",
23509
+ "ripple",
23510
+ "asChild",
23511
+ "className",
23512
+ "type",
23513
+ "disabled",
23514
+ "onPointerDown"
23515
+ ]);
23516
+ const context = useToolbarContext();
23517
+ const {
23518
+ ripples,
23519
+ onPointerDown: handleRipplePointerDown,
23520
+ removeRipple
23521
+ } = useRippleState({
23522
+ disabled: Boolean(disabled) || !ripple
23523
+ });
23524
+ const handlePointerDown = React59.useCallback(
23525
+ (e) => {
23526
+ if (!disabled && ripple) {
23527
+ handleRipplePointerDown(e);
23528
+ }
23529
+ onPointerDownProp == null ? void 0 : onPointerDownProp(e);
23530
+ },
23531
+ [disabled, ripple, handleRipplePointerDown, onPointerDownProp]
23532
+ );
23533
+ const baseClasses = "relative overflow-hidden inline-flex items-center justify-center min-w-[95px] h-[48px] px-4 rounded-full text-sm font-medium transition-colors select-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-current/40 disabled:pointer-events-none disabled:opacity-38";
23534
+ const variantClasses = {
23535
+ standard: selected ? "bg-current/16 text-current hover:bg-current/20 active:bg-current/24" : "bg-transparent text-current hover:bg-current/8 active:bg-current/12",
23536
+ tonal: selected ? "bg-m3-secondary-container text-m3-on-secondary-container hover:shadow-sm" : "bg-m3-surface-container-high text-m3-on-surface hover:bg-m3-surface-container-highest",
23537
+ filled: selected ? "bg-m3-primary text-m3-on-primary hover:shadow-sm" : "bg-m3-surface-container-highest text-m3-on-surface hover:bg-m3-surface-container-high"
23538
+ };
23539
+ const combinedClassName = cn(
23540
+ baseClasses,
23541
+ variantClasses[emphasis],
23542
+ context == null ? void 0 : context.itemClassName,
23543
+ className
23544
+ );
23545
+ const whileTapConfig = React59.useMemo(
23546
+ () => ({
23547
+ scale: pressScale,
23548
+ x: pressBounceOffset ? [
23549
+ 0,
23550
+ -pressBounceOffset,
23551
+ pressBounceOffset,
23552
+ -pressBounceOffset / 2,
23553
+ pressBounceOffset / 2,
23554
+ 0
23555
+ ] : 0
23556
+ }),
23557
+ [pressScale, pressBounceOffset]
23558
+ );
23559
+ const transitionConfig = React59.useMemo(
23560
+ () => ({
23561
+ scale: FAST_SPATIAL_SPRING,
23562
+ x: {
23563
+ duration: 0.35,
23564
+ ease: "easeInOut"
23565
+ }
23566
+ }),
23567
+ []
23568
+ );
23569
+ const mainContent = /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center justify-center h-full gap-2", children: [
23570
+ icon && /* @__PURE__ */ jsx(
23571
+ "span",
23572
+ {
23573
+ className: "shrink-0 inline-flex items-center justify-center",
23574
+ style: {
23575
+ width: ToolbarToggleButtonTokens.IconSize,
23576
+ height: ToolbarToggleButtonTokens.IconSize
23577
+ },
23578
+ children: icon
23579
+ }
23580
+ ),
23581
+ children && (typeof children === "string" || typeof children === "number" ? /* @__PURE__ */ jsx("span", { children }) : children)
23582
+ ] });
23583
+ if (asChild) {
23584
+ const child = React59.Children.only(children);
23585
+ const childContent = child.props.children;
23586
+ const innerChildContent = /* @__PURE__ */ jsxs(Fragment, { children: [
23587
+ ripple && /* @__PURE__ */ jsx(
23588
+ Ripple,
23589
+ {
23590
+ ripples,
23591
+ onRippleDone: removeRipple,
23592
+ disabled
23593
+ }
23594
+ ),
23595
+ /* @__PURE__ */ jsx("span", { className: "inline-flex items-center justify-center h-full gap-2", children: icon ? /* @__PURE__ */ jsxs(Fragment, { children: [
23596
+ /* @__PURE__ */ jsx(
23597
+ "span",
23598
+ {
23599
+ className: "shrink-0 inline-flex items-center justify-center",
23600
+ style: {
23601
+ width: ToolbarToggleButtonTokens.IconSize,
23602
+ height: ToolbarToggleButtonTokens.IconSize
23603
+ },
23604
+ children: icon
23605
+ }
23606
+ ),
23607
+ typeof childContent === "string" || typeof childContent === "number" ? /* @__PURE__ */ jsx("span", { children: childContent }) : childContent
23608
+ ] }) : childContent })
23609
+ ] });
23610
+ const strippedProps = __spreadValues({}, props);
23611
+ for (const key of MOTION_PROP_KEYS2) delete strippedProps[key];
23612
+ delete strippedProps.children;
23613
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsx(
23614
+ Slot,
23615
+ __spreadProps(__spreadValues({
23616
+ ref,
23617
+ "aria-pressed": selected,
23618
+ className: combinedClassName,
23619
+ onPointerDown: handlePointerDown
23620
+ }, strippedProps), {
23621
+ children: React59.cloneElement(child, { children: innerChildContent })
23622
+ })
23623
+ ) });
23624
+ }
23625
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsxs(
23626
+ m.button,
23627
+ __spreadProps(__spreadValues({
23628
+ ref,
23629
+ type,
23630
+ "aria-pressed": selected,
23631
+ disabled,
23632
+ whileTap: whileTapConfig,
23633
+ transition: transitionConfig,
23634
+ onPointerDown: handlePointerDown,
23635
+ className: combinedClassName
23636
+ }, props), {
23637
+ children: [
23638
+ ripple && /* @__PURE__ */ jsx(
23639
+ Ripple,
23640
+ {
23641
+ ripples,
23642
+ onRippleDone: removeRipple,
23643
+ disabled
23644
+ }
23645
+ ),
23646
+ mainContent
23647
+ ]
23648
+ })
23649
+ ) });
23650
+ }
23651
+ );
23652
+ ToolbarToggleButton.displayName = "ToolbarToggleButton";
23183
23653
 
23184
23654
  // src/ui/tooltip/tooltip.tokens.ts
23185
23655
  var TooltipTokens = {
@@ -23782,6 +24252,6 @@ function TooltipBox({
23782
24252
  ] });
23783
24253
  }
23784
24254
 
23785
- export { ANGLE_EPSILON, APP_BAR_BOTTOM_SPRING, APP_BAR_COLORS, APP_BAR_COLOR_TRANSITION, APP_BAR_ENTER_ALWAYS_SPRING, APP_BAR_TITLE_FADE, AppBarColumn, AppBarOverflowIndicator, AppBarRow, AppBarTokens, BUTTON_COLOR_TOKENS, BUTTON_SIZE_TOKENS, Badge, BadgedBox, BottomAppBar, BottomDockedToolbar, BottomSheet, BottomSheetModal, Button, ButtonGroup, CHECK_ICON_VARIANTS, Card, Checkbox, Chip, CodeBlock, ContextMenu, ContextMenuContent, ContextMenuTrigger, Cubic, DISTANCE_EPSILON, DIVIDER_COLOR, DIVIDER_PADDING, DP_CLASSES, DP_COLORS, DP_SHAPE, DP_SIZE, DatePicker, DatePickerDialog, DatePickerInput, DateRangePicker, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogFullScreenContent, DialogHeader, DialogIcon, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Divider, DockedToolbar, DragHandle, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, ElevatedSplitButtonLeading, ElevatedSplitButtonTrailing, ElevatedSplitButtonTrailingUncheckable, ExtendedFAB, FAB, FABMenu, FABMenuItem, FABPosition, FAST_EFFECTS_TRANSITION, FAST_SPATIAL_SPRING, FLOAT_PI, FilledSplitButtonLeading, FilledSplitButtonTrailing, FilledSplitButtonTrailingUncheckable, GROUP_SHAPES, HorizontalFloatingToolbar, HorizontalFloatingToolbarWithFab, ITEM_SHAPE_CLASSES, Icon, IconButton, LIST_TOKENS, LargeFlexibleAppBar, List, ListContext, ListDivider, ListItem, LoadingIndicator, MD3CornerRadius, MD3Shapes, MD3ThemeProvider, MD3_EXPRESSIVE_FONT_VARIATION, MENU_CHECK_ICON_SIZE, MENU_CONTAINER_VARIANTS, MENU_GROUP_GAP, MENU_ICON_SIZE, MENU_ITEM_MIN_HEIGHT, MENU_MAX_WIDTH, MENU_MIN_WIDTH, MaterialSymbolsPreconnect, MeasuredPolygon, MediumFlexibleAppBar, Menu, MenuContent, MenuDivider, MenuGroup, MenuItem, MenuProvider, MenuTrigger, Morph, MutableCubic, NavigationBar, NavigationBarItem, NavigationRail, NavigationRailItem, OutlinedSplitButtonLeading, OutlinedSplitButtonTrailing, OutlinedSplitButtonTrailingUncheckable, PlainTooltip, ProgressIndicator, RadioButton, RadioGroup, RangeSlider, RichTooltip, Ripple, RoundedPolygon, SEARCH_BAR_EXPAND_SPRING, SEARCH_COLORS, SEARCH_DOCKED_REVEAL_SPRING, SEARCH_FULLSCREEN_SPRING, SEARCH_TYPOGRAPHY, SEARCH_VIEW_SPRING, STANDARD_COLORS, SUBMENU_CONTAINER_VARIANTS, Scrim, ScrollArea, ScrollAreaScrollbar, Search, SearchAppBar, SearchBar, SearchTokens, SearchView, SearchViewContainer, SearchViewDocked, SearchViewFullScreen, ShapeIcon, ShapeMedia, ShapeMediaServer, ShapeSvg, SideSheet, SideSheetModal, Slider, SliderColors, SliderTokens, SmallAppBar, Snackbar, SnackbarHost, SnackbarProvider, SplitButtonLayout, SplitButtonLeading, SplitButtonTrailing, SplitButtonTrailingUncheckable, SubMenu, Switch, SwitchColors, SwitchTokens, TP_CLASSES, TP_COLORS, TP_SHAPE, TP_SIZE, Tab, TableOfContents, Tabs, TabsColors, TabsContent, TabsList, TabsTokens, Text, TextField, TimeInput, TimePicker, TimePickerDialog, ToggleFAB, TonalSplitButtonLeading, TonalSplitButtonTrailing, TonalSplitButtonTrailingUncheckable, ToolbarDivider, ToolbarDividerTokens, ToolbarIconButton, ToolbarIconButtonTokens, TooltipBox, TooltipCaretShape, TooltipTokens, TriStateCheckbox, TypeScaleTokens, Typography, TypographyContext, TypographyKeyTokens, TypographyProvider, TypographyTokens, UNROUNDED, VIBRANT_COLORS, VerticalFloatingToolbar, VerticalFloatingToolbarWithFab, VerticalMenu, VerticalMenuContent, VerticalMenuDivider, VerticalMenuGroup, addPoints, appBarTypography, applyTheme, buildWavePath, circle, clockwise, cn, convex, cornerFeature, cornerRounding, createDoubleMapper, createMd3ExpressiveTheme, directionVector, distance, distanceSquared, dividePoint, dotProduct, edgeFeature, featureMapper, generateM3Theme, getDirection, getDistance, getDistanceSquared, getExpressiveShape, getListItemHeight, interpolate, interpolatePath, lerpPoint, pill, pillStar, point, positiveModulo, radialToCartesian, rectangle, resolveMode, rotate90, scalePoint, shouldTopAlign, square, standardFloatingToolbarColors, star, subtractPoints, toClipPath, toSvgPath, transformFeature, transformPoint, useAppBarScroll, useBottomSheet, useRipple as useDOMRipple, useDatePickerState, useDateRangePickerState, useFloatingToolbarScrollBehavior, useListContext, useMediaQuery, useMenuContext, useRipple2 as useRipple, useRippleState, useSearchKeyboard, useShapeMorph, useSnackbar, useSnackbarState, useTheme, useThemeMode, useTimePickerState, useTooltipPosition, useTooltipState, useTypography, vibrantFloatingToolbarColors };
24255
+ export { ANGLE_EPSILON, APP_BAR_BOTTOM_SPRING, APP_BAR_COLORS, APP_BAR_COLOR_TRANSITION, APP_BAR_ENTER_ALWAYS_SPRING, APP_BAR_TITLE_FADE, AppBarColumn, AppBarOverflowIndicator, AppBarRow, AppBarTokens, BUTTON_COLOR_TOKENS, BUTTON_SIZE_TOKENS, Badge, BadgedBox, BottomAppBar, BottomDockedToolbar, BottomSheet, BottomSheetModal, Button, ButtonGroup, CHECK_ICON_VARIANTS, Card, Checkbox, Chip, CodeBlock, ContextMenu, ContextMenuContent, ContextMenuTrigger, Cubic, DISTANCE_EPSILON, DIVIDER_COLOR, DIVIDER_PADDING, DP_CLASSES, DP_COLORS, DP_SHAPE, DP_SIZE, DatePicker, DatePickerDialog, DatePickerInput, DateRangePicker, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogFullScreenContent, DialogHeader, DialogIcon, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Divider, DockedToolbar, DragHandle, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, ElevatedSplitButtonLeading, ElevatedSplitButtonTrailing, ElevatedSplitButtonTrailingUncheckable, ExtendedFAB, FAB, FABMenu, FABMenuItem, FABPosition, FAST_EFFECTS_TRANSITION, FAST_SPATIAL_SPRING, FLOAT_PI, FilledSplitButtonLeading, FilledSplitButtonTrailing, FilledSplitButtonTrailingUncheckable, GROUP_SHAPES, HorizontalFloatingToolbar, HorizontalFloatingToolbarWithFab, ITEM_SHAPE_CLASSES, Icon, IconButton, LIST_TOKENS, LargeFlexibleAppBar, List, ListContext, ListDivider, ListItem, LoadingIndicator, MD3CornerRadius, MD3Shapes, MD3ThemeProvider, MD3_EXPRESSIVE_FONT_VARIATION, MENU_CHECK_ICON_SIZE, MENU_CONTAINER_VARIANTS, MENU_GROUP_GAP, MENU_ICON_SIZE, MENU_ITEM_MIN_HEIGHT, MENU_MAX_WIDTH, MENU_MIN_WIDTH, MaterialSymbolsPreconnect, MeasuredPolygon, MediumFlexibleAppBar, Menu, MenuContent, MenuDivider, MenuGroup, MenuItem, MenuProvider, MenuTrigger, Morph, MutableCubic, NavigationBar, NavigationBarItem, NavigationRail, NavigationRailItem, OutlinedSplitButtonLeading, OutlinedSplitButtonTrailing, OutlinedSplitButtonTrailingUncheckable, PlainTooltip, ProgressIndicator, RadioButton, RadioGroup, RangeSlider, RichTooltip, Ripple, RoundedPolygon, SEARCH_BAR_EXPAND_SPRING, SEARCH_COLORS, SEARCH_DOCKED_REVEAL_SPRING, SEARCH_FULLSCREEN_SPRING, SEARCH_TYPOGRAPHY, SEARCH_VIEW_SPRING, STANDARD_COLORS, SUBMENU_CONTAINER_VARIANTS, Scrim, ScrollArea, ScrollAreaScrollbar, Search, SearchAppBar, SearchBar, SearchTokens, SearchView, SearchViewContainer, SearchViewDocked, SearchViewFullScreen, ShapeIcon, ShapeMedia, ShapeMediaServer, ShapeSvg, SideSheet, SideSheetModal, Slider, SliderColors, SliderTokens, SmallAppBar, Snackbar, SnackbarHost, SnackbarProvider, SplitButtonLayout, SplitButtonLeading, SplitButtonTrailing, SplitButtonTrailingUncheckable, SubMenu, Switch, SwitchColors, SwitchTokens, TP_CLASSES, TP_COLORS, TP_SHAPE, TP_SIZE, Tab, TableOfContents, Tabs, TabsColors, TabsContent, TabsList, TabsTokens, Text, TextField, TimeInput, TimePicker, TimePickerDialog, ToggleFAB, TonalSplitButtonLeading, TonalSplitButtonTrailing, TonalSplitButtonTrailingUncheckable, ToolbarDivider, ToolbarDividerTokens, ToolbarIconButton, ToolbarIconButtonTokens, ToolbarToggleButton, ToolbarToggleButtonTokens, TooltipBox, TooltipCaretShape, TooltipTokens, TriStateCheckbox, TypeScaleTokens, Typography, TypographyContext, TypographyKeyTokens, TypographyProvider, TypographyTokens, UNROUNDED, VIBRANT_COLORS, VerticalFloatingToolbar, VerticalFloatingToolbarWithFab, VerticalMenu, VerticalMenuContent, VerticalMenuDivider, VerticalMenuGroup, addPoints, appBarTypography, applyTheme, buildWavePath, circle, clockwise, cn, convex, cornerFeature, cornerRounding, createDoubleMapper, createMd3ExpressiveTheme, directionVector, distance, distanceSquared, dividePoint, dotProduct, edgeFeature, featureMapper, generateM3Theme, getDirection, getDistance, getDistanceSquared, getExpressiveShape, getListItemHeight, getToolbarColors, interpolate, interpolatePath, lerpPoint, pill, pillStar, point, positiveModulo, radialToCartesian, rectangle, resolveMode, rotate90, scalePoint, shouldTopAlign, square, standardFloatingToolbarColors, star, subtractPoints, surfaceContainerHighFloatingToolbarColors, surfaceContainerHighestFloatingToolbarColors, tertiaryContainerFloatingToolbarColors, toClipPath, toSvgPath, transformFeature, transformPoint, useAppBarScroll, useBottomSheet, useRipple as useDOMRipple, useDatePickerState, useDateRangePickerState, useFloatingToolbarScrollBehavior, useListContext, useMediaQuery, useMenuContext, useRipple2 as useRipple, useRippleState, useSearchKeyboard, useShapeMorph, useSnackbar, useSnackbarState, useTheme, useThemeMode, useTimePickerState, useTooltipPosition, useTooltipState, useTypography, vibrantFloatingToolbarColors, xrFloatingToolbarColors };
23786
24256
  //# sourceMappingURL=index.mjs.map
23787
24257
  //# sourceMappingURL=index.mjs.map