@bug-on/m3-expressive 1.2.4 → 1.2.6

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 (51) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +128 -41
  3. package/dist/buttons.d.mts +1 -1
  4. package/dist/buttons.d.ts +1 -1
  5. package/dist/buttons.js +59 -45
  6. package/dist/buttons.js.map +1 -1
  7. package/dist/buttons.mjs +59 -45
  8. package/dist/buttons.mjs.map +1 -1
  9. package/dist/core.js +54 -40
  10. package/dist/core.js.map +1 -1
  11. package/dist/core.mjs +54 -40
  12. package/dist/core.mjs.map +1 -1
  13. package/dist/feedback.js +53 -39
  14. package/dist/feedback.js.map +1 -1
  15. package/dist/feedback.mjs +53 -39
  16. package/dist/feedback.mjs.map +1 -1
  17. package/dist/forms.d.mts +2 -2
  18. package/dist/forms.d.ts +2 -2
  19. package/dist/index.d.mts +77 -6
  20. package/dist/index.d.ts +77 -6
  21. package/dist/index.js +5607 -5429
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +5506 -5329
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/layout.js +60 -46
  26. package/dist/layout.js.map +1 -1
  27. package/dist/layout.mjs +60 -46
  28. package/dist/layout.mjs.map +1 -1
  29. package/dist/navigation.d.mts +27 -7
  30. package/dist/navigation.d.ts +27 -7
  31. package/dist/navigation.js +481 -474
  32. package/dist/navigation.js.map +1 -1
  33. package/dist/navigation.mjs +473 -466
  34. package/dist/navigation.mjs.map +1 -1
  35. package/dist/overlays.d.mts +2 -2
  36. package/dist/overlays.d.ts +2 -2
  37. package/dist/overlays.js +53 -39
  38. package/dist/overlays.js.map +1 -1
  39. package/dist/overlays.mjs +53 -39
  40. package/dist/overlays.mjs.map +1 -1
  41. package/dist/pickers.js +53 -39
  42. package/dist/pickers.js.map +1 -1
  43. package/dist/pickers.mjs +53 -39
  44. package/dist/pickers.mjs.map +1 -1
  45. package/dist/{side-sheet-modal-Bd5Qqvp9.d.ts → side-sheet-modal-DdEZR6Vl.d.ts} +1 -1
  46. package/dist/{side-sheet-modal-64FGhDxL.d.mts → side-sheet-modal-Dgjt739k.d.mts} +1 -1
  47. package/dist/{split-button-trailing-uncheckable-DtxrcLxH.d.ts → split-button-trailing-uncheckable--BhNTEJw.d.ts} +5 -5
  48. package/dist/{split-button-trailing-uncheckable-BTWfIN2k.d.mts → split-button-trailing-uncheckable-DPJL3bO6.d.mts} +5 -5
  49. package/dist/{text-field-T4Rg-9Bw.d.mts → text-field-DWC7qOvp.d.mts} +128 -128
  50. package/dist/{text-field-T4Rg-9Bw.d.ts → text-field-DWC7qOvp.d.ts} +128 -128
  51. package/package.json +3 -3
