@bug-on/m3-expressive 1.3.4 → 1.3.5

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 (60) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +31 -7
  3. package/dist/assets/material-symbols-cdn.css +17 -23
  4. package/dist/buttons.js +129 -35
  5. package/dist/buttons.js.map +1 -1
  6. package/dist/buttons.mjs +129 -35
  7. package/dist/buttons.mjs.map +1 -1
  8. package/dist/{core-COvZHQ_k.d.ts → core-Cckt8qEm.d.ts} +10 -4
  9. package/dist/{core-CRkixy1y.d.mts → core-DDfG4pym.d.mts} +10 -4
  10. package/dist/core.d.mts +2 -2
  11. package/dist/core.d.ts +2 -2
  12. package/dist/core.js +6 -5
  13. package/dist/core.js.map +1 -1
  14. package/dist/core.mjs +6 -5
  15. package/dist/core.mjs.map +1 -1
  16. package/dist/fading-blur-mask--uZbBKLj.d.mts +77 -0
  17. package/dist/fading-blur-mask--uZbBKLj.d.ts +77 -0
  18. package/dist/feedback.js +1 -1
  19. package/dist/feedback.js.map +1 -1
  20. package/dist/feedback.mjs +1 -1
  21. package/dist/feedback.mjs.map +1 -1
  22. package/dist/forms.js +1 -1
  23. package/dist/forms.js.map +1 -1
  24. package/dist/forms.mjs +1 -1
  25. package/dist/forms.mjs.map +1 -1
  26. package/dist/index.d.mts +5 -4
  27. package/dist/index.d.ts +5 -4
  28. package/dist/index.js +266 -122
  29. package/dist/index.js.map +1 -1
  30. package/dist/index.mjs +266 -122
  31. package/dist/index.mjs.map +1 -1
  32. package/dist/layout.d.mts +5 -3
  33. package/dist/layout.d.ts +5 -3
  34. package/dist/layout.js +61 -6
  35. package/dist/layout.js.map +1 -1
  36. package/dist/layout.mjs +61 -7
  37. package/dist/layout.mjs.map +1 -1
  38. package/dist/material-symbols-cdn.css +17 -23
  39. package/dist/navigation.d.mts +25 -83
  40. package/dist/navigation.d.ts +25 -83
  41. package/dist/navigation.js +22 -9
  42. package/dist/navigation.js.map +1 -1
  43. package/dist/navigation.mjs +22 -9
  44. package/dist/navigation.mjs.map +1 -1
  45. package/dist/overlays.js +1 -1
  46. package/dist/overlays.js.map +1 -1
  47. package/dist/overlays.mjs +1 -1
  48. package/dist/overlays.mjs.map +1 -1
  49. package/dist/pickers.d.mts +12 -0
  50. package/dist/pickers.d.ts +12 -0
  51. package/dist/pickers.js +98 -65
  52. package/dist/pickers.js.map +1 -1
  53. package/dist/pickers.mjs +98 -65
  54. package/dist/pickers.mjs.map +1 -1
  55. package/dist/{typography-339RV6v7.d.mts → typography-CKTjvlZ4.d.mts} +25 -0
  56. package/dist/{typography-339RV6v7.d.ts → typography-CKTjvlZ4.d.ts} +25 -0
  57. package/dist/typography.css +1 -1
  58. package/llms-full.txt +17 -13
  59. package/llms.txt +11 -6
  60. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -281,7 +281,8 @@ function schemeToCssVariables(scheme) {
281
281
  return result;
282
282
  }
