@bug-on/m3-expressive 1.2.6 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/buttons.d.mts +3 -3
  3. package/dist/buttons.d.ts +3 -3
  4. package/dist/buttons.js +230 -82
  5. package/dist/buttons.js.map +1 -1
  6. package/dist/buttons.mjs +231 -83
  7. package/dist/buttons.mjs.map +1 -1
  8. package/dist/{core-D4048_K5.d.mts → core-CAU8g2HY.d.mts} +1 -1
  9. package/dist/{core-Bc5Wj_pc.d.ts → core-DRrLnsnJ.d.ts} +1 -1
  10. package/dist/core.d.mts +2 -2
  11. package/dist/core.d.ts +2 -2
  12. package/dist/core.js +300 -152
  13. package/dist/core.js.map +1 -1
  14. package/dist/core.mjs +283 -135
  15. package/dist/core.mjs.map +1 -1
  16. package/dist/feedback.d.mts +40 -6
  17. package/dist/feedback.d.ts +40 -6
  18. package/dist/feedback.js +313 -165
  19. package/dist/feedback.js.map +1 -1
  20. package/dist/feedback.mjs +291 -143
  21. package/dist/feedback.mjs.map +1 -1
  22. package/dist/{icon-button-CSsDmuQC.d.mts → icon-button-CqdQBsRe.d.ts} +11 -5
  23. package/dist/{icon-button-CSsDmuQC.d.ts → icon-button-USJo7AqO.d.mts} +11 -5
  24. package/dist/index.d.mts +6 -6
  25. package/dist/index.d.ts +6 -6
  26. package/dist/index.js +511 -235
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +511 -236
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/layout.d.mts +1 -1
  31. package/dist/layout.d.ts +1 -1
  32. package/dist/layout.js +221 -105
  33. package/dist/layout.js.map +1 -1
  34. package/dist/layout.mjs +222 -106
  35. package/dist/layout.mjs.map +1 -1
  36. package/dist/{md3-Dty-Qcad.d.mts → md3-D0_Z7IXj.d.mts} +9 -1
  37. package/dist/{md3-Dty-Qcad.d.ts → md3-D0_Z7IXj.d.ts} +9 -1
  38. package/dist/navigation.d.mts +103 -33
  39. package/dist/navigation.d.ts +103 -33
  40. package/dist/navigation.js +507 -199
  41. package/dist/navigation.js.map +1 -1
  42. package/dist/navigation.mjs +508 -201
  43. package/dist/navigation.mjs.map +1 -1
  44. package/dist/overlays.js +354 -206
  45. package/dist/overlays.js.map +1 -1
  46. package/dist/overlays.mjs +317 -169
  47. package/dist/overlays.mjs.map +1 -1
  48. package/dist/pickers.js +362 -214
  49. package/dist/pickers.js.map +1 -1
  50. package/dist/pickers.mjs +330 -182
  51. package/dist/pickers.mjs.map +1 -1
  52. package/dist/{split-button-trailing-uncheckable-DPJL3bO6.d.mts → split-button-trailing-uncheckable-26qlZvKT.d.mts} +10 -7
  53. package/dist/{split-button-trailing-uncheckable--BhNTEJw.d.ts → split-button-trailing-uncheckable-CXUVrH64.d.ts} +10 -7
  54. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -6,8 +6,8 @@ var materialColorUtilities = require('@material/material-color-utilities');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
  var clsx = require('clsx');
8
8
  var tailwindMerge = require('tailwind-merge');
9
- var RxContextMenu = require('@radix-ui/react-context-menu');
10
9
  var react = require('motion/react');
10
+ var RxContextMenu = require('@radix-ui/react-context-menu');
11
11
  var m3Tokens = require('@bug-on/m3-tokens');
12
12
  var DropdownMenu = require('@radix-ui/react-dropdown-menu');
13
13
  var reactSlot = require('@radix-ui/react-slot');