package/dist/layout.mjs CHANGED
@@ -515,24 +515,36 @@ function generateWavyCircularPath(center, radius, amplitude, wavelength) {
515
515
  if (i === 0) d += `M ${xAt(t0).toFixed(2)} ${yAt(t0).toFixed(2)}`;
516
516
  d += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${xAt(t1).toFixed(2)} ${yAt(t1).toFixed(2)}`;
517
517
  }
518
- d += " Z";
519
518
  return d;
520
519
  }
521
520
  function getSinePath(startX, endX, phase, wl, amp) {
522
521
  if (startX >= endX) return "";
523
- let d = "";
524
- const step = amp === 0 ? Math.max(10, endX - startX) : 1;
525
- const yStart = Math.sin((startX + phase) / wl * 2 * Math.PI) * amp;
526
- d += `M ${startX.toFixed(2)} ${yStart.toFixed(2)}`;
527
- let nextX = Math.ceil(startX / step) * step;
528
- if (nextX === startX) nextX += step;
529
- while (nextX < endX) {
530
- const y = Math.sin((nextX + phase) / wl * 2 * Math.PI) * amp;
531
- d += ` L ${nextX.toFixed(2)} ${y.toFixed(2)}`;
532
- nextX += step;
533
- }
534
- const yEnd = Math.sin((endX + phase) / wl * 2 * Math.PI) * amp;
535
- d += ` L ${endX.toFixed(2)} ${yEnd.toFixed(2)}`;
522
+ if (amp <= 0.01) {
523
+ return `M ${startX.toFixed(2)} 0 L ${endX.toFixed(2)} 0`;
524
+ }
525
+ const safeWl = Math.max(1, wl);
526
+ const k = 2 * Math.PI / safeWl;
527
+ const phi = phase / safeWl * 2 * Math.PI;
528
+ const yAt = (x) => amp * Math.sin(k * x + phi);
529
+ const dyAt = (x) => amp * k * Math.cos(k * x + phi);
530
+ const step = safeWl / 4;
531
+ let d = `M ${startX.toFixed(2)} ${yAt(startX).toFixed(2)}`;
532
+ let currentX = startX;
533
+ while (currentX < endX) {
534
+ const nextX = Math.min(endX, currentX + step);
535
+ const dx = nextX - currentX;
536
+ const scale = dx / 3;
537
+ const y0 = yAt(currentX);
538
+ const dy0 = dyAt(currentX);
539
+ const y1 = yAt(nextX);
540
+ const dy1 = dyAt(nextX);
541
+ const cp1x = currentX + scale;
542
+ const cp1y = y0 + scale * dy0;
543
+ const cp2x = nextX - scale;
544
+ const cp2y = y1 - scale * dy1;
545
+ d += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${nextX.toFixed(2)} ${y1.toFixed(2)}`;
546
+ currentX = nextX;
547
+ }
536
548
  return d;
537
549
  }