283
283
  function MaterialSymbolsPreconnect({
284
- variants = ["outlined"]
284
+ variants = ["rounded"],
285
+ display = "block"
285
286
  }) {
286
287
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
287
288
  /* @__PURE__ */ jsxRuntime.jsx("link", { rel: "preconnect", href: "https://fonts.googleapis.com" }),
@@ -296,7 +297,7 @@ function MaterialSymbolsPreconnect({
296
297
  variants.includes("outlined") && /* @__PURE__ */ jsxRuntime.jsx(
297
298
  "link",
298
299
  {
299
- href: "https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap",
300
+ href: `https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=${display}`,
300
301
  rel: "stylesheet",
301
302
  precedence: "default"
302
303
  }
@@ -304,7 +305,7 @@ function MaterialSymbolsPreconnect({
304
305
  variants.includes("rounded") && /* @__PURE__ */ jsxRuntime.jsx(
305
306
  "link",
306
307
  {
307
- href: "https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap",
308
+ href: `https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=${display}`,
308
309
  rel: "stylesheet",
309
310
  precedence: "default"
310
311
  }
@@ -312,7 +313,7 @@ function MaterialSymbolsPreconnect({
312
313
  variants.includes("sharp") && /* @__PURE__ */ jsxRuntime.jsx(
313
314
  "link",
314
315
  {
315
- href: "https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap",
316
+ href: `https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=${display}`,
316
317
  rel: "stylesheet",
317
318
  precedence: "default"
318
319
  }
@@ -2860,7 +2861,7 @@ function getMaskGradient(direction) {
2860
2861
  case "bottom":
2861
2862
  return "linear-gradient(to top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 1) 45%, rgba(0, 0, 0, 0.7) 75%, rgba(0, 0, 0, 0) 100%)";
2862
2863
  case "both":
2863
- return "linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.7) 20%, rgba(0, 0, 0, 1) 40%, rgba(0, 0, 0, 1) 60%, rgba(0, 0, 0, 0.7) 80%, rgba(0, 0, 0, 0) 100%)";
2864
+ return "linear-gradient(to bottom, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0.7) 15%, rgba(0, 0, 0, 0) 30%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0.7) 85%, rgba(0, 0, 0, 1) 100%)";
2864
2865
  default:
2865
2866
  return "linear-gradient(to bottom, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 1) 45%, rgba(0, 0, 0, 0.7) 75%, rgba(0, 0, 0, 0) 100%)";
2866
2867
  }
@@ -2877,11 +2878,16 @@ function FadingBlurMask({
2877
2878
  const shouldReduceMotion = react.useReducedMotion();
2878
2879
  const activeBlur = shouldReduceMotion ? 0 : blurIntensity;
2879
2880
  const maskGradient = getMaskGradient(direction);
2881
+ const isFullHeight = direction === "both" || blurHeight === "100%";
2882
+ const computedHeight = isFullHeight ? "100%" : typeof blurHeight === "number" ? `${blurHeight}px` : blurHeight;
2880
2883
  const maskStyle = __spreadValues({
2881
2884
  position: "absolute",
2882
- inset: 0,
2885
+ top: direction === "bottom" && !isFullHeight ? "auto" : 0,
2886
+ bottom: direction === "top" && !isFullHeight ? "auto" : 0,
2887
+ left: 0,
2888
+ right: 0,
2883
2889
  pointerEvents: "none",
2884
- height: typeof blurHeight === "number" ? `${blurHeight}px` : blurHeight,
2890
+ height: computedHeight,
2885
2891
  backdropFilter: activeBlur > 0 ? `blur(${activeBlur}px)` : void 0,
2886
2892
  WebkitBackdropFilter: activeBlur > 0 ? `blur(${activeBlur}px)` : void 0,
2887
2893
  maskImage: maskGradient,
@@ -2893,7 +2899,7 @@ function FadingBlurMask({
2893
2899
  {
2894
2900
  "aria-hidden": "true",
2895
2901
  className: cn(
2896
- "absolute inset-0 pointer-events-none z-0 rounded-[inherit]",
2902
+ "absolute pointer-events-none z-10 rounded-[inherit]",
2897
2903
  className
2898
2904
  ),
2899
2905
  style: maskStyle,
@@ -4021,7 +4027,7 @@ var IconComponent = React67__namespace.forwardRef(
4021
4027
  (_a, ref) => {
4022
4028
  var _b = _a, {
4023
4029
  name,
4024
- variant = "outlined",
4030
+ variant = "rounded",
4025
4031
  fill = 0,
4026
4032
  weight = 400,
4027
4033
  grade = 0,
@@ -8356,6 +8362,7 @@ var ExtendedFABComponent = React67__namespace.forwardRef(
8356
8362
  onClick,
8357
8363
  onKeyDown,
8358
8364
  layoutId,
8365
+ layout,
8359
8366
  "aria-label": ariaLabel
8360
8367
  } = _b, restProps = __objRest(_b, [
8361
8368
  "className",
@@ -8377,6 +8384,7 @@ var ExtendedFABComponent = React67__namespace.forwardRef(
8377
8384
  "onClick",
8378
8385
  "onKeyDown",
8379
8386
  "layoutId",
8387
+ "layout",
8380
8388
  "aria-label"
8381
8389
  ]);
8382
8390
  var _a2, _b2, _c, _d;
@@ -8401,6 +8409,13 @@ var ExtendedFABComponent = React67__namespace.forwardRef(
8401
8409
  const colors = (_a2 = COLOR_CLASSES[colorStyle]) != null ? _a2 : COLOR_CLASSES.primary;
8402
8410
  const radiusConfig = (_b2 = MORPH_RADIUS[size]) != null ? _b2 : MORPH_RADIUS.sm;
8403
8411
  const sizeIcon = (_c = SIZE_ICON[size]) != null ? _c : SIZE_ICON.sm;
8412
+ const motionRadius = react.useMotionValue(radiusConfig.default);
8413
+ React67__namespace.useEffect(() => {
8414
+ const controls = react.animate(motionRadius, radiusConfig.default, __spreadProps(__spreadValues({}, SPRING_TRANSITION), {
8415
+ type: "spring"
8416
+ }));
8417
+ return () => controls.stop();
8418
+ }, [radiusConfig.default, motionRadius]);
8404
8419
  const { ripples, onPointerDown, removeRipple } = useRippleState({
8405
8420
  disabled: loading
8406
8421
  });
@@ -8495,13 +8510,25 @@ var ExtendedFABComponent = React67__namespace.forwardRef(
8495
8510
  {
8496
8511
  layout: "position",
8497
8512
  initial: { opacity: 0, width: 0 },
8498
- animate: { opacity: 1, width: "auto" },
8499
- exit: { opacity: 0, width: 0 },
8500
- transition: {
8501
- opacity: { duration: 0.15, ease: "linear" },
8502
- width: SPRING_TRANSITION
8513
+ animate: {
8514
+ opacity: 1,
8515
+ width: "auto",
8516
+ transition: {
8517
+ width: SPRING_TRANSITION,
8518
+ opacity: { delay: 0.08, duration: 0.15, ease: "easeIn" },
8519
+ layout: SPRING_TRANSITION
8520
+ }
8503
8521
  },
8504
- className: "overflow-hidden whitespace-nowrap",
8522
+ exit: {
8523
+ opacity: 0,
8524
+ width: 0,
8525
+ transition: {
8526
+ opacity: { duration: 0.1, ease: "linear" },
8527
+ width: __spreadProps(__spreadValues({}, SPRING_TRANSITION), { delay: 0.03 }),
8528
+ layout: SPRING_TRANSITION
8529
+ }
8530
+ },
8531
+ className: "overflow-hidden whitespace-nowrap shrink-0 inline-block",
8505
8532
  children: label
8506
8533
  },
8507
8534
  "label"
@@ -8532,7 +8559,7 @@ var ExtendedFABComponent = React67__namespace.forwardRef(
8532
8559
  __spreadProps(__spreadValues({
8533
8560
  ref: localRef,
8534
8561
  type: "button",
8535
- layout: true,
8562
+ layout: layout !== void 0 ? layout : "position",
8536
8563
  layoutId,
8537
8564
  "aria-label": ariaLabel || label,
8538
8565
  "aria-busy": loading || void 0,
@@ -8540,21 +8567,23 @@ var ExtendedFABComponent = React67__namespace.forwardRef(
8540
8567
  onClick: handleClick,
8541
8568
  onPointerDown,
8542
8569
  onKeyDown: handleKeyDown,
8543
- style,
8570
+ style: __spreadProps(__spreadValues({}, style), {
8571
+ borderRadius: motionRadius
8572
+ }),
8544
8573
  initial: {
8545
8574
  scale: 0.6,
8546
- opacity: 0,
8547
- borderRadius: radiusConfig.default
8575
+ opacity: 0
8548
8576
  },
8549
8577
  animate: {
8550
8578
  scale: 1,
8551
- opacity: 1,
8552
- borderRadius: radiusConfig.default
8579
+ opacity: 1
8553
8580
  },
8554
8581
  exit: { scale: 0.6, opacity: 0 },
8555
- whileTap: { borderRadius: radiusConfig.pressed },
8582
+ whileTap: {
8583
+ borderRadius: radiusConfig.pressed,
8584
+ transition: { borderRadius: SPRING_TRANSITION_FAST }
8585
+ },
8556
8586
  transition: {
8557
- borderRadius: { type: "spring", stiffness: 500, damping: 30 },
8558
8587
  scale: SPRING_TRANSITION,
8559
8588
  opacity: { duration: 0.2, ease: "linear" },
8560
8589
  layout: SPRING_TRANSITION
@@ -8586,6 +8615,18 @@ var SIZE_TEXT_CLASS = {
8586
8615
  lg: "text-xl font-semibold",
8587
8616
  xl: "text-2xl font-semibold"
8588
8617
  };
8618
+ var SIZE_PADDING_COLLAPSED = {
8619
+ sm: "px-2",
8620
+ md: "px-4",
8621
+ lg: "px-8",
8622
+ xl: "px-12"
8623
+ };
8624
+ var SIZE_PADDING_EXTENDED = {
8625
+ sm: "pl-2 pr-4",
8626
+ md: "pl-4 pr-6",
8627
+ lg: "pl-8 pr-8",
8628
+ xl: "pl-12 pr-10"
8629
+ };
8589
8630
  var MORPH_RADIUS2 = {
8590
8631
  sm: { default: 12, pressed: 8, extended: 12, extended_pressed: 8 },
8591
8632
  md: { default: 16, pressed: 10, extended: 16, extended_pressed: 10 },
@@ -8677,7 +8718,7 @@ var FABComponent = React67__namespace.forwardRef(
8677
8718
  "layout",
8678
8719
  "layoutId"
8679
8720
  ]);
8680
- var _a2, _b2, _c, _d;
8721
+ var _a2, _b2, _c, _d, _e, _f;
8681
8722
  const colors = (_a2 = COLOR_CLASSES2[colorStyle]) != null ? _a2 : COLOR_CLASSES2.primary;
8682
8723
  const radiusConfig = (_b2 = MORPH_RADIUS2[size]) != null ? _b2 : MORPH_RADIUS2.md;
8683
8724
  const animateRadius = extended ? radiusConfig.extended : radiusConfig.default;
@@ -8762,22 +8803,37 @@ var FABComponent = React67__namespace.forwardRef(
8762
8803
  react.m.span,
8763
8804
  {
8764
8805
  layout: "position",
8765
- initial: { width: 0, opacity: 0 },
8766
- animate: { width: "auto", opacity: 1 },
8767
- exit: { width: 0, opacity: 0 },
8768
- transition: {
8769
- opacity: { duration: 0.15, ease: "linear" },
8770
- width: SPRING_TRANSITION,
8771
- layout: SPRING_TRANSITION
8806
+ initial: { width: 0, opacity: 0, marginLeft: 0 },
8807
+ animate: {
8808
+ width: "auto",
8809
+ opacity: 1,
8810
+ marginLeft: 12,
8811
+ transition: {
8812
+ width: SPRING_TRANSITION,
8813
+ marginLeft: SPRING_TRANSITION,
8814
+ opacity: { delay: 0.08, duration: 0.15, ease: "easeIn" },
8815
+ layout: SPRING_TRANSITION
8816
+ }
8817
+ },
8818
+ exit: {
8819
+ width: 0,
8820
+ opacity: 0,
8821
+ marginLeft: 0,
8822
+ transition: {
8823
+ opacity: { duration: 0.1, ease: "linear" },
8824
+ width: __spreadProps(__spreadValues({}, SPRING_TRANSITION), { delay: 0.03 }),
8825
+ marginLeft: __spreadProps(__spreadValues({}, SPRING_TRANSITION), { delay: 0.03 }),
8826
+ layout: SPRING_TRANSITION
8827
+ }
8772
8828
  },
8773
- className: "overflow-hidden whitespace-nowrap ml-3",
8829
+ className: "overflow-hidden whitespace-nowrap shrink-0 inline-block",
8774
8830
  children: labelContent
8775
8831
  },
8776
8832
  "label"
8777
8833
  ) })
8778
8834
  ] });
8779
8835
  const containerClassName = cn(
8780
- "relative shrink-0 inline-flex items-center justify-center",
8836
+ "relative shrink-0 inline-flex items-center justify-start",
8781
8837
  "select-none cursor-pointer overflow-hidden",
8782
8838
  "transition-[box-shadow,opacity,filter] duration-200",
8783
8839
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2",
@@ -8786,21 +8842,62 @@ var FABComponent = React67__namespace.forwardRef(
8786
8842
  colors.text,
8787
8843
  lowered ? "shadow-sm" : colors.shadow,
8788
8844
  (_d = SIZE_STYLES[size]) != null ? _d : "h-14 w-14",
8789
- extended && "w-auto pl-4 pr-6",
8845
+ extended ? cn("w-auto", (_e = SIZE_PADDING_EXTENDED[size]) != null ? _e : "pl-4 pr-6") : (_f = SIZE_PADDING_COLLAPSED[size]) != null ? _f : "px-4",
8790
8846
  SIZE_TEXT_CLASS[size],
8791
8847
  loading && "pointer-events-none opacity-75 cursor-not-allowed",
8792
8848
  className
8793
8849
  );
8850
+ const motionRadius = react.useMotionValue(animateRadius);
8851
+ const asChildRef = React67__namespace.useRef(null);
8852
+ const mergedRef = React67__namespace.useCallback(
8853
+ (node) => {
8854
+ asChildRef.current = node;
8855
+ if (typeof ref === "function") ref(node);
8856
+ else if (ref)
8857
+ ref.current = node;
8858
+ },
8859
+ [ref]
8860
+ );
8861
+ React67__namespace.useEffect(() => {
8862
+ if (!asChild) return;
8863
+ return motionRadius.on("change", (v) => {
8864
+ if (asChildRef.current)
8865
+ asChildRef.current.style.borderRadius = `${v}px`;
8866
+ });
8867
+ }, [motionRadius, asChild]);
8868
+ React67__namespace.useEffect(() => {
8869
+ const controls = react.animate(motionRadius, animateRadius, __spreadProps(__spreadValues({}, SPRING_TRANSITION), {
8870
+ type: "spring"
8871
+ }));
8872
+ return () => controls.stop();
8873
+ }, [animateRadius, motionRadius]);
8874
+ const handleAsChildPointerDown = React67__namespace.useCallback(
8875
+ (e) => {
8876
+ onPointerDown(e);
8877
+ react.animate(motionRadius, pressedRadius, __spreadProps(__spreadValues({}, SPRING_TRANSITION_FAST), {
8878
+ type: "spring"
8879
+ }));
8880
+ },
8881
+ [onPointerDown, motionRadius, pressedRadius]
8882
+ );
8883
+ const handleAsChildPointerUp = React67__namespace.useCallback(() => {
8884
+ react.animate(motionRadius, animateRadius, __spreadProps(__spreadValues({}, SPRING_TRANSITION_FAST), {
8885
+ type: "spring"
8886
+ }));
8887
+ }, [motionRadius, animateRadius]);
8794
8888
  const computedAriaLabel = ariaLabel || (typeof children === "string" ? children : void 0);
8795
8889
  return /* @__PURE__ */ jsxRuntime.jsx(react.LazyMotion, { features: react.domMax, strict: true, children: /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { children: visible && (asChild ? /* @__PURE__ */ jsxRuntime.jsx(
8796
8890
  reactSlot.Slot,
8797
8891
  __spreadProps(__spreadValues({
8798
- ref,
8892
+ ref: mergedRef,
8799
8893
  "aria-label": computedAriaLabel,
8800
8894
  "aria-busy": loading || void 0,
8801
8895
  "aria-disabled": loading || restProps.disabled,
8802
8896
  onClick: handleClick,
8803
- onPointerDown,
8897
+ onPointerDown: handleAsChildPointerDown,
8898
+ onPointerUp: handleAsChildPointerUp,
8899
+ onPointerLeave: handleAsChildPointerUp,
8900
+ onPointerCancel: handleAsChildPointerUp,
8804
8901
  onKeyDown: handleKeyDown,
8805
8902
  style: __spreadProps(__spreadValues({}, style), {
8806
8903
  borderRadius: `${animateRadius}px`
@@ -8817,7 +8914,7 @@ var FABComponent = React67__namespace.forwardRef(
8817
8914
  __spreadProps(__spreadValues({
8818
8915
  ref,
8819
8916
  type: "button",
8820
- layout: layout !== void 0 ? layout : true,
8917
+ layout: layout !== void 0 ? layout : "position",
8821
8918
  layoutId,
8822
8919
  "aria-label": computedAriaLabel,
8823
8920
  "aria-busy": loading || void 0,
@@ -8825,17 +8922,20 @@ var FABComponent = React67__namespace.forwardRef(
8825
8922
  onClick: handleClick,
8826
8923
  onPointerDown,
8827
8924
  onKeyDown: handleKeyDown,
8828
- style,
8925
+ style: __spreadProps(__spreadValues({}, style), {
8926
+ borderRadius: motionRadius
8927
+ }),
8829
8928
  initial: {
8830
8929
  scale: 0.5,
8831
- opacity: 0,
8832
- borderRadius: animateRadius
8930
+ opacity: 0
8833
8931
  },
8834
- animate: { scale: 1, opacity: 1, borderRadius: animateRadius },
8932
+ animate: { scale: 1, opacity: 1 },
8835
8933
  exit: { scale: 0.5, opacity: 0 },
8836
- whileTap: { borderRadius: pressedRadius },
8934
+ whileTap: {
8935
+ borderRadius: pressedRadius,
8936
+ transition: { borderRadius: SPRING_TRANSITION_FAST }
8937
+ },
8837
8938
  transition: {
8838
- borderRadius: SPRING_TRANSITION_FAST,
8839
8939
  scale: SPRING_TRANSITION,
8840
8940
  opacity: { duration: 0.25, ease: "easeOut" },
8841
8941
  layout: SPRING_TRANSITION
@@ -13312,7 +13412,7 @@ var CalendarGrid = ({
13312
13412
  ] });
13313
13413
  };
13314
13414
  CalendarGrid.displayName = "CalendarGrid";
13315
- var selectorClassName = "flex items-center gap-1 rounded-m3-full px-2 py-1 text-[length:var(--md-typescale-title-small-size,14px)] font-[number:var(--md-typescale-title-small-weight,500)] text-m3-on-surface transition-m3-fast-effects hover:bg-m3-on-surface/8 focus-visible:outline-2 focus-visible:outline-m3-primary";
13415
+ var selectorClassName = "flex items-center gap-1 rounded-m3-full px-2 py-1 text-[length:var(--md-typescale-title-small-size,14px)] font-[number:var(--md-typescale-title-small-weight,500)] text-m3-on-surface transition-m3-fast-effects hover:bg-m3-on-surface/8 focus-visible:outline-2 focus-visible:outline-m3-primary whitespace-nowrap select-none min-w-0";
13316
13416
  var CalendarHeader = ({
13317
13417
  displayedMonthMs,
13318
13418
  activeSelector,
@@ -13338,57 +13438,70 @@ var CalendarHeader = ({
13338
13438
  timeZone: "UTC"
13339
13439
  }).format(date);
13340
13440
  const yearLabel = String(date.getUTCFullYear());
13341
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 px-6 pb-4 pt-5", children: [
13342
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-(length:--md-typescale-label-large-size,14px) font-(--md-typescale-label-large-weight,500) text-m3-on-surface-variant", children: title }),
13343
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 leading-tight text-(length:--md-typescale-headline-large-size,32px) font-(--md-typescale-headline-large-weight,400) text-m3-on-surface-variant", children: headline }),
13344
- displayMode === "picker" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-10 items-center gap-0.5", children: [
13345
- activeSelector === null && /* @__PURE__ */ jsxRuntime.jsx(
13346
- IconButton,
13347
- {
13348
- onClick: onPrev,
13349
- "aria-label": "Previous month",
13350
- disabled: !canNavigatePrev,
13351
- size: "xs",
13352
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron_left" })
13353
- }
13354
- ),
13355
- /* @__PURE__ */ jsxRuntime.jsxs(
13356
- "button",
13357
- {
13358
- type: "button",
13359
- onClick: () => onToggleSelector("month"),
13360
- "aria-expanded": activeSelector === "month",
13361
- "aria-controls": "date-picker-selection",
13362
- className: cn(
13363
- selectorClassName,
13364
- activeSelector === "month" && "bg-m3-on-surface/8"
13365
- ),
13366
- children: [
13367
- monthLabel,
13368
- /* @__PURE__ */ jsxRuntime.jsx(
13369
- Icon,
13370
- {
13371
- name: "arrow_drop_down",
13372
- className: cn(
13373
- "text-[20px] transition-transform duration-200",
13374
- activeSelector === "month" && "rotate-180"
13375
- )
13376
- }
13377
- )
13378
- ]
13379
- }
13380
- ),
13381
- activeSelector === null && /* @__PURE__ */ jsxRuntime.jsx(
13382
- IconButton,
13383
- {
13384
- onClick: onNext,
13385
- "aria-label": "Next month",
13386
- disabled: !canNavigateNext,
13387
- size: "xs",
13388
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron_right" })
13389
- }
13390
- ),
13391
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto flex items-center gap-0.5", children: [
13441
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 px-4 sm:px-6 pb-3 pt-5 w-full", children: [
13442
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-(length:--md-typescale-label-large-size,14px) font-(--md-typescale-label-large-weight,500) text-m3-on-surface-variant truncate", children: title }),
13443
+ /* @__PURE__ */ jsxRuntime.jsx(
13444
+ "div",
13445
+ {
13446
+ className: "mb-2 leading-tight text-[26px] sm:text-[32px] font-(--md-typescale-headline-large-weight,400) text-m3-on-surface-variant truncate",
13447
+ title: typeof headline === "string" ? headline : void 0,
13448
+ children: headline
13449
+ }
13450
+ ),
13451
+ displayMode === "picker" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-10 items-center justify-between gap-0.5 w-full overflow-hidden", children: [
13452
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-0.5 min-w-0 shrink", children: [
13453
+ activeSelector === null && /* @__PURE__ */ jsxRuntime.jsx(
13454
+ IconButton,
13455
+ {
13456
+ onClick: onPrev,
13457
+ "aria-label": "Previous month",
13458
+ disabled: !canNavigatePrev,
13459
+ size: "xs",
13460
+ className: "shrink-0",
13461
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron_left" })
13462
+ }
13463
+ ),
13464
+ /* @__PURE__ */ jsxRuntime.jsxs(
13465
+ "button",
13466
+ {
13467
+ type: "button",
13468
+ onClick: () => onToggleSelector("month"),
13469
+ "aria-expanded": activeSelector === "month",
13470
+ "aria-controls": "date-picker-selection",
13471
+ className: cn(
13472
+ selectorClassName,
13473
+ "min-w-0 max-w-[125px] shrink",
13474
+ activeSelector === "month" && "bg-m3-on-surface/8"
13475
+ ),
13476
+ title: monthLabel,
13477
+ children: [
13478
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: monthLabel }),
13479
+ /* @__PURE__ */ jsxRuntime.jsx(
13480
+ Icon,
13481
+ {
13482
+ name: "arrow_drop_down",
13483
+ className: cn(
13484
+ "text-[20px] shrink-0 transition-transform duration-200",
13485
+ activeSelector === "month" && "rotate-180"
13486
+ )
13487
+ }
13488
+ )
13489
+ ]
13490
+ }
13491
+ ),
13492
+ activeSelector === null && /* @__PURE__ */ jsxRuntime.jsx(
13493
+ IconButton,
13494
+ {
13495
+ onClick: onNext,
13496
+ "aria-label": "Next month",
13497
+ disabled: !canNavigateNext,
13498
+ size: "xs",
13499
+ className: "shrink-0",
13500
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron_right" })
13501
+ }
13502
+ )
13503
+ ] }),
13504
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto flex items-center gap-0.5 shrink-0", children: [
13392
13505
  activeSelector === null && /* @__PURE__ */ jsxRuntime.jsx(
13393
13506
  IconButton,
13394
13507
  {
@@ -13396,6 +13509,7 @@ var CalendarHeader = ({
13396
13509
  "aria-label": "Previous year",
13397
13510
  disabled: !canNavigatePreviousYear,
13398
13511
  size: "xs",
13512
+ className: "shrink-0",
13399
13513
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron_left" })
13400
13514
  }
13401
13515
  ),
@@ -13408,16 +13522,18 @@ var CalendarHeader = ({
13408
13522
  "aria-controls": "date-picker-selection",
13409
13523
  className: cn(
13410
13524
  selectorClassName,
13525
+ "shrink-0",
13411
13526
  activeSelector === "year" && "bg-m3-on-surface/8"
13412
13527
  ),
13528
+ title: yearLabel,
13413
13529
  children: [
13414
- yearLabel,
13530
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: yearLabel }),
13415
13531
  /* @__PURE__ */ jsxRuntime.jsx(
13416
13532
  Icon,
13417
13533
  {
13418
13534
  name: "arrow_drop_down",
13419
13535
  className: cn(
13420
- "text-[20px] transition-transform duration-200",
13536
+ "text-[20px] shrink-0 transition-transform duration-200",
13421
13537
  activeSelector === "year" && "rotate-180"
13422
13538
  )
13423
13539
  }
@@ -13432,6 +13548,7 @@ var CalendarHeader = ({
13432
13548
  "aria-label": "Next year",
13433
13549
  disabled: !canNavigateNextYear,
13434
13550
  size: "xs",
13551
+ className: "shrink-0",
13435
13552
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron_right" })
13436
13553
  }
13437
13554
  ),
@@ -13441,6 +13558,7 @@ var CalendarHeader = ({
13441
13558
  onClick: onToggleMode,
13442
13559
  "aria-label": "Switch to text input",
13443
13560
  size: "xs",
13561
+ className: "shrink-0",
13444
13562
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "keyboard" })
13445
13563
  }
13446
13564
  )
@@ -13452,7 +13570,7 @@ var CalendarHeader = ({
13452
13570
  onClick: onToggleMode,
13453
13571
  "aria-label": "Switch to calendar",
13454
13572
  size: "xs",
13455
- className: "self-end",
13573
+ className: "self-end shrink-0",
13456
13574
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "calendar_month" })
13457
13575
  }
13458
13576
  ),
@@ -13499,14 +13617,14 @@ var MonthPickerList = ({
13499
13617
  onClick: () => onMonthSelect(month),
13500
13618
  className: cn(
13501
13619
  "flex min-h-12 w-full items-center gap-4 px-6 text-left",
13502
- "text-[length:var(--md-typescale-body-large-size,16px)]",
13620
+ "text-(length:--md-typescale-body-large-size,16px)",
13503
13621
  "text-m3-on-surface transition-m3-fast-effects",
13504
13622
  "hover:bg-m3-on-surface/8 focus-visible:outline-2 focus-visible:outline-m3-primary",
13505
13623
  isSelected && "bg-m3-secondary-container text-m3-on-secondary-container"
13506
13624
  ),
13507
13625
  children: [
13508
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-6", "aria-hidden": true, children: isSelected && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "check", className: "text-[20px]" }) }),
13509
- getMonthLabel(month, locale.locale)
13626
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-6 shrink-0", "aria-hidden": true, children: isSelected && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "check", className: "text-[20px]" }) }),
13627
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: getMonthLabel(month, locale.locale) })
13510
13628
  ]
13511
13629
  },
13512
13630
  month
@@ -13584,7 +13702,9 @@ var DatePicker = ({
13584
13702
  showModeToggle = true,
13585
13703
  title,
13586
13704
  headline,
13587
- className
13705
+ className,
13706
+ width,
13707
+ maxWidth
13588
13708
  }) => {
13589
13709
  const {
13590
13710
  selectedDateMs,
@@ -13665,7 +13785,10 @@ var DatePicker = ({
13665
13785
  "fieldset",
13666
13786
  {
13667
13787
  className: cn("flex flex-col select-none", className),
13668
- style: { width: "min(100%, 360px)" },
13788
+ style: {
13789
+ width: typeof width === "number" ? `${width}px` : width != null ? width : "min(100%, 360px)",
13790
+ maxWidth: typeof maxWidth === "number" ? `${maxWidth}px` : maxWidth
13791
+ },
13669
13792
  "aria-label": computedAriaLabel,
13670
13793
  children: [
13671
13794
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "sr-only", children: computedAriaLabel }),
@@ -14106,7 +14229,9 @@ var DatePickerDialog = ({
14106
14229
  dismissButton,
14107
14230
  children,
14108
14231
  className,
14109
- title = "Select date"
14232
+ title = "Select date",
14233
+ width,
14234
+ maxWidth
14110
14235
  }) => {
14111
14236
  return /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open, onOpenChange: (v) => !v && onDismiss(), children: /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { open, children: [
14112
14237
  /* @__PURE__ */ jsxRuntime.jsx(RadixDialog__namespace.Overlay, { asChild: true, forceMount: true, children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -14142,7 +14267,10 @@ var DatePickerDialog = ({
14142
14267
  "elevation-3",
14143
14268
  className
14144
14269
  ),
14145
- style: { width: "min(calc(100vw - 32px), 360px)" },
14270
+ style: {
14271
+ width: typeof width === "number" ? `${width}px` : width != null ? width : "min(calc(100vw - 32px), 360px)",
14272
+ maxWidth: typeof maxWidth === "number" ? `${maxWidth}px` : maxWidth
14273
+ },
14146
14274
  initial: PICKER_CONTENT_ANIM.initial,
14147
14275
  animate: PICKER_CONTENT_ANIM.animate,
14148
14276
  exit: PICKER_CONTENT_ANIM.exit,
@@ -14166,7 +14294,9 @@ var DateRangePicker = ({
14166
14294
  state,
14167
14295
  showModeToggle = false,
14168
14296
  title,
14169
- className
14297
+ className,
14298
+ width,
14299
+ maxWidth
14170
14300
  }) => {
14171
14301
  const {
14172
14302
  selectedStartMs,
@@ -14238,7 +14368,10 @@ var DateRangePicker = ({
14238
14368
  "fieldset",
14239
14369
  {
14240
14370
  className: cn("flex flex-col select-none", className),
14241
- style: { width: "min(100%, 360px)" },
14371
+ style: {
14372
+ width: typeof width === "number" ? `${width}px` : width != null ? width : "min(100%, 360px)",
14373
+ maxWidth: typeof maxWidth === "number" ? `${maxWidth}px` : maxWidth
14374
+ },
14242
14375
  "aria-label": computedAriaLabel,
14243
14376
  children: [
14244
14377
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "sr-only", children: computedAriaLabel }),
@@ -15585,13 +15718,16 @@ var useTimePickerState = (options) => {
15585
15718
  };
15586
15719
  function buildWavePath(startX, endX, amplitude = 2, wavelength = 32, yCenter = 4) {
15587
15720
  if (startX >= endX) return "";
15721
+ const totalWidth = endX - startX;
15588
15722
  const halfCycle = wavelength / 2;
15589
- const numHalfCycles = Math.ceil((endX - startX) / halfCycle);
15590
- const cpDistanceY = amplitude * (4 / 3);
15723
+ const numHalfCycles = Math.max(1, Math.round(totalWidth / halfCycle));
15724
+ const actualHalfCycle = totalWidth / numHalfCycles;
15725
+ const scale = Math.min(1, actualHalfCycle / halfCycle);
15726
+ const cpDistanceY = amplitude * (4 / 3) * scale;
15591
15727
  let d = `M ${startX},${yCenter}`;
15592
15728
  for (let i = 0; i < numHalfCycles; i++) {
15593
- const x0 = startX + i * halfCycle;
15594
- const x1 = Math.min(startX + (i + 1) * halfCycle, endX);
15729
+ const x0 = startX + i * actualHalfCycle;
15730
+ const x1 = i === numHalfCycles - 1 ? endX : startX + (i + 1) * actualHalfCycle;
15595
15731
  const peak = i % 2 === 0 ? yCenter - cpDistanceY : yCenter + cpDistanceY;
15596
15732
  const segLen = x1 - x0;
15597
15733
  const cp1x = x0 + segLen / 3;
@@ -15609,7 +15745,7 @@ var DividerImpl = React67__namespace.forwardRef(
15609
15745
  insetStart = "standard",
15610
15746
  waveConfig,
15611
15747
  decorative = false,
15612
- animate: animate5 = true,
15748
+ animate: animate7 = true,
15613
15749
  className,
15614
15750
  style
15615
15751
  } = _b, props = __objRest(_b, [
@@ -15625,7 +15761,7 @@ var DividerImpl = React67__namespace.forwardRef(
15625
15761
  ]);
15626
15762
  var _a2, _b2, _c;
15627
15763
  const reducedMotion = react.useReducedMotion();
15628
- const shouldAnimate = animate5 && !reducedMotion;
15764
+ const shouldAnimate = animate7 && !reducedMotion;
15629
15765
  const effectiveShape = shape === "wavy" && orientation === "vertical" ? "flat" : shape;
15630
15766
  if (shape === "wavy" && orientation === "vertical") {
15631
15767
  console.warn(
@@ -17366,7 +17502,7 @@ var ListItemImpl = React67__namespace.forwardRef(
17366
17502
  "cursor-grab active:cursor-grabbing text-m3-on-surface-variant p-2 -mr-2"
17367
17503
  )
17368
17504
  }, attributes), listeners), {
17369
- children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "material-symbols-outlined text-[24px]", children: "drag_handle" })
17505
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "material-symbols-rounded text-[24px]", children: "drag_handle" })
17370
17506
  })
17371
17507
  );
17372
17508
  }
@@ -18719,6 +18855,7 @@ var NavigationRailComponent = React67__namespace.forwardRef(
18719
18855
  react.m.div,
18720
18856
  {
18721
18857
  layout: true,
18858
+ transition: SPRING_TRANSITION,
18722
18859
  className: cn(
18723
18860
  "flex w-full flex-col justify-start shrink-0 empty:hidden",
18724
18861
  isExpanded ? "items-start px-3" : "items-center",
@@ -19025,6 +19162,7 @@ function SearchBar({
19025
19162
  onSearch,
19026
19163
  active,
19027
19164
  onActiveChange,
19165
+ showLeadingIcon = true,
19028
19166
  leadingIcon,
19029
19167
  trailingIcon,
19030
19168
  avatar,
@@ -19087,7 +19225,7 @@ function SearchBar({
19087
19225
  layoutId: shouldReduceMotion ? void 0 : searchId,
19088
19226
  transition: shouldReduceMotion ? void 0 : SEARCH_BAR_EXPAND_SPRING,
19089
19227
  className: cn(
19090
- "relative group select-none",
19228
+ "relative group select-none rounded-full",
19091
19229
  SEARCH_ELEVATION.level3,
19092
19230
  className
19093
19231
  ),
@@ -19127,7 +19265,7 @@ function SearchBar({
19127
19265
  "aria-label": ariaLabel,
19128
19266
  className: "relative flex h-full items-center gap-2 rounded-full px-4",
19129
19267
  children: /* @__PURE__ */ jsxRuntime.jsxs("form", { className: "contents", onSubmit: handleFormSubmit, children: [
19130
- /* @__PURE__ */ jsxRuntime.jsx(
19268
+ showLeadingIcon && /* @__PURE__ */ jsxRuntime.jsx(
19131
19269
  "span",
19132
19270
  {
19133
19271
  className: "flex shrink-0 items-center justify-center",
@@ -19334,6 +19472,7 @@ function SearchViewDocked({
19334
19472
  onSearch,
19335
19473
  active,
19336
19474
  onActiveChange,
19475
+ showLeadingIcon = true,
19337
19476
  leadingIcon,
19338
19477
  trailingIcon,
19339
19478
  avatar,
@@ -19390,7 +19529,7 @@ function SearchViewDocked({
19390
19529
  className: "flex items-center gap-2 px-4",
19391
19530
  style: { height: SearchTokens.heights.dockedHeader },
19392
19531
  children: /* @__PURE__ */ jsxRuntime.jsxs("form", { className: "contents", onSubmit: handleFormSubmit, children: [
19393
- /* @__PURE__ */ jsxRuntime.jsx(
19532
+ showLeadingIcon && /* @__PURE__ */ jsxRuntime.jsx(
19394
19533
  "span",
19395
19534
  {
19396
19535
  className: "flex shrink-0 items-center justify-center",
@@ -19485,6 +19624,7 @@ function SearchViewFullScreen({
19485
19624
  onSearch,
19486
19625
  active,
19487
19626
  onActiveChange,
19627
+ showCloseButton = true,
19488
19628
  leadingIcon,
19489
19629
  trailingIcon,
19490
19630
  avatar,
@@ -19551,7 +19691,7 @@ function SearchViewFullScreen({
19551
19691
  className: "flex shrink-0 items-center gap-2 px-4",
19552
19692
  style: { height: SearchTokens.heights.fullScreenHeader },
19553
19693
  children: /* @__PURE__ */ jsxRuntime.jsxs("form", { className: "contents", onSubmit: handleFormSubmit, children: [
19554
- /* @__PURE__ */ jsxRuntime.jsx(
19694
+ showCloseButton && /* @__PURE__ */ jsxRuntime.jsx(
19555
19695
  IconButton,
19556
19696
  {
19557
19697
  size: "sm",
@@ -19652,6 +19792,8 @@ function SearchComponent({
19652
19792
  variant = "docked",
19653
19793
  styleType = "contained",
19654
19794
  hasGap = false,
19795
+ showLeadingIcon = true,
19796
+ showCloseButton = true,
19655
19797
  leadingIcon,
19656
19798
  trailingIcon,
19657
19799
  avatar,
@@ -19680,6 +19822,7 @@ function SearchComponent({
19680
19822
  onSearch,
19681
19823
  active,
19682
19824
  onActiveChange,
19825
+ showLeadingIcon,
19683
19826
  leadingIcon,
19684
19827
  trailingIcon,
19685
19828
  avatar,
@@ -19696,6 +19839,7 @@ function SearchComponent({
19696
19839
  variant === "fullscreen" ? /* @__PURE__ */ jsxRuntime.jsx(
19697
19840
  SearchViewFullScreen,
19698
19841
  __spreadProps(__spreadValues({}, sharedProps), {
19842
+ showCloseButton,
19699
19843
  styleType,
19700
19844
  viewClassName,
19701
19845
  children
@@ -20991,7 +21135,7 @@ function useShapeMorph({
20991
21135
  currentProgressRef.current = p;
20992
21136
  setClipPath(interpolatePath(morph, p, width, height));
20993
21137
  }, [scrollProgress, morphOn, morph, width, height]);
20994
- const animate5 = React67.useCallback(
21138
+ const animate7 = React67.useCallback(
20995
21139
  (timestamp) => {
20996
21140
  if (!morph) return;
20997
21141
  const elapsed = timestamp - startTimeRef.current;
@@ -21002,7 +21146,7 @@ function useShapeMorph({
21002
21146
  currentProgressRef.current = progress;
21003
21147
  setClipPath(interpolatePath(morph, progress, width, height));
21004
21148
  if (rawT < 1) {
21005
- animRef.current = requestAnimationFrame(animate5);
21149
+ animRef.current = requestAnimationFrame(animate7);
21006
21150
  } else {
21007
21151
  animRef.current = null;
21008
21152
  }
@@ -21021,9 +21165,9 @@ function useShapeMorph({
21021
21165
  startProgressRef.current = currentProgressRef.current;
21022
21166
  targetProgressRef.current = toProgress;
21023
21167
  startTimeRef.current = performance.now();
21024
- animRef.current = requestAnimationFrame(animate5);
21168
+ animRef.current = requestAnimationFrame(animate7);
21025
21169
  },
21026
- [morph, animate5, width, height]
21170
+ [morph, animate7, width, height]
21027
21171
  );
21028
21172
  React67.useEffect(() => {
21029
21173
  return () => {