@@ -2855,6 +2855,52 @@ function interpolatePath(morph, progress, width, height) {
2855
2855
  function fmt(v) {
2856
2856
  return Number(v.toFixed(4)).toString();
2857
2857
  }
2858
+ function getMaskGradient(direction) {
2859
+ switch (direction) {
2860
+ case "bottom":
2861
+ 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
+ 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
+ default:
2865
+ 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
+ }
2868
+ function FadingBlurMask({
2869
+ direction = "top",
2870
+ blurIntensity = 12,
2871
+ blurHeight = "100%",
2872
+ color = "var(--md-sys-color-surface)",
2873
+ className,
2874
+ style,
2875
+ children
2876
+ }) {
2877
+ const shouldReduceMotion = react.useReducedMotion();
2878
+ const activeBlur = shouldReduceMotion ? 0 : blurIntensity;
2879
+ const maskGradient = getMaskGradient(direction);
2880
+ const maskStyle = __spreadValues({
2881
+ position: "absolute",
2882
+ inset: 0,
2883
+ pointerEvents: "none",
2884
+ height: typeof blurHeight === "number" ? `${blurHeight}px` : blurHeight,
2885
+ backdropFilter: activeBlur > 0 ? `blur(${activeBlur}px)` : void 0,
2886
+ WebkitBackdropFilter: activeBlur > 0 ? `blur(${activeBlur}px)` : void 0,
2887
+ maskImage: maskGradient,
2888
+ WebkitMaskImage: maskGradient,
2889
+ backgroundColor: color
2890
+ }, style);
2891
+ return /* @__PURE__ */ jsxRuntime.jsx(
2892
+ "div",
2893
+ {
2894
+ "aria-hidden": "true",
2895
+ className: cn(
2896
+ "absolute inset-0 pointer-events-none z-0 rounded-[inherit]",
2897
+ className
2898
+ ),
2899
+ style: maskStyle,
2900
+ children
2901
+ }
2902
+ );
2903
+ }
2858
2904
 
2859
2905
  // src/ui/shared/motion-tokens.ts
2860
2906
  var FAST_SPATIAL_SPRING = {
@@ -4615,7 +4661,10 @@ function BottomAppBar({
4615
4661
  floatingActionButton,
4616
4662
  scrollBehavior = "visible",
4617
4663
  scrollElement,
4618
- className
4664
+ className,
4665
+ enableFadingBlur,
4666
+ blurIntensity,
4667
+ blurHeight
4619
4668
  }) {
4620
4669
  const shouldReduceMotion = react.useReducedMotion();
4621
4670
  const { isHidden } = useAppBarScroll({
@@ -4630,9 +4679,9 @@ function BottomAppBar({
4630
4679
  role: "navigation",
4631
4680
  "aria-label": "Bottom app bar",
4632
4681
  className: cn(
4633
- "fixed bottom-0 inset-x-0 z-50",
4682
+ "fixed bottom-0 inset-x-0 z-50 overflow-hidden rounded-[inherit]",
4634
4683
  "flex items-center",
4635
- "bg-m3-surface-container",
4684
+ !enableFadingBlur && "bg-m3-surface-container",
4636
4685
  "px-2",
4637
4686
  // minimal horizontal padding, icon buttons provide spacing
4638
4687
  "elevation-2",
@@ -4645,8 +4694,19 @@ function BottomAppBar({
4645
4694
  animate: { y: translateY },
4646
4695
  transition: hideTransition,
4647
4696
  children: [
4648
- actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center flex-1", children: actions }),
4649
- floatingActionButton && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 ml-auto mr-2", children: floatingActionButton })
4697
+ enableFadingBlur && /* @__PURE__ */ jsxRuntime.jsx(
4698
+ FadingBlurMask,
4699
+ {
4700
+ direction: "bottom",
4701
+ blurIntensity,
4702
+ blurHeight,
4703
+ color: "var(--md-sys-color-surface-container)"
4704
+ }
4705
+ ),
4706
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 flex items-center w-full h-full", children: [
4707
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center flex-1", children: actions }),
4708
+ floatingActionButton && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 ml-auto mr-2", children: floatingActionButton })
4709
+ ] })
4650
4710
  ]
4651
4711
  }
4652
4712
  );
@@ -4754,7 +4814,10 @@ function LargeFlexibleAppBar({
4754
4814
  headerContent,
4755
4815
  collapsedHeight = AppBarTokens.heights.flexibleCollapsed,
4756
4816
  expandedHeight,
4757
- className
4817
+ className,
4818
+ enableFadingBlur,
4819
+ blurIntensity,
4820
+ blurHeight
4758
4821
  }) {
4759
4822
  var _a, _b, _c;
4760
4823
  const resolvedExpandedHeight = expandedHeight != null ? expandedHeight : subtitle ? AppBarTokens.heights.largeFlexWithSubtitleExpanded : AppBarTokens.heights.largeFlexExpanded;
@@ -4784,15 +4847,28 @@ function LargeFlexibleAppBar({
4784
4847
  {
4785
4848
  role: "banner",
4786
4849
  className: cn(
4787
- "fixed top-0 inset-x-0 z-50 flex flex-col overflow-hidden",
4850
+ "fixed top-0 inset-x-0 z-50 flex flex-col overflow-hidden rounded-[inherit]",
4788
4851
  className
4789
4852
  ),
4790
- style: { height, backgroundColor: currentBg, transition: cssTransition },
4853
+ style: {
4854
+ height,
4855
+ backgroundColor: enableFadingBlur ? "transparent" : currentBg,
4856
+ transition: cssTransition
4857
+ },
4791
4858
  children: [
4859
+ enableFadingBlur && /* @__PURE__ */ jsxRuntime.jsx(
4860
+ FadingBlurMask,
4861
+ {
4862
+ direction: "top",
4863
+ blurIntensity,
4864
+ blurHeight,
4865
+ color: currentBg
4866
+ }
4867
+ ),
4792
4868
  /* @__PURE__ */ jsxRuntime.jsxs(
4793
4869
  "div",
4794
4870
  {
4795
- className: "flex items-center px-1 shrink-0",
4871
+ className: "relative z-10 flex items-center px-1 shrink-0",
4796
4872
  style: { height: collapsedHeight },
4797
4873
  children: [
4798
4874
  navigationIcon && /* @__PURE__ */ jsxRuntime.jsx(
@@ -4834,7 +4910,7 @@ function LargeFlexibleAppBar({
4834
4910
  "div",
4835
4911
  {
4836
4912
  className: cn(
4837
- "flex flex-col flex-1 px-4 pb-4 justify-end",
4913
+ "relative z-10 flex flex-col flex-1 px-4 pb-3 justify-end",
4838
4914
  isCentered ? "items-center" : "items-start"
4839
4915
  ),
4840
4916
  children: [
@@ -4887,7 +4963,10 @@ function MediumFlexibleAppBar({
4887
4963
  headerContent,
4888
4964
  collapsedHeight = AppBarTokens.heights.flexibleCollapsed,
4889
4965
  expandedHeight,
4890
- className
4966
+ className,
4967
+ enableFadingBlur,
4968
+ blurIntensity,
4969
+ blurHeight
4891
4970
  }) {
4892
4971
  var _a, _b, _c;
4893
4972
  const resolvedExpandedHeight = expandedHeight != null ? expandedHeight : subtitle ? AppBarTokens.heights.mediumFlexWithSubtitleExpanded : AppBarTokens.heights.mediumFlexExpanded;
@@ -4917,15 +4996,28 @@ function MediumFlexibleAppBar({
4917
4996
  {
4918
4997
  role: "banner",
4919
4998
  className: cn(
4920
- "fixed top-0 inset-x-0 z-50 flex flex-col overflow-hidden",
4999
+ "fixed top-0 inset-x-0 z-50 flex flex-col overflow-hidden rounded-[inherit]",
4921
5000
  className
4922
5001
  ),
4923
- style: { height, backgroundColor: currentBg, transition: cssTransition },
5002
+ style: {
5003
+ height,
5004
+ backgroundColor: enableFadingBlur ? "transparent" : currentBg,
5005
+ transition: cssTransition
5006
+ },
4924
5007
  children: [
5008
+ enableFadingBlur && /* @__PURE__ */ jsxRuntime.jsx(
5009
+ FadingBlurMask,
5010
+ {
5011
+ direction: "top",
5012
+ blurIntensity,
5013
+ blurHeight,
5014
+ color: currentBg
5015
+ }
5016
+ ),
4925
5017
  /* @__PURE__ */ jsxRuntime.jsxs(
4926
5018
  "div",
4927
5019
  {
4928
- className: "flex items-center px-1 shrink-0",
5020
+ className: "relative z-10 flex items-center px-1 shrink-0",
4929
5021
  style: { height: collapsedHeight },
4930
5022
  children: [
4931
5023
  navigationIcon && /* @__PURE__ */ jsxRuntime.jsx(
@@ -4967,7 +5059,7 @@ function MediumFlexibleAppBar({
4967
5059
  "div",
4968
5060
  {
4969
5061
  className: cn(
4970
- "flex flex-col flex-1 px-4 pb-3 justify-end",
5062
+ "relative z-10 flex flex-col flex-1 px-4 pb-3 justify-end",
4971
5063
  isCentered ? "items-center" : "items-start"
4972
5064
  ),
4973
5065
  children: [
@@ -5014,7 +5106,7 @@ function SearchIcon({ className }) {
5014
5106
  "span",
5015
5107
  {
5016
5108
  className: cn(
5017
- "material-symbols-rounded text-[20px] leading-none select-none",
5109
+ "material-symbols-rounded text-[20px] leading-none select-none flex items-center justify-center",
5018
5110
  className
5019
5111
  ),
5020
5112
  "aria-hidden": "true",
@@ -5034,7 +5126,12 @@ function SearchAppBar({
5034
5126
  scrollBehavior = "pinned",
5035
5127
  scrollElement,
5036
5128
  searchBarId = "search-bar",
5037
- className
5129
+ searchBarVariant = "filled",
5130
+ searchBarHeight = 56,
5131
+ className,
5132
+ enableFadingBlur,
5133
+ blurIntensity,
5134
+ blurHeight
5038
5135
  }) {
5039
5136
  var _a, _b;
5040
5137
  const shouldReduceMotion = react.useReducedMotion();
@@ -5057,65 +5154,92 @@ function SearchAppBar({
5057
5154
  handleSearchClick();
5058
5155
  }
5059
5156
  };
5157
+ const searchBarBg = isScrolled ? "var(--md-sys-color-surface-container-highest)" : APP_BAR_COLORS.searchBarBg;
5158
+ const isOutlined = searchBarVariant === "outlined";
5060
5159
  return /* @__PURE__ */ jsxRuntime.jsxs(
5061
5160
  react.m.header,
5062
5161
  {
5063
5162
  role: "banner",
5064
5163
  className: cn(
5065
- "fixed top-0 inset-x-0 z-50 flex items-center gap-2 px-4",
5164
+ "fixed top-0 inset-x-0 z-50 flex items-center gap-2 px-4 overflow-hidden rounded-[inherit]",
5066
5165
  className
5067
5166
  ),
5068
5167
  style: {
5069
5168
  height: AppBarTokens.heights.small,
5070
- backgroundColor: currentBg,
5169
+ backgroundColor: enableFadingBlur ? "transparent" : currentBg,
5071
5170
  transition: cssTransition
5072
5171
  },
5073
5172
  children: [
5074
- navigationIcon && /* @__PURE__ */ jsxRuntime.jsx(
5075
- "div",
5173
+ enableFadingBlur && /* @__PURE__ */ jsxRuntime.jsx(
5174
+ FadingBlurMask,
5076
5175
  {
5077
- className: "shrink-0 flex items-center justify-center",
5078
- style: {
5079
- width: AppBarTokens.iconButtonTouchTarget,
5080
- height: AppBarTokens.iconButtonTouchTarget
5081
- },
5082
- children: navigationIcon
5176
+ direction: "top",
5177
+ blurIntensity,
5178
+ blurHeight,
5179
+ color: currentBg
5083
5180
  }
5084
5181
  ),
5085
- /* @__PURE__ */ jsxRuntime.jsxs(
5086
- react.m.div,
5087
- {
5088
- layoutId: shouldReduceMotion ? void 0 : searchBarId,
5089
- role: "search",
5090
- "aria-label": searchPlaceholder,
5091
- "aria-expanded": isSearchOpen,
5092
- tabIndex: 0,
5093
- className: "relative flex flex-1 items-center gap-2 rounded-full cursor-text h-10 px-4 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
5094
- onClick: handleSearchClick,
5095
- onKeyDown: handleKeyDown,
5096
- children: [
5097
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 rounded-full bg-m3-surface-container-high -z-10" }),
5098
- /* @__PURE__ */ jsxRuntime.jsx(
5099
- "span",
5100
- {
5101
- className: "shrink-0",
5102
- style: { color: APP_BAR_COLORS.searchBarContent },
5103
- children: leadingSearchIcon != null ? leadingSearchIcon : /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, {})
5104
- }
5105
- ),
5106
- /* @__PURE__ */ jsxRuntime.jsx(
5107
- "span",
5108
- {
5109
- className: "flex-1 text-[16px] leading-6 truncate select-none",
5110
- style: { color: APP_BAR_COLORS.searchBarContent },
5111
- children: searchValue != null ? searchValue : searchPlaceholder
5112
- }
5182
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 flex items-center gap-2 w-full h-full", children: [
5183
+ navigationIcon && /* @__PURE__ */ jsxRuntime.jsx(
5184
+ "div",
5185
+ {
5186
+ className: "shrink-0 flex items-center justify-center",
5187
+ style: {
5188
+ width: AppBarTokens.iconButtonTouchTarget,
5189
+ height: AppBarTokens.iconButtonTouchTarget
5190
+ },
5191
+ children: navigationIcon
5192
+ }
5193
+ ),
5194
+ /* @__PURE__ */ jsxRuntime.jsxs(
5195
+ react.m.div,
5196
+ {
5197
+ layoutId: shouldReduceMotion ? void 0 : searchBarId,
5198
+ role: "search",
5199
+ "aria-label": searchPlaceholder,
5200
+ "aria-expanded": isSearchOpen,
5201
+ tabIndex: 0,
5202
+ className: cn(
5203
+ "relative flex flex-1 items-center gap-2 rounded-full cursor-text px-4",
5204
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
5205
+ isOutlined && "border border-(--md-sys-color-outline)"
5113
5206
  ),
5114
- trailingSearchActions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center shrink-0", children: trailingSearchActions })
5115
- ]
5116
- }
5117
- ),
5118
- externalActions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center shrink-0", children: externalActions })
5207
+ style: { height: searchBarHeight },
5208
+ onClick: handleSearchClick,
5209
+ onKeyDown: handleKeyDown,
5210
+ children: [
5211
+ !isOutlined && /* @__PURE__ */ jsxRuntime.jsx(
5212
+ "div",
5213
+ {
5214
+ className: "absolute inset-0 rounded-full -z-10 transition-colors",
5215
+ style: {
5216
+ backgroundColor: searchBarBg,
5217
+ transition: cssTransition
5218
+ }
5219
+ }
5220
+ ),
5221
+ /* @__PURE__ */ jsxRuntime.jsx(
5222
+ "span",
5223
+ {
5224
+ className: "shrink-0 flex items-center justify-center h-full",
5225
+ style: { color: APP_BAR_COLORS.searchBarContent },
5226
+ children: leadingSearchIcon != null ? leadingSearchIcon : /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, {})
5227
+ }
5228
+ ),
5229
+ /* @__PURE__ */ jsxRuntime.jsx(
5230
+ "span",
5231
+ {
5232
+ className: "flex-1 text-[16px] leading-6 truncate select-none",
5233
+ style: { color: APP_BAR_COLORS.searchBarContent },
5234
+ children: searchValue != null ? searchValue : searchPlaceholder
5235
+ }
5236
+ ),
5237
+ trailingSearchActions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center shrink-0", children: trailingSearchActions })
5238
+ ]
5239
+ }
5240
+ ),
5241
+ externalActions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center shrink-0", children: externalActions })
5242
+ ] })
5119
5243
  ]
5120
5244
  }
5121
5245
  );
@@ -5288,9 +5412,11 @@ function SmallAppBarInner({
5288
5412
  navigationIcon,
5289
5413
  actions,
5290
5414
  colors,
5291
- className,
5292
5415
  currentBg,
5293
- cssTransition
5416
+ cssTransition,
5417
+ enableFadingBlur,
5418
+ blurIntensity,
5419
+ blurHeight
5294
5420
  }) {
5295
5421
  var _a, _b;
5296
5422
  const isCentered = titleAlignment === "center";
@@ -5298,57 +5424,81 @@ function SmallAppBarInner({
5298
5424
  react.m.header,
5299
5425
  {
5300
5426
  role: "banner",
5301
- className: cn("flex items-center px-1 h-full w-full", className),
5302
- style: { backgroundColor: currentBg, transition: cssTransition },
5427
+ className: "relative flex items-center px-1 h-full w-full overflow-hidden rounded-[inherit]",
5428
+ style: {
5429
+ backgroundColor: enableFadingBlur ? "transparent" : currentBg,
5430
+ transition: cssTransition
5431
+ },
5303
5432
  children: [
5304
- navigationIcon && /* @__PURE__ */ jsxRuntime.jsx(
5305
- "div",
5433
+ enableFadingBlur && /* @__PURE__ */ jsxRuntime.jsx(
5434
+ FadingBlurMask,
5306
5435
  {
5307
- className: "shrink-0 flex items-center justify-center",
5308
- style: {
5309
- width: AppBarTokens.iconButtonTouchTarget,
5310
- height: AppBarTokens.iconButtonTouchTarget
5311
- },
5312
- children: navigationIcon
5436
+ direction: "top",
5437
+ blurIntensity,
5438
+ blurHeight,
5439
+ color: currentBg
5313
5440
  }
5314
5441
  ),
5315
- /* @__PURE__ */ jsxRuntime.jsxs(
5316
- "div",
5317
- {
5318
- className: cn(
5319
- "flex-1 flex flex-col justify-center min-w-0",
5320
- isCentered ? "items-center" : "items-start",
5321
- !navigationIcon && "pl-4"
5322
- ),
5323
- children: [
5324
- /* @__PURE__ */ jsxRuntime.jsx(
5325
- "span",
5326
- {
5327
- className: cn(
5328
- appBarTypography.titleLarge,
5329
- "truncate w-full",
5330
- isCentered && "text-center"
5331
- ),
5332
- style: { color: (_a = colors == null ? void 0 : colors.titleColor) != null ? _a : APP_BAR_COLORS.title },
5333
- children: title
5334
- }
5442
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 flex items-center w-full h-full", children: [
5443
+ navigationIcon && /* @__PURE__ */ jsxRuntime.jsx(
5444
+ "div",
5445
+ {
5446
+ className: "shrink-0 flex items-center justify-center",
5447
+ style: {
5448
+ width: AppBarTokens.iconButtonTouchTarget,
5449
+ height: AppBarTokens.iconButtonTouchTarget
5450
+ },
5451
+ children: navigationIcon
5452
+ }
5453
+ ),
5454
+ /* @__PURE__ */ jsxRuntime.jsxs(
5455
+ "div",
5456
+ {
5457
+ className: cn(
5458
+ "flex-1 flex flex-col justify-center min-w-0",
5459
+ isCentered ? "items-center" : "items-start",
5460
+ !navigationIcon && !isCentered && "pl-4"
5335
5461
  ),
5336
- subtitle && /* @__PURE__ */ jsxRuntime.jsx(
5337
- "span",
5338
- {
5339
- className: cn(
5340
- appBarTypography.labelMedium,
5341
- "truncate w-full",
5342
- isCentered && "text-center"
5343
- ),
5344
- style: { color: (_b = colors == null ? void 0 : colors.subtitleColor) != null ? _b : APP_BAR_COLORS.subtitle },
5345
- children: subtitle
5346
- }
5347
- )
5348
- ]
5349
- }
5350
- ),
5351
- actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center shrink-0", children: actions })
5462
+ children: [
5463
+ /* @__PURE__ */ jsxRuntime.jsx(
5464
+ "span",
5465
+ {
5466
+ className: cn(
5467
+ appBarTypography.titleLarge,
5468
+ "truncate w-full",
5469
+ isCentered && "text-center"
5470
+ ),
5471
+ style: { color: (_a = colors == null ? void 0 : colors.titleColor) != null ? _a : APP_BAR_COLORS.title },
5472
+ children: title
5473
+ }
5474
+ ),
5475
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx(
5476
+ "span",
5477
+ {
5478
+ className: cn(
5479
+ appBarTypography.labelMedium,
5480
+ "truncate w-full",
5481
+ isCentered && "text-center"
5482
+ ),
5483
+ style: {
5484
+ color: (_b = colors == null ? void 0 : colors.subtitleColor) != null ? _b : APP_BAR_COLORS.subtitle
5485
+ },
5486
+ children: subtitle
5487
+ }
5488
+ )
5489
+ ]
5490
+ }
5491
+ ),
5492
+ isCentered && !actions && navigationIcon && /* @__PURE__ */ jsxRuntime.jsx(
5493
+ "div",
5494
+ {
5495
+ "aria-hidden": "true",
5496
+ style: { width: AppBarTokens.iconButtonTouchTarget },
5497
+ className: "shrink-0"
5498
+ }
5499
+ ),
5500
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center shrink-0", children: actions })
5501
+ ] })
5352
5502
  ]
5353
5503
  }
5354
5504
  );
@@ -5362,7 +5512,10 @@ function SmallAppBar({
5362
5512
  colors,
5363
5513
  scrollBehavior = "pinned",
5364
5514
  scrollElement,
5365
- className
5515
+ className,
5516
+ enableFadingBlur,
5517
+ blurIntensity,
5518
+ blurHeight
5366
5519
  }) {
5367
5520
  var _a, _b;
5368
5521
  const shouldReduceMotion = react.useReducedMotion();
@@ -5382,14 +5535,17 @@ function SmallAppBar({
5382
5535
  actions,
5383
5536
  colors,
5384
5537
  currentBg,
5385
- cssTransition
5538
+ cssTransition,
5539
+ enableFadingBlur,
5540
+ blurIntensity,
5541
+ blurHeight
5386
5542
  };
5387
5543
  const barHeight = AppBarTokens.heights.small;
5388
5544
  if (scrollBehavior !== "enterAlways") {
5389
5545
  return /* @__PURE__ */ jsxRuntime.jsx(
5390
5546
  "div",
5391
5547
  {
5392
- className: cn("fixed top-0 inset-x-0 z-50", className),
5548
+ className: cn("fixed top-0 inset-x-0 z-50 overflow-hidden", className),
5393
5549
  style: { height: barHeight },
5394
5550
  children: /* @__PURE__ */ jsxRuntime.jsx(SmallAppBarInner, __spreadValues({}, innerProps))
5395
5551
  }
@@ -5402,7 +5558,10 @@ function SmallAppBar({
5402
5558
  animate: { y: 0 },
5403
5559
  exit: { y: "-100%" },
5404
5560
  transition: shouldReduceMotion ? { duration: 0 } : APP_BAR_ENTER_ALWAYS_SPRING,
5405
- className: cn("fixed top-0 inset-x-0 z-50", className),
5561
+ className: cn(
5562
+ "fixed top-0 inset-x-0 z-50 overflow-hidden",
5563
+ className
5564
+ ),
5406
5565
  style: { height: barHeight },
5407
5566
  children: /* @__PURE__ */ jsxRuntime.jsx(SmallAppBarInner, __spreadValues({}, innerProps))
5408
5567
  },
@@ -5484,9 +5643,9 @@ function BadgedBox({
5484
5643
  badge,
5485
5644
  children,
5486
5645
  className,
5487
- badgeSize
5646
+ size
5488
5647
  }) {
5489
- const isLarge = badgeSize ? badgeSize === "large" : detectBadgeHasContent(badge);
5648
+ const isLarge = size ? size === "lg" : detectBadgeHasContent(badge);
5490
5649
  const badgePositionClass = isLarge ? "translate-x-[35%] -translate-y-[35%]" : "translate-x-[50%] -translate-y-[50%]";
5491
5650
  return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("relative inline-flex", className), children: [
5492
5651
  children,
@@ -5714,7 +5873,7 @@ function generateWavyCircularPath(center, radius, amplitude, wavelength) {
5714
5873
  if (i === 0) d += `M ${xAt(t0).toFixed(2)} ${yAt(t0).toFixed(2)}`;
5715
5874
  d += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${xAt(t1).toFixed(2)} ${yAt(t1).toFixed(2)}`;
5716
5875
  }
5717
- return d;
5876
+ return `${d} Z`;
5718
5877
  }
5719
5878
  function getSinePath(startX, endX, phase, wl, amp) {
5720
5879
  if (startX >= endX) return "";
@@ -5746,6 +5905,14 @@ function getSinePath(startX, endX, phase, wl, amp) {
5746
5905
  }
5747
5906
  return d;
5748
5907
  }
5908
+ var GLOBAL_ROTATION_DURATION = 6e3;
5909
+ var GLOBAL_ROTATION_TARGET = 1080;
5910
+ var ADDITIONAL_ROTATION_CYCLE = 1500;
5911
+ var ADDITIONAL_ROTATION_STEP = 90;
5912
+ var ADDITIONAL_ROTATION_EASE_DURATION = 500;
5913
+ var DEFAULT_MIN_PROGRESS = 0.1;
5914
+ var DEFAULT_MAX_PROGRESS = 0.8;
5915
+ var PROGRESS_CYCLE_DURATION = 1500;
5749
5916
  var CircularProgress = React62__namespace.forwardRef(
5750
5917
  (_a, ref) => {
5751
5918
  var _b = _a, {
@@ -5759,6 +5926,10 @@ var CircularProgress = React62__namespace.forwardRef(
5759
5926
  crawlerSpeed = 1,
5760
5927
  color,
5761
5928
  trackColor,
5929
+ showTrack = "auto",
5930
+ minProgress = DEFAULT_MIN_PROGRESS,
5931
+ maxProgress = DEFAULT_MAX_PROGRESS,
5932
+ amplitudeRange,
5762
5933
  className,
5763
5934
  "aria-label": ariaLabel
5764
5935
  } = _b, restProps = __objRest(_b, [
@@ -5772,6 +5943,10 @@ var CircularProgress = React62__namespace.forwardRef(
5772
5943
  "crawlerSpeed",
5773
5944
  "color",
5774
5945
  "trackColor",
5946
+ "showTrack",
5947
+ "minProgress",
5948
+ "maxProgress",
5949
+ "amplitudeRange",
5775
5950
  "className",
5776
5951
  "aria-label"
5777
5952
  ]);
@@ -5782,6 +5957,7 @@ var CircularProgress = React62__namespace.forwardRef(
5782
5957
  const activeColor = color || "var(--md-sys-color-indicator-active)";
5783
5958
  const bgTrackColor = trackColor || "var(--md-sys-color-indicator-track)";
5784
5959
  const isWavy = shape === "wavy";
5960
+ const shouldShowIndeterminateTrack = showTrack === "auto" ? isWavy : showTrack;
5785
5961
  const BASELINE_SIZE = 48;
5786
5962
  const scaleFactor = size / BASELINE_SIZE;
5787
5963
  const effectiveAmplitude = React62__namespace.useMemo(
@@ -5792,6 +5968,10 @@ var CircularProgress = React62__namespace.forwardRef(
5792
5968
  () => wavelength != null ? wavelength : 15 * scaleFactor,
5793
5969
  [wavelength, scaleFactor]
5794
5970
  );
5971
+ const resolvedAmplitudeRange = React62__namespace.useMemo(
5972
+ () => amplitudeRange != null ? amplitudeRange : [0, effectiveAmplitude],
5973
+ [amplitudeRange, effectiveAmplitude]
5974
+ );
5795
5975
  const wavyActivePath = React62__namespace.useMemo(
5796
5976
  () => isWavy ? generateWavyCircularPath(
5797
5977
  center,
@@ -5811,6 +5991,145 @@ var CircularProgress = React62__namespace.forwardRef(
5811
5991
  const trackLength = isDeterminate ? Math.max(1e-3, 1 - activeAngularFraction - 2 * gapForTrack) : 1;
5812
5992
  const ActiveCircleElem = react.m.circle;
5813
5993
  const ActivePathElem = react.m.path;
5994
+ const indeterminateSvgRef = React62__namespace.useRef(null);
5995
+ const indeterminateTrackRef = React62__namespace.useRef(null);
5996
+ const indeterminateActiveRef = React62__namespace.useRef(null);
5997
+ const indeterminateWavyTrackPathRef = React62__namespace.useRef(null);
5998
+ const indeterminateWavyActivePathRef = React62__namespace.useRef(null);
5999
+ const cachedPathLengthRef = React62__namespace.useRef(0);
6000
+ React62__namespace.useLayoutEffect(() => {
6001
+ if (!isWavy || !wavyActivePath) {
6002
+ cachedPathLengthRef.current = circumference;
6003
+ return;
6004
+ }
6005
+ const el = indeterminateActiveRef.current;
6006
+ if (el && "getTotalLength" in el) {
6007
+ try {
6008
+ const len = el.getTotalLength();
6009
+ if (len > 0) {
6010
+ cachedPathLengthRef.current = len;
6011
+ return;
6012
+ }
6013
+ } catch (e) {
6014
+ }
6015
+ }
6016
+ cachedPathLengthRef.current = circumference;
6017
+ }, [isWavy, circumference, wavyActivePath]);
6018
+ react.useAnimationFrame((time) => {
6019
+ if (isDeterminate) return;
6020
+ const safeCrawlerSpeed = Math.max(0.1, crawlerSpeed);
6021
+ const scaledTime = time * safeCrawlerSpeed;
6022
+ const globalCycle = scaledTime % GLOBAL_ROTATION_DURATION;
6023
+ const globalAngle = globalCycle / GLOBAL_ROTATION_DURATION * GLOBAL_ROTATION_TARGET;
6024
+ const additionalFullCycles = Math.floor(
6025
+ scaledTime / ADDITIONAL_ROTATION_CYCLE
6026
+ );
6027
+ const additionalCycleTime = scaledTime % ADDITIONAL_ROTATION_CYCLE;
6028
+ const additionalEaseT = Math.min(
6029
+ 1,
6030
+ additionalCycleTime / ADDITIONAL_ROTATION_EASE_DURATION
6031
+ );
6032
+ const additionalAngle = (additionalFullCycles + easeInOutCubic(additionalEaseT)) * ADDITIONAL_ROTATION_STEP;
6033
+ const totalRotation = globalAngle + additionalAngle;
6034
+ if (indeterminateSvgRef.current) {
6035
+ indeterminateSvgRef.current.style.transform = `rotate(${totalRotation - 90}deg)`;
6036
+ }
6037
+ const progressFullCycle = PROGRESS_CYCLE_DURATION * 2;
6038
+ const progressCycleTime = scaledTime % progressFullCycle;
6039
+ let progress;
6040
+ if (progressCycleTime < PROGRESS_CYCLE_DURATION) {
6041
+ const t = progressCycleTime / PROGRESS_CYCLE_DURATION;
6042
+ progress = minProgress + (maxProgress - minProgress) * easeInOutCubic(t);
6043
+ } else {
6044
+ const t = (progressCycleTime - PROGRESS_CYCLE_DURATION) / PROGRESS_CYCLE_DURATION;
6045
+ progress = maxProgress - (maxProgress - minProgress) * easeInOutCubic(t);
6046
+ }
6047
+ if (isWavy) {
6048
+ const amplitudeT = (progress - minProgress) / (maxProgress - minProgress);
6049
+ const currentAmplitude = resolvedAmplitudeRange[0] + (resolvedAmplitudeRange[1] - resolvedAmplitudeRange[0]) * amplitudeT;
6050
+ const dynamicPath = generateWavyCircularPath(
6051
+ center,
6052
+ radius,
6053
+ currentAmplitude,
6054
+ effectiveWavelength
6055
+ );
6056
+ if (indeterminateWavyActivePathRef.current) {
6057
+ indeterminateWavyActivePathRef.current.setAttribute("d", dynamicPath);
6058
+ }
6059
+ if (indeterminateWavyTrackPathRef.current) {
6060
+ indeterminateWavyTrackPathRef.current.setAttribute("d", dynamicPath);
6061
+ }
6062
+ const pathEl = indeterminateWavyActivePathRef.current;
6063
+ let totalLen = cachedPathLengthRef.current || circumference;
6064
+ if (pathEl) {
6065
+ try {
6066
+ const len = pathEl.getTotalLength();
6067
+ if (len > 0) totalLen = len;
6068
+ } catch (e) {
6069
+ }
6070
+ }
6071
+ const gapFrac = (gapSize + trackHeight) / totalLen;
6072
+ const activeLen = totalLen * progress;
6073
+ const activeOff = 0;
6074
+ if (indeterminateWavyActivePathRef.current) {
6075
+ indeterminateWavyActivePathRef.current.setAttribute(
6076
+ "stroke-dasharray",
6077
+ `${activeLen} ${totalLen}`
6078
+ );
6079
+ indeterminateWavyActivePathRef.current.setAttribute(
6080
+ "stroke-dashoffset",
6081
+ `${activeOff}`
6082
+ );
6083
+ }
6084
+ if (shouldShowIndeterminateTrack && indeterminateWavyTrackPathRef.current) {
6085
+ const trackStartFrac = progress + gapFrac;
6086
+ const trackLen = Math.max(
6087
+ 1e-3,
6088
+ totalLen * (1 - progress - 2 * gapFrac)
6089
+ );
6090
+ const trackOff = -totalLen * trackStartFrac;
6091
+ indeterminateWavyTrackPathRef.current.setAttribute(
6092
+ "stroke-dasharray",
6093
+ `${trackLen} ${totalLen}`
6094
+ );
6095
+ indeterminateWavyTrackPathRef.current.setAttribute(
6096
+ "stroke-dashoffset",
6097
+ `${trackOff}`
6098
+ );
6099
+ }
6100
+ } else {
6101
+ const totalLen = circumference;
6102
+ const activeLen = totalLen * progress;
6103
+ const activeOff = 0;
6104
+ if (indeterminateActiveRef.current) {
6105
+ indeterminateActiveRef.current.setAttribute(
6106
+ "stroke-dasharray",
6107
+ `${activeLen} ${totalLen}`
6108
+ );
6109
+ indeterminateActiveRef.current.setAttribute(
6110
+ "stroke-dashoffset",
6111
+ `${activeOff}`
6112
+ );
6113
+ }
6114
+ if (shouldShowIndeterminateTrack && indeterminateTrackRef.current) {
6115
+ const gapFrac = (gapSize + trackHeight) / totalLen;
6116
+ const trackStartFrac = progress + gapFrac;
6117
+ const trackLen = Math.max(
6118
+ 1e-3,
6119
+ totalLen * (1 - progress - 2 * gapFrac)
6120
+ );
6121
+ const trackOff = -totalLen * trackStartFrac;
6122
+ indeterminateTrackRef.current.setAttribute(
6123
+ "stroke-dasharray",
6124
+ `${trackLen} ${totalLen}`
6125
+ );
6126
+ indeterminateTrackRef.current.setAttribute(
6127
+ "stroke-dashoffset",
6128
+ `${trackOff}`
6129
+ );
6130
+ }
6131
+ }
6132
+ });
5814
6133
  return /* @__PURE__ */ jsxRuntime.jsx(
5815
6134
  "div",
5816
6135
  __spreadProps(__spreadValues({
@@ -5887,9 +6206,10 @@ var CircularProgress = React62__namespace.forwardRef(
5887
6206
  ]
5888
6207
  }
5889
6208
  ),
5890
- !isDeterminate && /* @__PURE__ */ jsxRuntime.jsxs(
5891
- react.m.svg,
6209
+ !isDeterminate && /* @__PURE__ */ jsxRuntime.jsx(
6210
+ "svg",
5892
6211
  {
6212
+ ref: indeterminateSvgRef,
5893
6213
  width: size,
5894
6214
  height: size,
5895
6215
  viewBox: `0 0 ${size} ${size}`,
@@ -5898,84 +6218,60 @@ var CircularProgress = React62__namespace.forwardRef(
5898
6218
  position: "absolute",
5899
6219
  inset: 0,
5900
6220
  overflow: "visible",
5901
- transformOrigin: "center"
5902
- },
5903
- animate: { rotate: [0, 360] },
5904
- transition: {
5905
- duration: 2 / Math.max(0.1, crawlerSpeed),
5906
- repeat: Number.POSITIVE_INFINITY,
5907
- ease: "linear"
6221
+ transformOrigin: "center",
6222
+ transform: "rotate(-90deg)"
5908
6223
  },
5909
- children: [
5910
- /* @__PURE__ */ jsxRuntime.jsx(
5911
- react.m.circle,
6224
+ children: isWavy ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6225
+ shouldShowIndeterminateTrack && /* @__PURE__ */ jsxRuntime.jsx(
6226
+ "path",
5912
6227
  {
5913
- cx: center,
5914
- cy: center,
5915
- r: radius,
6228
+ ref: indeterminateWavyTrackPathRef,
6229
+ d: wavyActivePath != null ? wavyActivePath : "",
5916
6230
  fill: "none",
5917
6231
  stroke: bgTrackColor,
5918
6232
  strokeWidth: trackHeight,
5919
- strokeLinecap: "round",
5920
- animate: {
5921
- pathLength: [
5922
- Math.max(1e-3, 0.9 - 2 * gapForTrack),
5923
- Math.max(1e-3, 0.25 - 2 * gapForTrack),
5924
- Math.max(1e-3, 0.9 - 2 * gapForTrack)
5925
- ],
5926
- pathOffset: [
5927
- 0.1 + gapForTrack,
5928
- 0.75 + gapForTrack,
5929
- 0.1 + gapForTrack
5930
- ]
5931
- },
5932
- transition: {
5933
- duration: 2 / Math.max(0.1, crawlerSpeed),
5934
- repeat: Number.POSITIVE_INFINITY,
5935
- ease: [0.4, 0, 0.2, 1]
5936
- }
6233
+ strokeLinecap: "round"
5937
6234
  }
5938
6235
  ),
5939
- isWavy ? /* @__PURE__ */ jsxRuntime.jsx(
5940
- ActivePathElem,
6236
+ /* @__PURE__ */ jsxRuntime.jsx(
6237
+ "path",
5941
6238
  {
6239
+ ref: indeterminateWavyActivePathRef,
5942
6240
  d: wavyActivePath != null ? wavyActivePath : "",
5943
6241
  fill: "none",
5944
6242
  stroke: activeColor,
5945
6243
  strokeWidth: trackHeight,
5946
- strokeLinecap: "round",
5947
- animate: {
5948
- pathLength: [0.1, 0.75, 0.1],
5949
- pathOffset: [0, 0.65, 1]
5950
- },
5951
- transition: {
5952
- duration: 2 / Math.max(0.1, crawlerSpeed),
5953
- repeat: Number.POSITIVE_INFINITY,
5954
- ease: [0.4, 0, 0.2, 1]
5955
- }
6244
+ strokeLinecap: "round"
5956
6245
  }
5957
- ) : /* @__PURE__ */ jsxRuntime.jsx(
5958
- ActiveCircleElem,
6246
+ )
6247
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6248
+ shouldShowIndeterminateTrack && /* @__PURE__ */ jsxRuntime.jsx(
6249
+ "circle",
6250
+ {
6251
+ ref: indeterminateTrackRef,
6252
+ cx: center,
6253
+ cy: center,
6254
+ r: radius,
6255
+ fill: "none",
6256
+ stroke: bgTrackColor,
6257
+ strokeWidth: trackHeight,
6258
+ strokeLinecap: "round"
6259
+ }
6260
+ ),
6261
+ /* @__PURE__ */ jsxRuntime.jsx(
6262
+ "circle",
5959
6263
  {
6264
+ ref: indeterminateActiveRef,
5960
6265
  cx: center,
5961
6266
  cy: center,
5962
6267
  r: radius,
5963
6268
  fill: "none",
5964
6269
  stroke: activeColor,
5965
6270
  strokeWidth: trackHeight,
5966
- strokeLinecap: "round",
5967
- animate: {
5968
- pathLength: [0.1, 0.75, 0.1],
5969
- pathOffset: [0, 0.65, 1]
5970
- },
5971
- transition: {
5972
- duration: 2 / Math.max(0.1, crawlerSpeed),
5973
- repeat: Number.POSITIVE_INFINITY,
5974
- ease: [0.4, 0, 0.2, 1]
5975
- }
6271
+ strokeLinecap: "round"
5976
6272
  }
5977
6273
  )
5978
- ]
6274
+ ] })
5979
6275
  }
5980
6276
  )
5981
6277
  ] })
@@ -6181,7 +6477,7 @@ var WavyLinearTrack = React62__namespace.memo(function WavyLinearTrack2({
6181
6477
  currentAmp
6182
6478
  );
6183
6479
  } else if (fraction === 0) {
6184
- activePathD = `M ${capWidth} 0 L ${capWidth + 0.01} 0`;
6480
+ activePathD = "";
6185
6481
  }
6186
6482
  const trackStart = adjHead + totalGap;
6187
6483
  if (trackStart < width - capWidth) {
@@ -6213,20 +6509,20 @@ var WavyLinearTrack = React62__namespace.memo(function WavyLinearTrack2({
6213
6509
  activeLines.push({ tail: l1T, head: l1H });
6214
6510
  activeLines.push({ tail: l2T, head: l2H });
6215
6511
  }
6216
- const segments = activeLines.map((line) => {
6217
- const barTail = line.tail * width;
6218
- const barHead = line.head * width;
6512
+ const activeSegments = activeLines.map((line) => {
6513
+ const rawTail = line.tail * width;
6514
+ const rawHead = line.head * width;
6219
6515
  const adjTail = Math.max(
6220
6516
  capWidth,
6221
- Math.min(width - capWidth, barTail)
6517
+ Math.min(width - capWidth, rawTail)
6222
6518
  );
6223
6519
  const adjHead = Math.max(
6224
6520
  capWidth,
6225
- Math.min(width - capWidth, barHead)
6521
+ Math.min(width - capWidth, rawHead)
6226
6522
  );
6227
6523
  return { adjTail, adjHead };
6228
6524
  }).filter((seg) => seg.adjHead - seg.adjTail > 0.1);
6229
- activePathD = segments.map(
6525
+ activePathD = activeSegments.map(
6230
6526
  (seg) => getSinePath(
6231
6527
  seg.adjTail,
6232
6528
  seg.adjHead,
@@ -6235,13 +6531,24 @@ var WavyLinearTrack = React62__namespace.memo(function WavyLinearTrack2({
6235
6531
  currentAmp
6236
6532
  )
6237
6533
  ).join(" ");
6534
+ const validActiveLines = activeLines.filter(
6535
+ (line) => line.head > line.tail && line.head * width > 0 && line.tail * width < width
6536
+ ).sort((a, b) => a.tail - b.tail);
6238
6537
  let currentTrackX = capWidth;
6239
- for (const seg of segments) {
6240
- const trackEnd = seg.adjTail - totalGap;
6538
+ for (const line of validActiveLines) {
6539
+ const blockStart = line.tail * width - totalGap;
6540
+ const blockEnd = line.head * width + totalGap;
6541
+ const trackEnd = Math.min(width - capWidth, blockStart);
6241
6542
  if (trackEnd > currentTrackX) {
6242
- trackD += `${getSinePath(currentTrackX, trackEnd, phase, activeWavelength, trackAmp)} `;
6543
+ trackD += `${getSinePath(
6544
+ currentTrackX,
6545
+ trackEnd,
6546
+ phase,
6547
+ activeWavelength,
6548
+ trackAmp
6549
+ )} `;
6243
6550
  }
6244
- currentTrackX = Math.max(currentTrackX, seg.adjHead + totalGap);
6551
+ currentTrackX = Math.max(currentTrackX, blockEnd);
6245
6552
  }
6246
6553
  if (currentTrackX < width - capWidth) {
6247
6554
  trackD += getSinePath(
@@ -6254,9 +6561,9 @@ var WavyLinearTrack = React62__namespace.memo(function WavyLinearTrack2({
6254
6561
  }
6255
6562
  }
6256
6563
  if (activePathRef.current)
6257
- activePathRef.current.setAttribute("d", activePathD);
6564
+ activePathRef.current.setAttribute("d", activePathD || "");
6258
6565
  if (trackPathRef.current)
6259
- trackPathRef.current.setAttribute("d", trackD.trim());
6566
+ trackPathRef.current.setAttribute("d", trackD.trim() || "");
6260
6567
  });
6261
6568
  return /* @__PURE__ */ jsxRuntime.jsx(
6262
6569
  "div",
@@ -8264,9 +8571,9 @@ var TOGGLE_FAB_COLORS = {
8264
8571
  }
8265
8572
  };
8266
8573
  var TOGGLE_FAB_SIZES = {
8267
- baseline: { sizeClass: "h-14 w-14", initialRadius: 16, finalRadius: 28 },
8268
- medium: { sizeClass: "h-20 w-20", initialRadius: 20, finalRadius: 40 },
8269
- large: { sizeClass: "h-24 w-24", initialRadius: 28, finalRadius: 48 }
8574
+ sm: { sizeClass: "h-14 w-14", initialRadius: 16, finalRadius: 28 },
8575
+ md: { sizeClass: "h-20 w-20", initialRadius: 20, finalRadius: 40 },
8576
+ lg: { sizeClass: "h-24 w-24", initialRadius: 28, finalRadius: 48 }
8270
8577
  };
8271
8578
  var MENU_ITEM_STYLES = {
8272
8579
  padding: "ps-4 pe-6",
@@ -8353,7 +8660,7 @@ var ToggleFABComponent = React62__namespace.forwardRef(
8353
8660
  onToggle,
8354
8661
  icon,
8355
8662
  colorVariant = "primary",
8356
- fabSize = "baseline",
8663
+ size = "sm",
8357
8664
  className,
8358
8665
  id,
8359
8666
  "aria-label": ariaLabel,
@@ -8362,7 +8669,7 @@ var ToggleFABComponent = React62__namespace.forwardRef(
8362
8669
  var _a, _b;
8363
8670
  const prefersReduced = react.useReducedMotion();
8364
8671
  const colors = (_a = TOGGLE_FAB_COLORS[colorVariant]) != null ? _a : TOGGLE_FAB_COLORS.primary;
8365
- const sizeTokens = (_b = TOGGLE_FAB_SIZES[fabSize]) != null ? _b : TOGGLE_FAB_SIZES.baseline;
8672
+ const sizeTokens = (_b = TOGGLE_FAB_SIZES[size]) != null ? _b : TOGGLE_FAB_SIZES.sm;
8366
8673
  const springConfig = prefersReduced ? SPRING_REDUCED : SPRING_NORMAL;
8367
8674
  const checkedProgress = react.useSpring(expanded ? 1 : 0, springConfig);
8368
8675
  React62__namespace.useEffect(() => {
@@ -8532,7 +8839,7 @@ function FABMenu({
8532
8839
  onToggle,
8533
8840
  items,
8534
8841
  colorVariant = "primary",
8535
- fabSize = "baseline",
8842
+ size = "sm",
8536
8843
  alignment = "end",
8537
8844
  className,
8538
8845
  closeOnBackdropClick = true,
@@ -8683,7 +8990,7 @@ function FABMenu({
8683
8990
  expanded,
8684
8991
  onToggle,
8685
8992
  colorVariant,
8686
- fabSize,
8993
+ size,
8687
8994
  "aria-label": ariaLabel != null ? ariaLabel : expanded ? "Close actions menu" : "Open actions menu",
8688
8995
  "aria-controls": menuId,
8689
8996
  icon: defaultFabIcon
@@ -8827,7 +9134,7 @@ var IconButtonComponent = React62__namespace.forwardRef(
8827
9134
  variant = "default",
8828
9135
  colorStyle = "standard",
8829
9136
  size = "sm",
8830
- widthVariant = "default",
9137
+ width = "default",
8831
9138
  shape = "round",
8832
9139
  selected,
8833
9140
  selectedIcon,
@@ -8845,7 +9152,7 @@ var IconButtonComponent = React62__namespace.forwardRef(
8845
9152
  "variant",
8846
9153
  "colorStyle",
8847
9154
  "size",
8848
- "widthVariant",
9155
+ "width",
8849
9156
  "shape",
8850
9157
  "selected",
8851
9158
  "selectedIcon",
@@ -8890,7 +9197,7 @@ var IconButtonComponent = React62__namespace.forwardRef(
8890
9197
  const iconPx = iconSize != null ? iconSize : defaultIconPx;
8891
9198
  const isCustomSize = iconSize != null && iconSize !== "inherit";
8892
9199
  const heightClass = (_c = SIZE_HEIGHT_STYLES[size]) != null ? _c : SIZE_HEIGHT_STYLES.sm;
8893
- const widthClass = (_e = ((_d = WIDTH_SIZE_STYLES[size]) != null ? _d : WIDTH_SIZE_STYLES.sm)[widthVariant]) != null ? _e : WIDTH_SIZE_STYLES.sm.default;
9200
+ const widthClass = (_e = ((_d = WIDTH_SIZE_STYLES[size]) != null ? _d : WIDTH_SIZE_STYLES.sm)[width]) != null ? _e : WIDTH_SIZE_STYLES.sm.default;
8894
9201
  const needsTouchTarget = size === "xs" || size === "sm";
8895
9202
  const { ripples, onPointerDown, removeRipple } = useRippleState({
8896
9203
  disabled: loading
@@ -22776,39 +23083,7 @@ var typographyVariants = classVarianceAuthority.cva("m-0 p-0 text-m3-on-surface"
22776
23083
  "label-sm": "text-[11px] leading-[16px] font-medium tracking-[0.5px]",
22777
23084
  "body-lg": "text-[16px] leading-[24px] font-normal tracking-[0.5px]",
22778
23085
  "body-md": "text-[14px] leading-[20px] font-normal tracking-[0.25px]",
22779
- "body-sm": "text-[12px] leading-[16px] font-normal tracking-[0.4px]",
22780
- // Full hyphenated aliases
22781
- "display-large": "text-[57px] leading-[64px] font-normal tracking-[-0.25px]",
22782
- "display-medium": "text-[45px] leading-[52px] font-normal tracking-[0px]",
22783
- "display-small": "text-[36px] leading-[44px] font-normal tracking-[0px]",
22784
- "headline-large": "text-[32px] leading-[40px] font-normal tracking-[0px]",
22785
- "headline-medium": "text-[28px] leading-[36px] font-normal tracking-[0px]",
22786
- "headline-small": "text-[24px] leading-[32px] font-normal tracking-[0px]",
22787
- "title-large": "text-[22px] leading-[28px] font-normal tracking-[0px]",
22788
- "title-medium": "text-[16px] leading-[24px] font-medium tracking-[0.15px]",
22789
- "title-small": "text-[14px] leading-[20px] font-medium tracking-[0.1px]",
22790
- "label-large": "text-[14px] leading-[20px] font-medium tracking-[0.1px]",
22791
- "label-medium": "text-[12px] leading-[16px] font-medium tracking-[0.5px]",
22792
- "label-small": "text-[11px] leading-[16px] font-medium tracking-[0.5px]",
22793
- "body-large": "text-[16px] leading-[24px] font-normal tracking-[0.5px]",
22794
- "body-medium": "text-[14px] leading-[20px] font-normal tracking-[0.25px]",
22795
- "body-small": "text-[12px] leading-[16px] font-normal tracking-[0.4px]",
22796
- // CamelCase aliases
22797
- displayLarge: "text-[57px] leading-[64px] font-normal tracking-[-0.25px]",
22798
- displayMedium: "text-[45px] leading-[52px] font-normal tracking-[0px]",
22799
- displaySmall: "text-[36px] leading-[44px] font-normal tracking-[0px]",
22800
- headlineLarge: "text-[32px] leading-[40px] font-normal tracking-[0px]",
22801
- headlineMedium: "text-[28px] leading-[36px] font-normal tracking-[0px]",
22802
- headlineSmall: "text-[24px] leading-[32px] font-normal tracking-[0px]",
22803
- titleLarge: "text-[22px] leading-[28px] font-normal tracking-[0px]",
22804
- titleMedium: "text-[16px] leading-[24px] font-medium tracking-[0.15px]",
22805
- titleSmall: "text-[14px] leading-[20px] font-medium tracking-[0.1px]",
22806
- labelLarge: "text-[14px] leading-[20px] font-medium tracking-[0.1px]",
22807
- labelMedium: "text-[12px] leading-[16px] font-medium tracking-[0.5px]",
22808
- labelSmall: "text-[11px] leading-[16px] font-medium tracking-[0.5px]",
22809
- bodyLarge: "text-[16px] leading-[24px] font-normal tracking-[0.5px]",
22810
- bodyMedium: "text-[14px] leading-[20px] font-normal tracking-[0.25px]",
22811
- bodySmall: "text-[12px] leading-[16px] font-normal tracking-[0.4px]"
23086
+ "body-sm": "text-[12px] leading-[16px] font-normal tracking-[0.4px]"
22812
23087
  }
22813
23088
  },
22814
23089
  defaultVariants: {
@@ -24186,7 +24461,7 @@ var FloatingToolbarWithFabBase = React62__namespace.forwardRef(
24186
24461
  fabPosition = orientation === "horizontal" ? "end" : "bottom",
24187
24462
  animationDuration = 0.3,
24188
24463
  scrollBehavior,
24189
- fabSize = "default",
24464
+ fabSize = "sm",
24190
24465
  className,
24191
24466
  style
24192
24467
  } = _b, props = __objRest(_b, [
@@ -24206,7 +24481,7 @@ var FloatingToolbarWithFabBase = React62__namespace.forwardRef(
24206
24481
  const isHorizontal = orientation === "horizontal";
24207
24482
  const effectiveExpanded = expanded && (!scrollBehavior || scrollBehavior.isExpanded);
24208
24483
  const isFabBefore = fabPosition === "start" || fabPosition === "top";
24209
- const resolvedFabSize = fabSize === "medium" ? FabBaselineTokens.MediumContainerHeight : FabBaselineTokens.ContainerHeight;
24484
+ const resolvedFabSize = fabSize === "md" ? FabBaselineTokens.MediumContainerHeight : FabBaselineTokens.ContainerHeight;
24210
24485
  const transitionSpec = __spreadProps(__spreadValues({}, SPRING_TRANSITION), {
24211
24486
  duration: animationDuration
24212
24487
  });
@@ -24345,7 +24620,7 @@ var ToolbarIconButton = React62__namespace.forwardRef(
24345
24620
  (_a, ref) => {
24346
24621
  var _b = _a, {
24347
24622
  emphasis = "standard",
24348
- toolbarSize = "default",
24623
+ width = "default",
24349
24624
  selected,
24350
24625
  asChild,
24351
24626
  className,
@@ -24353,7 +24628,7 @@ var ToolbarIconButton = React62__namespace.forwardRef(
24353
24628
  whileTap
24354
24629
  } = _b, props = __objRest(_b, [
24355
24630
  "emphasis",
24356
- "toolbarSize",
24631
+ "width",
24357
24632
  "selected",
24358
24633
  "asChild",
24359
24634
  "className",
@@ -24361,7 +24636,7 @@ var ToolbarIconButton = React62__namespace.forwardRef(
24361
24636
  "whileTap"
24362
24637
  ]);
24363
24638
  const context = useToolbarContext();
24364
- const widthClass = TOOLBAR_ICON_BUTTON_WIDTH[toolbarSize];
24639
+ const widthClass = TOOLBAR_ICON_BUTTON_WIDTH[width];
24365
24640
  const colorStyle = VARIANT_TO_COLOR_STYLE[emphasis];
24366
24641
  const iconButtonProps = selected !== void 0 ? {
24367
24642
  variant: "toggle",
@@ -25347,6 +25622,7 @@ exports.FABPosition = FABPosition;
25347
25622
  exports.FAST_EFFECTS_TRANSITION = FAST_EFFECTS_TRANSITION;
25348
25623
  exports.FAST_SPATIAL_SPRING = FAST_SPATIAL_SPRING;
25349
25624
  exports.FLOAT_PI = FLOAT_PI;
25625
+ exports.FadingBlurMask = FadingBlurMask;
25350
25626
  exports.FilledSplitButtonLeading = FilledSplitButtonLeading;
25351
25627
  exports.FilledSplitButtonTrailing = FilledSplitButtonTrailing;
25352
25628
  exports.FilledSplitButtonTrailingUncheckable = FilledSplitButtonTrailingUncheckable;