538
550
  var CircularProgress = React18.forwardRef(
@@ -687,16 +699,13 @@ var CircularProgress = React18.forwardRef(
687
699
  position: "absolute",
688
700
  inset: 0,
689
701
  overflow: "visible",
690
- rotate: "-90deg",
691
702
  transformOrigin: "center"
692
703
  },
693
- animate: { rotate: ["-90deg", "270deg"] },
704
+ animate: { rotate: [0, 360] },
694
705
  transition: {
695
- rotate: {
696
- duration: 2 / Math.max(0.1, crawlerSpeed),
697
- repeat: Number.POSITIVE_INFINITY,
698
- ease: "linear"
699
- }
706
+ duration: 2 / Math.max(0.1, crawlerSpeed),
707
+ repeat: Number.POSITIVE_INFINITY,
708
+ ease: "linear"
700
709
  },
701
710
  children: [
702
711
  /* @__PURE__ */ jsx(
@@ -709,17 +718,16 @@ var CircularProgress = React18.forwardRef(
709
718
  stroke: bgTrackColor,
710
719
  strokeWidth: trackHeight,
711
720
  strokeLinecap: "round",
712
- style: { originX: "50%", originY: "50%" },
713
721
  animate: {
714
722
  pathLength: [
715
- Math.max(1e-3, 1 - 0.1 - 2 * gapForTrack),
716
- Math.max(1e-3, 1 - 0.75 - 2 * gapForTrack),
717
- Math.max(1e-3, 1 - 0.1 - 2 * gapForTrack)
723
+ Math.max(1e-3, 0.9 - 2 * gapForTrack),
724
+ Math.max(1e-3, 0.25 - 2 * gapForTrack),
725
+ Math.max(1e-3, 0.9 - 2 * gapForTrack)
718
726
  ],
719
- rotate: [
720
- `${(0.1 + gapForTrack) * 360}deg`,
721
- `${(1 + gapForTrack) * 360}deg`,
722
- `${(1.1 + gapForTrack) * 360}deg`
727
+ pathOffset: [
728
+ 0.1 + gapForTrack,
729
+ 0.75 + gapForTrack,
730
+ 0.1 + gapForTrack
723
731
  ]
724
732
  },
725
733
  transition: {
@@ -737,10 +745,9 @@ var CircularProgress = React18.forwardRef(
737
745
  stroke: activeColor,
738
746
  strokeWidth: trackHeight,
739
747
  strokeLinecap: "round",
740
- style: { originX: "50%", originY: "50%" },
741
748
  animate: {
742
749
  pathLength: [0.1, 0.75, 0.1],
743
- rotate: ["0deg", "90deg", "360deg"]
750
+ pathOffset: [0, 0.65, 1]
744
751
  },
745
752
  transition: {
746
753
  duration: 2 / Math.max(0.1, crawlerSpeed),
@@ -758,10 +765,9 @@ var CircularProgress = React18.forwardRef(
758
765
  stroke: activeColor,
759
766
  strokeWidth: trackHeight,
760
767
  strokeLinecap: "round",
761
- style: { originX: "50%", originY: "50%" },
762
768
  animate: {
763
769
  pathLength: [0.1, 0.75, 0.1],
764
- rotate: ["0deg", "90deg", "360deg"]
770
+ pathOffset: [0, 0.65, 1]
765
771
  },
766
772
  transition: {
767
773
  duration: 2 / Math.max(0.1, crawlerSpeed),
@@ -934,6 +940,12 @@ var WavyLinearTrack = React18.memo(function WavyLinearTrack2({
934
940
  duration: 0.5
935
941
  });
936
942
  animate(fractionMV, fraction, { duration: 0.4, ease: [0.2, 0, 0, 1] });
943
+ } else {
944
+ animate(amplitudeMV, amplitude, {
945
+ type: "spring",
946
+ bounce: 0,
947
+ duration: 0.5
948
+ });
937
949
  }
938
950
  }, [
939
951
  clampedValue,
@@ -947,10 +959,10 @@ var WavyLinearTrack = React18.memo(function WavyLinearTrack2({
947
959
  1,
948
960
  isDeterminate ? wavelength : indeterminateWavelength
949
961
  );
950
- const trackAmp = trackShape === "wavy" ? amplitude : 0;
951
962
  useAnimationFrame((time) => {
952
963
  if (width === 0) return;
953
964
  const currentAmp = amplitudeMV.get();
965
+ const trackAmp = trackShape === "wavy" ? amplitude : 0;
954
966
  const phase = time / 1e3 * waveSpeed * activeWavelength;
955
967
  const capWidth = trackHeight / 2;
956
968
  let activePathD = "";
@@ -1051,7 +1063,7 @@ var WavyLinearTrack = React18.memo(function WavyLinearTrack2({
1051
1063
  "div",
1052
1064
  {
1053
1065
  ref: containerRef,
1054
- className: "relative w-full overflow-hidden",
1066
+ className: "relative w-full",
1055
1067
  style: { height: svgHeight },
1056
1068
  children: width > 0 && /* @__PURE__ */ jsxs(
1057
1069
  "svg",
@@ -1105,7 +1117,7 @@ var LinearProgress = React18.forwardRef(
1105
1117
  waveSpeed = 1,
1106
1118
  crawlerSpeed = 1,
1107
1119
  determinateAnimation = "md3",
1108
- indeterminateAnimation = "continuous",
1120
+ indeterminateAnimation = "md3",
1109
1121
  gapSize = 4,
1110
1122
  showStopIndicator = "auto",
1111
1123
  color,
@@ -1142,15 +1154,15 @@ var LinearProgress = React18.forwardRef(
1142
1154
  setIsRtl(dir === "rtl");
1143
1155
  }
1144
1156
  }, []);
1145
- const isWavy = shape === "wavy";
1146
1157
  const resolvedTrackShape = trackShape != null ? trackShape : shape;
1158
+ const isWavy = shape === "wavy" || resolvedTrackShape === "wavy";
1147
1159
  const effectiveAmplitude = React18.useMemo(() => amplitude != null ? amplitude : 3, [amplitude]);
1148
1160
  const svgHeight = React18.useMemo(
1149
1161
  () => isWavy ? trackHeight + effectiveAmplitude * 2 : trackHeight,
1150
1162
  [isWavy, trackHeight, effectiveAmplitude]
1151
1163
  );
1152
1164
  const shouldShowStop = React18.useMemo(
1153
- () => isDeterminate && resolvedTrackShape === "flat" && (showStopIndicator === true || showStopIndicator === "auto" && isDeterminate),
1165
+ () => isDeterminate && resolvedTrackShape === "flat" && showStopIndicator !== false,
1154
1166
  [isDeterminate, resolvedTrackShape, showStopIndicator]
1155
1167
  );
1156
1168
  const stopSize = React18.useMemo(
@@ -1160,6 +1172,8 @@ var LinearProgress = React18.forwardRef(
1160
1172
  const stopOffset = (trackHeight - stopSize) / 2;
1161
1173
  const activeColor = color || "var(--md-sys-color-indicator-active)";
1162
1174
  const bgTrackColor = trackColor || "var(--md-sys-color-indicator-track)";
1175
+ const useWavyTrack = isWavy || !isDeterminate;
1176
+ const trackAmp = isWavy ? effectiveAmplitude : 0;
1163
1177
  return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsxs(
1164
1178
  "div",
1165
1179
  __spreadProps(__spreadValues({
@@ -1176,12 +1190,12 @@ var LinearProgress = React18.forwardRef(
1176
1190
  style: { height: svgHeight }
1177
1191
  }, restProps), {
1178
1192
  children: [
1179
- isWavy ? /* @__PURE__ */ jsx(
1193
+ useWavyTrack ? /* @__PURE__ */ jsx(
1180
1194
  WavyLinearTrack,
1181
1195
  {
1182
1196
  trackHeight,
1183
1197
  svgHeight,
1184
- amplitude: effectiveAmplitude,
1198
+ amplitude: trackAmp,
1185
1199
  wavelength,
1186
1200
  indeterminateWavelength,
1187
1201
  activeColor,
@@ -1265,6 +1279,7 @@ function TouchTarget() {
1265
1279
  }
1266
1280
  var BUTTON_SHAPE_MORPH_SPRING = FAST_SPATIAL_SPRING;
1267
1281
  var BUTTON_RADIUS_SPRING = FAST_EFFECTS_SPRING;
1282
+ var ROUND_SHAPE_RADIUS = 9999;
1268
1283
  var BUTTON_SIZE_TOKENS = {
1269
1284
  xs: {
1270
1285
  height: "2rem",
@@ -1283,7 +1298,7 @@ var BUTTON_SIZE_TOKENS = {
1283
1298
  // 12dp
1284
1299
  pressedShapeRadius: cornerRadius.small,
1285
1300
  // 8dp
1286
- roundShapeRadius: 16
1301
+ roundShapeRadius: ROUND_SHAPE_RADIUS
1287
1302
  },
1288
1303
  sm: {
1289
1304
  height: "2.5rem",
@@ -1302,7 +1317,7 @@ var BUTTON_SIZE_TOKENS = {
1302
1317
  // 12dp
1303
1318
  pressedShapeRadius: cornerRadius.small,
1304
1319
  // 8dp
1305
- roundShapeRadius: 20
1320
+ roundShapeRadius: ROUND_SHAPE_RADIUS
1306
1321
  },
1307
1322
  md: {
1308
1323
  height: "3.5rem",
@@ -1321,7 +1336,7 @@ var BUTTON_SIZE_TOKENS = {
1321
1336
  // 16dp
1322
1337
  pressedShapeRadius: cornerRadius.medium,
1323
1338
  // 12dp
1324
- roundShapeRadius: 28
1339
+ roundShapeRadius: ROUND_SHAPE_RADIUS
1325
1340
  },
1326
1341
  lg: {
1327
1342
  height: "6rem",
@@ -1340,7 +1355,7 @@ var BUTTON_SIZE_TOKENS = {
1340
1355
  // 28dp
1341
1356
  pressedShapeRadius: cornerRadius.large,
1342
1357
  // 16dp
1343
- roundShapeRadius: 48
1358
+ roundShapeRadius: ROUND_SHAPE_RADIUS
1344
1359
  },
1345
1360
  xl: {
1346
1361
  height: "8.5rem",
@@ -1359,7 +1374,7 @@ var BUTTON_SIZE_TOKENS = {
1359
1374
  // 28dp
1360
1375
  pressedShapeRadius: cornerRadius.large,
1361
1376
  // 16dp
1362
- roundShapeRadius: 68
1377
+ roundShapeRadius: ROUND_SHAPE_RADIUS
1363
1378
  }
1364
1379
  };
1365
1380
  var BUTTON_TYPOGRAPHY_TOKENS = {
@@ -1711,7 +1726,6 @@ var ButtonComponent = React18.forwardRef(
1711
1726
  m.button,
1712
1727
  __spreadProps(__spreadValues({
1713
1728
  ref,
1714
- layout: true,
1715
1729
  type: "button",
1716
1730
  "aria-pressed": isToggle ? isSelected : void 0,
1717
1731
  "aria-label": computedAriaLabel,