@bug-on/md3-react 2.0.3 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/.turbo/turbo-build.log +42 -0
  2. package/CHANGELOG.md +69 -0
  3. package/dist/index.css +178 -0
  4. package/dist/index.css.d.ts +2 -0
  5. package/dist/index.d.mts +6135 -0
  6. package/dist/index.d.ts +6135 -71
  7. package/dist/index.js +1688 -631
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +1600 -564
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/material-symbols-cdn.css.d.ts +2 -0
  12. package/dist/material-symbols-self-hosted.css.d.ts +2 -0
  13. package/dist/plugin.d.mts +1 -0
  14. package/dist/plugin.d.ts +1 -0
  15. package/dist/plugin.js +13 -0
  16. package/dist/plugin.js.map +1 -0
  17. package/dist/plugin.mjs +3 -0
  18. package/dist/plugin.mjs.map +1 -0
  19. package/dist/typography.css.d.ts +2 -0
  20. package/package.json +28 -19
  21. package/scripts/copy-assets.js +115 -0
  22. package/src/assets/fonts/GoogleSansFlex-VariableFont.woff2 +0 -0
  23. package/src/assets/fonts/MaterialSymbolsOutlined-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  24. package/src/assets/fonts/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  25. package/src/assets/fonts/MaterialSymbolsSharp-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  26. package/src/assets/loading-indicator.svg +19 -0
  27. package/src/assets/material-symbols-cdn.css +65 -0
  28. package/src/assets/material-symbols-self-hosted.css +90 -0
  29. package/src/css.d.ts +20 -0
  30. package/src/hooks/useClickOutside.ts +37 -0
  31. package/src/hooks/useMediaQuery.ts +28 -0
  32. package/src/hooks/useRipple.ts +88 -0
  33. package/src/index.css +23 -0
  34. package/src/index.ts +349 -0
  35. package/src/lib/material-symbols-preconnect.tsx +82 -0
  36. package/src/lib/theme-utils.ts +195 -0
  37. package/src/lib/utils.ts +6 -0
  38. package/src/plugin.ts +12 -0
  39. package/src/test/button.test.tsx +59 -0
  40. package/src/test/icon.test.tsx +91 -0
  41. package/src/test/loading-indicator.test.tsx +128 -0
  42. package/src/test/progress-indicator.test.tsx +306 -0
  43. package/src/test/setup.ts +80 -0
  44. package/src/test/typography.test.tsx +206 -0
  45. package/src/types/index.ts +7 -0
  46. package/src/types/md3.ts +31 -0
  47. package/src/ui/Text.tsx +60 -0
  48. package/src/ui/__snapshots__/divider.test.tsx.snap +63 -0
  49. package/src/ui/app-bar/app-bar-column.tsx +99 -0
  50. package/src/ui/app-bar/app-bar-item-button.tsx +71 -0
  51. package/src/ui/app-bar/app-bar-items.test.tsx +89 -0
  52. package/src/ui/app-bar/app-bar-overflow-indicator.tsx +108 -0
  53. package/src/ui/app-bar/app-bar-row.tsx +104 -0
  54. package/src/ui/app-bar/app-bar.test.tsx +87 -0
  55. package/src/ui/app-bar/app-bar.tokens.ts +223 -0
  56. package/src/ui/app-bar/app-bar.types.ts +441 -0
  57. package/src/ui/app-bar/bottom-app-bar.test.tsx +42 -0
  58. package/src/ui/app-bar/bottom-app-bar.tsx +84 -0
  59. package/src/ui/app-bar/docked-toolbar.test.tsx +34 -0
  60. package/src/ui/app-bar/docked-toolbar.tsx +54 -0
  61. package/src/ui/app-bar/flexible-app-bar.test.tsx +75 -0
  62. package/src/ui/app-bar/hooks/use-app-bar-scroll.ts +110 -0
  63. package/src/ui/app-bar/hooks/use-flexible-app-bar.ts +123 -0
  64. package/{dist/ui/app-bar/index.d.ts → src/ui/app-bar/index.ts} +35 -2
  65. package/src/ui/app-bar/large-flexible-app-bar.tsx +165 -0
  66. package/src/ui/app-bar/medium-flexible-app-bar.tsx +167 -0
  67. package/src/ui/app-bar/search-app-bar.test.tsx +49 -0
  68. package/src/ui/app-bar/search-app-bar.tsx +176 -0
  69. package/src/ui/app-bar/search-view.tsx +227 -0
  70. package/src/ui/app-bar/small-app-bar.test.tsx +48 -0
  71. package/src/ui/app-bar/small-app-bar.tsx +203 -0
  72. package/src/ui/badge.test.tsx +345 -0
  73. package/src/ui/badge.tsx +282 -0
  74. package/src/ui/button-group.test.tsx +71 -0
  75. package/src/ui/button-group.tsx +350 -0
  76. package/src/ui/button.test.tsx +306 -0
  77. package/src/ui/button.tsx +665 -0
  78. package/src/ui/card.test.tsx +187 -0
  79. package/src/ui/card.tsx +259 -0
  80. package/src/ui/checkbox.test.tsx +423 -0
  81. package/src/ui/checkbox.tsx +525 -0
  82. package/src/ui/chip.test.tsx +292 -0
  83. package/src/ui/chip.tsx +548 -0
  84. package/src/ui/code-block.tsx +219 -0
  85. package/src/ui/dialog.test.tsx +300 -0
  86. package/src/ui/dialog.tsx +384 -0
  87. package/src/ui/divider.test.tsx +314 -0
  88. package/src/ui/divider.tsx +412 -0
  89. package/src/ui/drawer.tsx +240 -0
  90. package/src/ui/fab-menu.test.tsx +494 -0
  91. package/src/ui/fab-menu.tsx +739 -0
  92. package/src/ui/fab.test.tsx +232 -0
  93. package/src/ui/fab.tsx +505 -0
  94. package/src/ui/icon-button.test.tsx +515 -0
  95. package/src/ui/icon-button.tsx +525 -0
  96. package/src/ui/icon.test.tsx +197 -0
  97. package/src/ui/icon.tsx +179 -0
  98. package/src/ui/loading-indicator.test.tsx +73 -0
  99. package/src/ui/loading-indicator.tsx +312 -0
  100. package/src/ui/menu/context-menu.tsx +275 -0
  101. package/src/ui/menu/index.ts +77 -0
  102. package/src/ui/menu/menu-animations.ts +102 -0
  103. package/src/ui/menu/menu-context.tsx +99 -0
  104. package/src/ui/menu/menu-divider.tsx +47 -0
  105. package/src/ui/menu/menu-group.tsx +200 -0
  106. package/src/ui/menu/menu-item.tsx +294 -0
  107. package/src/ui/menu/menu-tokens.ts +208 -0
  108. package/src/ui/menu/menu-types.ts +313 -0
  109. package/src/ui/menu/menu.test.tsx +624 -0
  110. package/src/ui/menu/menu.tsx +289 -0
  111. package/src/ui/menu/sub-menu.tsx +223 -0
  112. package/src/ui/menu/vertical-menu.tsx +382 -0
  113. package/src/ui/navigation-rail.test.tsx +404 -0
  114. package/src/ui/navigation-rail.tsx +607 -0
  115. package/src/ui/progress-indicator/circular.tsx +248 -0
  116. package/src/ui/progress-indicator/hooks.ts +51 -0
  117. package/{dist/ui/progress-indicator/index.d.ts → src/ui/progress-indicator/index.tsx} +20 -2
  118. package/src/ui/progress-indicator/linear-flat.tsx +83 -0
  119. package/src/ui/progress-indicator/linear-wavy.tsx +243 -0
  120. package/src/ui/progress-indicator/linear.tsx +143 -0
  121. package/src/ui/progress-indicator/types.ts +158 -0
  122. package/src/ui/progress-indicator/utils.ts +73 -0
  123. package/src/ui/radio-button.test.tsx +407 -0
  124. package/src/ui/radio-button.tsx +551 -0
  125. package/src/ui/ripple.test.tsx +72 -0
  126. package/src/ui/ripple.tsx +234 -0
  127. package/src/ui/scroll-area.test.tsx +58 -0
  128. package/src/ui/scroll-area.tsx +139 -0
  129. package/src/ui/search/animated-placeholder.tsx +145 -0
  130. package/src/ui/search/hooks/use-search-keyboard.test.ts +202 -0
  131. package/src/ui/search/hooks/use-search-keyboard.ts +104 -0
  132. package/src/ui/search/hooks/use-search-view-focus.test.ts +96 -0
  133. package/src/ui/search/hooks/use-search-view-focus.ts +24 -0
  134. package/src/ui/search/index.ts +44 -0
  135. package/src/ui/search/search-bar.tsx +220 -0
  136. package/src/ui/search/search-context.tsx +42 -0
  137. package/src/ui/search/search-view-docked.tsx +194 -0
  138. package/src/ui/search/search-view-fullscreen.tsx +247 -0
  139. package/src/ui/search/search.test.tsx +233 -0
  140. package/src/ui/search/search.tokens.ts +134 -0
  141. package/src/ui/search/search.tsx +131 -0
  142. package/src/ui/search/search.types.ts +154 -0
  143. package/src/ui/search/trailing-action.tsx +49 -0
  144. package/src/ui/shared/constants.ts +135 -0
  145. package/{dist/ui/shared/touch-target.d.ts → src/ui/shared/touch-target.tsx} +13 -1
  146. package/src/ui/slider/hooks/useSliderMath.ts +195 -0
  147. package/{dist/ui/slider/index.d.ts → src/ui/slider/index.ts} +12 -1
  148. package/src/ui/slider/range-slider.tsx +561 -0
  149. package/src/ui/slider/slider-thumb.tsx +379 -0
  150. package/src/ui/slider/slider-track.tsx +912 -0
  151. package/src/ui/slider/slider.tokens.ts +189 -0
  152. package/src/ui/slider/slider.tsx +259 -0
  153. package/src/ui/slider/slider.types.ts +288 -0
  154. package/src/ui/snackbar/index.ts +20 -0
  155. package/src/ui/snackbar/snackbar.test.tsx +338 -0
  156. package/src/ui/snackbar/snackbar.tsx +476 -0
  157. package/{dist/ui/switch/index.d.ts → src/ui/switch/index.ts} +1 -0
  158. package/src/ui/switch/switch.stories.tsx +309 -0
  159. package/src/ui/switch/switch.test.tsx +243 -0
  160. package/src/ui/switch/switch.tokens.ts +89 -0
  161. package/src/ui/switch/switch.tsx +504 -0
  162. package/src/ui/switch/switch.types.ts +62 -0
  163. package/{dist/ui/tabs/index.d.ts → src/ui/tabs/index.ts} +8 -1
  164. package/src/ui/tabs/tab.tsx +407 -0
  165. package/src/ui/tabs/tabs-content.tsx +89 -0
  166. package/src/ui/tabs/tabs-list.tsx +146 -0
  167. package/src/ui/tabs/tabs.test.tsx +290 -0
  168. package/src/ui/tabs/tabs.tokens.ts +121 -0
  169. package/src/ui/tabs/tabs.tsx +229 -0
  170. package/src/ui/tabs/tabs.types.ts +185 -0
  171. package/{dist/ui/text-field/index.d.ts → src/ui/text-field/index.ts} +8 -1
  172. package/src/ui/text-field/subcomponents/active-indicator.tsx +67 -0
  173. package/src/ui/text-field/subcomponents/floating-label.tsx +161 -0
  174. package/src/ui/text-field/subcomponents/leading-icon.tsx +46 -0
  175. package/src/ui/text-field/subcomponents/outline-container.tsx +170 -0
  176. package/src/ui/text-field/subcomponents/prefix-suffix.tsx +59 -0
  177. package/src/ui/text-field/subcomponents/supporting-text.tsx +145 -0
  178. package/src/ui/text-field/subcomponents/trailing-icon.tsx +199 -0
  179. package/src/ui/text-field/text-field.test.tsx +454 -0
  180. package/src/ui/text-field/text-field.tokens.ts +104 -0
  181. package/src/ui/text-field/text-field.tsx +548 -0
  182. package/src/ui/text-field/text-field.types.ts +180 -0
  183. package/src/ui/theme-provider/index.tsx +215 -0
  184. package/src/ui/toc.test.tsx +108 -0
  185. package/src/ui/toc.tsx +172 -0
  186. package/src/ui/tooltip/plain-tooltip.tsx +63 -0
  187. package/src/ui/tooltip/rich-tooltip.tsx +94 -0
  188. package/src/ui/tooltip/tooltip-box.tsx +266 -0
  189. package/src/ui/tooltip/tooltip-caret-shape.tsx +68 -0
  190. package/src/ui/tooltip/tooltip.tokens.ts +26 -0
  191. package/src/ui/tooltip/tooltip.types.ts +70 -0
  192. package/src/ui/tooltip/use-tooltip-position.ts +208 -0
  193. package/src/ui/tooltip/use-tooltip-state.ts +41 -0
  194. package/src/ui/typography/__tests__/typography.test.tsx +170 -0
  195. package/{dist/ui/typography/index.d.ts → src/ui/typography/index.ts} +21 -3
  196. package/src/ui/typography/type-scale-tokens.ts +205 -0
  197. package/src/ui/typography/typography-key-tokens.ts +43 -0
  198. package/src/ui/typography/typography-tokens.ts +360 -0
  199. package/src/ui/typography/typography.css +22 -0
  200. package/src/ui/typography/typography.tsx +559 -0
  201. package/test-render.tsx +4 -0
  202. package/test-shadow.html +26 -0
  203. package/test_output.txt +164 -0
  204. package/test_output_v2.txt +5 -0
  205. package/tsconfig.build.json +10 -0
  206. package/tsconfig.json +18 -0
  207. package/tsup.config.ts +20 -0
  208. package/vitest.config.ts +11 -0
  209. package/dist/hooks/useClickOutside.d.ts +0 -8
  210. package/dist/hooks/useMediaQuery.d.ts +0 -11
  211. package/dist/hooks/useRipple.d.ts +0 -26
  212. package/dist/lib/material-symbols-preconnect.d.ts +0 -42
  213. package/dist/lib/theme-utils.d.ts +0 -63
  214. package/dist/lib/utils.d.ts +0 -2
  215. package/dist/types/index.d.ts +0 -1
  216. package/dist/types/md3.d.ts +0 -14
  217. package/dist/ui/app-bar/app-bar-column.d.ts +0 -28
  218. package/dist/ui/app-bar/app-bar-item-button.d.ts +0 -16
  219. package/dist/ui/app-bar/app-bar-overflow-indicator.d.ts +0 -18
  220. package/dist/ui/app-bar/app-bar-row.d.ts +0 -36
  221. package/dist/ui/app-bar/app-bar.tokens.d.ts +0 -184
  222. package/dist/ui/app-bar/app-bar.types.d.ts +0 -392
  223. package/dist/ui/app-bar/bottom-app-bar.d.ts +0 -31
  224. package/dist/ui/app-bar/docked-toolbar.d.ts +0 -25
  225. package/dist/ui/app-bar/hooks/use-app-bar-scroll.d.ts +0 -42
  226. package/dist/ui/app-bar/hooks/use-flexible-app-bar.d.ts +0 -37
  227. package/dist/ui/app-bar/large-flexible-app-bar.d.ts +0 -26
  228. package/dist/ui/app-bar/medium-flexible-app-bar.d.ts +0 -28
  229. package/dist/ui/app-bar/search-app-bar.d.ts +0 -43
  230. package/dist/ui/app-bar/search-view.d.ts +0 -54
  231. package/dist/ui/app-bar/small-app-bar.d.ts +0 -37
  232. package/dist/ui/badge.d.ts +0 -125
  233. package/dist/ui/button-group.d.ts +0 -59
  234. package/dist/ui/button.d.ts +0 -148
  235. package/dist/ui/card.d.ts +0 -62
  236. package/dist/ui/checkbox.d.ts +0 -82
  237. package/dist/ui/chip.d.ts +0 -110
  238. package/dist/ui/code-block.d.ts +0 -14
  239. package/dist/ui/dialog.d.ts +0 -111
  240. package/dist/ui/divider.d.ts +0 -164
  241. package/dist/ui/drawer.d.ts +0 -39
  242. package/dist/ui/dropdown.d.ts +0 -29
  243. package/dist/ui/fab-menu.d.ts +0 -204
  244. package/dist/ui/fab.d.ts +0 -162
  245. package/dist/ui/icon-button.d.ts +0 -131
  246. package/dist/ui/icon.d.ts +0 -88
  247. package/dist/ui/loading-indicator.d.ts +0 -42
  248. package/dist/ui/navigation-rail.d.ts +0 -29
  249. package/dist/ui/progress-indicator/circular.d.ts +0 -3
  250. package/dist/ui/progress-indicator/hooks.d.ts +0 -3
  251. package/dist/ui/progress-indicator/linear-flat.d.ts +0 -10
  252. package/dist/ui/progress-indicator/linear-wavy.d.ts +0 -18
  253. package/dist/ui/progress-indicator/linear.d.ts +0 -3
  254. package/dist/ui/progress-indicator/types.d.ts +0 -151
  255. package/dist/ui/progress-indicator/utils.d.ts +0 -3
  256. package/dist/ui/radio-button.d.ts +0 -106
  257. package/dist/ui/ripple.d.ts +0 -126
  258. package/dist/ui/scroll-area.d.ts +0 -27
  259. package/dist/ui/search/animated-placeholder.d.ts +0 -54
  260. package/dist/ui/search/hooks/use-search-keyboard.d.ts +0 -32
  261. package/dist/ui/search/hooks/use-search-view-focus.d.ts +0 -6
  262. package/dist/ui/search/index.d.ts +0 -27
  263. package/dist/ui/search/search-bar.d.ts +0 -32
  264. package/dist/ui/search/search-context.d.ts +0 -24
  265. package/dist/ui/search/search-view-docked.d.ts +0 -25
  266. package/dist/ui/search/search-view-fullscreen.d.ts +0 -36
  267. package/dist/ui/search/search.d.ts +0 -50
  268. package/dist/ui/search/search.tokens.d.ts +0 -112
  269. package/dist/ui/search/search.types.d.ts +0 -131
  270. package/dist/ui/search/trailing-action.d.ts +0 -9
  271. package/dist/ui/shared/constants.d.ts +0 -86
  272. package/dist/ui/slider/hooks/useSliderMath.d.ts +0 -101
  273. package/dist/ui/slider/range-slider.d.ts +0 -47
  274. package/dist/ui/slider/slider-thumb.d.ts +0 -33
  275. package/dist/ui/slider/slider-track.d.ts +0 -25
  276. package/dist/ui/slider/slider.d.ts +0 -60
  277. package/dist/ui/slider/slider.tokens.d.ts +0 -151
  278. package/dist/ui/slider/slider.types.d.ts +0 -259
  279. package/dist/ui/snackbar/index.d.ts +0 -6
  280. package/dist/ui/snackbar/snackbar.d.ts +0 -197
  281. package/dist/ui/switch/switch.d.ts +0 -30
  282. package/dist/ui/switch/switch.stories.d.ts +0 -48
  283. package/dist/ui/switch/switch.tokens.d.ts +0 -67
  284. package/dist/ui/switch/switch.types.d.ts +0 -59
  285. package/dist/ui/tabs/tab.d.ts +0 -43
  286. package/dist/ui/tabs/tabs-content.d.ts +0 -36
  287. package/dist/ui/tabs/tabs-list.d.ts +0 -40
  288. package/dist/ui/tabs/tabs.d.ts +0 -60
  289. package/dist/ui/tabs/tabs.tokens.d.ts +0 -94
  290. package/dist/ui/tabs/tabs.types.d.ts +0 -172
  291. package/dist/ui/text-field/subcomponents/active-indicator.d.ts +0 -24
  292. package/dist/ui/text-field/subcomponents/floating-label.d.ts +0 -43
  293. package/dist/ui/text-field/subcomponents/leading-icon.d.ts +0 -23
  294. package/dist/ui/text-field/subcomponents/outline-container.d.ts +0 -42
  295. package/dist/ui/text-field/subcomponents/prefix-suffix.d.ts +0 -24
  296. package/dist/ui/text-field/subcomponents/supporting-text.d.ts +0 -37
  297. package/dist/ui/text-field/subcomponents/trailing-icon.d.ts +0 -41
  298. package/dist/ui/text-field/text-field.d.ts +0 -49
  299. package/dist/ui/text-field/text-field.tokens.d.ts +0 -76
  300. package/dist/ui/text-field/text-field.types.d.ts +0 -126
  301. package/dist/ui/theme-provider/index.d.ts +0 -48
  302. package/dist/ui/toc.d.ts +0 -80
  303. package/dist/ui/tooltip/plain-tooltip.d.ts +0 -2
  304. package/dist/ui/tooltip/rich-tooltip.d.ts +0 -2
  305. package/dist/ui/tooltip/tooltip-box.d.ts +0 -2
  306. package/dist/ui/tooltip/tooltip-caret-shape.d.ts +0 -9
  307. package/dist/ui/tooltip/tooltip.tokens.d.ts +0 -26
  308. package/dist/ui/tooltip/tooltip.types.d.ts +0 -56
  309. package/dist/ui/tooltip/use-tooltip-position.d.ts +0 -8
  310. package/dist/ui/tooltip/use-tooltip-state.d.ts +0 -2
  311. package/dist/ui/typography/type-scale-tokens.d.ts +0 -162
  312. package/dist/ui/typography/typography-key-tokens.d.ts +0 -40
  313. package/dist/ui/typography/typography-tokens.d.ts +0 -220
  314. package/dist/ui/typography/typography.d.ts +0 -265
  315. /package/{dist/hooks/index.d.ts → src/hooks/index.ts} +0 -0
  316. /package/{dist/ui/tooltip/index.d.ts → src/ui/tooltip/index.ts} +0 -0
package/dist/index.js CHANGED
@@ -1,13 +1,14 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var React31 = require('react');
4
+ var React38 = require('react');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var materialColorUtilities = require('@material/material-color-utilities');
7
7
  var clsx = require('clsx');
8
8
  var tailwindMerge = require('tailwind-merge');
9
- var RadixDropdown = require('@radix-ui/react-dropdown-menu');
9
+ var RxContextMenu = require('@radix-ui/react-context-menu');
10
10
  var react = require('motion/react');
11
+ var DropdownMenu = require('@radix-ui/react-dropdown-menu');
11
12
  var reactSlot = require('@radix-ui/react-slot');
12
13
  var classVarianceAuthority = require('class-variance-authority');
13
14
  var RadixScrollArea = require('@radix-ui/react-scroll-area');
@@ -32,8 +33,9 @@ function _interopNamespace(e) {
32
33
  return Object.freeze(n);
33
34
  }
34
35
 
35
- var React31__namespace = /*#__PURE__*/_interopNamespace(React31);
36
- var RadixDropdown__namespace = /*#__PURE__*/_interopNamespace(RadixDropdown);
36
+ var React38__namespace = /*#__PURE__*/_interopNamespace(React38);
37
+ var RxContextMenu__namespace = /*#__PURE__*/_interopNamespace(RxContextMenu);
38
+ var DropdownMenu__namespace = /*#__PURE__*/_interopNamespace(DropdownMenu);
37
39
  var RadixScrollArea__namespace = /*#__PURE__*/_interopNamespace(RadixScrollArea);
38
40
  var RadixDialog__namespace = /*#__PURE__*/_interopNamespace(RadixDialog);
39
41
 
@@ -77,8 +79,8 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
77
79
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
78
80
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
79
81
  function useMediaQuery(query) {
80
- const [matches, setMatches] = React31.useState(false);
81
- React31.useEffect(() => {
82
+ const [matches, setMatches] = React38.useState(false);
83
+ React38.useEffect(() => {
82
84
  const mql = window.matchMedia(query);
83
85
  const handler = (e) => setMatches(e.matches);
84
86
  setMatches(mql.matches);
@@ -94,8 +96,8 @@ function useRipple(options = {}) {
94
96
  opacity = 0.12,
95
97
  disabled = false
96
98
  } = options;
97
- const ref = React31.useRef(null);
98
- const onPointerDown = React31.useCallback(
99
+ const ref = React38.useRef(null);
100
+ const onPointerDown = React38.useCallback(
99
101
  (event) => {
100
102
  if (disabled || !ref.current) return;
101
103
  const el = ref.current;
@@ -176,6 +178,11 @@ function MaterialSymbolsPreconnect({
176
178
  )
177
179
  ] });
178
180
  }
181
+ function resolveMode(mode) {
182
+ if (mode !== "system") return mode;
183
+ if (typeof window === "undefined") return "light";
184
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
185
+ }
179
186
  function generateM3Theme(sourceColorHex, mode = "light") {
180
187
  const sourceColor = materialColorUtilities.argbFromHex(sourceColorHex);
181
188
  const theme = materialColorUtilities.themeFromSourceColor(sourceColor);
@@ -234,13 +241,14 @@ function generateM3Theme(sourceColorHex, mode = "light") {
234
241
  };
235
242
  }
236
243
  function applyTheme(sourceColorHex, mode = "light", root = document.documentElement) {
237
- const colors = generateM3Theme(sourceColorHex, mode);
244
+ const resolved = resolveMode(mode);
245
+ const colors = generateM3Theme(sourceColorHex, resolved);
238
246
  for (const [key, value] of Object.entries(colors)) {
239
- const kebabKey = key.replace(/[A-Z]/g, (m43) => `-${m43.toLowerCase()}`);
247
+ const kebabKey = key.replace(/[A-Z]/g, (m47) => `-${m47.toLowerCase()}`);
240
248
  root.style.setProperty(`--md-sys-color-${kebabKey}`, value);
241
249
  root.style.setProperty(`--color-m3-${kebabKey}`, value);
242
250
  }
243
- root.setAttribute("data-theme", mode);
251
+ root.setAttribute("data-theme", resolved);
244
252
  }
245
253
  function cn(...inputs) {
246
254
  return tailwindMerge.twMerge(clsx.clsx(inputs));
@@ -433,6 +441,671 @@ function AppBarItemButton({ item }) {
433
441
  );
434
442
  }
435
443
 
444
+ // src/ui/menu/menu-animations.ts
445
+ var FAST_SPATIAL_SPRING = {
446
+ type: "spring",
447
+ stiffness: 380,
448
+ damping: 28,
449
+ mass: 1
450
+ };
451
+ var FAST_EFFECTS_TRANSITION = {
452
+ duration: 0.15,
453
+ ease: [0.4, 0, 1, 1]
454
+ // FastOutLinearIn
455
+ };
456
+ var MENU_CONTAINER_VARIANTS = {
457
+ hidden: {
458
+ opacity: 0,
459
+ scale: 0.8
460
+ },
461
+ visible: {
462
+ opacity: 1,
463
+ scale: 1,
464
+ transition: FAST_SPATIAL_SPRING
465
+ },
466
+ exit: {
467
+ opacity: 0,
468
+ scale: 0.8,
469
+ transition: FAST_EFFECTS_TRANSITION
470
+ }
471
+ };
472
+ var MENU_CHECK_ICON_SIZE = 20;
473
+ var CHECK_ICON_VARIANTS = {
474
+ hidden: {
475
+ opacity: 0,
476
+ width: 0
477
+ },
478
+ visible: {
479
+ opacity: 1,
480
+ width: MENU_CHECK_ICON_SIZE,
481
+ transition: FAST_SPATIAL_SPRING
482
+ },
483
+ exit: {
484
+ opacity: 0,
485
+ width: 0,
486
+ transition: FAST_EFFECTS_TRANSITION
487
+ }
488
+ };
489
+ var SUBMENU_CONTAINER_VARIANTS = {
490
+ hidden: {
491
+ opacity: 0,
492
+ scale: 0.9,
493
+ x: -4
494
+ },
495
+ visible: {
496
+ opacity: 1,
497
+ scale: 1,
498
+ x: 0,
499
+ transition: FAST_SPATIAL_SPRING
500
+ },
501
+ exit: {
502
+ opacity: 0,
503
+ scale: 0.9,
504
+ x: -4,
505
+ transition: FAST_EFFECTS_TRANSITION
506
+ }
507
+ };
508
+ var MenuContext = React38__namespace.createContext({
509
+ variant: "baseline",
510
+ colorVariant: "standard",
511
+ menuPrimitive: "dropdown",
512
+ open: false,
513
+ onOpenChange: () => {
514
+ }
515
+ });
516
+ function MenuProvider({
517
+ variant = "baseline",
518
+ colorVariant = "standard",
519
+ menuPrimitive = "dropdown",
520
+ open,
521
+ onOpenChange,
522
+ children
523
+ }) {
524
+ const value = React38__namespace.useMemo(
525
+ () => ({ variant, colorVariant, menuPrimitive, open, onOpenChange }),
526
+ [variant, colorVariant, menuPrimitive, open, onOpenChange]
527
+ );
528
+ return /* @__PURE__ */ jsxRuntime.jsx(MenuContext.Provider, { value, children });
529
+ }
530
+ function useMenuContext() {
531
+ const ctx = React38__namespace.useContext(MenuContext);
532
+ return React38__namespace.useMemo(
533
+ () => __spreadProps(__spreadValues({}, ctx), {
534
+ isStatic: ctx.menuPrimitive === "static",
535
+ menuVariant: ctx.variant
536
+ }),
537
+ [ctx]
538
+ );
539
+ }
540
+
541
+ // src/ui/menu/menu-tokens.ts
542
+ var MENU_BASELINE_ITEM_HORIZONTAL_PADDING = "px-3";
543
+ var MENU_ITEM_MIN_HEIGHT = "min-h-11";
544
+ var MENU_MIN_WIDTH = "min-w-28";
545
+ var MENU_MAX_WIDTH = "max-w-70";
546
+ var MENU_GROUP_GAP = "gap-0.5";
547
+ var MENU_GROUP_PADDING_Y = "py-1";
548
+ var MENU_POPUP_PADDING_Y = "py-2";
549
+ var MENU_ICON_SIZE = 20;
550
+ var MENU_CONTAINER_SHAPE = "rounded-[4px]";
551
+ var BASELINE_ITEM_SHAPE = "rounded-none";
552
+ var GROUP_SHAPES = {
553
+ /** Active standalone group shape: CornerLarge all corners (16px) */
554
+ standaloneActive: "16px",
555
+ /**
556
+ * Active leading group shape: top=CornerLarge(16px), bottom=CornerSmall(8px)
557
+ * Source: SegmentedMenuTokens — LeadingContainerShape:
558
+ * topStart=CornerLarge, topEnd=CornerLarge, bottomStart=CornerSmall, bottomEnd=CornerSmall
559
+ */
560
+ leadingActive: "16px 16px 8px 8px",
561
+ /** Active middle group shape: CornerExtraSmall all corners (4px) */
562
+ middleActive: "4px",
563
+ /**
564
+ * Active trailing group shape: top=CornerSmall(8px), bottom=CornerLarge(16px)
565
+ * Source: SegmentedMenuTokens — TrailingContainerShape:
566
+ * topStart=CornerSmall, topEnd=CornerSmall, bottomStart=CornerLarge, bottomEnd=CornerLarge
567
+ */
568
+ trailingActive: "8px 8px 16px 16px",
569
+ /** Inactive (default, pre-hover) shape for all groups: CornerExtraSmall (4px) */
570
+ inactive: "4px"
571
+ };
572
+ var ITEM_SHAPE_CLASSES = {
573
+ leading: "rounded-t-[12px] rounded-b-[4px]",
574
+ middle: "rounded-[4px]",
575
+ trailing: "rounded-t-[4px] rounded-b-[12px]",
576
+ standalone: "rounded-[4px]",
577
+ selected: "rounded-[12px]"
578
+ };
579
+ var STANDARD_COLORS = {
580
+ /** Group/popup container background (StandardMenuTokens.ContainerColor) */
581
+ containerBg: "bg-m3-surface-container-low",
582
+ /** Label text color (StandardMenuTokens.ItemLabelTextColor) */
583
+ labelText: "text-m3-on-surface",
584
+ /** Leading/trailing icon color (StandardMenuTokens.ItemLeadingIconColor) */
585
+ iconColor: "text-m3-on-surface-variant",
586
+ /** Supporting text below label (StandardMenuTokens.ItemSupportingTextColor) */
587
+ supportingTextColor: "text-m3-on-surface-variant",
588
+ /** Trailing supporting text (StandardMenuTokens.ItemTrailingSupportingTextColor) */
589
+ trailingSupportingTextColor: "text-m3-on-surface-variant",
590
+ /** Trailing icon color (StandardMenuTokens.ItemTrailingIconColor) */
591
+ trailingIconColor: "text-m3-on-surface-variant",
592
+ /** Hover state layer (OnSurface @ 8% opacity) */
593
+ hoverLayer: "hover:bg-m3-on-surface/8",
594
+ /** Focus state layer (OnSurface @ 12% opacity) */
595
+ focusLayer: "focus:bg-m3-on-surface/12",
596
+ /** Selected item background (StandardMenuTokens.ItemSelectedContainerColor) */
597
+ selectedBg: "bg-m3-tertiary-container",
598
+ /** Selected item text (StandardMenuTokens.ItemSelectedLabelTextColor) */
599
+ selectedText: "text-m3-on-tertiary-container",
600
+ /** Selected item icon (StandardMenuTokens.ItemSelectedLeadingIconColor) */
601
+ selectedIcon: "text-m3-on-tertiary-container",
602
+ /** Disabled opacity: 38% (StandardMenuTokens.ItemDisabledLabelTextOpacity) */
603
+ disabledOpacity: "data-disabled:opacity-[0.38]"
604
+ };
605
+ var BASELINE_COLORS = {
606
+ containerBg: "bg-m3-surface-container",
607
+ labelText: "text-m3-on-surface",
608
+ iconColor: "text-m3-on-surface-variant",
609
+ supportingTextColor: "text-m3-on-surface-variant",
610
+ trailingIconColor: "text-m3-on-surface-variant",
611
+ hoverLayer: "hover:bg-m3-on-surface/8",
612
+ focusLayer: "focus:bg-m3-on-surface/12",
613
+ selectedBg: "bg-m3-secondary-container",
614
+ selectedText: "text-m3-on-secondary-container",
615
+ selectedIcon: "text-m3-on-secondary-container"};
616
+ var VIBRANT_COLORS = {
617
+ /** Group/popup container background (VibrantMenuTokens.ContainerColor) */
618
+ containerBg: "bg-m3-tertiary-container",
619
+ /** Label text color (VibrantMenuTokens.ItemLabelTextColor) */
620
+ labelText: "text-m3-on-tertiary-container",
621
+ /** Leading/trailing icon color (VibrantMenuTokens.ItemLeadingIconColor) */
622
+ iconColor: "text-m3-on-tertiary-container",
623
+ /** Supporting text below label (VibrantMenuTokens.ItemSupportingTextColor) */
624
+ supportingTextColor: "text-m3-on-tertiary-container",
625
+ /** Trailing supporting text (VibrantMenuTokens.ItemTrailingSupportingTextColor) */
626
+ trailingSupportingTextColor: "text-m3-on-tertiary-container",
627
+ /** Trailing icon color (VibrantMenuTokens.ItemTrailingIconColor) */
628
+ trailingIconColor: "text-m3-on-tertiary-container",
629
+ /** Hover state layer (OnTertiaryContainer @ 8% opacity) */
630
+ hoverLayer: "hover:bg-m3-on-tertiary-container/8",
631
+ /** Focus state layer (OnTertiaryContainer @ 12% opacity) */
632
+ focusLayer: "focus:bg-m3-on-tertiary-container/12",
633
+ /** Selected item background (VibrantMenuTokens.ItemSelectedContainerColor = Tertiary) */
634
+ selectedBg: "bg-m3-tertiary",
635
+ /** Selected item text (VibrantMenuTokens.ItemSelectedLabelTextColor = OnTertiary) */
636
+ selectedText: "text-m3-on-tertiary",
637
+ /** Selected item icon (VibrantMenuTokens.ItemSelectedLeadingIconColor = OnTertiary) */
638
+ selectedIcon: "text-m3-on-tertiary",
639
+ /** Disabled opacity: 38% (VibrantMenuTokens.ItemDisabledLabelTextOpacity) */
640
+ disabledOpacity: "data-disabled:opacity-[0.38]"
641
+ };
642
+ var DIVIDER_PADDING = "mx-3 my-0.5";
643
+ var DIVIDER_COLOR = "bg-m3-outline-variant";
644
+ function ContextMenu({
645
+ children,
646
+ variant = "baseline",
647
+ colorVariant = "standard"
648
+ }) {
649
+ const [open, setOpen] = React38__namespace.useState(false);
650
+ return /* @__PURE__ */ jsxRuntime.jsx(
651
+ MenuProvider,
652
+ {
653
+ variant,
654
+ colorVariant,
655
+ menuPrimitive: "context",
656
+ open,
657
+ onOpenChange: setOpen,
658
+ children: /* @__PURE__ */ jsxRuntime.jsx(RxContextMenu__namespace.Root, { onOpenChange: setOpen, children })
659
+ }
660
+ );
661
+ }
662
+ ContextMenu.displayName = "ContextMenu";
663
+ var ContextMenuTrigger = React38__namespace.forwardRef((_a, ref) => {
664
+ var _b = _a, { children, asChild = true } = _b, props = __objRest(_b, ["children", "asChild"]);
665
+ return /* @__PURE__ */ jsxRuntime.jsx(RxContextMenu__namespace.Trigger, __spreadProps(__spreadValues({ ref, asChild }, props), { children }));
666
+ });
667
+ ContextMenuTrigger.displayName = "ContextMenuTrigger";
668
+ var ContextMenuContent = React38__namespace.forwardRef(
669
+ (_a, ref) => {
670
+ var _b = _a, {
671
+ children,
672
+ hasOverflow = false,
673
+ colorVariant: propColorVariant,
674
+ separatorStyle = "gap",
675
+ className
676
+ } = _b, props = __objRest(_b, [
677
+ "children",
678
+ "hasOverflow",
679
+ "colorVariant",
680
+ "separatorStyle",
681
+ "className"
682
+ ]);
683
+ const {
684
+ open,
685
+ variant,
686
+ colorVariant: contextColorVariant
687
+ } = useMenuContext();
688
+ const colorVariant = propColorVariant != null ? propColorVariant : contextColorVariant;
689
+ const colors = variant === "baseline" ? BASELINE_COLORS : colorVariant === "vibrant" ? VIBRANT_COLORS : STANDARD_COLORS;
690
+ const isExpressiveGap = variant === "expressive" && separatorStyle === "gap";
691
+ const containerClassName = variant === "expressive" ? cn(
692
+ "z-50 flex flex-col w-full",
693
+ MENU_MIN_WIDTH,
694
+ MENU_MAX_WIDTH,
695
+ isExpressiveGap ? MENU_GROUP_GAP : "",
696
+ isExpressiveGap ? "bg-transparent" : colors.containerBg,
697
+ isExpressiveGap ? "" : "rounded-2xl",
698
+ isExpressiveGap ? "" : "elevation-2",
699
+ hasOverflow || isExpressiveGap ? "overflow-visible" : "overflow-hidden",
700
+ "outline-none",
701
+ className
702
+ ) : cn(
703
+ "z-50 flex flex-col",
704
+ MENU_MIN_WIDTH,
705
+ MENU_MAX_WIDTH,
706
+ MENU_POPUP_PADDING_Y,
707
+ MENU_GROUP_GAP,
708
+ colors.containerBg,
709
+ MENU_CONTAINER_SHAPE,
710
+ "elevation-2",
711
+ hasOverflow ? "overflow-visible" : "overflow-hidden",
712
+ "outline-none",
713
+ className
714
+ );
715
+ const flattenChildren = (nodes) => {
716
+ return React38__namespace.Children.toArray(nodes).reduce(
717
+ (acc, child) => {
718
+ if (React38__namespace.isValidElement(child)) {
719
+ if (child.type === React38__namespace.Fragment) {
720
+ return acc.concat(
721
+ flattenChildren(
722
+ child.props.children
723
+ )
724
+ );
725
+ }
726
+ acc.push(child);
727
+ }
728
+ return acc;
729
+ },
730
+ []
731
+ );
732
+ };
733
+ let renderedChildren = children;
734
+ if (variant === "expressive") {
735
+ const validChildren = flattenChildren(children);
736
+ const groupCount = validChildren.length;
737
+ const enhancedChildren = validChildren.map(
738
+ (child, i) => React38__namespace.cloneElement(
739
+ child,
740
+ {
741
+ index: i,
742
+ count: groupCount,
743
+ isGapVariant: isExpressiveGap
744
+ }
745
+ )
746
+ );
747
+ renderedChildren = separatorStyle === "divider" ? enhancedChildren.reduce((acc, child, i) => {
748
+ if (i > 0) {
749
+ acc.push(
750
+ /* @__PURE__ */ jsxRuntime.jsx(
751
+ "hr",
752
+ {
753
+ className: cn(
754
+ "mx-3 my-0.5 h-px border-0 bg-m3-outline-variant"
755
+ )
756
+ },
757
+ `divider-${child.key || i}`
758
+ )
759
+ );
760
+ }
761
+ acc.push(child);
762
+ return acc;
763
+ }, []) : enhancedChildren;
764
+ }
765
+ return /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { children: open && /* @__PURE__ */ jsxRuntime.jsx(RxContextMenu__namespace.Portal, { forceMount: true, children: /* @__PURE__ */ jsxRuntime.jsx(RxContextMenu__namespace.Content, __spreadProps(__spreadValues({ ref, asChild: true, forceMount: true }, props), { children: /* @__PURE__ */ jsxRuntime.jsx(
766
+ react.m.div,
767
+ {
768
+ className: containerClassName,
769
+ initial: { opacity: 0, scale: 0.95, y: -4 },
770
+ animate: { opacity: 1, scale: 1, y: 0 },
771
+ exit: { opacity: 0, scale: 0.95, y: -4 },
772
+ transition: FAST_SPATIAL_SPRING,
773
+ style: __spreadProps(__spreadValues({}, props.style), {
774
+ transformOrigin: "var(--radix-context-menu-content-transform-origin)"
775
+ }),
776
+ children: renderedChildren
777
+ }
778
+ ) })) }) });
779
+ }
780
+ );
781
+ ContextMenuContent.displayName = "ContextMenuContent";
782
+ function Menu(_a) {
783
+ var _b = _a, {
784
+ children,
785
+ variant,
786
+ menuVariant,
787
+ colorVariant = "standard",
788
+ open: controlledOpen,
789
+ onOpenChange: controlledOnOpenChange,
790
+ defaultOpen
791
+ } = _b, props = __objRest(_b, [
792
+ "children",
793
+ "variant",
794
+ "menuVariant",
795
+ "colorVariant",
796
+ "open",
797
+ "onOpenChange",
798
+ "defaultOpen"
799
+ ]);
800
+ var _a2;
801
+ const resolvedVariant = (_a2 = variant != null ? variant : menuVariant) != null ? _a2 : "baseline";
802
+ const [internalOpen, setInternalOpen] = React38__namespace.useState(
803
+ () => defaultOpen != null ? defaultOpen : false
804
+ );
805
+ const isControlled = controlledOpen !== void 0;
806
+ const open = isControlled ? controlledOpen : internalOpen;
807
+ const handleOpenChange = React38__namespace.useCallback(
808
+ (next) => {
809
+ if (!isControlled) setInternalOpen(next);
810
+ controlledOnOpenChange == null ? void 0 : controlledOnOpenChange(next);
811
+ },
812
+ [isControlled, controlledOnOpenChange]
813
+ );
814
+ return /* @__PURE__ */ jsxRuntime.jsx(
815
+ MenuProvider,
816
+ {
817
+ variant: resolvedVariant,
818
+ colorVariant,
819
+ open,
820
+ onOpenChange: handleOpenChange,
821
+ children: /* @__PURE__ */ jsxRuntime.jsx(
822
+ DropdownMenu__namespace.Root,
823
+ __spreadProps(__spreadValues({}, props), {
824
+ defaultOpen,
825
+ open: isControlled ? open : void 0,
826
+ onOpenChange: handleOpenChange,
827
+ children
828
+ })
829
+ )
830
+ }
831
+ );
832
+ }
833
+ Menu.displayName = "Menu";
834
+ var MenuTrigger = React38__namespace.forwardRef((_a, ref) => {
835
+ var _b = _a, { children, asChild = true } = _b, props = __objRest(_b, ["children", "asChild"]);
836
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu__namespace.Trigger, __spreadProps(__spreadValues({ ref, asChild }, props), { children }));
837
+ });
838
+ MenuTrigger.displayName = "MenuTrigger";
839
+ var MenuContent = React38__namespace.forwardRef(
840
+ (_a, ref) => {
841
+ var _b = _a, {
842
+ children,
843
+ sideOffset = 6,
844
+ side = "bottom",
845
+ align = "start",
846
+ hasOverflow = false,
847
+ colorVariant: propColorVariant,
848
+ separatorStyle = "gap",
849
+ className
850
+ } = _b, props = __objRest(_b, [
851
+ "children",
852
+ "sideOffset",
853
+ "side",
854
+ "align",
855
+ "hasOverflow",
856
+ "colorVariant",
857
+ "separatorStyle",
858
+ "className"
859
+ ]);
860
+ const {
861
+ open,
862
+ variant,
863
+ colorVariant: contextColorVariant
864
+ } = useMenuContext();
865
+ const colorVariant = propColorVariant != null ? propColorVariant : contextColorVariant;
866
+ const colors = variant === "baseline" ? BASELINE_COLORS : colorVariant === "vibrant" ? VIBRANT_COLORS : STANDARD_COLORS;
867
+ const isExpressiveGap = variant === "expressive" && separatorStyle === "gap";
868
+ const containerClassName = variant === "expressive" ? cn(
869
+ "z-50 flex flex-col",
870
+ MENU_MIN_WIDTH,
871
+ MENU_MAX_WIDTH,
872
+ isExpressiveGap ? MENU_GROUP_GAP : "",
873
+ isExpressiveGap ? "bg-transparent" : colors.containerBg,
874
+ isExpressiveGap ? "" : "rounded-2xl",
875
+ isExpressiveGap ? "" : "elevation-2",
876
+ hasOverflow || isExpressiveGap ? "overflow-visible" : "overflow-hidden",
877
+ "outline-none",
878
+ className
879
+ ) : cn(
880
+ "z-50 flex flex-col",
881
+ MENU_MIN_WIDTH,
882
+ MENU_MAX_WIDTH,
883
+ MENU_POPUP_PADDING_Y,
884
+ MENU_GROUP_GAP,
885
+ colors.containerBg,
886
+ MENU_CONTAINER_SHAPE,
887
+ "elevation-2",
888
+ hasOverflow ? "overflow-visible" : "overflow-hidden",
889
+ "outline-none",
890
+ className
891
+ );
892
+ const flattenChildren = (nodes) => {
893
+ return React38__namespace.Children.toArray(nodes).reduce(
894
+ (acc, child) => {
895
+ if (React38__namespace.isValidElement(child)) {
896
+ if (child.type === React38__namespace.Fragment) {
897
+ return acc.concat(
898
+ flattenChildren(
899
+ child.props.children
900
+ )
901
+ );
902
+ }
903
+ acc.push(child);
904
+ }
905
+ return acc;
906
+ },
907
+ []
908
+ );
909
+ };
910
+ let renderedChildren = children;
911
+ if (variant === "expressive") {
912
+ const validChildren = flattenChildren(children);
913
+ const groupCount = validChildren.length;
914
+ const enhancedChildren = validChildren.map(
915
+ (child, i) => React38__namespace.cloneElement(child, {
916
+ index: i,
917
+ count: groupCount,
918
+ isGapVariant: isExpressiveGap
919
+ })
920
+ );
921
+ renderedChildren = separatorStyle === "divider" ? enhancedChildren.reduce((acc, child, i) => {
922
+ if (i > 0) {
923
+ acc.push(
924
+ /* @__PURE__ */ jsxRuntime.jsx(
925
+ "hr",
926
+ {
927
+ className: cn(
928
+ "mx-3 my-0.5 h-px border-0 bg-m3-outline-variant"
929
+ )
930
+ },
931
+ `divider-${child.key || i}`
932
+ )
933
+ );
934
+ }
935
+ acc.push(child);
936
+ return acc;
937
+ }, []) : enhancedChildren;
938
+ }
939
+ return /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { children: open && /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu__namespace.Portal, { forceMount: true, children: /* @__PURE__ */ jsxRuntime.jsx(
940
+ DropdownMenu__namespace.Content,
941
+ __spreadProps(__spreadValues({
942
+ ref,
943
+ sideOffset,
944
+ side,
945
+ align,
946
+ asChild: true,
947
+ forceMount: true
948
+ }, props), {
949
+ children: /* @__PURE__ */ jsxRuntime.jsx(
950
+ react.m.div,
951
+ {
952
+ role: "menu",
953
+ "aria-orientation": "vertical",
954
+ className: containerClassName,
955
+ variants: MENU_CONTAINER_VARIANTS,
956
+ initial: "hidden",
957
+ animate: "visible",
958
+ exit: "exit",
959
+ style: __spreadProps(__spreadValues({}, props.style), {
960
+ transformOrigin: "var(--radix-dropdown-menu-content-transform-origin)"
961
+ }),
962
+ children: renderedChildren
963
+ }
964
+ )
965
+ })
966
+ ) }) });
967
+ }
968
+ );
969
+ MenuContent.displayName = "MenuContent";
970
+ var MenuDivider = React38__namespace.forwardRef(
971
+ (_a, ref) => {
972
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
973
+ const { menuVariant } = useMenuContext();
974
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu__namespace.Separator, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
975
+ "hr",
976
+ __spreadValues({
977
+ ref,
978
+ className: cn(
979
+ // Baseline: 8dp vertical margin, 0 horizontal. Expressive: 12dp horizontal, 2dp vertical
980
+ menuVariant === "baseline" ? "my-2 mx-0" : "mx-3 my-0.5",
981
+ // 1px height line
982
+ "h-px border-0",
983
+ // outline-variant color
984
+ "bg-m3-outline-variant",
985
+ className
986
+ )
987
+ }, props)
988
+ ) });
989
+ }
990
+ );
991
+ MenuDivider.displayName = "MenuDivider";
992
+ function getGroupPosition(index, count) {
993
+ if (count === 1) return "standalone";
994
+ if (index === 0) return "leading";
995
+ if (index === count - 1) return "trailing";
996
+ return "middle";
997
+ }
998
+ function getGroupActiveShape(position) {
999
+ return GROUP_SHAPES[`${position}Active`];
1000
+ }
1001
+ var MenuGroup = React38__namespace.forwardRef(
1002
+ (_a, ref) => {
1003
+ var _b = _a, {
1004
+ children,
1005
+ label,
1006
+ index = 0,
1007
+ count = 1,
1008
+ colorVariant: propColorVariant,
1009
+ isGapVariant,
1010
+ itemPosition,
1011
+ className
1012
+ } = _b, rest = __objRest(_b, [
1013
+ "children",
1014
+ "label",
1015
+ "index",
1016
+ "count",
1017
+ "colorVariant",
1018
+ "isGapVariant",
1019
+ "itemPosition",
1020
+ "className"
1021
+ ]);
1022
+ const {
1023
+ menuVariant,
1024
+ colorVariant: contextColorVariant,
1025
+ isStatic
1026
+ } = useMenuContext();
1027
+ const colorVariant = propColorVariant != null ? propColorVariant : contextColorVariant;
1028
+ const colors = menuVariant === "baseline" ? BASELINE_COLORS : colorVariant === "vibrant" ? VIBRANT_COLORS : STANDARD_COLORS;
1029
+ const position = getGroupPosition(index, count);
1030
+ const activeShape = getGroupActiveShape(position);
1031
+ const [isHovered, setIsHovered] = React38__namespace.useState(false);
1032
+ const currentShape = isStatic || isHovered ? activeShape : GROUP_SHAPES.inactive;
1033
+ const handlePointerEnter = React38__namespace.useCallback(() => setIsHovered(true), []);
1034
+ const handlePointerLeave = React38__namespace.useCallback(() => setIsHovered(false), []);
1035
+ const flattenChildren = (children2) => {
1036
+ return React38__namespace.Children.toArray(children2).reduce(
1037
+ (acc, child) => {
1038
+ if (React38__namespace.isValidElement(child)) {
1039
+ if (child.type === React38__namespace.Fragment) {
1040
+ return acc.concat(
1041
+ flattenChildren(
1042
+ child.props.children
1043
+ )
1044
+ );
1045
+ }
1046
+ acc.push(child);
1047
+ }
1048
+ return acc;
1049
+ },
1050
+ []
1051
+ );
1052
+ };
1053
+ const validChildren = flattenChildren(children);
1054
+ const itemCount = validChildren.length;
1055
+ const enhancedChildren = validChildren.map((child, i) => {
1056
+ const itemPosition2 = itemCount === 1 ? "standalone" : i === 0 ? "leading" : i === itemCount - 1 ? "trailing" : "middle";
1057
+ return React38__namespace.cloneElement(child, {
1058
+ itemPosition: itemPosition2,
1059
+ colorVariant
1060
+ });
1061
+ });
1062
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1063
+ react.m.div,
1064
+ __spreadProps(__spreadValues({
1065
+ ref,
1066
+ role: "group",
1067
+ "aria-label": label,
1068
+ className: cn(
1069
+ "relative",
1070
+ // In baseline variant, MenuGroup is transparent so it shouldn't clip.
1071
+ // In expressive variant, it needs overflow-hidden to clip hover states to its morphing shape.
1072
+ menuVariant === "baseline" ? "" : "overflow-hidden",
1073
+ // Vertical padding: 2dp for gap variant (to match Figma), 4dp for baseline
1074
+ isGapVariant ? "py-0.5" : MENU_GROUP_PADDING_Y,
1075
+ // Horizontal padding: 4dp for expressive menus (both static and popup), 0 for baseline
1076
+ menuVariant === "expressive" ? "px-1" : "",
1077
+ // Gap variant has floating segments, so each group manages its own shadow
1078
+ isGapVariant ? "elevation-2" : "",
1079
+ // Background based on color variant (transparent for baseline to avoid double-layering)
1080
+ menuVariant === "baseline" ? "bg-transparent" : colors.containerBg,
1081
+ className
1082
+ ),
1083
+ animate: { borderRadius: currentShape },
1084
+ transition: FAST_SPATIAL_SPRING,
1085
+ onPointerEnter: handlePointerEnter,
1086
+ onPointerLeave: handlePointerLeave
1087
+ }, rest), {
1088
+ children: [
1089
+ label && /* @__PURE__ */ jsxRuntime.jsx(
1090
+ "span",
1091
+ {
1092
+ className: cn(
1093
+ // Padding: 12dp top, 12dp horizontal, 8dp bottom (MD3 spec)
1094
+ "block pt-3 px-3 pb-2",
1095
+ "text-label-small",
1096
+ menuVariant === "baseline" ? "text-m3-on-surface-variant" : colorVariant === "vibrant" ? "text-m3-on-tertiary-container" : "text-m3-on-surface-variant"
1097
+ ),
1098
+ children: label
1099
+ }
1100
+ ),
1101
+ enhancedChildren
1102
+ ]
1103
+ })
1104
+ );
1105
+ }
1106
+ );
1107
+ MenuGroup.displayName = "MenuGroup";
1108
+
436
1109
  // src/ui/shared/constants.ts
437
1110
  var SPRING_TRANSITION_FAST = {
438
1111
  type: "spring",
@@ -444,6 +1117,11 @@ var SPRING_TRANSITION = {
444
1117
  bounce: 0,
445
1118
  duration: 0.3
446
1119
  };
1120
+ var SPRING_TRANSITION_EXPRESSIVE = {
1121
+ type: "spring",
1122
+ bounce: 0.35,
1123
+ duration: 0.4
1124
+ };
447
1125
  var ICON_SPAN_VARIANTS = {
448
1126
  initial: { scale: 0.01 },
449
1127
  animate: { scale: 1 },
@@ -464,7 +1142,7 @@ var VARIANT_FONT = {
464
1142
  rounded: "'Material Symbols Rounded'",
465
1143
  sharp: "'Material Symbols Sharp'"
466
1144
  };
467
- var IconComponent = React31__namespace.forwardRef(
1145
+ var IconComponent = React38__namespace.forwardRef(
468
1146
  (_a, ref) => {
469
1147
  var _b = _a, {
470
1148
  name,
@@ -530,222 +1208,527 @@ var IconComponent = React31__namespace.forwardRef(
530
1208
  }
531
1209
  );
532
1210
  IconComponent.displayName = "Icon";
533
- var Icon = React31__namespace.memo(IconComponent);
534
- var MD3_MENU_ANIM = {
535
- initial: { opacity: 0, scale: 0.96, y: -6 },
536
- animate: {
537
- opacity: 1,
538
- scale: 1,
539
- y: 0,
540
- transition: {
541
- type: "spring",
542
- stiffness: 380,
543
- damping: 30,
544
- mass: 0.8
545
- }
546
- },
547
- exit: { opacity: 0, scale: 0.97, y: -4, transition: { duration: 0.12 } }
548
- };
549
- var DropdownMenu = RadixDropdown__namespace.Root;
550
- DropdownMenu.displayName = "DropdownMenu";
551
- var DropdownMenuTrigger = RadixDropdown__namespace.Trigger;
552
- DropdownMenuTrigger.displayName = "DropdownMenuTrigger";
553
- var DropdownMenuGroup = RadixDropdown__namespace.Group;
554
- var DropdownMenuPortal = RadixDropdown__namespace.Portal;
555
- var DropdownMenuSub = RadixDropdown__namespace.Sub;
556
- var DropdownMenuRadioGroup = RadixDropdown__namespace.RadioGroup;
557
- var DropdownMenuContent = React31__namespace.forwardRef((_a, ref) => {
558
- var _b = _a, { className, sideOffset = 6, children } = _b, props = __objRest(_b, ["className", "sideOffset", "children"]);
559
- return /* @__PURE__ */ jsxRuntime.jsx(RadixDropdown__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { children: /* @__PURE__ */ jsxRuntime.jsx(
560
- RadixDropdown__namespace.Content,
561
- __spreadProps(__spreadValues({
562
- ref,
563
- sideOffset,
564
- asChild: true
565
- }, props), {
566
- children: /* @__PURE__ */ jsxRuntime.jsx(
567
- react.m.div,
568
- __spreadProps(__spreadValues({
569
- className: cn(
570
- "z-50 min-w-32 overflow-hidden",
571
- "rounded-xl bg-m3-surface-container p-1",
572
- "shadow-md",
573
- "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-m3-primary",
574
- className
575
- )
576
- }, MD3_MENU_ANIM), {
577
- children
578
- })
579
- )
580
- })
581
- ) }) });
582
- });
583
- DropdownMenuContent.displayName = "DropdownMenuContent";
584
- var DropdownMenuSubContent = React31__namespace.forwardRef((_a, ref) => {
585
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
586
- return /* @__PURE__ */ jsxRuntime.jsx(
587
- RadixDropdown__namespace.SubContent,
588
- __spreadValues({
589
- ref,
590
- className: cn(
591
- "z-50 min-w-32 overflow-hidden",
592
- "rounded-xl bg-m3-surface-container p-1 shadow-md",
593
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
594
- "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
595
- "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
596
- "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2",
597
- "data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
598
- className
599
- )
600
- }, props)
1211
+ var Icon = React38__namespace.memo(IconComponent);
1212
+ function getItemShapeClass(position, selected, isStatic = false, menuVariant = "expressive") {
1213
+ if (menuVariant === "baseline") return BASELINE_ITEM_SHAPE;
1214
+ if (selected) return ITEM_SHAPE_CLASSES.selected;
1215
+ if (isStatic && position === "standalone") return "rounded-[12px]";
1216
+ return ITEM_SHAPE_CLASSES[position];
1217
+ }
1218
+ var MenuItem = React38__namespace.forwardRef(
1219
+ (_a, ref) => {
1220
+ var _b = _a, {
1221
+ children,
1222
+ onClick,
1223
+ leadingIcon,
1224
+ trailingIcon,
1225
+ supportingText,
1226
+ trailingText,
1227
+ selected,
1228
+ disabled = false,
1229
+ itemPosition = "standalone",
1230
+ colorVariant: propColorVariant,
1231
+ keepOpen = false,
1232
+ className,
1233
+ isSubTrigger,
1234
+ value,
1235
+ role
1236
+ } = _b, rest = __objRest(_b, [
1237
+ "children",
1238
+ "onClick",
1239
+ "leadingIcon",
1240
+ "trailingIcon",
1241
+ "supportingText",
1242
+ "trailingText",
1243
+ "selected",
1244
+ "disabled",
1245
+ "itemPosition",
1246
+ "colorVariant",
1247
+ "keepOpen",
1248
+ "className",
1249
+ "isSubTrigger",
1250
+ "value",
1251
+ "role"
1252
+ ]);
1253
+ const {
1254
+ menuVariant,
1255
+ colorVariant: contextColorVariant,
1256
+ menuPrimitive
1257
+ } = useMenuContext();
1258
+ const colorVariant = propColorVariant != null ? propColorVariant : contextColorVariant;
1259
+ const colors = menuVariant === "baseline" ? BASELINE_COLORS : colorVariant === "vibrant" ? VIBRANT_COLORS : STANDARD_COLORS;
1260
+ const isStaticMenu = menuPrimitive === "static";
1261
+ const shapeClass = getItemShapeClass(
1262
+ itemPosition,
1263
+ !!selected,
1264
+ isStaticMenu,
1265
+ menuVariant
1266
+ );
1267
+ const isSelectable = selected !== void 0 && !isSubTrigger;
1268
+ const isCheckbox = role === "menuitemcheckbox" || selected !== void 0 && !role && !isSubTrigger;
1269
+ const isRadio = role === "menuitemradio";
1270
+ const ItemPrimitive = isStaticMenu || isSubTrigger ? reactSlot.Slot : menuPrimitive === "context" ? isCheckbox ? RxContextMenu__namespace.CheckboxItem : isRadio ? RxContextMenu__namespace.RadioItem : RxContextMenu__namespace.Item : isCheckbox ? DropdownMenu__namespace.CheckboxItem : isRadio ? DropdownMenu__namespace.RadioItem : DropdownMenu__namespace.Item;
1271
+ return /* @__PURE__ */ jsxRuntime.jsx(
1272
+ ItemPrimitive,
1273
+ __spreadProps(__spreadValues({
1274
+ ref
1275
+ }, isStaticMenu || isSubTrigger ? {
1276
+ role: role || (isCheckbox ? "menuitemcheckbox" : isRadio ? "menuitemradio" : "menuitem"),
1277
+ "aria-checked": isCheckbox || isRadio ? !!selected : void 0,
1278
+ "aria-disabled": disabled ? true : void 0,
1279
+ tabIndex: disabled ? -1 : 0,
1280
+ onKeyDown: (e) => {
1281
+ if (e.key === "Enter" || e.key === " ") {
1282
+ e.preventDefault();
1283
+ onClick == null ? void 0 : onClick(e);
1284
+ }
1285
+ },
1286
+ onClick
1287
+ } : __spreadProps(__spreadValues(__spreadValues({
1288
+ disabled,
1289
+ onSelect: keepOpen ? (e) => e.preventDefault() : void 0,
1290
+ onClick
1291
+ }, isCheckbox || isRadio ? { checked: !!selected } : {}), isRadio ? { value: value != null ? value : "" } : {}), {
1292
+ asChild: true
1293
+ })), {
1294
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1295
+ "div",
1296
+ __spreadProps(__spreadValues({
1297
+ className: cn(
1298
+ // Layout
1299
+ "relative flex w-full cursor-pointer select-none items-center outline-none",
1300
+ // Sizing: min-h 48dp, min-w 112dp, max-w 280dp
1301
+ "min-h-12 min-w-28 max-w-70",
1302
+ // Horizontal padding
1303
+ menuVariant === "baseline" ? MENU_BASELINE_ITEM_HORIZONTAL_PADDING : "px-4",
1304
+ // Spacing between items
1305
+ isStaticMenu ? "my-0.5" : "",
1306
+ // Shape morphing (position-based + selected override)
1307
+ shapeClass,
1308
+ // Animate border-radius AND background-color together (FastEffects: 150ms)
1309
+ "transition-[border-radius,background-color] duration-150 ease-in",
1310
+ // Colors based on variant + selection
1311
+ selected ? cn(colors.selectedBg, colors.selectedText) : cn(colors.labelText),
1312
+ // State layers (only on unselected items)
1313
+ !selected && colors.hoverLayer,
1314
+ !selected && colors.focusLayer,
1315
+ // Focus visible ring (WCAG 2.4.11 — visible focus indicator)
1316
+ // Uses ring-inset so the ring doesn't overflow the item bounds.
1317
+ "focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-m3-primary",
1318
+ // Disabled
1319
+ disabled && "pointer-events-none opacity-[0.38]",
1320
+ className
1321
+ )
1322
+ }, rest), {
1323
+ children: [
1324
+ (isSelectable || leadingIcon) && /* @__PURE__ */ jsxRuntime.jsx(
1325
+ "div",
1326
+ {
1327
+ className: "flex h-5 w-5 shrink-0 items-center justify-center mr-3",
1328
+ "aria-hidden": "true",
1329
+ children: isSelectable ? /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { initial: false, mode: "wait", children: selected ? /* @__PURE__ */ jsxRuntime.jsx(
1330
+ react.m.span,
1331
+ {
1332
+ className: cn(
1333
+ "flex h-full w-full items-center justify-center overflow-hidden",
1334
+ colors.selectedIcon
1335
+ ),
1336
+ variants: CHECK_ICON_VARIANTS,
1337
+ initial: "hidden",
1338
+ animate: "visible",
1339
+ exit: "exit",
1340
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "check", fill: 1, size: MENU_CHECK_ICON_SIZE })
1341
+ },
1342
+ "check"
1343
+ ) : leadingIcon ? /* @__PURE__ */ jsxRuntime.jsx(
1344
+ react.m.span,
1345
+ {
1346
+ className: cn(
1347
+ "flex h-full w-full items-center justify-center overflow-hidden",
1348
+ colors.iconColor
1349
+ ),
1350
+ variants: CHECK_ICON_VARIANTS,
1351
+ initial: "hidden",
1352
+ animate: "visible",
1353
+ exit: "exit",
1354
+ children: leadingIcon
1355
+ },
1356
+ "icon"
1357
+ ) : (
1358
+ // Spacer for selectable items with no icon, to keep text aligned
1359
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-5" })
1360
+ ) }) : (
1361
+ // Static icon for non-selectable items
1362
+ /* @__PURE__ */ jsxRuntime.jsx(
1363
+ "span",
1364
+ {
1365
+ className: cn(
1366
+ "flex h-full w-full items-center justify-center",
1367
+ colors.iconColor
1368
+ ),
1369
+ children: leadingIcon
1370
+ }
1371
+ )
1372
+ )
1373
+ }
1374
+ ),
1375
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-1 flex-col", children: [
1376
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-body-large leading-snug", children }),
1377
+ supportingText && /* @__PURE__ */ jsxRuntime.jsx(
1378
+ "span",
1379
+ {
1380
+ className: cn(
1381
+ "text-body-medium leading-snug",
1382
+ // Source: StandardMenuTokens.ItemSupportingTextColor / VibrantMenuTokens
1383
+ selected ? colors.selectedText : colors.supportingTextColor
1384
+ ),
1385
+ children: supportingText
1386
+ }
1387
+ )
1388
+ ] }),
1389
+ (trailingText || trailingIcon) && /* @__PURE__ */ jsxRuntime.jsx(
1390
+ "span",
1391
+ {
1392
+ className: cn(
1393
+ // Minimum 12dp gap from label column (ListTokens)
1394
+ "ml-3 flex shrink-0 items-center",
1395
+ // Source: StandardMenuTokens.ItemTrailingIconColor / VibrantMenuTokens
1396
+ selected ? colors.selectedText : colors.trailingIconColor
1397
+ ),
1398
+ "aria-hidden": trailingIcon ? "true" : void 0,
1399
+ children: trailingText ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-label-small tracking-wider", children: trailingText }) : trailingIcon
1400
+ }
1401
+ )
1402
+ ]
1403
+ })
1404
+ )
1405
+ })
1406
+ );
1407
+ }
1408
+ );
1409
+ MenuItem.displayName = "MenuItem";
1410
+ function SubMenu({
1411
+ children,
1412
+ trigger,
1413
+ side = "right",
1414
+ colorVariant: propColorVariant,
1415
+ hoverOpenDelay = 200,
1416
+ hoverCloseDelay = 300
1417
+ }) {
1418
+ const { colorVariant: contextColorVariant, menuPrimitive } = useMenuContext();
1419
+ const colorVariant = propColorVariant != null ? propColorVariant : contextColorVariant;
1420
+ const [open, setOpen] = React38__namespace.useState(false);
1421
+ const openTimerRef = React38__namespace.useRef(null);
1422
+ const closeTimerRef = React38__namespace.useRef(
1423
+ null
601
1424
  );
602
- });
603
- DropdownMenuSubContent.displayName = "DropdownMenuSubContent";
604
- var DropdownMenuItem = React31__namespace.forwardRef((_a, ref) => {
605
- var _b = _a, { className, inset } = _b, props = __objRest(_b, ["className", "inset"]);
1425
+ const clearTimers = React38__namespace.useCallback(() => {
1426
+ if (openTimerRef.current) clearTimeout(openTimerRef.current);
1427
+ if (closeTimerRef.current) clearTimeout(closeTimerRef.current);
1428
+ }, []);
1429
+ const handleTriggerPointerEnter = React38__namespace.useCallback(() => {
1430
+ clearTimers();
1431
+ openTimerRef.current = setTimeout(() => setOpen(true), hoverOpenDelay);
1432
+ }, [hoverOpenDelay, clearTimers]);
1433
+ const handleTriggerPointerLeave = React38__namespace.useCallback(() => {
1434
+ clearTimers();
1435
+ closeTimerRef.current = setTimeout(() => setOpen(false), hoverCloseDelay);
1436
+ }, [hoverCloseDelay, clearTimers]);
1437
+ const handleContentPointerEnter = React38__namespace.useCallback(() => {
1438
+ clearTimers();
1439
+ }, [clearTimers]);
1440
+ const handleContentPointerLeave = React38__namespace.useCallback(() => {
1441
+ clearTimers();
1442
+ closeTimerRef.current = setTimeout(() => setOpen(false), hoverCloseDelay);
1443
+ }, [hoverCloseDelay, clearTimers]);
1444
+ React38__namespace.useEffect(() => () => clearTimers(), [clearTimers]);
1445
+ const Sub3 = menuPrimitive === "context" ? RxContextMenu__namespace.Sub : DropdownMenu__namespace.Sub;
1446
+ const SubTrigger3 = menuPrimitive === "context" ? RxContextMenu__namespace.SubTrigger : DropdownMenu__namespace.SubTrigger;
1447
+ const SubContent3 = menuPrimitive === "context" ? RxContextMenu__namespace.SubContent : DropdownMenu__namespace.SubContent;
1448
+ const Portal7 = menuPrimitive === "context" ? RxContextMenu__namespace.Portal : DropdownMenu__namespace.Portal;
1449
+ return /* @__PURE__ */ jsxRuntime.jsxs(Sub3, { open, onOpenChange: setOpen, children: [
1450
+ /* @__PURE__ */ jsxRuntime.jsx(
1451
+ SubTrigger3,
1452
+ {
1453
+ className: "w-full outline-none",
1454
+ onPointerEnter: handleTriggerPointerEnter,
1455
+ onPointerLeave: handleTriggerPointerLeave,
1456
+ children: React38__namespace.isValidElement(trigger) ? React38__namespace.cloneElement(trigger, {
1457
+ isSubTrigger: true,
1458
+ // Auto-add chevron if missing
1459
+ trailingIcon: trigger.props.trailingIcon || /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron_right", size: 20 })
1460
+ }) : trigger
1461
+ }
1462
+ ),
1463
+ /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { children: open && /* @__PURE__ */ jsxRuntime.jsx(Portal7, { forceMount: true, children: /* @__PURE__ */ jsxRuntime.jsx(
1464
+ SubContent3,
1465
+ {
1466
+ sideOffset: 4,
1467
+ alignOffset: -4,
1468
+ forceMount: true,
1469
+ className: "outline-none",
1470
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1471
+ SubMenuContent,
1472
+ {
1473
+ side,
1474
+ colorVariant,
1475
+ onPointerEnter: handleContentPointerEnter,
1476
+ onPointerLeave: handleContentPointerLeave,
1477
+ children
1478
+ }
1479
+ )
1480
+ }
1481
+ ) }) })
1482
+ ] });
1483
+ }
1484
+ SubMenu.displayName = "SubMenu";
1485
+ function SubMenuContent({
1486
+ children,
1487
+ side,
1488
+ colorVariant: propColorVariant,
1489
+ onPointerEnter,
1490
+ onPointerLeave
1491
+ }) {
1492
+ const { menuVariant, colorVariant: contextColorVariant } = useMenuContext();
1493
+ const colorVariant = propColorVariant != null ? propColorVariant : contextColorVariant;
1494
+ const colors = menuVariant === "baseline" ? BASELINE_COLORS : colorVariant === "vibrant" ? VIBRANT_COLORS : STANDARD_COLORS;
606
1495
  return /* @__PURE__ */ jsxRuntime.jsx(
607
- RadixDropdown__namespace.Item,
608
- __spreadValues({
609
- ref,
610
- className: cn(
611
- // MD3 State Layer behavior
612
- "relative flex cursor-pointer select-none items-center gap-2",
613
- "rounded-lg px-3 py-2 text-sm text-m3-on-surface",
614
- "outline-none transition-colors duration-150",
615
- "hover:bg-m3-on-surface/8",
616
- "focus:bg-m3-on-surface/12",
617
- "data-disabled:pointer-events-none data-disabled:opacity-38",
618
- "focus-visible:ring-0",
619
- // Radix gốc handle ring internally
620
- inset && "pl-8",
621
- className
622
- )
623
- }, props)
624
- );
625
- });
626
- DropdownMenuItem.displayName = "DropdownMenuItem";
627
- var DropdownMenuCheckboxItem = React31__namespace.forwardRef((_a, ref) => {
628
- var _b = _a, { className, children, checked } = _b, props = __objRest(_b, ["className", "children", "checked"]);
629
- return /* @__PURE__ */ jsxRuntime.jsxs(
630
- RadixDropdown__namespace.CheckboxItem,
631
- __spreadProps(__spreadValues({
632
- ref,
1496
+ react.m.div,
1497
+ {
1498
+ role: "menu",
1499
+ "aria-orientation": "vertical",
1500
+ onPointerEnter,
1501
+ onPointerLeave,
633
1502
  className: cn(
634
- "relative flex cursor-pointer select-none items-center gap-2",
635
- "rounded-lg py-2 pl-8 pr-3 text-sm text-m3-on-surface",
636
- "outline-none transition-colors duration-150",
637
- "hover:bg-m3-on-surface/8 focus:bg-m3-on-surface/12",
638
- "data-disabled:pointer-events-none data-disabled:opacity-38",
639
- className
1503
+ "z-50 flex flex-col",
1504
+ // Width constraints
1505
+ MENU_MIN_WIDTH,
1506
+ MENU_MAX_WIDTH,
1507
+ // Vertical padding: 8dp
1508
+ MENU_POPUP_PADDING_Y,
1509
+ // Gap between groups: 2dp
1510
+ MENU_GROUP_GAP,
1511
+ // Container background
1512
+ colors.containerBg,
1513
+ // Container shape: CornerExtraSmall (4px)
1514
+ MENU_CONTAINER_SHAPE,
1515
+ // Elevation-2 shadow
1516
+ "elevation-2",
1517
+ // Overflow clip
1518
+ "overflow-hidden",
1519
+ "outline-none"
640
1520
  ),
641
- checked
642
- }, props), {
643
- children: [
644
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(RadixDropdown__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "check", size: 16, "aria-hidden": "true" }) }) }),
645
- children
646
- ]
647
- })
648
- );
649
- });
650
- DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem";
651
- var DropdownMenuRadioItem = React31__namespace.forwardRef((_a, ref) => {
652
- var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
653
- return /* @__PURE__ */ jsxRuntime.jsxs(
654
- RadixDropdown__namespace.RadioItem,
655
- __spreadProps(__spreadValues({
656
- ref,
657
- className: cn(
658
- "relative flex cursor-pointer select-none items-center gap-2",
659
- "rounded-lg py-2 pl-8 pr-3 text-sm text-m3-on-surface",
660
- "outline-none transition-colors duration-150",
661
- "hover:bg-m3-on-surface/8 focus:bg-m3-on-surface/12",
662
- "data-disabled:pointer-events-none data-disabled:opacity-38",
663
- className
664
- )
665
- }, props), {
666
- children: [
667
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(RadixDropdown__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "circle", fill: 1, size: 8, "aria-hidden": "true" }) }) }),
668
- children
669
- ]
670
- })
671
- );
672
- });
673
- DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem";
674
- var DropdownMenuSeparator = React31__namespace.forwardRef((_a, ref) => {
675
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
676
- return /* @__PURE__ */ jsxRuntime.jsx(
677
- RadixDropdown__namespace.Separator,
678
- __spreadValues({
679
- ref,
680
- className: cn("my-1 h-px bg-m3-outline-variant", className)
681
- }, props)
1521
+ variants: SUBMENU_CONTAINER_VARIANTS,
1522
+ initial: "hidden",
1523
+ animate: "visible",
1524
+ exit: "exit",
1525
+ style: {
1526
+ transformOrigin: side === "right" ? "top left" : "top right"
1527
+ },
1528
+ children
1529
+ }
682
1530
  );
683
- });
684
- DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
685
- var DropdownMenuLabel = React31__namespace.forwardRef((_a, ref) => {
686
- var _b = _a, { className, inset } = _b, props = __objRest(_b, ["className", "inset"]);
1531
+ }
1532
+ SubMenuContent.displayName = "SubMenuContent";
1533
+ var VerticalMenuDivider = React38__namespace.forwardRef((_a, ref) => {
1534
+ var _b = _a, { className, index, count, isGapVariant } = _b, props = __objRest(_b, ["className", "index", "count", "isGapVariant"]);
687
1535
  return /* @__PURE__ */ jsxRuntime.jsx(
688
- RadixDropdown__namespace.Label,
1536
+ "hr",
689
1537
  __spreadValues({
690
1538
  ref,
691
1539
  className: cn(
692
- "px-3 py-1.5 text-xs font-medium text-m3-on-surface-variant uppercase tracking-wider",
693
- inset && "pl-8",
1540
+ // HorizontalDividerPadding: horizontal=12dp, vertical=2dp
1541
+ "mx-3 my-0.5",
1542
+ // 1px height, no default border
1543
+ "h-px border-0",
1544
+ // Source: MenuDefaults.HorizontalDividerPadding / outline-variant
1545
+ "bg-m3-outline-variant",
694
1546
  className
695
1547
  )
696
1548
  }, props)
697
1549
  );
698
1550
  });
699
- DropdownMenuLabel.displayName = "DropdownMenuLabel";
700
- var DropdownMenuSubTrigger = React31__namespace.forwardRef((_a, ref) => {
701
- var _b = _a, { className, inset, children } = _b, props = __objRest(_b, ["className", "inset", "children"]);
702
- return /* @__PURE__ */ jsxRuntime.jsxs(
703
- RadixDropdown__namespace.SubTrigger,
704
- __spreadProps(__spreadValues({
705
- ref,
706
- className: cn(
707
- "flex cursor-default select-none items-center gap-2",
708
- "rounded-lg px-3 py-2 text-sm text-m3-on-surface",
709
- "outline-none transition-colors duration-150",
710
- "hover:bg-m3-on-surface/8 focus:bg-m3-on-surface/12",
711
- "data-[state=open]:bg-m3-on-surface/8",
712
- inset && "pl-8",
713
- className
714
- )
715
- }, props), {
716
- children: [
717
- children,
718
- /* @__PURE__ */ jsxRuntime.jsx(
719
- Icon,
720
- {
721
- name: "chevron_right",
722
- size: 16,
723
- className: "ml-auto",
724
- "aria-hidden": "true"
1551
+ VerticalMenuDivider.displayName = "VerticalMenuDivider";
1552
+ var VerticalMenuGroup = MenuGroup;
1553
+ var VerticalMenuContent = React38__namespace.forwardRef(
1554
+ (_a, ref) => {
1555
+ var _b = _a, {
1556
+ children,
1557
+ separatorStyle = "gap",
1558
+ colorVariant: propColorVariant,
1559
+ className
1560
+ } = _b, props = __objRest(_b, [
1561
+ "children",
1562
+ "separatorStyle",
1563
+ "colorVariant",
1564
+ "className"
1565
+ ]);
1566
+ const { colorVariant: contextColorVariant } = useMenuContext();
1567
+ const colorVariant = propColorVariant != null ? propColorVariant : contextColorVariant;
1568
+ const colors = colorVariant === "vibrant" ? VIBRANT_COLORS : STANDARD_COLORS;
1569
+ const flattenChildren = (children2) => {
1570
+ return React38__namespace.Children.toArray(children2).reduce(
1571
+ (acc, child) => {
1572
+ if (React38__namespace.isValidElement(child)) {
1573
+ if (child.type === React38__namespace.Fragment) {
1574
+ return acc.concat(
1575
+ flattenChildren(
1576
+ child.props.children
1577
+ )
1578
+ );
1579
+ }
1580
+ acc.push(child);
725
1581
  }
1582
+ return acc;
1583
+ },
1584
+ []
1585
+ );
1586
+ };
1587
+ const validChildren = flattenChildren(children);
1588
+ const groupCount = validChildren.length;
1589
+ const enhancedChildren = validChildren.map(
1590
+ (child, i) => React38__namespace.cloneElement(child, {
1591
+ index: i,
1592
+ count: groupCount,
1593
+ isGapVariant: separatorStyle === "gap"
1594
+ })
1595
+ );
1596
+ const renderedChildren = separatorStyle === "divider" ? enhancedChildren.reduce((acc, child, i) => {
1597
+ if (i > 0) {
1598
+ acc.push(
1599
+ /* @__PURE__ */ jsxRuntime.jsx(
1600
+ VerticalMenuDivider,
1601
+ {},
1602
+ `divider-${child.key || i}`
1603
+ )
1604
+ );
1605
+ }
1606
+ acc.push(child);
1607
+ return acc;
1608
+ }, []) : enhancedChildren;
1609
+ return /* @__PURE__ */ jsxRuntime.jsx(
1610
+ "div",
1611
+ __spreadProps(__spreadValues({
1612
+ ref,
1613
+ className: cn(
1614
+ "flex flex-col w-full",
1615
+ // Gap variant: transparent background + 2dp gap — page bg shows through gaps.
1616
+ // Divider variant: solid container background behind all groups.
1617
+ separatorStyle === "gap" ? cn("bg-transparent", MENU_GROUP_GAP) : colors.containerBg,
1618
+ className
726
1619
  )
727
- ]
728
- })
1620
+ }, props), {
1621
+ children: renderedChildren
1622
+ })
1623
+ );
1624
+ }
1625
+ );
1626
+ VerticalMenuContent.displayName = "VerticalMenuContent";
1627
+ var VerticalMenu = React38__namespace.forwardRef((_a, ref) => {
1628
+ var _b = _a, { children, colorVariant = "standard", className } = _b, props = __objRest(_b, ["children", "colorVariant", "className"]);
1629
+ const noop = React38__namespace.useCallback(() => {
1630
+ }, []);
1631
+ const colors = colorVariant === "vibrant" ? VIBRANT_COLORS : STANDARD_COLORS;
1632
+ const containerRef = React38__namespace.useRef(null);
1633
+ const mergedRef = React38__namespace.useCallback(
1634
+ (node) => {
1635
+ containerRef.current = node;
1636
+ if (typeof ref === "function") ref(node);
1637
+ else if (ref)
1638
+ ref.current = node;
1639
+ },
1640
+ [ref]
729
1641
  );
730
- });
731
- DropdownMenuSubTrigger.displayName = "DropdownMenuSubTrigger";
732
- var DropdownMenuShortcut = (_a) => {
733
- var _b = _a, {
734
- className
735
- } = _b, props = __objRest(_b, [
736
- "className"
737
- ]);
1642
+ const handleKeyDown = React38__namespace.useCallback(
1643
+ (e) => {
1644
+ var _a2;
1645
+ if (!containerRef.current) return;
1646
+ const items = Array.from(
1647
+ containerRef.current.querySelectorAll(
1648
+ '[role="menuitem"]:not([aria-disabled="true"]):not([tabindex="-1"]),[role="menuitemcheckbox"]:not([aria-disabled="true"]):not([tabindex="-1"]),[role="menuitemradio"]:not([aria-disabled="true"]):not([tabindex="-1"])'
1649
+ )
1650
+ );
1651
+ if (!items.length) return;
1652
+ const idx = items.indexOf(document.activeElement);
1653
+ let next = null;
1654
+ switch (e.key) {
1655
+ case "ArrowDown":
1656
+ e.preventDefault();
1657
+ next = idx < items.length - 1 ? idx + 1 : 0;
1658
+ break;
1659
+ case "ArrowUp":
1660
+ e.preventDefault();
1661
+ next = idx > 0 ? idx - 1 : items.length - 1;
1662
+ break;
1663
+ case "Home":
1664
+ e.preventDefault();
1665
+ next = 0;
1666
+ break;
1667
+ case "End":
1668
+ e.preventDefault();
1669
+ next = items.length - 1;
1670
+ break;
1671
+ default:
1672
+ return;
1673
+ }
1674
+ if (next !== null) (_a2 = items[next]) == null ? void 0 : _a2.focus();
1675
+ },
1676
+ []
1677
+ );
1678
+ const separatorStyle = detectSeparatorStyle(children);
1679
+ const isGapVariant = separatorStyle !== "divider";
738
1680
  return /* @__PURE__ */ jsxRuntime.jsx(
739
- "span",
740
- __spreadValues({
741
- className: cn(
742
- "ml-auto text-xs tracking-widest text-m3-on-surface-variant",
743
- className
1681
+ MenuProvider,
1682
+ {
1683
+ variant: "expressive",
1684
+ colorVariant,
1685
+ menuPrimitive: "static",
1686
+ open: true,
1687
+ onOpenChange: noop,
1688
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1689
+ "div",
1690
+ __spreadProps(__spreadValues({
1691
+ ref: mergedRef,
1692
+ role: "menu",
1693
+ "aria-orientation": "vertical",
1694
+ onKeyDown: handleKeyDown,
1695
+ className: cn(
1696
+ // Width constraints: 112dp min, 280dp max (MenuTokens)
1697
+ MENU_MIN_WIDTH,
1698
+ MENU_MAX_WIDTH,
1699
+ "flex flex-col",
1700
+ isGapVariant ? [
1701
+ // GAP VARIANT: NO overflow-hidden — groups must morph freely.
1702
+ "outline-none"
1703
+ // NO background — transparent between segments.
1704
+ // NO rounded corners — each group manages its own shape.
1705
+ // Elevation is managed by each individual group.
1706
+ ] : [
1707
+ // DIVIDER VARIANT: Container clips the content.
1708
+ "rounded-2xl",
1709
+ "overflow-hidden",
1710
+ colors.containerBg,
1711
+ "elevation-2",
1712
+ "outline-none"
1713
+ ],
1714
+ className
1715
+ )
1716
+ }, props), {
1717
+ children
1718
+ })
744
1719
  )
745
- }, props)
1720
+ }
746
1721
  );
747
- };
748
- DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1722
+ });
1723
+ VerticalMenu.displayName = "VerticalMenu";
1724
+ function detectSeparatorStyle(children) {
1725
+ const child = React38__namespace.Children.toArray(children).find(React38__namespace.isValidElement);
1726
+ if (child) {
1727
+ const style = child.props.separatorStyle;
1728
+ if (style) return style;
1729
+ }
1730
+ return "gap";
1731
+ }
749
1732
  function MoreVertIcon() {
750
1733
  return /* @__PURE__ */ jsxRuntime.jsx(
751
1734
  "span",
@@ -760,10 +1743,14 @@ function OverflowItem({ item }) {
760
1743
  var _a;
761
1744
  if (item.type === "toggleable") {
762
1745
  return /* @__PURE__ */ jsxRuntime.jsx(
763
- DropdownMenuCheckboxItem,
1746
+ MenuItem,
764
1747
  {
765
- checked: (_a = item.checked) != null ? _a : false,
766
- onCheckedChange: item.onCheckedChange,
1748
+ role: "menuitemcheckbox",
1749
+ selected: (_a = item.checked) != null ? _a : false,
1750
+ onClick: () => {
1751
+ var _a2;
1752
+ return (_a2 = item.onCheckedChange) == null ? void 0 : _a2.call(item, !item.checked);
1753
+ },
767
1754
  disabled: item.enabled === false,
768
1755
  children: item.label
769
1756
  }
@@ -778,15 +1765,15 @@ function OverflowItem({ item }) {
778
1765
  }
779
1766
  }) });
780
1767
  }
781
- return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuItem, { onClick: item.onClick, disabled: item.enabled === false, children: item.label });
1768
+ return /* @__PURE__ */ jsxRuntime.jsx(MenuItem, { onClick: item.onClick, disabled: item.enabled === false, children: item.label });
782
1769
  }
783
1770
  function AppBarOverflowIndicator({
784
1771
  items,
785
1772
  className
786
1773
  }) {
787
1774
  if (items.length === 0) return null;
788
- return /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenu, { children: [
789
- /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
1775
+ return /* @__PURE__ */ jsxRuntime.jsxs(Menu, { children: [
1776
+ /* @__PURE__ */ jsxRuntime.jsx(MenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
790
1777
  "button",
791
1778
  {
792
1779
  type: "button",
@@ -805,7 +1792,7 @@ function AppBarOverflowIndicator({
805
1792
  children: /* @__PURE__ */ jsxRuntime.jsx(MoreVertIcon, {})
806
1793
  }
807
1794
  ) }),
808
- /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuContent, { align: "end", sideOffset: 4, children: items.map((item, index) => (
1795
+ /* @__PURE__ */ jsxRuntime.jsx(MenuContent, { align: "end", sideOffset: 4, children: items.map((item, index) => (
809
1796
  // biome-ignore lint/suspicious/noArrayIndexKey: static list from props
810
1797
  /* @__PURE__ */ jsxRuntime.jsx(OverflowItem, { item }, index)
811
1798
  )) })
@@ -816,11 +1803,11 @@ function AppBarColumn({
816
1803
  maxItemCount,
817
1804
  className
818
1805
  }) {
819
- const containerRef = React31__namespace.useRef(null);
820
- const [visibleCount, setVisibleCount] = React31__namespace.useState(
1806
+ const containerRef = React38__namespace.useRef(null);
1807
+ const [visibleCount, setVisibleCount] = React38__namespace.useState(
821
1808
  maxItemCount != null ? maxItemCount : items.length
822
1809
  );
823
- React31__namespace.useEffect(() => {
1810
+ React38__namespace.useEffect(() => {
824
1811
  if (maxItemCount !== void 0) {
825
1812
  setVisibleCount(Math.min(maxItemCount, items.length));
826
1813
  return;
@@ -868,11 +1855,11 @@ function AppBarColumn({
868
1855
  );
869
1856
  }
870
1857
  function AppBarRow({ items, maxItemCount, className }) {
871
- const containerRef = React31__namespace.useRef(null);
872
- const [visibleCount, setVisibleCount] = React31__namespace.useState(
1858
+ const containerRef = React38__namespace.useRef(null);
1859
+ const [visibleCount, setVisibleCount] = React38__namespace.useState(
873
1860
  maxItemCount != null ? maxItemCount : items.length
874
1861
  );
875
- React31__namespace.useEffect(() => {
1862
+ React38__namespace.useEffect(() => {
876
1863
  if (maxItemCount !== void 0) {
877
1864
  setVisibleCount(Math.min(maxItemCount, items.length));
878
1865
  return;
@@ -926,12 +1913,12 @@ function useAppBarScroll({
926
1913
  collapsedHeight = 64,
927
1914
  expandedHeight = 112
928
1915
  } = {}) {
929
- const [isScrolled, setIsScrolled] = React31__namespace.useState(false);
930
- const [collapsedFraction, setCollapsedFraction] = React31__namespace.useState(0);
931
- const [isHidden, setIsHidden] = React31__namespace.useState(false);
932
- const prevScrollYRef = React31__namespace.useRef(0);
1916
+ const [isScrolled, setIsScrolled] = React38__namespace.useState(false);
1917
+ const [collapsedFraction, setCollapsedFraction] = React38__namespace.useState(0);
1918
+ const [isHidden, setIsHidden] = React38__namespace.useState(false);
1919
+ const prevScrollYRef = React38__namespace.useRef(0);
933
1920
  const hideThreshold = 64;
934
- React31__namespace.useEffect(() => {
1921
+ React38__namespace.useEffect(() => {
935
1922
  var _a;
936
1923
  const scrollDistance = expandedHeight - collapsedHeight;
937
1924
  const getScrollY = () => {
@@ -1052,7 +2039,7 @@ function useFlexibleAppBar({
1052
2039
  expandedHeight
1053
2040
  });
1054
2041
  const scrollProgress = react.useMotionValue(0);
1055
- React31__namespace.useEffect(() => {
2042
+ React38__namespace.useEffect(() => {
1056
2043
  scrollProgress.set(
1057
2044
  shouldReduceMotion ? collapsedFraction > 0.5 ? 1 : 0 : collapsedFraction
1058
2045
  );
@@ -1393,7 +2380,7 @@ function SearchAppBar({
1393
2380
  }) {
1394
2381
  var _a, _b;
1395
2382
  const shouldReduceMotion = react.useReducedMotion();
1396
- const [isSearchOpen, setIsSearchOpen] = React31__namespace.useState(false);
2383
+ const [isSearchOpen, setIsSearchOpen] = React38__namespace.useState(false);
1397
2384
  const { isScrolled } = useAppBarScroll({
1398
2385
  scrollElement,
1399
2386
  behavior: scrollBehavior === "exitUntilCollapsed" ? "pinned" : scrollBehavior
@@ -1507,8 +2494,8 @@ function SearchView({
1507
2494
  className
1508
2495
  }) {
1509
2496
  const shouldReduceMotion = react.useReducedMotion();
1510
- const inputRef = React31__namespace.useRef(null);
1511
- React31__namespace.useEffect(() => {
2497
+ const inputRef = React38__namespace.useRef(null);
2498
+ React38__namespace.useEffect(() => {
1512
2499
  const timer = window.setTimeout(() => {
1513
2500
  var _a;
1514
2501
  (_a = inputRef.current) == null ? void 0 : _a.focus();
@@ -1778,9 +2765,9 @@ function formatBadgeLabel(children, max) {
1778
2765
  return "";
1779
2766
  }
1780
2767
  function detectBadgeHasContent(badge) {
1781
- return React31__namespace.isValidElement(badge) && badge.props.children != null;
2768
+ return React38__namespace.isValidElement(badge) && badge.props.children != null;
1782
2769
  }
1783
- var BadgeImpl = React31__namespace.forwardRef(
2770
+ var BadgeImpl = React38__namespace.forwardRef(
1784
2771
  (_a, ref) => {
1785
2772
  var _b = _a, {
1786
2773
  children,
@@ -1834,7 +2821,7 @@ var BadgeImpl = React31__namespace.forwardRef(
1834
2821
  }
1835
2822
  );
1836
2823
  BadgeImpl.displayName = "Badge";
1837
- var Badge = React31__namespace.memo(BadgeImpl);
2824
+ var Badge = React38__namespace.memo(BadgeImpl);
1838
2825
  function BadgedBox({
1839
2826
  badge,
1840
2827
  children,
@@ -1900,11 +2887,11 @@ var ROTATE_KEY_SPLINES = [
1900
2887
  var ROTATE_VALUES = "0 24 24; 154 24 24; 309 24 24; 463 24 24; 617 24 24; 771 24 24; 926 24 24; 1080 24 24";
1901
2888
  var DETERMINATE_CIRCLE = "M24 7 C34.49 7 41 13.51 41 24 C41 34.49 34.49 41 24 41 C13.51 41 7 34.49 7 24 C7 13.51 13.51 7 24 7 Z";
1902
2889
  var DETERMINATE_SOFT_BURST = "M20.9 10.4 21.4 9.5 21.9 8.7 22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17.1 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.4 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.5 38.9 26.2 39.6 27 40.2 27.7 40.5 28.7 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.9 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.5 9.1 21.8 8.4 21 7.8 20.3 7.5 19.3 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.1 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1Z";
1903
- var IndeterminateSvg = React31__namespace.memo(function IndeterminateSvg2({
2890
+ var IndeterminateSvg = React38__namespace.memo(function IndeterminateSvg2({
1904
2891
  size
1905
2892
  }) {
1906
- const [ready, setReady] = React31__namespace.useState(false);
1907
- React31__namespace.useEffect(() => {
2893
+ const [ready, setReady] = React38__namespace.useState(false);
2894
+ React38__namespace.useEffect(() => {
1908
2895
  const raf = requestAnimationFrame(() => setReady(true));
1909
2896
  return () => cancelAnimationFrame(raf);
1910
2897
  }, []);
@@ -1949,7 +2936,7 @@ var IndeterminateSvg = React31__namespace.memo(function IndeterminateSvg2({
1949
2936
  }
1950
2937
  );
1951
2938
  });
1952
- var DeterminateSvg = React31__namespace.memo(function DeterminateSvg2({
2939
+ var DeterminateSvg = React38__namespace.memo(function DeterminateSvg2({
1953
2940
  size,
1954
2941
  progress
1955
2942
  }) {
@@ -1974,7 +2961,7 @@ var DeterminateSvg = React31__namespace.memo(function DeterminateSvg2({
1974
2961
  }
1975
2962
  );
1976
2963
  });
1977
- var LoadingIndicator = React31__namespace.forwardRef(
2964
+ var LoadingIndicator = React38__namespace.forwardRef(
1978
2965
  (_a, ref) => {
1979
2966
  var _b = _a, {
1980
2967
  variant = "uncontained",
@@ -2089,7 +3076,7 @@ function getSinePath(startX, endX, phase, wl, amp) {
2089
3076
  d += ` L ${endX.toFixed(2)} ${yEnd.toFixed(2)}`;
2090
3077
  return d;
2091
3078
  }
2092
- var CircularProgress = React31__namespace.forwardRef(
3079
+ var CircularProgress = React38__namespace.forwardRef(
2093
3080
  (_a, ref) => {
2094
3081
  var _b = _a, {
2095
3082
  value,
@@ -2127,15 +3114,15 @@ var CircularProgress = React31__namespace.forwardRef(
2127
3114
  const isWavy = shape === "wavy";
2128
3115
  const BASELINE_SIZE = 48;
2129
3116
  const scaleFactor = size / BASELINE_SIZE;
2130
- const effectiveAmplitude = React31__namespace.useMemo(
3117
+ const effectiveAmplitude = React38__namespace.useMemo(
2131
3118
  () => amplitude != null ? amplitude : 1.6 * scaleFactor,
2132
3119
  [amplitude, scaleFactor]
2133
3120
  );
2134
- const effectiveWavelength = React31__namespace.useMemo(
3121
+ const effectiveWavelength = React38__namespace.useMemo(
2135
3122
  () => wavelength != null ? wavelength : 15 * scaleFactor,
2136
3123
  [wavelength, scaleFactor]
2137
3124
  );
2138
- const wavyActivePath = React31__namespace.useMemo(
3125
+ const wavyActivePath = React38__namespace.useMemo(
2139
3126
  () => isWavy ? generateWavyCircularPath(
2140
3127
  center,
2141
3128
  radius,
@@ -2144,8 +3131,8 @@ var CircularProgress = React31__namespace.forwardRef(
2144
3131
  ) : null,
2145
3132
  [isWavy, center, radius, effectiveAmplitude, effectiveWavelength]
2146
3133
  );
2147
- const circumference = React31__namespace.useMemo(() => 2 * Math.PI * radius, [radius]);
2148
- const gapForTrack = React31__namespace.useMemo(
3134
+ const circumference = React38__namespace.useMemo(() => 2 * Math.PI * radius, [radius]);
3135
+ const gapForTrack = React38__namespace.useMemo(
2149
3136
  () => (gapSize + trackHeight) / circumference,
2150
3137
  [gapSize, trackHeight, circumference]
2151
3138
  );
@@ -2334,9 +3321,9 @@ var CircularProgress = React31__namespace.forwardRef(
2334
3321
  );
2335
3322
  CircularProgress.displayName = "CircularProgress";
2336
3323
  function useContainerWidth() {
2337
- const [width, setWidth] = React31__namespace.useState(0);
2338
- const observerRef = React31__namespace.useRef(null);
2339
- const ref = React31__namespace.useCallback((node) => {
3324
+ const [width, setWidth] = React38__namespace.useState(0);
3325
+ const observerRef = React38__namespace.useRef(null);
3326
+ const ref = React38__namespace.useCallback((node) => {
2340
3327
  if (observerRef.current) {
2341
3328
  observerRef.current.disconnect();
2342
3329
  observerRef.current = null;
@@ -2350,7 +3337,7 @@ function useContainerWidth() {
2350
3337
  observerRef.current = obs;
2351
3338
  }
2352
3339
  }, []);
2353
- React31__namespace.useEffect(() => {
3340
+ React38__namespace.useEffect(() => {
2354
3341
  return () => {
2355
3342
  if (observerRef.current) {
2356
3343
  observerRef.current.disconnect();
@@ -2360,7 +3347,7 @@ function useContainerWidth() {
2360
3347
  return [ref, width];
2361
3348
  }
2362
3349
  function useMergedRef(...refs) {
2363
- return React31__namespace.useCallback(
3350
+ return React38__namespace.useCallback(
2364
3351
  (node) => {
2365
3352
  for (const ref of refs) {
2366
3353
  if (typeof ref === "function") {
@@ -2374,7 +3361,7 @@ function useMergedRef(...refs) {
2374
3361
  [refs]
2375
3362
  );
2376
3363
  }
2377
- var FlatLinearTrack = React31__namespace.memo(function FlatLinearTrack2({
3364
+ var FlatLinearTrack = React38__namespace.memo(function FlatLinearTrack2({
2378
3365
  trackHeight,
2379
3366
  activeColor,
2380
3367
  trackColor,
@@ -2450,7 +3437,7 @@ var FlatLinearTrack = React31__namespace.memo(function FlatLinearTrack2({
2450
3437
  }
2451
3438
  );
2452
3439
  });
2453
- var WavyLinearTrack = React31__namespace.memo(function WavyLinearTrack2({
3440
+ var WavyLinearTrack = React38__namespace.memo(function WavyLinearTrack2({
2454
3441
  trackHeight,
2455
3442
  svgHeight,
2456
3443
  amplitude,
@@ -2469,13 +3456,13 @@ var WavyLinearTrack = React31__namespace.memo(function WavyLinearTrack2({
2469
3456
  }) {
2470
3457
  const isDeterminate = typeof value === "number";
2471
3458
  const clampedValue = isDeterminate ? Math.max(0, Math.min(100, value)) : 100;
2472
- const titleId = React31__namespace.useId();
3459
+ const titleId = React38__namespace.useId();
2473
3460
  const [containerRef, width] = useContainerWidth();
2474
- const activePathRef = React31__namespace.useRef(null);
2475
- const trackPathRef = React31__namespace.useRef(null);
3461
+ const activePathRef = React38__namespace.useRef(null);
3462
+ const trackPathRef = React38__namespace.useRef(null);
2476
3463
  const amplitudeMV = react.useMotionValue(amplitude);
2477
3464
  const fractionMV = react.useMotionValue(isDeterminate ? clampedValue / 100 : 1);
2478
- React31__namespace.useEffect(() => {
3465
+ React38__namespace.useEffect(() => {
2479
3466
  if (isDeterminate) {
2480
3467
  const fraction = clampedValue / 100;
2481
3468
  let targetAmp = amplitude;
@@ -2646,7 +3633,7 @@ var WavyLinearTrack = React31__namespace.memo(function WavyLinearTrack2({
2646
3633
  }
2647
3634
  );
2648
3635
  });
2649
- var LinearProgress = React31__namespace.forwardRef(
3636
+ var LinearProgress = React38__namespace.forwardRef(
2650
3637
  (_a, ref) => {
2651
3638
  var _b = _a, {
2652
3639
  value,
@@ -2687,10 +3674,10 @@ var LinearProgress = React31__namespace.forwardRef(
2687
3674
  ]);
2688
3675
  const isDeterminate = value !== void 0;
2689
3676
  const clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;
2690
- const containerRef = React31__namespace.useRef(null);
3677
+ const containerRef = React38__namespace.useRef(null);
2691
3678
  const mergedRef = useMergedRef(ref, containerRef);
2692
- const [isRtl, setIsRtl] = React31__namespace.useState(false);
2693
- React31__namespace.useEffect(() => {
3679
+ const [isRtl, setIsRtl] = React38__namespace.useState(false);
3680
+ React38__namespace.useEffect(() => {
2694
3681
  if (containerRef.current) {
2695
3682
  const dir = getComputedStyle(containerRef.current).direction;
2696
3683
  setIsRtl(dir === "rtl");
@@ -2698,16 +3685,16 @@ var LinearProgress = React31__namespace.forwardRef(
2698
3685
  }, []);
2699
3686
  const isWavy = shape === "wavy";
2700
3687
  const resolvedTrackShape = trackShape != null ? trackShape : shape;
2701
- const effectiveAmplitude = React31__namespace.useMemo(() => amplitude != null ? amplitude : 3, [amplitude]);
2702
- const svgHeight = React31__namespace.useMemo(
3688
+ const effectiveAmplitude = React38__namespace.useMemo(() => amplitude != null ? amplitude : 3, [amplitude]);
3689
+ const svgHeight = React38__namespace.useMemo(
2703
3690
  () => isWavy ? trackHeight + effectiveAmplitude * 2 : trackHeight,
2704
3691
  [isWavy, trackHeight, effectiveAmplitude]
2705
3692
  );
2706
- const shouldShowStop = React31__namespace.useMemo(
3693
+ const shouldShowStop = React38__namespace.useMemo(
2707
3694
  () => isDeterminate && resolvedTrackShape === "flat" && (showStopIndicator === true || showStopIndicator === "auto" && isDeterminate),
2708
3695
  [isDeterminate, resolvedTrackShape, showStopIndicator]
2709
3696
  );
2710
- const stopSize = React31__namespace.useMemo(
3697
+ const stopSize = React38__namespace.useMemo(
2711
3698
  () => Math.max(2, trackHeight > 4 ? 4 : trackHeight / 2),
2712
3699
  [trackHeight]
2713
3700
  );
@@ -2780,14 +3767,14 @@ var LinearProgress = React31__namespace.forwardRef(
2780
3767
  }
2781
3768
  );
2782
3769
  LinearProgress.displayName = "LinearProgress";
2783
- var ProgressIndicator = React31__namespace.forwardRef((props, ref) => {
3770
+ var ProgressIndicator = React38__namespace.forwardRef((props, ref) => {
2784
3771
  if (props.variant === "circular") {
2785
3772
  return /* @__PURE__ */ jsxRuntime.jsx(CircularProgress, __spreadValues({ ref }, props));
2786
3773
  }
2787
3774
  return /* @__PURE__ */ jsxRuntime.jsx(LinearProgress, __spreadValues({ ref }, props));
2788
3775
  });
2789
3776
  ProgressIndicator.displayName = "ProgressIndicator";
2790
- var RippleItem = React31__namespace.memo(function RippleItem2({
3777
+ var RippleItem = React38__namespace.memo(function RippleItem2({
2791
3778
  ripple,
2792
3779
  onDone
2793
3780
  }) {
@@ -2831,8 +3818,8 @@ function Ripple({
2831
3818
  }
2832
3819
  function useRippleState(options = {}) {
2833
3820
  const { disabled = false } = options;
2834
- const [ripples, setRipples] = React31__namespace.useState([]);
2835
- const onPointerDown = React31__namespace.useCallback(
3821
+ const [ripples, setRipples] = React38__namespace.useState([]);
3822
+ const onPointerDown = React38__namespace.useCallback(
2836
3823
  (e) => {
2837
3824
  if (disabled) return;
2838
3825
  const rect = e.currentTarget.getBoundingClientRect();
@@ -2846,7 +3833,7 @@ function useRippleState(options = {}) {
2846
3833
  },
2847
3834
  [disabled]
2848
3835
  );
2849
- const removeRipple = React31__namespace.useCallback((id) => {
3836
+ const removeRipple = React38__namespace.useCallback((id) => {
2850
3837
  setRipples((prev) => prev.filter((r) => r.id !== id));
2851
3838
  }, []);
2852
3839
  return { ripples, onPointerDown, removeRipple };
@@ -2975,15 +3962,12 @@ var buttonColorVariants = classVarianceAuthority.cva(
2975
3962
  defaultVariants: { colorStyle: "filled" }
2976
3963
  }
2977
3964
  );
2978
- function toSentenceCase(text) {
2979
- return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
2980
- }
2981
3965
  function resolveLabel(children, asChild) {
2982
3966
  if (asChild) {
2983
- const child = React31__namespace.Children.only(children);
3967
+ const child = React38__namespace.Children.only(children);
2984
3968
  return child.props.children;
2985
3969
  }
2986
- return typeof children === "string" ? toSentenceCase(children) : children;
3970
+ return children;
2987
3971
  }
2988
3972
  var MOTION_PROP_KEYS = [
2989
3973
  "animate",
@@ -3052,7 +4036,7 @@ function AnimatedIconSlot({
3052
4036
  }
3053
4037
  );
3054
4038
  }
3055
- var ButtonComponent = React31__namespace.forwardRef(
4039
+ var ButtonComponent = React38__namespace.forwardRef(
3056
4040
  (_a, ref) => {
3057
4041
  var _b = _a, {
3058
4042
  className,
@@ -3101,15 +4085,15 @@ var ButtonComponent = React31__namespace.forwardRef(
3101
4085
  const { pressed: pressedRadius } = (_b2 = radiusMap[size]) != null ? _b2 : radiusMap.sm;
3102
4086
  const iconClass = (_c = SIZE_ICON_CLASS[size]) != null ? _c : "size-5";
3103
4087
  const mergedStyle = __spreadValues(__spreadValues({}, SIZE_STYLES[size]), style);
3104
- const labelText = React31__namespace.useMemo(
4088
+ const labelText = React38__namespace.useMemo(
3105
4089
  () => resolveLabel(children, asChild),
3106
4090
  [children, asChild]
3107
4091
  );
3108
4092
  const computedAriaLabel = ariaLabelProp || (typeof children === "string" ? children : void 0);
3109
4093
  const needsTouchTarget = size === "xs" || size === "sm";
3110
4094
  const motionRadius = react.useMotionValue(animateRadius);
3111
- const asChildRef = React31__namespace.useRef(null);
3112
- const mergedRef = React31__namespace.useCallback(
4095
+ const asChildRef = React38__namespace.useRef(null);
4096
+ const mergedRef = React38__namespace.useCallback(
3113
4097
  (node) => {
3114
4098
  asChildRef.current = node;
3115
4099
  if (typeof ref === "function") ref(node);
@@ -3118,27 +4102,27 @@ var ButtonComponent = React31__namespace.forwardRef(
3118
4102
  },
3119
4103
  [ref]
3120
4104
  );
3121
- React31__namespace.useEffect(
4105
+ React38__namespace.useEffect(
3122
4106
  () => motionRadius.on("change", (v) => {
3123
4107
  if (asChildRef.current)
3124
4108
  asChildRef.current.style.borderRadius = `${v}px`;
3125
4109
  }),
3126
4110
  [motionRadius]
3127
4111
  );
3128
- React31__namespace.useEffect(() => {
4112
+ React38__namespace.useEffect(() => {
3129
4113
  springAnimate(motionRadius, animateRadius);
3130
4114
  }, [animateRadius, motionRadius]);
3131
4115
  const { ripples, onPointerDown, removeRipple } = useRippleState({
3132
4116
  disabled: loading
3133
4117
  });
3134
- const handleClick = React31__namespace.useCallback(
4118
+ const handleClick = React38__namespace.useCallback(
3135
4119
  (e) => {
3136
4120
  if (loading) return e.preventDefault();
3137
4121
  onClick == null ? void 0 : onClick(e);
3138
4122
  },
3139
4123
  [loading, onClick]
3140
4124
  );
3141
- const handleKeyDown = React31__namespace.useCallback(
4125
+ const handleKeyDown = React38__namespace.useCallback(
3142
4126
  (e) => {
3143
4127
  if (loading) return;
3144
4128
  if (onClick && (e.key === "Enter" || e.key === " ")) {
@@ -3172,7 +4156,7 @@ var ButtonComponent = React31__namespace.forwardRef(
3172
4156
  react.m.span,
3173
4157
  {
3174
4158
  layout: "size",
3175
- className: "inline-flex items-center gap-[inherit]",
4159
+ className: "inline-flex items-center h-full gap-[inherit]",
3176
4160
  transition: SPRING_TRANSITION,
3177
4161
  children: labelText
3178
4162
  }
@@ -3181,7 +4165,7 @@ var ButtonComponent = React31__namespace.forwardRef(
3181
4165
  ] });
3182
4166
  if (asChild) {
3183
4167
  const htmlProps = stripMotionProps(restProps);
3184
- const child = React31__namespace.Children.only(children);
4168
+ const child = React38__namespace.Children.only(children);
3185
4169
  const handleAsChildPointerDown = (e) => {
3186
4170
  springAnimate(motionRadius, pressedRadius);
3187
4171
  onPointerDown == null ? void 0 : onPointerDown(e);
@@ -3205,7 +4189,7 @@ var ButtonComponent = React31__namespace.forwardRef(
3205
4189
  }),
3206
4190
  className: buttonClassName
3207
4191
  }, htmlProps), {
3208
- children: React31__namespace.cloneElement(child, { children: innerContent })
4192
+ children: React38__namespace.cloneElement(child, { children: innerContent })
3209
4193
  })
3210
4194
  ) });
3211
4195
  }
@@ -3233,7 +4217,7 @@ var ButtonComponent = React31__namespace.forwardRef(
3233
4217
  }
3234
4218
  );
3235
4219
  ButtonComponent.displayName = "Button";
3236
- var Button = React31__namespace.memo(ButtonComponent);
4220
+ var Button = React38__namespace.memo(ButtonComponent);
3237
4221
  var SIZE_PADDING_MAP = {
3238
4222
  xs: "0.75rem",
3239
4223
  sm: "1rem",
@@ -3262,7 +4246,7 @@ var PRESSED_RADIUS_MAP = {
3262
4246
  lg: 28,
3263
4247
  xl: 40
3264
4248
  };
3265
- var ButtonGroupComponent = React31__namespace.forwardRef(
4249
+ var ButtonGroupComponent = React38__namespace.forwardRef(
3266
4250
  (_a, ref) => {
3267
4251
  var _b = _a, {
3268
4252
  className,
@@ -3283,13 +4267,13 @@ var ButtonGroupComponent = React31__namespace.forwardRef(
3283
4267
  "showCheck",
3284
4268
  "children"
3285
4269
  ]);
3286
- const [pressedIndex, setPressedIndex] = React31__namespace.useState(null);
3287
- const childrenArray = React31__namespace.useMemo(
3288
- () => React31__namespace.Children.toArray(children).filter(React31__namespace.isValidElement),
4270
+ const [pressedIndex, setPressedIndex] = React38__namespace.useState(null);
4271
+ const childrenArray = React38__namespace.useMemo(
4272
+ () => React38__namespace.Children.toArray(children).filter(React38__namespace.isValidElement),
3289
4273
  [children]
3290
4274
  );
3291
4275
  const count = childrenArray.length;
3292
- const handlePointerLeaveAndUp = React31__namespace.useCallback(() => {
4276
+ const handlePointerLeaveAndUp = React38__namespace.useCallback(() => {
3293
4277
  setPressedIndex(null);
3294
4278
  }, []);
3295
4279
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -3428,7 +4412,7 @@ var ButtonGroupComponent = React31__namespace.forwardRef(
3428
4412
  duration: 0.2
3429
4413
  };
3430
4414
  }
3431
- return React31__namespace.cloneElement(element, __spreadValues(__spreadProps(__spreadValues({
4415
+ return React38__namespace.cloneElement(element, __spreadValues(__spreadProps(__spreadValues({
3432
4416
  key: (_a2 = element.key) != null ? _a2 : index,
3433
4417
  tabIndex: isFirst ? 0 : -1,
3434
4418
  size: size || element.props.size,
@@ -3457,7 +4441,7 @@ var ButtonGroupComponent = React31__namespace.forwardRef(
3457
4441
  }
3458
4442
  );
3459
4443
  ButtonGroupComponent.displayName = "ButtonGroup";
3460
- var ButtonGroup = React31__namespace.memo(ButtonGroupComponent);
4444
+ var ButtonGroup = React38__namespace.memo(ButtonGroupComponent);
3461
4445
  var SHADOW = {
3462
4446
  level0: "none",
3463
4447
  level1: "0px 1px 2px 0px rgba(0,0,0,.3), 0px 1px 3px 1px rgba(0,0,0,.15)",
@@ -3516,7 +4500,7 @@ function useCardElevation(variant, disabled) {
3516
4500
  }
3517
4501
  };
3518
4502
  }
3519
- var CardImpl = React31__namespace.forwardRef(
4503
+ var CardImpl = React38__namespace.forwardRef(
3520
4504
  (_a, ref) => {
3521
4505
  var _b = _a, {
3522
4506
  className,
@@ -3614,7 +4598,7 @@ var CardImpl = React31__namespace.forwardRef(
3614
4598
  }
3615
4599
  );
3616
4600
  CardImpl.displayName = "Card";
3617
- var Card = React31__namespace.memo(CardImpl);
4601
+ var Card = React38__namespace.memo(CardImpl);
3618
4602
  var MD3_STANDARD = [0.2, 0, 0, 1];
3619
4603
  var MD3_FAST_EFFECTS = [0.3, 0, 1, 1];
3620
4604
  var CHECKMARK_PATH = "M 4.5 9.5 L 7.5 12.5 L 13.5 5.5";
@@ -3628,7 +4612,7 @@ var NEXT_STATE = {
3628
4612
  checked: "indeterminate",
3629
4613
  indeterminate: "unchecked"
3630
4614
  };
3631
- var CheckboxVisual = React31__namespace.memo(function CheckboxVisual2({
4615
+ var CheckboxVisual = React38__namespace.memo(function CheckboxVisual2({
3632
4616
  isSelected,
3633
4617
  isIndeterminate,
3634
4618
  containerBg,
@@ -3699,7 +4683,7 @@ var CheckboxVisual = React31__namespace.memo(function CheckboxVisual2({
3699
4683
  );
3700
4684
  });
3701
4685
  function useMergedRef2(externalRef, internalRef) {
3702
- return React31__namespace.useCallback(
4686
+ return React38__namespace.useCallback(
3703
4687
  (node) => {
3704
4688
  internalRef.current = node;
3705
4689
  if (!externalRef) return;
@@ -3712,7 +4696,7 @@ function useMergedRef2(externalRef, internalRef) {
3712
4696
  [externalRef, internalRef]
3713
4697
  );
3714
4698
  }
3715
- var CheckboxComponent = React31__namespace.forwardRef(
4699
+ var CheckboxComponent = React38__namespace.forwardRef(
3716
4700
  ({
3717
4701
  checked,
3718
4702
  defaultChecked = false,
@@ -3734,20 +4718,20 @@ var CheckboxComponent = React31__namespace.forwardRef(
3734
4718
  }, ref) => {
3735
4719
  var _a;
3736
4720
  const prefersReduced = (_a = react.useReducedMotion()) != null ? _a : false;
3737
- const generatedId = React31__namespace.useId();
4721
+ const generatedId = React38__namespace.useId();
3738
4722
  const inputId = idProp != null ? idProp : label ? `checkbox-${generatedId}` : void 0;
3739
- const [internalState, setInternalState] = React31__namespace.useState(
4723
+ const [internalState, setInternalState] = React38__namespace.useState(
3740
4724
  () => defaultChecked ? "checked" : "unchecked"
3741
4725
  );
3742
4726
  const isControlled = stateProp !== void 0 || checked !== void 0;
3743
4727
  const baseState = isControlled ? resolveState(checked, false, stateProp) : internalState;
3744
4728
  const effectiveState = indeterminate ? "indeterminate" : baseState;
3745
- const [ripples, setRipples] = React31__namespace.useState([]);
3746
- const removeRipple = React31__namespace.useCallback(
4729
+ const [ripples, setRipples] = React38__namespace.useState([]);
4730
+ const removeRipple = React38__namespace.useCallback(
3747
4731
  (id) => setRipples((prev) => prev.filter((r) => r.id !== id)),
3748
4732
  []
3749
4733
  );
3750
- const onPointerDown = React31__namespace.useCallback(
4734
+ const onPointerDown = React38__namespace.useCallback(
3751
4735
  (e) => {
3752
4736
  if (disabled) return;
3753
4737
  const rect = e.currentTarget.getBoundingClientRect();
@@ -3761,7 +4745,7 @@ var CheckboxComponent = React31__namespace.forwardRef(
3761
4745
  },
3762
4746
  [disabled]
3763
4747
  );
3764
- const handleChange = React31__namespace.useCallback(
4748
+ const handleChange = React38__namespace.useCallback(
3765
4749
  (e) => {
3766
4750
  if (disabled) return;
3767
4751
  if (stateProp !== void 0) {
@@ -3787,9 +4771,9 @@ var CheckboxComponent = React31__namespace.forwardRef(
3787
4771
  onCheckedChange
3788
4772
  ]
3789
4773
  );
3790
- const inputRef = React31__namespace.useRef(null);
4774
+ const inputRef = React38__namespace.useRef(null);
3791
4775
  const mergedRef = useMergedRef2(ref, inputRef);
3792
- React31__namespace.useEffect(() => {
4776
+ React38__namespace.useEffect(() => {
3793
4777
  if (inputRef.current) {
3794
4778
  inputRef.current.indeterminate = effectiveState === "indeterminate";
3795
4779
  }
@@ -3914,13 +4898,13 @@ var CheckboxComponent = React31__namespace.forwardRef(
3914
4898
  }
3915
4899
  );
3916
4900
  CheckboxComponent.displayName = "Checkbox";
3917
- var Checkbox = React31__namespace.memo(CheckboxComponent);
3918
- var TriStateCheckboxComponent = React31__namespace.forwardRef((_a, ref) => {
4901
+ var Checkbox = React38__namespace.memo(CheckboxComponent);
4902
+ var TriStateCheckboxComponent = React38__namespace.forwardRef((_a, ref) => {
3919
4903
  var _b = _a, { state, onStateChange } = _b, rest = __objRest(_b, ["state", "onStateChange"]);
3920
4904
  return /* @__PURE__ */ jsxRuntime.jsx(Checkbox, __spreadValues({ ref, state, onStateChange }, rest));
3921
4905
  });
3922
4906
  TriStateCheckboxComponent.displayName = "TriStateCheckbox";
3923
- var TriStateCheckbox = React31__namespace.memo(TriStateCheckboxComponent);
4907
+ var TriStateCheckbox = React38__namespace.memo(TriStateCheckboxComponent);
3924
4908
  function CheckIcon({ className }) {
3925
4909
  return /* @__PURE__ */ jsxRuntime.jsx(
3926
4910
  "svg",
@@ -4014,7 +4998,7 @@ var chipVariants = classVarianceAuthority.cva(
4014
4998
  defaultVariants: { variant: "assist" }
4015
4999
  }
4016
5000
  );
4017
- var ChipImpl = React31__namespace.forwardRef(
5001
+ var ChipImpl = React38__namespace.forwardRef(
4018
5002
  (_a, ref) => {
4019
5003
  var _b = _a, {
4020
5004
  variant = "assist",
@@ -4050,7 +5034,7 @@ var ChipImpl = React31__namespace.forwardRef(
4050
5034
  const showCheckmark = isFilter && selected;
4051
5035
  const hasTrailingContent = !!trailingIcon || !!onRemove;
4052
5036
  const hasLeadingContent = isFilter || !!resolvedLeadingIcon;
4053
- const paddingClass = React31__namespace.useMemo(
5037
+ const paddingClass = React38__namespace.useMemo(
4054
5038
  () => cn(
4055
5039
  !isInput && !hasLeadingContent && !hasTrailingContent && "px-4",
4056
5040
  !isInput && hasLeadingContent && !hasTrailingContent && "pl-2 pr-4",
@@ -4063,7 +5047,7 @@ var ChipImpl = React31__namespace.forwardRef(
4063
5047
  ),
4064
5048
  [isInput, hasLeadingContent, hasTrailingContent]
4065
5049
  );
4066
- const stateClass = React31__namespace.useMemo(
5050
+ const stateClass = React38__namespace.useMemo(
4067
5051
  () => cn(
4068
5052
  (isFilter || isInput) && selected && "bg-m3-secondary-container text-m3-on-secondary-container border-none before:bg-m3-on-secondary-container",
4069
5053
  elevated && !selected && "bg-m3-surface-container-low border-none elevation-1",
@@ -4074,7 +5058,7 @@ var ChipImpl = React31__namespace.forwardRef(
4074
5058
  ),
4075
5059
  [isFilter, isInput, selected, elevated, disabled]
4076
5060
  );
4077
- const leadingIconColorClass = React31__namespace.useMemo(
5061
+ const leadingIconColorClass = React38__namespace.useMemo(
4078
5062
  () => cn(
4079
5063
  (variant === "assist" || variant === "suggestion") && "text-m3-primary",
4080
5064
  isFilter && !selected && "text-m3-primary",
@@ -4085,7 +5069,7 @@ var ChipImpl = React31__namespace.forwardRef(
4085
5069
  [variant, isFilter, isInput, selected]
4086
5070
  );
4087
5071
  const isCompound = !!onRemove;
4088
- const Root5 = isCompound ? "div" : "button";
5072
+ const Root6 = isCompound ? "div" : "button";
4089
5073
  const containerClass = cn(
4090
5074
  chipVariants({ variant }),
4091
5075
  !isCompound && paddingClass,
@@ -4155,7 +5139,7 @@ var ChipImpl = React31__namespace.forwardRef(
4155
5139
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "whitespace-nowrap", children: label })
4156
5140
  ] });
4157
5141
  return /* @__PURE__ */ jsxRuntime.jsx(react.LazyMotion, { features: react.domMax, strict: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
4158
- Root5,
5142
+ Root6,
4159
5143
  __spreadProps(__spreadValues(__spreadProps(__spreadValues({
4160
5144
  ref: !isCompound ? ref : void 0,
4161
5145
  type: !isCompound ? "button" : void 0
@@ -4246,8 +5230,8 @@ var ChipImpl = React31__namespace.forwardRef(
4246
5230
  }
4247
5231
  );
4248
5232
  ChipImpl.displayName = "Chip";
4249
- var Chip = React31__namespace.memo(ChipImpl);
4250
- var ScrollArea = React31__namespace.forwardRef(
5233
+ var Chip = React38__namespace.memo(ChipImpl);
5234
+ var ScrollArea = React38__namespace.forwardRef(
4251
5235
  (_a, ref) => {
4252
5236
  var _b = _a, {
4253
5237
  className,
@@ -4306,7 +5290,7 @@ var ScrollArea = React31__namespace.forwardRef(
4306
5290
  }
4307
5291
  );
4308
5292
  ScrollArea.displayName = "ScrollArea";
4309
- var ScrollAreaScrollbar = React31__namespace.forwardRef((_a, ref) => {
5293
+ var ScrollAreaScrollbar = React38__namespace.forwardRef((_a, ref) => {
4310
5294
  var _b = _a, { className, orientation = "vertical" } = _b, props = __objRest(_b, ["className", "orientation"]);
4311
5295
  return /* @__PURE__ */ jsxRuntime.jsx(
4312
5296
  RadixScrollArea__namespace.Scrollbar,
@@ -4336,7 +5320,7 @@ var ScrollAreaScrollbar = React31__namespace.forwardRef((_a, ref) => {
4336
5320
  );
4337
5321
  });
4338
5322
  ScrollAreaScrollbar.displayName = RadixScrollArea__namespace.Scrollbar.displayName;
4339
- var ScrollAreaCorner = React31__namespace.forwardRef((_a, ref) => {
5323
+ var ScrollAreaCorner = React38__namespace.forwardRef((_a, ref) => {
4340
5324
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4341
5325
  return /* @__PURE__ */ jsxRuntime.jsx(
4342
5326
  RadixScrollArea__namespace.Corner,
@@ -4431,7 +5415,7 @@ function mapDomToReact(node, key) {
4431
5415
  props[propName] = attr.value;
4432
5416
  }
4433
5417
  }
4434
- return React31.createElement(
5418
+ return React38.createElement(
4435
5419
  tagName,
4436
5420
  props,
4437
5421
  Array.from(el.childNodes).map((child, i) => mapDomToReact(child, i))
@@ -4440,8 +5424,8 @@ function mapDomToReact(node, key) {
4440
5424
  return null;
4441
5425
  }
4442
5426
  function CodeContent({ html, code }) {
4443
- const [parsedContent, setParsedContent] = React31.useState(null);
4444
- React31.useEffect(() => {
5427
+ const [parsedContent, setParsedContent] = React38.useState(null);
5428
+ React38.useEffect(() => {
4445
5429
  if (html) {
4446
5430
  const parser = new DOMParser();
4447
5431
  const doc = parser.parseFromString(html, "text/html");
@@ -4471,8 +5455,8 @@ function CodeBlock({
4471
5455
  className,
4472
5456
  html
4473
5457
  }) {
4474
- const [copied, setCopied] = React31.useState(false);
4475
- const handleCopy = React31.useCallback(async () => {
5458
+ const [copied, setCopied] = React38.useState(false);
5459
+ const handleCopy = React38.useCallback(async () => {
4476
5460
  try {
4477
5461
  await navigator.clipboard.writeText(code);
4478
5462
  setCopied(true);
@@ -4613,7 +5597,7 @@ function resolveDisabledBgClass(colorStyle) {
4613
5597
  }
4614
5598
  return "disabled:text-m3-on-surface/[0.38]";
4615
5599
  }
4616
- var IconButtonComponent = React31__namespace.forwardRef(
5600
+ var IconButtonComponent = React38__namespace.forwardRef(
4617
5601
  (_a, ref) => {
4618
5602
  var _b = _a, {
4619
5603
  className,
@@ -4647,18 +5631,18 @@ var IconButtonComponent = React31__namespace.forwardRef(
4647
5631
  var _a2, _b2;
4648
5632
  const isToggle = variant === "toggle";
4649
5633
  const isSelected = isToggle && !!selected;
4650
- const resolvedColorClass = React31__namespace.useMemo(
5634
+ const resolvedColorClass = React38__namespace.useMemo(
4651
5635
  () => isSelected ? colorStyles[colorStyle].selected : colorStyles[colorStyle].default,
4652
5636
  [isSelected, colorStyle]
4653
5637
  );
4654
- const outlineWidthClass = React31__namespace.useMemo(
5638
+ const outlineWidthClass = React38__namespace.useMemo(
4655
5639
  () => {
4656
5640
  var _a3;
4657
5641
  return colorStyle === "outlined" && !isSelected ? (_a3 = SIZE_OUTLINE_WIDTH[size]) != null ? _a3 : "border" : "";
4658
5642
  },
4659
5643
  [colorStyle, isSelected, size]
4660
5644
  );
4661
- const disabledBgClass = React31__namespace.useMemo(
5645
+ const disabledBgClass = React38__namespace.useMemo(
4662
5646
  () => resolveDisabledBgClass(colorStyle),
4663
5647
  [colorStyle]
4664
5648
  );
@@ -4677,7 +5661,7 @@ var IconButtonComponent = React31__namespace.forwardRef(
4677
5661
  const { ripples, onPointerDown, removeRipple } = useRippleState({
4678
5662
  disabled: loading
4679
5663
  });
4680
- const handleClick = React31__namespace.useCallback(
5664
+ const handleClick = React38__namespace.useCallback(
4681
5665
  (e) => {
4682
5666
  if (loading) {
4683
5667
  e.preventDefault();
@@ -4687,7 +5671,7 @@ var IconButtonComponent = React31__namespace.forwardRef(
4687
5671
  },
4688
5672
  [loading, onClick]
4689
5673
  );
4690
- const handleKeyDown = React31__namespace.useCallback(
5674
+ const handleKeyDown = React38__namespace.useCallback(
4691
5675
  (e) => {
4692
5676
  if (loading) return;
4693
5677
  if ((e.key === "Enter" || e.key === " ") && onClick) {
@@ -4775,7 +5759,7 @@ var IconButtonComponent = React31__namespace.forwardRef(
4775
5759
  }
4776
5760
  );
4777
5761
  IconButtonComponent.displayName = "IconButton";
4778
- var IconButton = React31__namespace.memo(IconButtonComponent);
5762
+ var IconButton = React38__namespace.memo(IconButtonComponent);
4779
5763
  var MD3_SPRING = {
4780
5764
  type: "spring",
4781
5765
  stiffness: 400,
@@ -4812,9 +5796,9 @@ DialogTrigger.displayName = "DialogTrigger";
4812
5796
  var DialogPortal = ({
4813
5797
  open,
4814
5798
  children
4815
- }) => /* @__PURE__ */ jsxRuntime.jsx(RadixDialog__namespace.Portal, { forceMount: true, children: /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { children: open ? React31__namespace.Children.toArray(children) : null }) });
5799
+ }) => /* @__PURE__ */ jsxRuntime.jsx(RadixDialog__namespace.Portal, { forceMount: true, children: /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { children: open ? React38__namespace.Children.toArray(children) : null }) });
4816
5800
  DialogPortal.displayName = "DialogPortal";
4817
- var DialogOverlay = React31__namespace.forwardRef((_a, ref) => {
5801
+ var DialogOverlay = React38__namespace.forwardRef((_a, ref) => {
4818
5802
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4819
5803
  return /* @__PURE__ */ jsxRuntime.jsx(RadixDialog__namespace.Overlay, __spreadProps(__spreadValues({ ref, asChild: true }, props), { children: /* @__PURE__ */ jsxRuntime.jsx(
4820
5804
  react.m.div,
@@ -4825,7 +5809,7 @@ var DialogOverlay = React31__namespace.forwardRef((_a, ref) => {
4825
5809
  ) }));
4826
5810
  });
4827
5811
  DialogOverlay.displayName = "DialogOverlay";
4828
- var DialogContent = React31__namespace.forwardRef((_a, ref) => {
5812
+ var DialogContent = React38__namespace.forwardRef((_a, ref) => {
4829
5813
  var _b = _a, { className, children, hideCloseButton = false } = _b, props = __objRest(_b, ["className", "children", "hideCloseButton"]);
4830
5814
  return /* @__PURE__ */ jsxRuntime.jsx(
4831
5815
  RadixDialog__namespace.Content,
@@ -4865,7 +5849,7 @@ var DialogContent = React31__namespace.forwardRef((_a, ref) => {
4865
5849
  );
4866
5850
  });
4867
5851
  DialogContent.displayName = "DialogContent";
4868
- var DialogIcon = React31__namespace.forwardRef((_a, ref) => {
5852
+ var DialogIcon = React38__namespace.forwardRef((_a, ref) => {
4869
5853
  var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4870
5854
  return /* @__PURE__ */ jsxRuntime.jsx(
4871
5855
  "div",
@@ -4888,7 +5872,7 @@ var DialogHeader = (_a) => {
4888
5872
  return /* @__PURE__ */ jsxRuntime.jsx("div", __spreadValues({ className: cn("flex flex-col gap-2 mb-4", className) }, props));
4889
5873
  };
4890
5874
  DialogHeader.displayName = "DialogHeader";
4891
- var DialogTitle = React31__namespace.forwardRef((_a, ref) => {
5875
+ var DialogTitle = React38__namespace.forwardRef((_a, ref) => {
4892
5876
  var _b = _a, { className, asChild } = _b, props = __objRest(_b, ["className", "asChild"]);
4893
5877
  return /* @__PURE__ */ jsxRuntime.jsx(
4894
5878
  RadixDialog__namespace.Title,
@@ -4903,7 +5887,7 @@ var DialogTitle = React31__namespace.forwardRef((_a, ref) => {
4903
5887
  );
4904
5888
  });
4905
5889
  DialogTitle.displayName = "DialogTitle";
4906
- var DialogDescription = React31__namespace.forwardRef((_a, ref) => {
5890
+ var DialogDescription = React38__namespace.forwardRef((_a, ref) => {
4907
5891
  var _b = _a, { className, asChild } = _b, props = __objRest(_b, ["className", "asChild"]);
4908
5892
  return /* @__PURE__ */ jsxRuntime.jsx(
4909
5893
  RadixDialog__namespace.Description,
@@ -4915,7 +5899,7 @@ var DialogDescription = React31__namespace.forwardRef((_a, ref) => {
4915
5899
  );
4916
5900
  });
4917
5901
  DialogDescription.displayName = "DialogDescription";
4918
- var DialogBody = React31__namespace.forwardRef((_a, ref) => {
5902
+ var DialogBody = React38__namespace.forwardRef((_a, ref) => {
4919
5903
  var _b = _a, { className, children, dir } = _b, props = __objRest(_b, ["className", "children", "dir"]);
4920
5904
  return /* @__PURE__ */ jsxRuntime.jsx(
4921
5905
  ScrollArea,
@@ -4946,7 +5930,7 @@ var DialogFooter = (_a) => {
4946
5930
  };
4947
5931
  DialogFooter.displayName = "DialogFooter";
4948
5932
  var DialogClose = RadixDialog__namespace.Close;
4949
- var DialogFullScreenContent = React31__namespace.forwardRef(
5933
+ var DialogFullScreenContent = React38__namespace.forwardRef(
4950
5934
  (_a, ref) => {
4951
5935
  var _b = _a, {
4952
5936
  className,
@@ -5029,7 +6013,7 @@ function buildWavePath(startX, endX, amplitude = 2, wavelength = 32, yCenter = 4
5029
6013
  }
5030
6014
  return d;
5031
6015
  }
5032
- var DividerImpl = React31__namespace.forwardRef(
6016
+ var DividerImpl = React38__namespace.forwardRef(
5033
6017
  (_a, ref) => {
5034
6018
  var _b = _a, {
5035
6019
  variant = "full-bleed",
@@ -5149,7 +6133,7 @@ var DividerImpl = React31__namespace.forwardRef(
5149
6133
  }
5150
6134
  );
5151
6135
  DividerImpl.displayName = "Divider";
5152
- var Divider = React31__namespace.memo(DividerImpl);
6136
+ var Divider = React38__namespace.memo(DividerImpl);
5153
6137
  var MD3_DRAWER_SPRING = {
5154
6138
  type: "spring",
5155
6139
  stiffness: 350,
@@ -5186,7 +6170,7 @@ var DrawerPortal = ({
5186
6170
  open,
5187
6171
  children
5188
6172
  }) => /* @__PURE__ */ jsxRuntime.jsx(RadixDialog__namespace.Portal, { forceMount: true, children: /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { mode: "wait", children: open && children }) });
5189
- var DrawerOverlay = React31__namespace.forwardRef((_a, ref) => {
6173
+ var DrawerOverlay = React38__namespace.forwardRef((_a, ref) => {
5190
6174
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
5191
6175
  return /* @__PURE__ */ jsxRuntime.jsx(RadixDialog__namespace.Overlay, __spreadProps(__spreadValues({ ref, asChild: true }, props), { children: /* @__PURE__ */ jsxRuntime.jsx(
5192
6176
  react.m.div,
@@ -5197,7 +6181,7 @@ var DrawerOverlay = React31__namespace.forwardRef((_a, ref) => {
5197
6181
  ) }));
5198
6182
  });
5199
6183
  DrawerOverlay.displayName = "DrawerOverlay";
5200
- var DrawerContent = React31__namespace.forwardRef(
6184
+ var DrawerContent = React38__namespace.forwardRef(
5201
6185
  (_a, ref) => {
5202
6186
  var _b = _a, {
5203
6187
  className,
@@ -5276,7 +6260,7 @@ var DrawerFooter = (_a) => {
5276
6260
  return /* @__PURE__ */ jsxRuntime.jsx("div", __spreadValues({ className: cn("flex flex-col gap-2 mt-4", className) }, props));
5277
6261
  };
5278
6262
  DrawerFooter.displayName = "DrawerFooter";
5279
- var DrawerTitle = React31__namespace.forwardRef((_a, ref) => {
6263
+ var DrawerTitle = React38__namespace.forwardRef((_a, ref) => {
5280
6264
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
5281
6265
  return /* @__PURE__ */ jsxRuntime.jsx(
5282
6266
  RadixDialog__namespace.Title,
@@ -5290,7 +6274,7 @@ var DrawerTitle = React31__namespace.forwardRef((_a, ref) => {
5290
6274
  );
5291
6275
  });
5292
6276
  DrawerTitle.displayName = "DrawerTitle";
5293
- var DrawerDescription = React31__namespace.forwardRef((_a, ref) => {
6277
+ var DrawerDescription = React38__namespace.forwardRef((_a, ref) => {
5294
6278
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
5295
6279
  return /* @__PURE__ */ jsxRuntime.jsx(
5296
6280
  RadixDialog__namespace.Description,
@@ -5371,7 +6355,7 @@ function FABPosition({
5371
6355
  }
5372
6356
  );
5373
6357
  }
5374
- var FABComponent = React31__namespace.forwardRef(
6358
+ var FABComponent = React38__namespace.forwardRef(
5375
6359
  (_a, ref) => {
5376
6360
  var _b = _a, {
5377
6361
  className,
@@ -5416,7 +6400,7 @@ var FABComponent = React31__namespace.forwardRef(
5416
6400
  const { ripples, onPointerDown, removeRipple } = useRippleState({
5417
6401
  disabled: loading
5418
6402
  });
5419
- const handleClick = React31__namespace.useCallback(
6403
+ const handleClick = React38__namespace.useCallback(
5420
6404
  (e) => {
5421
6405
  if (loading) {
5422
6406
  e.preventDefault();
@@ -5426,7 +6410,7 @@ var FABComponent = React31__namespace.forwardRef(
5426
6410
  },
5427
6411
  [loading, onClick]
5428
6412
  );
5429
- const handleKeyDown = React31__namespace.useCallback(
6413
+ const handleKeyDown = React38__namespace.useCallback(
5430
6414
  (e) => {
5431
6415
  if (loading) return;
5432
6416
  if ((e.key === "Enter" || e.key === " ") && onClick) {
@@ -5535,7 +6519,7 @@ var FABComponent = React31__namespace.forwardRef(
5535
6519
  }
5536
6520
  );
5537
6521
  FABComponent.displayName = "FAB";
5538
- var FAB = React31__namespace.memo(FABComponent);
6522
+ var FAB = React38__namespace.memo(FABComponent);
5539
6523
  var SPRING_NORMAL = { stiffness: 700, damping: 40 };
5540
6524
  var SPRING_REDUCED = { stiffness: 1e4, damping: 100 };
5541
6525
  var FOCUS_DELAY_MS = 50;
@@ -5600,7 +6584,7 @@ var ALIGNMENT_TRANSFORM_ORIGIN = {
5600
6584
  center: "bottom"
5601
6585
  };
5602
6586
  var ITEM_SPRING = { type: "spring", stiffness: 700, damping: 25 };
5603
- var MENU_CONTAINER_VARIANTS = {
6587
+ var MENU_CONTAINER_VARIANTS2 = {
5604
6588
  open: { transition: { staggerChildren: 0.033, staggerDirection: 1 } },
5605
6589
  closed: { transition: { staggerChildren: 0.02, staggerDirection: -1 } }
5606
6590
  };
@@ -5643,7 +6627,7 @@ function CloseIcon3() {
5643
6627
  function defaultFabIcon(progress) {
5644
6628
  return progress > 0.5 ? /* @__PURE__ */ jsxRuntime.jsx(CloseIcon3, {}) : /* @__PURE__ */ jsxRuntime.jsx(AddIcon, {});
5645
6629
  }
5646
- var ToggleFABComponent = React31__namespace.forwardRef(
6630
+ var ToggleFABComponent = React38__namespace.forwardRef(
5647
6631
  ({
5648
6632
  expanded,
5649
6633
  onToggle,
@@ -5661,7 +6645,7 @@ var ToggleFABComponent = React31__namespace.forwardRef(
5661
6645
  const sizeTokens = (_b = TOGGLE_FAB_SIZES[fabSize]) != null ? _b : TOGGLE_FAB_SIZES.baseline;
5662
6646
  const springConfig = prefersReduced ? SPRING_REDUCED : SPRING_NORMAL;
5663
6647
  const checkedProgress = react.useSpring(expanded ? 1 : 0, springConfig);
5664
- React31__namespace.useEffect(() => {
6648
+ React38__namespace.useEffect(() => {
5665
6649
  checkedProgress.set(expanded ? 1 : 0);
5666
6650
  }, [expanded, checkedProgress]);
5667
6651
  const borderRadius = react.useTransform(
@@ -5669,12 +6653,12 @@ var ToggleFABComponent = React31__namespace.forwardRef(
5669
6653
  [0, 1],
5670
6654
  [`${sizeTokens.initialRadius}px`, `${sizeTokens.finalRadius}px`]
5671
6655
  );
5672
- const [iconProgress, setIconProgress] = React31__namespace.useState(expanded ? 1 : 0);
5673
- React31__namespace.useEffect(() => {
6656
+ const [iconProgress, setIconProgress] = React38__namespace.useState(expanded ? 1 : 0);
6657
+ React38__namespace.useEffect(() => {
5674
6658
  return checkedProgress.on("change", setIconProgress);
5675
6659
  }, [checkedProgress]);
5676
6660
  const { ripples, onPointerDown, removeRipple } = useRippleState();
5677
- const handleClick = React31__namespace.useCallback(() => {
6661
+ const handleClick = React38__namespace.useCallback(() => {
5678
6662
  onToggle(!expanded);
5679
6663
  }, [expanded, onToggle]);
5680
6664
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -5723,7 +6707,7 @@ var ToggleFABComponent = React31__namespace.forwardRef(
5723
6707
  }
5724
6708
  );
5725
6709
  ToggleFABComponent.displayName = "ToggleFAB";
5726
- var ToggleFAB = React31__namespace.memo(ToggleFABComponent);
6710
+ var ToggleFAB = React38__namespace.memo(ToggleFABComponent);
5727
6711
  function FABMenuItem({
5728
6712
  icon,
5729
6713
  label,
@@ -5736,7 +6720,7 @@ function FABMenuItem({
5736
6720
  var _a;
5737
6721
  const colors = (_a = MENU_ITEM_COLORS[colorVariant]) != null ? _a : MENU_ITEM_COLORS.primary;
5738
6722
  const { ripples, onPointerDown, removeRipple } = useRippleState({ disabled });
5739
- const handleClick = React31__namespace.useCallback(
6723
+ const handleClick = React38__namespace.useCallback(
5740
6724
  (e) => {
5741
6725
  if (disabled) {
5742
6726
  e.preventDefault();
@@ -5746,7 +6730,7 @@ function FABMenuItem({
5746
6730
  },
5747
6731
  [disabled, onClick]
5748
6732
  );
5749
- const handleKeyDown = React31__namespace.useCallback(
6733
+ const handleKeyDown = React38__namespace.useCallback(
5750
6734
  (e) => {
5751
6735
  if (disabled) return;
5752
6736
  if (e.key === "Enter" || e.key === " ") {
@@ -5813,13 +6797,13 @@ function FABMenu({
5813
6797
  focusLast = true,
5814
6798
  "aria-label": ariaLabel
5815
6799
  }) {
5816
- const fabId = React31__namespace.useId();
5817
- const menuId = React31__namespace.useId();
5818
- const toggleRef = React31__namespace.useRef(null);
5819
- const itemRefs = React31__namespace.useRef([]);
5820
- const [focusedIndex, setFocusedIndex] = React31__namespace.useState(-1);
5821
- const reversedItems = React31__namespace.useMemo(() => [...items].reverse(), [items]);
5822
- const focusItem = React31__namespace.useCallback((index) => {
6800
+ const fabId = React38__namespace.useId();
6801
+ const menuId = React38__namespace.useId();
6802
+ const toggleRef = React38__namespace.useRef(null);
6803
+ const itemRefs = React38__namespace.useRef([]);
6804
+ const [focusedIndex, setFocusedIndex] = React38__namespace.useState(-1);
6805
+ const reversedItems = React38__namespace.useMemo(() => [...items].reverse(), [items]);
6806
+ const focusItem = React38__namespace.useCallback((index) => {
5823
6807
  var _a;
5824
6808
  const clampedIndex = Math.max(
5825
6809
  0,
@@ -5828,8 +6812,8 @@ function FABMenu({
5828
6812
  setFocusedIndex(clampedIndex);
5829
6813
  (_a = itemRefs.current[clampedIndex]) == null ? void 0 : _a.focus();
5830
6814
  }, []);
5831
- const wasExpandedRef = React31__namespace.useRef(false);
5832
- React31__namespace.useEffect(() => {
6815
+ const wasExpandedRef = React38__namespace.useRef(false);
6816
+ React38__namespace.useEffect(() => {
5833
6817
  var _a;
5834
6818
  if (expanded) {
5835
6819
  wasExpandedRef.current = true;
@@ -5844,7 +6828,7 @@ function FABMenu({
5844
6828
  wasExpandedRef.current = false;
5845
6829
  setFocusedIndex(-1);
5846
6830
  }, [expanded, focusLast, items.length, focusItem]);
5847
- const handleMenuKeyDown = React31__namespace.useCallback(
6831
+ const handleMenuKeyDown = React38__namespace.useCallback(
5848
6832
  (e) => {
5849
6833
  if (!expanded) return;
5850
6834
  const lastIndex = items.length - 1;
@@ -5905,7 +6889,7 @@ function FABMenu({
5905
6889
  role: "menu",
5906
6890
  "aria-labelledby": fabId,
5907
6891
  "aria-orientation": "vertical",
5908
- variants: MENU_CONTAINER_VARIANTS,
6892
+ variants: MENU_CONTAINER_VARIANTS2,
5909
6893
  initial: "closed",
5910
6894
  animate: "open",
5911
6895
  exit: "closed",
@@ -5968,7 +6952,7 @@ function FABMenu({
5968
6952
  )
5969
6953
  ] });
5970
6954
  }
5971
- var NavigationRailContext = React31__namespace.createContext({ variant: "collapsed", labelVisibility: "labeled", xr: false });
6955
+ var NavigationRailContext = React38__namespace.createContext({ variant: "collapsed", labelVisibility: "labeled", xr: false });
5972
6956
  var MD3_MODAL_TRANSITION = {
5973
6957
  type: "tween",
5974
6958
  ease: [0.05, 0.7, 0.1, 1],
@@ -6004,9 +6988,9 @@ var railContainerVariants = classVarianceAuthority.cva(
6004
6988
  }
6005
6989
  );
6006
6990
  function cloneIconWithFill(icon, selected) {
6007
- if (!React31__namespace.isValidElement(icon)) return icon;
6991
+ if (!React38__namespace.isValidElement(icon)) return icon;
6008
6992
  if (icon.type === Icon) {
6009
- return React31__namespace.cloneElement(
6993
+ return React38__namespace.cloneElement(
6010
6994
  icon,
6011
6995
  { fill: selected ? 1 : 0, animateFill: true }
6012
6996
  );
@@ -6034,11 +7018,11 @@ function ActivePill({ layoutId, disableInitial = false }) {
6034
7018
  {
6035
7019
  layoutId,
6036
7020
  className: "absolute inset-0 bg-m3-secondary-container pointer-events-none",
6037
- style: { borderRadius: 9999, zIndex: 0 },
6038
- initial: disableInitial ? false : { opacity: 0 },
6039
- animate: { opacity: 1 },
6040
- exit: { opacity: 0 },
6041
- transition: SPRING_TRANSITION
7021
+ style: { borderRadius: 9999, zIndex: 0, originX: 0.5, originY: 0.5 },
7022
+ initial: disableInitial ? false : { opacity: 0, scale: 0.5 },
7023
+ animate: { opacity: 1, scale: 1 },
7024
+ exit: { opacity: 0, scale: 0.5, transition: { duration: 0.15 } },
7025
+ transition: SPRING_TRANSITION_EXPRESSIVE
6042
7026
  }
6043
7027
  );
6044
7028
  }
@@ -6064,7 +7048,7 @@ function IconContainer({ selected, badge, children }) {
6064
7048
  }
6065
7049
  );
6066
7050
  }
6067
- var NavigationRailItemComponent = React31__namespace.forwardRef(
7051
+ var NavigationRailItemComponent = React38__namespace.forwardRef(
6068
7052
  ({
6069
7053
  selected,
6070
7054
  icon,
@@ -6075,18 +7059,18 @@ var NavigationRailItemComponent = React31__namespace.forwardRef(
6075
7059
  className,
6076
7060
  "aria-label": ariaLabelProp
6077
7061
  }, ref) => {
6078
- const { variant, labelVisibility } = React31__namespace.useContext(
7062
+ const { variant, labelVisibility } = React38__namespace.useContext(
6079
7063
  NavigationRailContext
6080
7064
  );
6081
7065
  const isExpanded = variant === "expanded" || variant === "modal";
6082
7066
  const isModal = variant === "modal";
6083
7067
  const enableLayout = !isModal;
6084
- const activePillId = `rail-pill-${React31__namespace.useId()}`;
7068
+ const activePillId = `rail-pill-${React38__namespace.useId()}`;
6085
7069
  const { ripples, onPointerDown, removeRipple } = useRippleState({
6086
7070
  disabled
6087
7071
  });
6088
7072
  const showLabel = isExpanded || labelVisibility === "labeled" || labelVisibility === "auto" && selected;
6089
- const handleClick = React31__namespace.useCallback(
7073
+ const handleClick = React38__namespace.useCallback(
6090
7074
  (e) => {
6091
7075
  if (disabled) {
6092
7076
  e.preventDefault();
@@ -6188,9 +7172,9 @@ var NavigationRailItemComponent = React31__namespace.forwardRef(
6188
7172
  }
6189
7173
  );
6190
7174
  NavigationRailItemComponent.displayName = "NavigationRailItem";
6191
- var NavigationRailItem = React31__namespace.memo(NavigationRailItemComponent);
7175
+ var NavigationRailItem = React38__namespace.memo(NavigationRailItemComponent);
6192
7176
  function useRoving(navRef) {
6193
- React31__namespace.useEffect(() => {
7177
+ React38__namespace.useEffect(() => {
6194
7178
  if (!navRef.current) return;
6195
7179
  const items = getMenuItems(navRef.current);
6196
7180
  const selected = items.find(
@@ -6200,7 +7184,7 @@ function useRoving(navRef) {
6200
7184
  const firstFocusable = selected != null ? selected : items[0];
6201
7185
  if (firstFocusable) firstFocusable.tabIndex = 0;
6202
7186
  }, [navRef]);
6203
- return React31__namespace.useCallback(
7187
+ return React38__namespace.useCallback(
6204
7188
  (e) => {
6205
7189
  if (!navRef.current) return;
6206
7190
  const items = getMenuItems(navRef.current);
@@ -6228,7 +7212,7 @@ function useRoving(navRef) {
6228
7212
  [navRef]
6229
7213
  );
6230
7214
  }
6231
- var NavigationRailComponent = React31__namespace.forwardRef(
7215
+ var NavigationRailComponent = React38__namespace.forwardRef(
6232
7216
  ({
6233
7217
  variant = "collapsed",
6234
7218
  labelVisibility = "labeled",
@@ -6248,9 +7232,9 @@ var NavigationRailComponent = React31__namespace.forwardRef(
6248
7232
  const xrMode = xr === "spatialized" ? "spatialized" : "contained";
6249
7233
  const isSpatial = isXr && xrMode === "spatialized";
6250
7234
  const applyAnimation = !isXr || !isSpatial;
6251
- const navRef = React31__namespace.useRef(null);
7235
+ const navRef = React38__namespace.useRef(null);
6252
7236
  const handleKeyDown = useRoving(navRef);
6253
- const setRefs = React31__namespace.useCallback(
7237
+ const setRefs = React38__namespace.useCallback(
6254
7238
  (node) => {
6255
7239
  navRef.current = node;
6256
7240
  if (typeof ref === "function") ref(node);
@@ -6343,7 +7327,7 @@ var NavigationRailComponent = React31__namespace.forwardRef(
6343
7327
  children: fab
6344
7328
  }
6345
7329
  ),
6346
- React31__namespace.cloneElement(
7330
+ React38__namespace.cloneElement(
6347
7331
  navElement,
6348
7332
  {
6349
7333
  className: cn(navBaseClasses, "pointer-events-auto")
@@ -6381,13 +7365,13 @@ var NavigationRailComponent = React31__namespace.forwardRef(
6381
7365
  }
6382
7366
  );
6383
7367
  NavigationRailComponent.displayName = "NavigationRail";
6384
- var NavigationRail = React31__namespace.memo(NavigationRailComponent);
7368
+ var NavigationRail = React38__namespace.memo(NavigationRailComponent);
6385
7369
  var MD3_FAST_EFFECTS2 = [0.3, 0, 1, 1];
6386
- var RadioGroupContext = React31__namespace.createContext(
7370
+ var RadioGroupContext = React38__namespace.createContext(
6387
7371
  null
6388
7372
  );
6389
7373
  function useMergedRef3(externalRef, internalRef) {
6390
- return React31__namespace.useCallback(
7374
+ return React38__namespace.useCallback(
6391
7375
  (node) => {
6392
7376
  internalRef.current = node;
6393
7377
  if (!externalRef) return;
@@ -6400,7 +7384,7 @@ function useMergedRef3(externalRef, internalRef) {
6400
7384
  [externalRef, internalRef]
6401
7385
  );
6402
7386
  }
6403
- var RadioVisual = React31__namespace.memo(function RadioVisual2({
7387
+ var RadioVisual = React38__namespace.memo(function RadioVisual2({
6404
7388
  isSelected,
6405
7389
  disabled,
6406
7390
  error,
@@ -6453,7 +7437,7 @@ var RadioVisual = React31__namespace.memo(function RadioVisual2({
6453
7437
  }
6454
7438
  );
6455
7439
  });
6456
- var RadioButtonComponent = React31__namespace.forwardRef(
7440
+ var RadioButtonComponent = React38__namespace.forwardRef(
6457
7441
  ({
6458
7442
  selected,
6459
7443
  defaultSelected = false,
@@ -6472,23 +7456,23 @@ var RadioButtonComponent = React31__namespace.forwardRef(
6472
7456
  required: requiredProp
6473
7457
  }, ref) => {
6474
7458
  var _a, _b;
6475
- const group = React31__namespace.useContext(RadioGroupContext);
7459
+ const group = React38__namespace.useContext(RadioGroupContext);
6476
7460
  const prefersReduced = (_a = react.useReducedMotion()) != null ? _a : false;
6477
- const generatedId = React31__namespace.useId();
7461
+ const generatedId = React38__namespace.useId();
6478
7462
  const inputId = idProp != null ? idProp : label ? `radio-${generatedId}` : void 0;
6479
7463
  const name = (_b = group == null ? void 0 : group.name) != null ? _b : nameProp;
6480
7464
  const disabled = (group == null ? void 0 : group.disabled) || disabledProp;
6481
7465
  const error = (group == null ? void 0 : group.error) || errorProp || color === "error";
6482
7466
  const required = (group == null ? void 0 : group.required) || requiredProp;
6483
- const [internalSelected, setInternalSelected] = React31__namespace.useState(defaultSelected);
7467
+ const [internalSelected, setInternalSelected] = React38__namespace.useState(defaultSelected);
6484
7468
  const isControlled = selected !== void 0;
6485
7469
  const isSelected = group ? group.selectedValue === value : isControlled ? selected != null ? selected : false : internalSelected;
6486
- const [ripples, setRipples] = React31__namespace.useState([]);
6487
- const removeRipple = React31__namespace.useCallback(
7470
+ const [ripples, setRipples] = React38__namespace.useState([]);
7471
+ const removeRipple = React38__namespace.useCallback(
6488
7472
  (id) => setRipples((prev) => prev.filter((r) => r.id !== id)),
6489
7473
  []
6490
7474
  );
6491
- const onPointerDown = React31__namespace.useCallback(
7475
+ const onPointerDown = React38__namespace.useCallback(
6492
7476
  (e) => {
6493
7477
  if (disabled) return;
6494
7478
  const rect = e.currentTarget.getBoundingClientRect();
@@ -6502,12 +7486,12 @@ var RadioButtonComponent = React31__namespace.forwardRef(
6502
7486
  },
6503
7487
  [disabled]
6504
7488
  );
6505
- const [isHovered, setIsHovered] = React31__namespace.useState(false);
6506
- const onPointerEnter = React31__namespace.useCallback(() => {
7489
+ const [isHovered, setIsHovered] = React38__namespace.useState(false);
7490
+ const onPointerEnter = React38__namespace.useCallback(() => {
6507
7491
  if (!disabled) setIsHovered(true);
6508
7492
  }, [disabled]);
6509
- const onPointerLeave = React31__namespace.useCallback(() => setIsHovered(false), []);
6510
- const handleChange = React31__namespace.useCallback(
7493
+ const onPointerLeave = React38__namespace.useCallback(() => setIsHovered(false), []);
7494
+ const handleChange = React38__namespace.useCallback(
6511
7495
  (_e) => {
6512
7496
  if (disabled || onClick === null) return;
6513
7497
  if (group) {
@@ -6521,7 +7505,7 @@ var RadioButtonComponent = React31__namespace.forwardRef(
6521
7505
  },
6522
7506
  [disabled, onClick, group, value, isControlled]
6523
7507
  );
6524
- const inputRef = React31__namespace.useRef(null);
7508
+ const inputRef = React38__namespace.useRef(null);
6525
7509
  const mergedRef = useMergedRef3(ref, inputRef);
6526
7510
  const stateLayerBg = error ? "before:bg-m3-error" : "before:bg-m3-primary";
6527
7511
  const stateLayerClass = cn(
@@ -6632,8 +7616,8 @@ var RadioButtonComponent = React31__namespace.forwardRef(
6632
7616
  }
6633
7617
  );
6634
7618
  RadioButtonComponent.displayName = "RadioButton";
6635
- var RadioButton = React31__namespace.memo(RadioButtonComponent);
6636
- var RadioGroupComponent = React31__namespace.forwardRef(
7619
+ var RadioButton = React38__namespace.memo(RadioButtonComponent);
7620
+ var RadioGroupComponent = React38__namespace.forwardRef(
6637
7621
  ({
6638
7622
  name,
6639
7623
  value: valueProp,
@@ -6648,19 +7632,19 @@ var RadioGroupComponent = React31__namespace.forwardRef(
6648
7632
  children,
6649
7633
  className
6650
7634
  }, ref) => {
6651
- const [internalValue, setInternalValue] = React31__namespace.useState(defaultValue);
7635
+ const [internalValue, setInternalValue] = React38__namespace.useState(defaultValue);
6652
7636
  const isControlled = valueProp !== void 0;
6653
7637
  const selectedValue = isControlled ? valueProp : internalValue;
6654
- const handleValueChange = React31__namespace.useCallback(
7638
+ const handleValueChange = React38__namespace.useCallback(
6655
7639
  (val) => {
6656
7640
  if (!isControlled) setInternalValue(val);
6657
7641
  onValueChange == null ? void 0 : onValueChange(val);
6658
7642
  },
6659
7643
  [isControlled, onValueChange]
6660
7644
  );
6661
- const groupRef = React31__namespace.useRef(null);
7645
+ const groupRef = React38__namespace.useRef(null);
6662
7646
  const mergedRef = useMergedRef3(ref, groupRef);
6663
- const onKeyDown = React31__namespace.useCallback(
7647
+ const onKeyDown = React38__namespace.useCallback(
6664
7648
  (e) => {
6665
7649
  var _a, _b;
6666
7650
  if (disabled) return;
@@ -6684,7 +7668,7 @@ var RadioGroupComponent = React31__namespace.forwardRef(
6684
7668
  },
6685
7669
  [disabled, handleValueChange]
6686
7670
  );
6687
- const contextValue = React31__namespace.useMemo(
7671
+ const contextValue = React38__namespace.useMemo(
6688
7672
  () => ({
6689
7673
  name,
6690
7674
  selectedValue,
@@ -6719,7 +7703,7 @@ var RadioGroupComponent = React31__namespace.forwardRef(
6719
7703
  }
6720
7704
  );
6721
7705
  RadioGroupComponent.displayName = "RadioGroup";
6722
- var RadioGroup2 = React31__namespace.memo(RadioGroupComponent);
7706
+ var RadioGroup = React38__namespace.memo(RadioGroupComponent);
6723
7707
  function useSearchKeyboard({
6724
7708
  active,
6725
7709
  onActiveChange,
@@ -6728,14 +7712,14 @@ function useSearchKeyboard({
6728
7712
  itemCount,
6729
7713
  onSelectSuggestion
6730
7714
  }) {
6731
- const [activeIndex, setActiveIndex] = React31__namespace.useState(-1);
6732
- const resetKeyRef = React31__namespace.useRef(`${active}:${query}`);
7715
+ const [activeIndex, setActiveIndex] = React38__namespace.useState(-1);
7716
+ const resetKeyRef = React38__namespace.useRef(`${active}:${query}`);
6733
7717
  const currentKey = `${active}:${query}`;
6734
7718
  if (resetKeyRef.current !== currentKey) {
6735
7719
  resetKeyRef.current = currentKey;
6736
7720
  setActiveIndex(-1);
6737
7721
  }
6738
- const handleKeyDown = React31__namespace.useCallback(
7722
+ const handleKeyDown = React38__namespace.useCallback(
6739
7723
  (e) => {
6740
7724
  if (!active) return;
6741
7725
  switch (e.key) {
@@ -6775,7 +7759,7 @@ function useSearchKeyboard({
6775
7759
  query
6776
7760
  ]
6777
7761
  );
6778
- const resetActiveIndex = React31__namespace.useCallback(() => {
7762
+ const resetActiveIndex = React38__namespace.useCallback(() => {
6779
7763
  setActiveIndex(-1);
6780
7764
  }, []);
6781
7765
  return { activeIndex, handleKeyDown, resetActiveIndex };
@@ -6863,10 +7847,10 @@ function AnimatedPlaceholder({
6863
7847
  className
6864
7848
  }) {
6865
7849
  const shouldReduceMotion = react.useReducedMotion();
6866
- const containerRef = React31__namespace.useRef(null);
6867
- const spanRef = React31__namespace.useRef(null);
6868
- const [xOffset, setXOffset] = React31__namespace.useState(0);
6869
- const recalculate = React31__namespace.useCallback(() => {
7850
+ const containerRef = React38__namespace.useRef(null);
7851
+ const spanRef = React38__namespace.useRef(null);
7852
+ const [xOffset, setXOffset] = React38__namespace.useState(0);
7853
+ const recalculate = React38__namespace.useCallback(() => {
6870
7854
  const container = containerRef.current;
6871
7855
  const span = spanRef.current;
6872
7856
  if (!container || !span || textAlign === "left") {
@@ -6881,10 +7865,10 @@ function AnimatedPlaceholder({
6881
7865
  setXOffset(Math.max(0, containerWidth - textWidth));
6882
7866
  }
6883
7867
  }, [textAlign]);
6884
- React31__namespace.useLayoutEffect(() => {
7868
+ React38__namespace.useLayoutEffect(() => {
6885
7869
  recalculate();
6886
7870
  }, [recalculate]);
6887
- React31__namespace.useEffect(() => {
7871
+ React38__namespace.useEffect(() => {
6888
7872
  const container = containerRef.current;
6889
7873
  if (!container) return;
6890
7874
  const observer = new ResizeObserver(recalculate);
@@ -6953,10 +7937,10 @@ function SearchBar({
6953
7937
  activeIndex
6954
7938
  }) {
6955
7939
  const shouldReduceMotion = react.useReducedMotion();
6956
- const inputRef = React31__namespace.useRef(null);
6957
- const prevActiveRef = React31__namespace.useRef(active);
6958
- const isRestoringFocusRef = React31__namespace.useRef(false);
6959
- React31__namespace.useEffect(() => {
7940
+ const inputRef = React38__namespace.useRef(null);
7941
+ const prevActiveRef = React38__namespace.useRef(active);
7942
+ const isRestoringFocusRef = React38__namespace.useRef(false);
7943
+ React38__namespace.useEffect(() => {
6960
7944
  var _a;
6961
7945
  let rafId;
6962
7946
  if (prevActiveRef.current === true && active === false) {
@@ -7075,7 +8059,7 @@ function SearchBar({
7075
8059
  ) })
7076
8060
  );
7077
8061
  }
7078
- var SearchContext = React31__namespace.createContext(null);
8062
+ var SearchContext = React38__namespace.createContext(null);
7079
8063
  function SearchProvider({
7080
8064
  children,
7081
8065
  value
@@ -7083,15 +8067,15 @@ function SearchProvider({
7083
8067
  return /* @__PURE__ */ jsxRuntime.jsx(SearchContext.Provider, { value, children });
7084
8068
  }
7085
8069
  function useSearch() {
7086
- const context = React31__namespace.useContext(SearchContext);
8070
+ const context = React38__namespace.useContext(SearchContext);
7087
8071
  if (!context) {
7088
8072
  return { listboxId: "", activeIndex: -1 };
7089
8073
  }
7090
8074
  return context;
7091
8075
  }
7092
8076
  function useClickOutside(handler, enabled = true) {
7093
- const ref = React31.useRef(null);
7094
- React31.useEffect(() => {
8077
+ const ref = React38.useRef(null);
8078
+ React38.useEffect(() => {
7095
8079
  if (!enabled) return;
7096
8080
  const listener = (event) => {
7097
8081
  const el = ref.current;
@@ -7110,7 +8094,7 @@ function useClickOutside(handler, enabled = true) {
7110
8094
  return ref;
7111
8095
  }
7112
8096
  function useSearchViewFocus(inputRef, active) {
7113
- React31__namespace.useEffect(() => {
8097
+ React38__namespace.useEffect(() => {
7114
8098
  if (!active) return;
7115
8099
  let raf2;
7116
8100
  const raf1 = requestAnimationFrame(() => {
@@ -7184,7 +8168,7 @@ function SearchViewDocked({
7184
8168
  activeIndex
7185
8169
  }) {
7186
8170
  const shouldReduceMotion = react.useReducedMotion();
7187
- const inputRef = React31__namespace.useRef(null);
8171
+ const inputRef = React38__namespace.useRef(null);
7188
8172
  useSearchViewFocus(inputRef, active);
7189
8173
  const dropdownRef = useClickOutside(() => {
7190
8174
  onActiveChange(false);
@@ -7330,10 +8314,10 @@ function SearchViewFullScreen({
7330
8314
  activeIndex
7331
8315
  }) {
7332
8316
  const shouldReduceMotion = react.useReducedMotion();
7333
- const inputRef = React31__namespace.useRef(null);
8317
+ const inputRef = React38__namespace.useRef(null);
7334
8318
  useSearchViewFocus(inputRef, active);
7335
- const [mounted, setMounted] = React31__namespace.useState(false);
7336
- React31__namespace.useEffect(() => {
8319
+ const [mounted, setMounted] = React38__namespace.useState(false);
8320
+ React38__namespace.useEffect(() => {
7337
8321
  setMounted(true);
7338
8322
  }, []);
7339
8323
  const handleFormSubmit = (e) => {
@@ -7491,10 +8475,10 @@ function SearchComponent({
7491
8475
  className,
7492
8476
  viewClassName
7493
8477
  }) {
7494
- const generatedId = React31__namespace.useId();
8478
+ const generatedId = React38__namespace.useId();
7495
8479
  const searchId = id != null ? id : generatedId;
7496
8480
  const listboxId = `${searchId}-listbox`;
7497
- const itemCount = React31__namespace.Children.count(children);
8481
+ const itemCount = React38__namespace.Children.count(children);
7498
8482
  const { activeIndex, handleKeyDown } = useSearchKeyboard({
7499
8483
  active,
7500
8484
  onActiveChange,
@@ -7592,7 +8576,7 @@ function useSliderMath({
7592
8576
  max,
7593
8577
  step
7594
8578
  }) {
7595
- return React31.useMemo(
8579
+ return React38.useMemo(
7596
8580
  () => ({
7597
8581
  coerce: (v) => coerceValue(v, min, max),
7598
8582
  snap: (v) => snapToStep(v, min, step),
@@ -7730,7 +8714,7 @@ var SLIDER_INDICATOR_TRANSITION = {
7730
8714
  stiffness: 450,
7731
8715
  damping: 32
7732
8716
  };
7733
- var ValueIndicator = React31__namespace.memo(function ValueIndicator2({
8717
+ var ValueIndicator = React38__namespace.memo(function ValueIndicator2({
7734
8718
  value,
7735
8719
  visible,
7736
8720
  orientation,
@@ -7777,7 +8761,7 @@ var ValueIndicator = React31__namespace.memo(function ValueIndicator2({
7777
8761
  "value-indicator"
7778
8762
  ) });
7779
8763
  });
7780
- var SliderThumb = React31__namespace.memo(function SliderThumb2({
8764
+ var SliderThumb = React38__namespace.memo(function SliderThumb2({
7781
8765
  value,
7782
8766
  percent,
7783
8767
  min,
@@ -7809,11 +8793,11 @@ var SliderThumb = React31__namespace.memo(function SliderThumb2({
7809
8793
  [posTarget]: `calc(${trackInset}px + ${percent} * (100% - ${trackInset * 2}px))`
7810
8794
  };
7811
8795
  const prefersReduced = (_a = react.useReducedMotion()) != null ? _a : false;
7812
- const [isDragging, setIsDragging] = React31__namespace.useState(false);
7813
- const [isHovered, setIsHovered] = React31__namespace.useState(false);
7814
- const [isFocused, setIsFocused] = React31__namespace.useState(false);
7815
- const pointerIdRef = React31__namespace.useRef(null);
7816
- const thumbRef = React31__namespace.useRef(null);
8796
+ const [isDragging, setIsDragging] = React38__namespace.useState(false);
8797
+ const [isHovered, setIsHovered] = React38__namespace.useState(false);
8798
+ const [isFocused, setIsFocused] = React38__namespace.useState(false);
8799
+ const pointerIdRef = React38__namespace.useRef(null);
8800
+ const thumbRef = React38__namespace.useRef(null);
7817
8801
  const showIndicator = showValueIndicator && (isDragging || isHovered || isFocused);
7818
8802
  const positionStyle = isHorizontal ? __spreadProps(__spreadValues({
7819
8803
  position: "absolute"
@@ -7828,7 +8812,7 @@ var SliderThumb = React31__namespace.memo(function SliderThumb2({
7828
8812
  transform: "translate(-50%, 50%)",
7829
8813
  zIndex
7830
8814
  });
7831
- const getDeltaFromPointer = React31__namespace.useCallback(
8815
+ const getDeltaFromPointer = React38__namespace.useCallback(
7832
8816
  (e) => {
7833
8817
  const trackEl = trackRef.current;
7834
8818
  if (!trackEl) return percent;
@@ -7855,7 +8839,7 @@ var SliderThumb = React31__namespace.memo(function SliderThumb2({
7855
8839
  },
7856
8840
  [isHorizontal, max, min, percent, step, trackRef, trackSize]
7857
8841
  );
7858
- const handlePointerDown = React31__namespace.useCallback(
8842
+ const handlePointerDown = React38__namespace.useCallback(
7859
8843
  (e) => {
7860
8844
  if (disabled) return;
7861
8845
  e.preventDefault();
@@ -7866,7 +8850,7 @@ var SliderThumb = React31__namespace.memo(function SliderThumb2({
7866
8850
  },
7867
8851
  [disabled]
7868
8852
  );
7869
- const handlePointerMove = React31__namespace.useCallback(
8853
+ const handlePointerMove = React38__namespace.useCallback(
7870
8854
  (e) => {
7871
8855
  if (!isDragging || e.pointerId !== pointerIdRef.current) return;
7872
8856
  const newValue = getDeltaFromPointer(e.nativeEvent);
@@ -7874,7 +8858,7 @@ var SliderThumb = React31__namespace.memo(function SliderThumb2({
7874
8858
  },
7875
8859
  [isDragging, getDeltaFromPointer, onValueChange]
7876
8860
  );
7877
- const handlePointerUp = React31__namespace.useCallback(
8861
+ const handlePointerUp = React38__namespace.useCallback(
7878
8862
  (e) => {
7879
8863
  if (e.pointerId !== pointerIdRef.current) return;
7880
8864
  e.currentTarget.releasePointerCapture(e.pointerId);
@@ -7884,7 +8868,7 @@ var SliderThumb = React31__namespace.memo(function SliderThumb2({
7884
8868
  },
7885
8869
  [onValueChangeEnd, value]
7886
8870
  );
7887
- const handleKeyDown = React31__namespace.useCallback(
8871
+ const handleKeyDown = React38__namespace.useCallback(
7888
8872
  (e) => {
7889
8873
  if (disabled) return;
7890
8874
  if (e.key === "Home") {
@@ -7988,7 +8972,7 @@ var SliderThumb = React31__namespace.memo(function SliderThumb2({
7988
8972
  }
7989
8973
  );
7990
8974
  });
7991
- var RangeTrack = React31__namespace.memo(function RangeTrack2({
8975
+ var RangeTrack = React38__namespace.memo(function RangeTrack2({
7992
8976
  startPercent,
7993
8977
  endPercent,
7994
8978
  trackSize,
@@ -8233,7 +9217,7 @@ var RangeTrack = React31__namespace.memo(function RangeTrack2({
8233
9217
  }
8234
9218
  );
8235
9219
  });
8236
- var RangeSliderComponent = React31__namespace.forwardRef(
9220
+ var RangeSliderComponent = React38__namespace.forwardRef(
8237
9221
  ({
8238
9222
  value: controlledValue,
8239
9223
  defaultValue,
@@ -8257,7 +9241,7 @@ var RangeSliderComponent = React31__namespace.forwardRef(
8257
9241
  const isHorizontal = orientation === "horizontal";
8258
9242
  const defaultStart = (_a = defaultValue == null ? void 0 : defaultValue[0]) != null ? _a : min;
8259
9243
  const defaultEnd = (_b = defaultValue == null ? void 0 : defaultValue[1]) != null ? _b : max;
8260
- const [internalValue, setInternalValue] = React31__namespace.useState([
9244
+ const [internalValue, setInternalValue] = React38__namespace.useState([
8261
9245
  defaultStart,
8262
9246
  defaultEnd
8263
9247
  ]);
@@ -8271,10 +9255,10 @@ var RangeSliderComponent = React31__namespace.forwardRef(
8271
9255
  const endValue = snap(coerce(resolvedValue[1]));
8272
9256
  const startPercent = toPercent(startValue);
8273
9257
  const endPercent = toPercent(endValue);
8274
- const [topThumb, setTopThumb] = React31__namespace.useState("end");
8275
- const trackRef = React31__namespace.useRef(null);
9258
+ const [topThumb, setTopThumb] = React38__namespace.useState("end");
9259
+ const trackRef = React38__namespace.useRef(null);
8276
9260
  const minGap = step > 0 ? step : (max - min) / 1e3;
8277
- const handleStartChange = React31__namespace.useCallback(
9261
+ const handleStartChange = React38__namespace.useCallback(
8278
9262
  (newStart) => {
8279
9263
  setTopThumb("start");
8280
9264
  const clamped = Math.min(newStart, endValue - minGap);
@@ -8286,7 +9270,7 @@ var RangeSliderComponent = React31__namespace.forwardRef(
8286
9270
  },
8287
9271
  [controlledValue, coerce, endValue, minGap, onValueChange, snap]
8288
9272
  );
8289
- const handleEndChange = React31__namespace.useCallback(
9273
+ const handleEndChange = React38__namespace.useCallback(
8290
9274
  (newEnd) => {
8291
9275
  setTopThumb("end");
8292
9276
  const clamped = Math.max(newEnd, startValue + minGap);
@@ -8298,15 +9282,15 @@ var RangeSliderComponent = React31__namespace.forwardRef(
8298
9282
  },
8299
9283
  [controlledValue, coerce, minGap, onValueChange, snap, startValue]
8300
9284
  );
8301
- const handleStartChangeEnd = React31__namespace.useCallback(
9285
+ const handleStartChangeEnd = React38__namespace.useCallback(
8302
9286
  (v) => onValueChangeEnd == null ? void 0 : onValueChangeEnd([v, endValue]),
8303
9287
  [endValue, onValueChangeEnd]
8304
9288
  );
8305
- const handleEndChangeEnd = React31__namespace.useCallback(
9289
+ const handleEndChangeEnd = React38__namespace.useCallback(
8306
9290
  (v) => onValueChangeEnd == null ? void 0 : onValueChangeEnd([startValue, v]),
8307
9291
  [onValueChangeEnd, startValue]
8308
9292
  );
8309
- const handleTrackPointerDown = React31__namespace.useCallback(
9293
+ const handleTrackPointerDown = React38__namespace.useCallback(
8310
9294
  (e) => {
8311
9295
  if (disabled) return;
8312
9296
  const trackEl = trackRef.current;
@@ -8350,7 +9334,7 @@ var RangeSliderComponent = React31__namespace.forwardRef(
8350
9334
  trackSize
8351
9335
  ]
8352
9336
  );
8353
- const id = React31__namespace.useId();
9337
+ const id = React38__namespace.useId();
8354
9338
  return /* @__PURE__ */ jsxRuntime.jsx(react.LazyMotion, { features: react.domMax, strict: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
8355
9339
  "div",
8356
9340
  {
@@ -8430,7 +9414,7 @@ var RangeSliderComponent = React31__namespace.forwardRef(
8430
9414
  }
8431
9415
  );
8432
9416
  RangeSliderComponent.displayName = "RangeSlider";
8433
- var RangeSlider = React31__namespace.memo(RangeSliderComponent);
9417
+ var RangeSlider = React38__namespace.memo(RangeSliderComponent);
8434
9418
  function getHorizontalRadius(isLeading, innerR, outerR) {
8435
9419
  if (isLeading) {
8436
9420
  return {
@@ -8469,7 +9453,7 @@ var allInnerRadius = (innerR) => ({
8469
9453
  borderTopRightRadius: innerR,
8470
9454
  borderBottomRightRadius: innerR
8471
9455
  });
8472
- var InsetIcon = React31__namespace.memo(function InsetIcon2({
9456
+ var InsetIcon = React38__namespace.memo(function InsetIcon2({
8473
9457
  icon,
8474
9458
  isOnActiveSegment,
8475
9459
  position,
@@ -8563,7 +9547,7 @@ function Ticks({
8563
9547
  return /* @__PURE__ */ jsxRuntime.jsx("div", { style, "aria-hidden": "true" }, tick);
8564
9548
  }) });
8565
9549
  }
8566
- var SliderTrack = React31__namespace.memo(function SliderTrack2({
9550
+ var SliderTrack = React38__namespace.memo(function SliderTrack2({
8567
9551
  percent,
8568
9552
  trackSize,
8569
9553
  orientation,
@@ -8598,8 +9582,8 @@ var SliderTrack = React31__namespace.memo(function SliderTrack2({
8598
9582
  const gapWithThumbStr = `${thumbGap + thumbHalfWidth}px`;
8599
9583
  const hasAnyInsetIcon = Boolean(insetIcon || insetIconTrailing);
8600
9584
  const prefersReduced = (_a = react.useReducedMotion()) != null ? _a : false;
8601
- const [trackWidth, setTrackWidth] = React31__namespace.useState(0);
8602
- React31__namespace.useLayoutEffect(() => {
9585
+ const [trackWidth, setTrackWidth] = React38__namespace.useState(0);
9586
+ React38__namespace.useLayoutEffect(() => {
8603
9587
  const el = trackRef.current;
8604
9588
  if (!el || !hasAnyInsetIcon) return;
8605
9589
  setTrackWidth(isHorizontal ? el.clientWidth : el.clientHeight);
@@ -8616,8 +9600,8 @@ var SliderTrack = React31__namespace.memo(function SliderTrack2({
8616
9600
  const iconTotalWidth = activeIconSize + SliderTokens.insetIconPadding * 2 + thumbGap + thumbHalfWidth;
8617
9601
  const iconThreshold = trackWidth > 0 ? iconTotalWidth / trackWidth : 0.15;
8618
9602
  const HYSTERESIS_GAP = 0.04;
8619
- const trailingActiveRef = React31__namespace.useRef(1 - percent <= iconThreshold);
8620
- const leadingActiveRef = React31__namespace.useRef(percent > iconThreshold);
9603
+ const trailingActiveRef = React38__namespace.useRef(1 - percent <= iconThreshold);
9604
+ const leadingActiveRef = React38__namespace.useRef(percent > iconThreshold);
8621
9605
  const trailingPercent = 1 - percent;
8622
9606
  if (trailingActiveRef.current) {
8623
9607
  if (trailingPercent > iconThreshold + HYSTERESIS_GAP) {
@@ -9124,7 +10108,7 @@ var SliderTrack = React31__namespace.memo(function SliderTrack2({
9124
10108
  }
9125
10109
  );
9126
10110
  });
9127
- var SliderComponent = React31__namespace.forwardRef(
10111
+ var SliderComponent = React38__namespace.forwardRef(
9128
10112
  ({
9129
10113
  value: controlledValue,
9130
10114
  defaultValue,
@@ -9153,7 +10137,7 @@ var SliderComponent = React31__namespace.forwardRef(
9153
10137
  const isHorizontal = orientation === "horizontal";
9154
10138
  const midpoint = min + (max - min) / 2;
9155
10139
  const initialValue = defaultValue != null ? defaultValue : midpoint;
9156
- const [internalValue, setInternalValue] = React31__namespace.useState(initialValue);
10140
+ const [internalValue, setInternalValue] = React38__namespace.useState(initialValue);
9157
10141
  const resolvedValue = controlledValue !== void 0 ? controlledValue : internalValue;
9158
10142
  const { coerce, snap, toPercent, ticks } = useSliderMath({
9159
10143
  min,
@@ -9162,8 +10146,8 @@ var SliderComponent = React31__namespace.forwardRef(
9162
10146
  });
9163
10147
  const safeValue = snap(coerce(resolvedValue));
9164
10148
  const percent = toPercent(safeValue);
9165
- const trackRef = React31__namespace.useRef(null);
9166
- const handleValueChange = React31__namespace.useCallback(
10149
+ const trackRef = React38__namespace.useRef(null);
10150
+ const handleValueChange = React38__namespace.useCallback(
9167
10151
  (newValue) => {
9168
10152
  const clamped = snap(coerce(newValue));
9169
10153
  if (controlledValue === void 0) {
@@ -9173,13 +10157,13 @@ var SliderComponent = React31__namespace.forwardRef(
9173
10157
  },
9174
10158
  [coerce, controlledValue, onValueChange, snap]
9175
10159
  );
9176
- const handleValueChangeEnd = React31__namespace.useCallback(
10160
+ const handleValueChangeEnd = React38__namespace.useCallback(
9177
10161
  (newValue) => {
9178
10162
  onValueChangeEnd == null ? void 0 : onValueChangeEnd(snap(coerce(newValue)));
9179
10163
  },
9180
10164
  [coerce, onValueChangeEnd, snap]
9181
10165
  );
9182
- const handleTrackPointerDown = React31__namespace.useCallback(
10166
+ const handleTrackPointerDown = React38__namespace.useCallback(
9183
10167
  (e) => {
9184
10168
  if (disabled) return;
9185
10169
  const trackEl = trackRef.current;
@@ -9214,7 +10198,7 @@ var SliderComponent = React31__namespace.forwardRef(
9214
10198
  trackSize
9215
10199
  ]
9216
10200
  );
9217
- const id = React31__namespace.useId();
10201
+ const id = React38__namespace.useId();
9218
10202
  const thumbId = `slider-thumb-${id}`;
9219
10203
  const supportsInsetIcon = !isCentered && SliderTokens.trackSizes[trackSize] >= 40;
9220
10204
  const hasAnyInsetIcon = !!(insetIcon || insetIconTrailing);
@@ -9286,7 +10270,7 @@ var SliderComponent = React31__namespace.forwardRef(
9286
10270
  }
9287
10271
  );
9288
10272
  SliderComponent.displayName = "Slider";
9289
- var Slider = React31__namespace.memo(SliderComponent);
10273
+ var Slider = React38__namespace.memo(SliderComponent);
9290
10274
  var DURATION_MAP = {
9291
10275
  short: 4e3,
9292
10276
  long: 7e3
@@ -9332,9 +10316,9 @@ function toSnackbarData(item) {
9332
10316
  return { id: generateId(), visuals: item.visuals, resolve: item.resolve };
9333
10317
  }
9334
10318
  function useSnackbarState() {
9335
- const [current, setCurrent] = React31__namespace.useState(null);
9336
- const queueRef = React31__namespace.useRef([]);
9337
- const showSnackbar = React31__namespace.useCallback(
10319
+ const [current, setCurrent] = React38__namespace.useState(null);
10320
+ const queueRef = React38__namespace.useRef([]);
10321
+ const showSnackbar = React38__namespace.useCallback(
9338
10322
  (visuals) => {
9339
10323
  return new Promise((resolve) => {
9340
10324
  const item = { visuals, resolve };
@@ -9347,14 +10331,14 @@ function useSnackbarState() {
9347
10331
  },
9348
10332
  []
9349
10333
  );
9350
- const _dismiss = React31__namespace.useCallback((result) => {
10334
+ const _dismiss = React38__namespace.useCallback((result) => {
9351
10335
  setCurrent((prev) => {
9352
10336
  if (prev) prev.resolve(result);
9353
10337
  const next = queueRef.current.shift();
9354
10338
  return next ? toSnackbarData(next) : null;
9355
10339
  });
9356
10340
  }, []);
9357
- React31__namespace.useEffect(() => {
10341
+ React38__namespace.useEffect(() => {
9358
10342
  return () => {
9359
10343
  for (const item of queueRef.current) {
9360
10344
  item.resolve(RESULT.DISMISSED);
@@ -9364,7 +10348,7 @@ function useSnackbarState() {
9364
10348
  }, []);
9365
10349
  return { current, showSnackbar, _dismiss };
9366
10350
  }
9367
- var Snackbar = React31__namespace.memo(function Snackbar2({
10351
+ var Snackbar = React38__namespace.memo(function Snackbar2({
9368
10352
  data,
9369
10353
  className
9370
10354
  }) {
@@ -9378,15 +10362,15 @@ var Snackbar = React31__namespace.memo(function Snackbar2({
9378
10362
  } = visuals;
9379
10363
  const reducedMotion = react.useReducedMotion();
9380
10364
  const durationMs = resolveDuration(duration);
9381
- React31__namespace.useEffect(() => {
10365
+ React38__namespace.useEffect(() => {
9382
10366
  const timer = setTimeout(() => resolve(RESULT.DISMISSED), durationMs);
9383
10367
  return () => clearTimeout(timer);
9384
10368
  }, [resolve, durationMs]);
9385
- const handleAction = React31__namespace.useCallback(
10369
+ const handleAction = React38__namespace.useCallback(
9386
10370
  () => resolve(RESULT.ACTION),
9387
10371
  [resolve]
9388
10372
  );
9389
- const handleDismiss = React31__namespace.useCallback(
10373
+ const handleDismiss = React38__namespace.useCallback(
9390
10374
  () => resolve(RESULT.DISMISSED),
9391
10375
  [resolve]
9392
10376
  );
@@ -9454,7 +10438,7 @@ var Snackbar = React31__namespace.memo(function Snackbar2({
9454
10438
  Snackbar.displayName = "Snackbar";
9455
10439
  function SnackbarHost({ state, className }) {
9456
10440
  const { current, _dismiss } = state;
9457
- const wrappedData = React31__namespace.useMemo(() => {
10441
+ const wrappedData = React38__namespace.useMemo(() => {
9458
10442
  if (!current) return null;
9459
10443
  return __spreadProps(__spreadValues({}, current), { resolve: _dismiss });
9460
10444
  }, [current, _dismiss]);
@@ -9472,12 +10456,12 @@ function SnackbarHost({ state, className }) {
9472
10456
  ) });
9473
10457
  }
9474
10458
  SnackbarHost.displayName = "SnackbarHost";
9475
- var SnackbarContext = React31__namespace.createContext(
10459
+ var SnackbarContext = React38__namespace.createContext(
9476
10460
  null
9477
10461
  );
9478
10462
  function SnackbarProvider({ children }) {
9479
10463
  const state = useSnackbarState();
9480
- const contextValue = React31__namespace.useMemo(
10464
+ const contextValue = React38__namespace.useMemo(
9481
10465
  () => ({ showSnackbar: state.showSnackbar }),
9482
10466
  [state.showSnackbar]
9483
10467
  );
@@ -9488,7 +10472,7 @@ function SnackbarProvider({ children }) {
9488
10472
  }
9489
10473
  SnackbarProvider.displayName = "SnackbarProvider";
9490
10474
  function useSnackbar() {
9491
- const ctx = React31__namespace.useContext(SnackbarContext);
10475
+ const ctx = React38__namespace.useContext(SnackbarContext);
9492
10476
  if (!ctx) {
9493
10477
  throw new Error("useSnackbar must be used within a <SnackbarProvider>.");
9494
10478
  }
@@ -9551,7 +10535,7 @@ var SwitchColors = {
9551
10535
  // Focus indicator
9552
10536
  focusIndicator: "var(--md-sys-color-secondary)"
9553
10537
  };
9554
- var FAST_SPATIAL_SPRING = {
10538
+ var FAST_SPATIAL_SPRING2 = {
9555
10539
  type: "spring",
9556
10540
  stiffness: 500,
9557
10541
  damping: 40
@@ -9592,7 +10576,7 @@ function isIconVisible(thumbContent, icons, showOnlySelectedIcon, checked) {
9592
10576
  if (icons) return true;
9593
10577
  return showOnlySelectedIcon && checked;
9594
10578
  }
9595
- var SwitchVisual = React31__namespace.memo(function SwitchVisual2({
10579
+ var SwitchVisual = React38__namespace.memo(function SwitchVisual2({
9596
10580
  checked,
9597
10581
  disabled,
9598
10582
  isPressed,
@@ -9683,9 +10667,9 @@ var SwitchVisual = React31__namespace.memo(function SwitchVisual2({
9683
10667
  backgroundColor: thumbBg
9684
10668
  },
9685
10669
  transition: prefersReduced ? { duration: 0 } : isPressed ? SNAP_TRANSITION : {
9686
- x: FAST_SPATIAL_SPRING,
9687
- width: FAST_SPATIAL_SPRING,
9688
- height: FAST_SPATIAL_SPRING,
10670
+ x: FAST_SPATIAL_SPRING2,
10671
+ width: FAST_SPATIAL_SPRING2,
10672
+ height: FAST_SPATIAL_SPRING2,
9689
10673
  backgroundColor: colorTransition
9690
10674
  },
9691
10675
  children: /* @__PURE__ */ jsxRuntime.jsx(react.AnimatePresence, { mode: "wait", children: showIcon && /* @__PURE__ */ jsxRuntime.jsx(
@@ -9712,7 +10696,7 @@ var SwitchVisual = React31__namespace.memo(function SwitchVisual2({
9712
10696
  }
9713
10697
  );
9714
10698
  });
9715
- var SwitchComponent = React31__namespace.forwardRef(
10699
+ var SwitchComponent = React38__namespace.forwardRef(
9716
10700
  ({
9717
10701
  checked,
9718
10702
  onCheckedChange,
@@ -9730,16 +10714,16 @@ var SwitchComponent = React31__namespace.forwardRef(
9730
10714
  }, ref) => {
9731
10715
  var _a;
9732
10716
  const prefersReduced = (_a = react.useReducedMotion()) != null ? _a : false;
9733
- const [isPressed, setIsPressed] = React31__namespace.useState(false);
9734
- const [isHovered, setIsHovered] = React31__namespace.useState(false);
9735
- const [isFocused, setIsFocused] = React31__namespace.useState(false);
9736
- const [ripples, setRipples] = React31__namespace.useState([]);
9737
- const generatedId = React31__namespace.useId();
10717
+ const [isPressed, setIsPressed] = React38__namespace.useState(false);
10718
+ const [isHovered, setIsHovered] = React38__namespace.useState(false);
10719
+ const [isFocused, setIsFocused] = React38__namespace.useState(false);
10720
+ const [ripples, setRipples] = React38__namespace.useState([]);
10721
+ const generatedId = React38__namespace.useId();
9738
10722
  const switchId = label ? `switch-${generatedId}` : void 0;
9739
- const handleClick = React31__namespace.useCallback(() => {
10723
+ const handleClick = React38__namespace.useCallback(() => {
9740
10724
  if (!disabled) onCheckedChange(!checked);
9741
10725
  }, [disabled, checked, onCheckedChange]);
9742
- const handleKeyDown = React31__namespace.useCallback(
10726
+ const handleKeyDown = React38__namespace.useCallback(
9743
10727
  (e) => {
9744
10728
  if (disabled) return;
9745
10729
  if (e.key === " " || e.key === "Enter") {
@@ -9749,7 +10733,7 @@ var SwitchComponent = React31__namespace.forwardRef(
9749
10733
  },
9750
10734
  [disabled, checked, onCheckedChange]
9751
10735
  );
9752
- const handlePointerDown = React31__namespace.useCallback(
10736
+ const handlePointerDown = React38__namespace.useCallback(
9753
10737
  (e) => {
9754
10738
  if (disabled) return;
9755
10739
  setIsPressed(true);
@@ -9764,19 +10748,19 @@ var SwitchComponent = React31__namespace.forwardRef(
9764
10748
  },
9765
10749
  [disabled]
9766
10750
  );
9767
- const handlePointerUp = React31__namespace.useCallback(() => {
10751
+ const handlePointerUp = React38__namespace.useCallback(() => {
9768
10752
  setIsPressed(false);
9769
10753
  }, []);
9770
- const handlePointerEnter = React31__namespace.useCallback(() => {
10754
+ const handlePointerEnter = React38__namespace.useCallback(() => {
9771
10755
  if (!disabled) setIsHovered(true);
9772
10756
  }, [disabled]);
9773
- const handlePointerLeave = React31__namespace.useCallback(() => {
10757
+ const handlePointerLeave = React38__namespace.useCallback(() => {
9774
10758
  setIsHovered(false);
9775
10759
  setIsPressed(false);
9776
10760
  }, []);
9777
- const handleFocus = React31__namespace.useCallback(() => setIsFocused(true), []);
9778
- const handleBlur = React31__namespace.useCallback(() => setIsFocused(false), []);
9779
- const removeRipple = React31__namespace.useCallback(
10761
+ const handleFocus = React38__namespace.useCallback(() => setIsFocused(true), []);
10762
+ const handleBlur = React38__namespace.useCallback(() => setIsFocused(false), []);
10763
+ const removeRipple = React38__namespace.useCallback(
9780
10764
  (id) => setRipples((prev) => prev.filter((r) => r.id !== id)),
9781
10765
  []
9782
10766
  );
@@ -9861,10 +10845,54 @@ var SwitchComponent = React31__namespace.forwardRef(
9861
10845
  }
9862
10846
  );
9863
10847
  SwitchComponent.displayName = "Switch";
9864
- var Switch = React31__namespace.memo(SwitchComponent);
9865
- var TabsContext = React31__namespace.createContext(null);
10848
+ var Switch = React38__namespace.memo(SwitchComponent);
10849
+ var typographyVariants = classVarianceAuthority.cva("m-0 p-0 text-m3-on-surface", {
10850
+ variants: {
10851
+ variant: {
10852
+ "display-lg": "text-[57px] leading-[64px] font-normal tracking-[-0.25px]",
10853
+ "display-md": "text-[45px] leading-[52px] font-normal tracking-[0px]",
10854
+ "display-sm": "text-[36px] leading-[44px] font-normal tracking-[0px]",
10855
+ "headline-lg": "text-[32px] leading-[40px] font-normal tracking-[0px]",
10856
+ "headline-md": "text-[28px] leading-[36px] font-normal tracking-[0px]",
10857
+ "headline-sm": "text-[24px] leading-[32px] font-normal tracking-[0px]",
10858
+ "title-lg": "text-[22px] leading-[28px] font-normal tracking-[0px]",
10859
+ "title-md": "text-[16px] leading-[24px] font-medium tracking-[0.15px]",
10860
+ "title-sm": "text-[14px] leading-[20px] font-medium tracking-[0.1px]",
10861
+ "label-lg": "text-[14px] leading-[20px] font-medium tracking-[0.1px]",
10862
+ "label-md": "text-[12px] leading-[16px] font-medium tracking-[0.5px]",
10863
+ "label-sm": "text-[11px] leading-[16px] font-medium tracking-[0.5px]",
10864
+ "body-lg": "text-[16px] leading-[24px] font-normal tracking-[0.5px]",
10865
+ "body-md": "text-[14px] leading-[20px] font-normal tracking-[0.25px]",
10866
+ "body-sm": "text-[12px] leading-[16px] font-normal tracking-[0.4px]"
10867
+ }
10868
+ },
10869
+ defaultVariants: {
10870
+ variant: "body-md"
10871
+ }
10872
+ });
10873
+ var Text = React38__namespace.forwardRef(
10874
+ (_a, ref) => {
10875
+ var _b = _a, { className, variant, as: Component } = _b, props = __objRest(_b, ["className", "variant", "as"]);
10876
+ const defaultComponent = React38__namespace.useMemo(() => {
10877
+ if ((variant == null ? void 0 : variant.startsWith("display")) || (variant == null ? void 0 : variant.startsWith("headline")))
10878
+ return "h1";
10879
+ if (variant == null ? void 0 : variant.startsWith("title")) return "h2";
10880
+ return "p";
10881
+ }, [variant]);
10882
+ const Tag = Component || defaultComponent;
10883
+ return /* @__PURE__ */ jsxRuntime.jsx(
10884
+ Tag,
10885
+ __spreadValues({
10886
+ ref,
10887
+ className: cn(typographyVariants({ variant, className }))
10888
+ }, props)
10889
+ );
10890
+ }
10891
+ );
10892
+ Text.displayName = "Text";
10893
+ var TabsContext = React38__namespace.createContext(null);
9866
10894
  function useTabsContext() {
9867
- const ctx = React31__namespace.useContext(TabsContext);
10895
+ const ctx = React38__namespace.useContext(TabsContext);
9868
10896
  if (!ctx) {
9869
10897
  throw new Error(
9870
10898
  "[MD3 Tabs] Component must be used within a <Tabs> root. Ensure <TabsList>, <Tab>, and <TabsContent> are descendants of <Tabs>."
@@ -9872,7 +10900,7 @@ function useTabsContext() {
9872
10900
  }
9873
10901
  return ctx;
9874
10902
  }
9875
- var TabsComponent = React31__namespace.forwardRef(
10903
+ var TabsComponent = React38__namespace.forwardRef(
9876
10904
  ({
9877
10905
  value: controlledValue,
9878
10906
  defaultValue = "",
@@ -9881,35 +10909,35 @@ var TabsComponent = React31__namespace.forwardRef(
9881
10909
  children,
9882
10910
  className
9883
10911
  }, ref) => {
9884
- const [internalValue, setInternalValue] = React31__namespace.useState(defaultValue);
10912
+ const [internalValue, setInternalValue] = React38__namespace.useState(defaultValue);
9885
10913
  const isControlled = controlledValue !== void 0;
9886
10914
  const value = isControlled ? controlledValue : internalValue;
9887
- const handleValueChange = React31__namespace.useCallback(
10915
+ const handleValueChange = React38__namespace.useCallback(
9888
10916
  (newValue) => {
9889
10917
  if (!isControlled) setInternalValue(newValue);
9890
10918
  onValueChange == null ? void 0 : onValueChange(newValue);
9891
10919
  },
9892
10920
  [isControlled, onValueChange]
9893
10921
  );
9894
- const [focusedValue, setFocusedValue] = React31__namespace.useState(value);
9895
- React31__namespace.useEffect(() => {
10922
+ const [focusedValue, setFocusedValue] = React38__namespace.useState(value);
10923
+ React38__namespace.useEffect(() => {
9896
10924
  setFocusedValue(value);
9897
10925
  }, [value]);
9898
- const [tabValues, setTabValues] = React31__namespace.useState([]);
9899
- const registerTab = React31__namespace.useCallback((tabValue) => {
10926
+ const [tabValues, setTabValues] = React38__namespace.useState([]);
10927
+ const registerTab = React38__namespace.useCallback((tabValue) => {
9900
10928
  setTabValues((prev) => {
9901
10929
  if (prev.includes(tabValue)) return prev;
9902
10930
  return [...prev, tabValue];
9903
10931
  });
9904
10932
  }, []);
9905
- const unregisterTab = React31__namespace.useCallback((tabValue) => {
10933
+ const unregisterTab = React38__namespace.useCallback((tabValue) => {
9906
10934
  setTabValues((prev) => prev.filter((v) => v !== tabValue));
9907
10935
  }, []);
9908
- const hasAutoSelected = React31__namespace.useRef(false);
9909
- const [disabledValues, setDisabledValues] = React31__namespace.useState(
10936
+ const hasAutoSelected = React38__namespace.useRef(false);
10937
+ const [disabledValues, setDisabledValues] = React38__namespace.useState(
9910
10938
  /* @__PURE__ */ new Set()
9911
10939
  );
9912
- const markTabDisabled = React31__namespace.useCallback(
10940
+ const markTabDisabled = React38__namespace.useCallback(
9913
10941
  (tabValue, disabled) => {
9914
10942
  setDisabledValues((prev) => {
9915
10943
  const next = new Set(prev);
@@ -9923,7 +10951,7 @@ var TabsComponent = React31__namespace.forwardRef(
9923
10951
  },
9924
10952
  []
9925
10953
  );
9926
- React31__namespace.useEffect(() => {
10954
+ React38__namespace.useEffect(() => {
9927
10955
  if (isControlled || hasAutoSelected.current || tabValues.length === 0) {
9928
10956
  return;
9929
10957
  }
@@ -9938,9 +10966,9 @@ var TabsComponent = React31__namespace.forwardRef(
9938
10966
  setFocusedValue(firstEnabled);
9939
10967
  }
9940
10968
  }, [tabValues, disabledValues, isControlled, value]);
9941
- const id = React31__namespace.useId();
10969
+ const id = React38__namespace.useId();
9942
10970
  const layoutGroupId = `tabs-${id}`;
9943
- const contextValue = React31__namespace.useMemo(
10971
+ const contextValue = React38__namespace.useMemo(
9944
10972
  () => ({
9945
10973
  value,
9946
10974
  onValueChange: handleValueChange,
@@ -9971,12 +10999,12 @@ var TabsComponent = React31__namespace.forwardRef(
9971
10999
  }
9972
11000
  );
9973
11001
  TabsComponent.displayName = "Tabs";
9974
- var Tabs = React31__namespace.memo(TabsComponent);
9975
- var TabsListContext = React31__namespace.createContext(
11002
+ var Tabs = React38__namespace.memo(TabsComponent);
11003
+ var TabsListContext = React38__namespace.createContext(
9976
11004
  null
9977
11005
  );
9978
11006
  function useTabsListContext() {
9979
- const ctx = React31__namespace.useContext(TabsListContext);
11007
+ const ctx = React38__namespace.useContext(TabsListContext);
9980
11008
  return ctx != null ? ctx : { variant: "primary", scrollable: false };
9981
11009
  }
9982
11010
 
@@ -10060,7 +11088,7 @@ var TABS_CONTENT_TRANSITION = {
10060
11088
  ease: "easeInOut"
10061
11089
  };
10062
11090
  var INDICATOR_MIN_WIDTH = 24;
10063
- var TabComponent = React31__namespace.forwardRef(
11091
+ var TabComponent = React38__namespace.forwardRef(
10064
11092
  ({
10065
11093
  value,
10066
11094
  icon,
@@ -10090,9 +11118,9 @@ var TabComponent = React31__namespace.forwardRef(
10090
11118
  const isFocused = focusedValue === value;
10091
11119
  const hasIcon = icon != null;
10092
11120
  const isStackedIcon = hasIcon && !inlineIcon;
10093
- const buttonRef = React31__namespace.useRef(null);
10094
- const isFirstMount = React31__namespace.useRef(true);
10095
- const mergedRef = React31__namespace.useCallback(
11121
+ const buttonRef = React38__namespace.useRef(null);
11122
+ const isFirstMount = React38__namespace.useRef(true);
11123
+ const mergedRef = React38__namespace.useCallback(
10096
11124
  (node) => {
10097
11125
  buttonRef.current = node;
10098
11126
  if (typeof ref === "function") ref(node);
@@ -10100,15 +11128,15 @@ var TabComponent = React31__namespace.forwardRef(
10100
11128
  },
10101
11129
  [ref]
10102
11130
  );
10103
- React31__namespace.useEffect(() => {
11131
+ React38__namespace.useEffect(() => {
10104
11132
  registerTab(value);
10105
11133
  return () => unregisterTab(value);
10106
11134
  }, [value, registerTab, unregisterTab]);
10107
- React31__namespace.useEffect(() => {
11135
+ React38__namespace.useEffect(() => {
10108
11136
  markTabDisabled(value, disabled);
10109
11137
  return () => markTabDisabled(value, false);
10110
11138
  }, [value, disabled, markTabDisabled]);
10111
- const handleKeyDown = React31__namespace.useCallback(
11139
+ const handleKeyDown = React38__namespace.useCallback(
10112
11140
  (e) => {
10113
11141
  const isRtl = buttonRef.current ? getComputedStyle(buttonRef.current).direction === "rtl" : false;
10114
11142
  const enabledValues = tabValues.filter((v) => !disabledValues.has(v));
@@ -10162,7 +11190,7 @@ var TabComponent = React31__namespace.forwardRef(
10162
11190
  autoActivate
10163
11191
  ]
10164
11192
  );
10165
- React31__namespace.useEffect(() => {
11193
+ React38__namespace.useEffect(() => {
10166
11194
  if (isFirstMount.current) {
10167
11195
  isFirstMount.current = false;
10168
11196
  return;
@@ -10171,7 +11199,7 @@ var TabComponent = React31__namespace.forwardRef(
10171
11199
  buttonRef.current.focus({ preventScroll: true });
10172
11200
  }
10173
11201
  }, [isFocused]);
10174
- React31__namespace.useEffect(() => {
11202
+ React38__namespace.useEffect(() => {
10175
11203
  if (!isActive || !scrollable || !buttonRef.current) return;
10176
11204
  const btn = buttonRef.current;
10177
11205
  let container = btn.parentElement;
@@ -10308,8 +11336,8 @@ var TabComponent = React31__namespace.forwardRef(
10308
11336
  }
10309
11337
  );
10310
11338
  TabComponent.displayName = "Tab";
10311
- var Tab = React31__namespace.memo(TabComponent);
10312
- var TabsContentComponent = React31__namespace.forwardRef(
11339
+ var Tab = React38__namespace.memo(TabComponent);
11340
+ var TabsContentComponent = React38__namespace.forwardRef(
10313
11341
  ({ value, className, children }, ref) => {
10314
11342
  var _a;
10315
11343
  const { value: selectedValue, layoutGroupId } = useTabsContext();
@@ -10343,8 +11371,8 @@ var TabsContentComponent = React31__namespace.forwardRef(
10343
11371
  }
10344
11372
  );
10345
11373
  TabsContentComponent.displayName = "TabsContent";
10346
- var TabsContent = React31__namespace.memo(TabsContentComponent);
10347
- var TabsListComponent = React31__namespace.forwardRef(
11374
+ var TabsContent = React38__namespace.memo(TabsContentComponent);
11375
+ var TabsListComponent = React38__namespace.forwardRef(
10348
11376
  ({
10349
11377
  variant,
10350
11378
  scrollable = false,
@@ -10355,12 +11383,12 @@ var TabsListComponent = React31__namespace.forwardRef(
10355
11383
  }, ref) => {
10356
11384
  const { layoutGroupId, value, setFocusedValue } = useTabsContext();
10357
11385
  const listLayoutId = `${layoutGroupId}-list`;
10358
- const listContextValue = React31__namespace.useMemo(
11386
+ const listContextValue = React38__namespace.useMemo(
10359
11387
  () => ({ variant, scrollable }),
10360
11388
  [variant, scrollable]
10361
11389
  );
10362
11390
  const bgColor = backgroundColor != null ? backgroundColor : "var(--md-sys-color-surface)";
10363
- const handleBlur = React31__namespace.useCallback(
11391
+ const handleBlur = React38__namespace.useCallback(
10364
11392
  (e) => {
10365
11393
  const listEl = e.currentTarget;
10366
11394
  if (listEl.contains(e.relatedTarget)) return;
@@ -10409,7 +11437,7 @@ var TabsListComponent = React31__namespace.forwardRef(
10409
11437
  }
10410
11438
  );
10411
11439
  TabsListComponent.displayName = "TabsList";
10412
- var TabsList = React31__namespace.memo(TabsListComponent);
11440
+ var TabsList = React38__namespace.memo(TabsListComponent);
10413
11441
 
10414
11442
  // src/ui/text-field/text-field.tokens.ts
10415
11443
  var TF_COLORS = {
@@ -10448,7 +11476,7 @@ var TF_TYPOGRAPHY = {
10448
11476
  var TF_CLASSES = {
10449
11477
  // Prefix / Suffix
10450
11478
  prefixSuffix: "text-base text-[var(--color-m3-on-surface-variant)] select-none shrink-0"};
10451
- var ActiveIndicator = React31__namespace.memo(function ActiveIndicator2({
11479
+ var ActiveIndicator = React38__namespace.memo(function ActiveIndicator2({
10452
11480
  isFocused,
10453
11481
  isError,
10454
11482
  isDisabled,
@@ -10495,7 +11523,7 @@ function getLabelColor(isFloated, isFocused, isError, isDisabled) {
10495
11523
  if (isFloated && isFocused) return TF_COLORS.primary;
10496
11524
  return TF_COLORS.onSurfaceVariant;
10497
11525
  }
10498
- var FloatingLabel = React31__namespace.memo(function FloatingLabel2({
11526
+ var FloatingLabel = React38__namespace.memo(function FloatingLabel2({
10499
11527
  text,
10500
11528
  isFloated,
10501
11529
  isFocused,
@@ -10555,7 +11583,7 @@ var FloatingLabel = React31__namespace.memo(function FloatingLabel2({
10555
11583
  );
10556
11584
  });
10557
11585
  FloatingLabel.displayName = "FloatingLabel";
10558
- var LeadingIcon = React31__namespace.memo(function LeadingIcon2({
11586
+ var LeadingIcon = React38__namespace.memo(function LeadingIcon2({
10559
11587
  children,
10560
11588
  isError,
10561
11589
  isDisabled
@@ -10579,7 +11607,7 @@ function getOutlineColor(isFocused, isError, isHovered, isDisabled) {
10579
11607
  if (isHovered) return TF_COLORS.inputText;
10580
11608
  return TF_COLORS.outline;
10581
11609
  }
10582
- var OutlineContainer = React31__namespace.memo(function OutlineContainer2({
11610
+ var OutlineContainer = React38__namespace.memo(function OutlineContainer2({
10583
11611
  isFloated,
10584
11612
  isFocused,
10585
11613
  isError,
@@ -10677,7 +11705,7 @@ var OutlineContainer = React31__namespace.memo(function OutlineContainer2({
10677
11705
  );
10678
11706
  });
10679
11707
  OutlineContainer.displayName = "OutlineContainer";
10680
- var PrefixSuffix = React31__namespace.memo(function PrefixSuffix2({
11708
+ var PrefixSuffix = React38__namespace.memo(function PrefixSuffix2({
10681
11709
  text,
10682
11710
  type,
10683
11711
  visible,
@@ -10719,7 +11747,7 @@ function AnimatedText({
10719
11747
  motionKey
10720
11748
  );
10721
11749
  }
10722
- var SupportingText = React31__namespace.memo(function SupportingText2({
11750
+ var SupportingText = React38__namespace.memo(function SupportingText2({
10723
11751
  supportingText,
10724
11752
  errorText,
10725
11753
  isError,
@@ -10830,7 +11858,7 @@ function ClearIcon() {
10830
11858
  }
10831
11859
  );
10832
11860
  }
10833
- var TrailingIcon = React31__namespace.memo(function TrailingIcon2({
11861
+ var TrailingIcon = React38__namespace.memo(function TrailingIcon2({
10834
11862
  mode,
10835
11863
  children,
10836
11864
  value,
@@ -10896,7 +11924,7 @@ var TrailingIcon = React31__namespace.memo(function TrailingIcon2({
10896
11924
  });
10897
11925
  TrailingIcon.displayName = "TrailingIcon";
10898
11926
  var LINE_HEIGHT_PX = 24;
10899
- var TextFieldComponent = React31__namespace.forwardRef(
11927
+ var TextFieldComponent = React38__namespace.forwardRef(
10900
11928
  ({
10901
11929
  // Core
10902
11930
  variant = "filled",
@@ -10960,30 +11988,30 @@ var TextFieldComponent = React31__namespace.forwardRef(
10960
11988
  }, ref) => {
10961
11989
  var _a;
10962
11990
  const prefersReduced = (_a = react.useReducedMotion()) != null ? _a : false;
10963
- const generatedId = React31__namespace.useId();
11991
+ const generatedId = React38__namespace.useId();
10964
11992
  const inputId = idProp != null ? idProp : `tf-${generatedId}`;
10965
11993
  const supportingId = `${inputId}-supporting`;
10966
11994
  const isControlled = valueProp !== void 0;
10967
- const [internalValue, setInternalValue] = React31__namespace.useState(defaultValue);
11995
+ const [internalValue, setInternalValue] = React38__namespace.useState(defaultValue);
10968
11996
  const currentValue = isControlled ? valueProp : internalValue;
10969
- const [isFocused, setIsFocused] = React31__namespace.useState(false);
10970
- const [showPassword, setShowPassword] = React31__namespace.useState(false);
11997
+ const [isFocused, setIsFocused] = React38__namespace.useState(false);
11998
+ const [showPassword, setShowPassword] = React38__namespace.useState(false);
10971
11999
  const resolvedInputType = type === "password" && showPassword ? "text" : type;
10972
- const [nativeError, setNativeError] = React31__namespace.useState("");
10973
- const [labelWidth, setLabelWidth] = React31__namespace.useState(0);
12000
+ const [nativeError, setNativeError] = React38__namespace.useState("");
12001
+ const [labelWidth, setLabelWidth] = React38__namespace.useState(0);
10974
12002
  const hasValue = currentValue.length > 0;
10975
12003
  const isFloated = isFocused || hasValue;
10976
12004
  const isError = errorProp || !!nativeError || maxLength !== void 0 && currentValue.length > maxLength;
10977
12005
  const containerHeight = dense ? TF_SIZE.denseHeight : TF_SIZE.height;
10978
12006
  const showAsterisk = required && !noAsterisk;
10979
- const inputRef = React31__namespace.useRef(null);
10980
- const labelSpanRef = React31__namespace.useRef(null);
10981
- React31__namespace.useLayoutEffect(() => {
12007
+ const inputRef = React38__namespace.useRef(null);
12008
+ const labelSpanRef = React38__namespace.useRef(null);
12009
+ React38__namespace.useLayoutEffect(() => {
10982
12010
  if (labelSpanRef.current) {
10983
12011
  setLabelWidth(labelSpanRef.current.offsetWidth);
10984
12012
  }
10985
12013
  }, []);
10986
- React31__namespace.useLayoutEffect(() => {
12014
+ React38__namespace.useLayoutEffect(() => {
10987
12015
  if (type !== "textarea" || !inputRef.current) return;
10988
12016
  const textarea = inputRef.current;
10989
12017
  if (autoResize) {
@@ -10995,7 +12023,7 @@ var TextFieldComponent = React31__namespace.forwardRef(
10995
12023
  }
10996
12024
  textarea.style.overflowY = "hidden";
10997
12025
  }, [type, autoResize, maxRows, currentValue]);
10998
- const handleValueChange = React31__namespace.useCallback(
12026
+ const handleValueChange = React38__namespace.useCallback(
10999
12027
  (newValue) => {
11000
12028
  var _a2, _b;
11001
12029
  if (!isControlled) setInternalValue(newValue);
@@ -11004,7 +12032,7 @@ var TextFieldComponent = React31__namespace.forwardRef(
11004
12032
  },
11005
12033
  [isControlled]
11006
12034
  );
11007
- const handleChange = React31__namespace.useCallback(
12035
+ const handleChange = React38__namespace.useCallback(
11008
12036
  (e) => {
11009
12037
  const newVal = e.target.value;
11010
12038
  handleValueChange(newVal);
@@ -11012,14 +12040,14 @@ var TextFieldComponent = React31__namespace.forwardRef(
11012
12040
  },
11013
12041
  [handleValueChange, onChange]
11014
12042
  );
11015
- const handleFocus = React31__namespace.useCallback(
12043
+ const handleFocus = React38__namespace.useCallback(
11016
12044
  (e) => {
11017
12045
  setIsFocused(true);
11018
12046
  onFocus == null ? void 0 : onFocus(e);
11019
12047
  },
11020
12048
  [onFocus]
11021
12049
  );
11022
- const handleBlur = React31__namespace.useCallback(
12050
+ const handleBlur = React38__namespace.useCallback(
11023
12051
  (e) => {
11024
12052
  setIsFocused(false);
11025
12053
  const el = inputRef.current;
@@ -11032,7 +12060,7 @@ var TextFieldComponent = React31__namespace.forwardRef(
11032
12060
  },
11033
12061
  [onBlur]
11034
12062
  );
11035
- const handleClear = React31__namespace.useCallback(() => {
12063
+ const handleClear = React38__namespace.useCallback(() => {
11036
12064
  var _a2;
11037
12065
  handleValueChange("");
11038
12066
  onChange == null ? void 0 : onChange("", {
@@ -11040,12 +12068,12 @@ var TextFieldComponent = React31__namespace.forwardRef(
11040
12068
  });
11041
12069
  (_a2 = inputRef.current) == null ? void 0 : _a2.focus();
11042
12070
  }, [handleValueChange, onChange]);
11043
- const handlePasswordToggle = React31__namespace.useCallback(() => {
12071
+ const handlePasswordToggle = React38__namespace.useCallback(() => {
11044
12072
  var _a2;
11045
12073
  setShowPassword((prev) => !prev);
11046
12074
  (_a2 = inputRef.current) == null ? void 0 : _a2.focus();
11047
12075
  }, []);
11048
- React31__namespace.useImperativeHandle(
12076
+ React38__namespace.useImperativeHandle(
11049
12077
  ref,
11050
12078
  () => ({
11051
12079
  focus: () => {
@@ -11290,7 +12318,7 @@ var TextFieldComponent = React31__namespace.forwardRef(
11290
12318
  }
11291
12319
  );
11292
12320
  TextFieldComponent.displayName = "TextField";
11293
- var TextField = React31__namespace.memo(TextFieldComponent);
12321
+ var TextField = React38__namespace.memo(TextFieldComponent);
11294
12322
 
11295
12323
  // src/ui/typography/typography-key-tokens.ts
11296
12324
  var TypographyKeyTokens = /* @__PURE__ */ ((TypographyKeyTokens2) => {
@@ -12005,9 +13033,9 @@ var TOKEN_TO_PROP = {
12005
13033
  };
12006
13034
  var defaultTokens = new TypographyTokens();
12007
13035
  var defaultTypography = new Typography();
12008
- var TypographyContext = React31.createContext(defaultTypography);
13036
+ var TypographyContext = React38.createContext(defaultTypography);
12009
13037
  function useTypography() {
12010
- return React31.useContext(TypographyContext);
13038
+ return React38.useContext(TypographyContext);
12011
13039
  }
12012
13040
  function TypographyProvider({
12013
13041
  children,
@@ -12015,7 +13043,7 @@ function TypographyProvider({
12015
13043
  fontFamily,
12016
13044
  fontVariationAxes
12017
13045
  }) {
12018
- const value = React31.useMemo(() => {
13046
+ const value = React38.useMemo(() => {
12019
13047
  if (typography) return typography;
12020
13048
  if (fontFamily || fontVariationAxes) {
12021
13049
  return new Typography(
@@ -12026,7 +13054,7 @@ function TypographyProvider({
12026
13054
  }, [typography, fontFamily, fontVariationAxes]);
12027
13055
  return /* @__PURE__ */ jsxRuntime.jsx(TypographyContext.Provider, { value, children });
12028
13056
  }
12029
- var ThemeContext = React31.createContext(void 0);
13057
+ var ThemeContext = React38.createContext(void 0);
12030
13058
  var STORAGE_KEY_COLOR = "md3-source-color";
12031
13059
  var STORAGE_KEY_MODE = "md3-theme-mode";
12032
13060
  var defaultTokens2 = new TypographyTokens();
@@ -12041,20 +13069,21 @@ function MD3ThemeProvider({
12041
13069
  fontVariationAxes,
12042
13070
  enableSnackbar = false
12043
13071
  }) {
12044
- const [sourceColor, setSourceColor] = React31.useState(initialSourceColor);
12045
- const [mode, setMode] = React31.useState(defaultMode);
12046
- const [isHydrated, setIsHydrated] = React31.useState(!persistToLocalStorage);
12047
- React31.useEffect(() => {
13072
+ const [sourceColor, setSourceColor] = React38.useState(initialSourceColor);
13073
+ const [mode, setMode] = React38.useState(defaultMode);
13074
+ const [isHydrated, setIsHydrated] = React38.useState(!persistToLocalStorage);
13075
+ React38.useEffect(() => {
12048
13076
  if (!persistToLocalStorage) return;
12049
13077
  const savedColor = localStorage.getItem(STORAGE_KEY_COLOR);
12050
13078
  const savedMode = localStorage.getItem(
12051
13079
  STORAGE_KEY_MODE
12052
13080
  );
12053
13081
  if (savedColor) setSourceColor(savedColor);
12054
- if (savedMode === "light" || savedMode === "dark") setMode(savedMode);
13082
+ if (savedMode === "light" || savedMode === "dark" || savedMode === "system")
13083
+ setMode(savedMode);
12055
13084
  setIsHydrated(true);
12056
13085
  }, [persistToLocalStorage]);
12057
- React31.useEffect(() => {
13086
+ React38.useEffect(() => {
12058
13087
  if (!isHydrated) return;
12059
13088
  applyTheme(sourceColor, mode);
12060
13089
  if (persistToLocalStorage) {
@@ -12062,11 +13091,19 @@ function MD3ThemeProvider({
12062
13091
  localStorage.setItem(STORAGE_KEY_MODE, mode);
12063
13092
  }
12064
13093
  }, [sourceColor, mode, persistToLocalStorage, isHydrated]);
12065
- const themeValue = React31.useMemo(
12066
- () => ({ sourceColor, setSourceColor, mode, setMode }),
12067
- [sourceColor, mode]
13094
+ React38.useEffect(() => {
13095
+ if (mode !== "system" || typeof window === "undefined") return;
13096
+ const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
13097
+ const handleChange = () => applyTheme(sourceColor, "system");
13098
+ mediaQuery.addEventListener("change", handleChange);
13099
+ return () => mediaQuery.removeEventListener("change", handleChange);
13100
+ }, [mode, sourceColor]);
13101
+ const effectiveMode = resolveMode(mode);
13102
+ const themeValue = React38.useMemo(
13103
+ () => ({ sourceColor, setSourceColor, mode, setMode, effectiveMode }),
13104
+ [sourceColor, mode, effectiveMode]
12068
13105
  );
12069
- const typographyValue = React31.useMemo(() => {
13106
+ const typographyValue = React38.useMemo(() => {
12070
13107
  if (typographyProp) return typographyProp;
12071
13108
  if (fontFamily != null ? fontFamily : fontVariationAxes) {
12072
13109
  return new Typography(
@@ -12079,7 +13116,7 @@ function MD3ThemeProvider({
12079
13116
  }
12080
13117
  function SnackbarMountedProvider({ children }) {
12081
13118
  const state = useSnackbarState();
12082
- const contextValue = React31.useMemo(
13119
+ const contextValue = React38.useMemo(
12083
13120
  () => ({ showSnackbar: state.showSnackbar }),
12084
13121
  [state.showSnackbar]
12085
13122
  );
@@ -12089,24 +13126,24 @@ function SnackbarMountedProvider({ children }) {
12089
13126
  ] });
12090
13127
  }
12091
13128
  function useTheme() {
12092
- const context = React31.useContext(ThemeContext);
13129
+ const context = React38.useContext(ThemeContext);
12093
13130
  if (!context) {
12094
13131
  throw new Error("useTheme must be used within <MD3ThemeProvider>.");
12095
13132
  }
12096
13133
  return context;
12097
13134
  }
12098
13135
  function useThemeMode() {
12099
- const { mode, setMode } = useTheme();
12100
- return { mode, setMode };
13136
+ const { mode, setMode, effectiveMode } = useTheme();
13137
+ return { mode, setMode, effectiveMode };
12101
13138
  }
12102
13139
  function TableOfContents({
12103
13140
  items,
12104
13141
  className,
12105
13142
  scrollAreaProps
12106
13143
  }) {
12107
- const [activeId, setActiveId] = React31.useState("");
12108
- const itemIds = React31.useMemo(() => items.map((i) => i.id), [items]);
12109
- React31.useEffect(() => {
13144
+ const [activeId, setActiveId] = React38.useState("");
13145
+ const itemIds = React38.useMemo(() => items.map((i) => i.id), [items]);
13146
+ React38.useEffect(() => {
12110
13147
  if (typeof IntersectionObserver === "undefined") return;
12111
13148
  const observer = new IntersectionObserver(
12112
13149
  (entries) => {
@@ -12123,7 +13160,7 @@ function TableOfContents({
12123
13160
  }
12124
13161
  return () => observer.disconnect();
12125
13162
  }, [itemIds]);
12126
- const handleClick = React31.useCallback(
13163
+ const handleClick = React38.useCallback(
12127
13164
  (e, id) => {
12128
13165
  var _a;
12129
13166
  e.preventDefault();
@@ -12259,7 +13296,7 @@ function TooltipCaretShape({
12259
13296
  }
12260
13297
  );
12261
13298
  }
12262
- var PlainTooltip = React31.forwardRef(
13299
+ var PlainTooltip = React38.forwardRef(
12263
13300
  (_a, ref) => {
12264
13301
  var _b = _a, {
12265
13302
  children,
@@ -12316,7 +13353,7 @@ var PlainTooltip = React31.forwardRef(
12316
13353
  }
12317
13354
  );
12318
13355
  PlainTooltip.displayName = "PlainTooltip";
12319
- var RichTooltip = React31.forwardRef(
13356
+ var RichTooltip = React38.forwardRef(
12320
13357
  (_a, ref) => {
12321
13358
  var _b = _a, {
12322
13359
  children,
@@ -12400,7 +13437,7 @@ var RichTooltip = React31.forwardRef(
12400
13437
  );
12401
13438
  RichTooltip.displayName = "RichTooltip";
12402
13439
  var VIEWPORT_PADDING = 8;
12403
- var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React31.useLayoutEffect : React31.useEffect;
13440
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React38.useLayoutEffect : React38.useEffect;
12404
13441
  function resolveAutoPlacement(spaceTop, spaceBottom, spaceLeft, spaceRight, tooltipWidth, tooltipHeight, spacing) {
12405
13442
  if (spaceTop >= tooltipHeight + spacing) return "top";
12406
13443
  if (spaceBottom >= tooltipHeight + spacing) return "bottom";
@@ -12460,7 +13497,7 @@ function clampToViewport(side, top, left, tooltipWidth, tooltipHeight) {
12460
13497
  return { top, left };
12461
13498
  }
12462
13499
  function useTooltipPosition(anchorRef, tooltipRef, placement, spacing, isVisible) {
12463
- const [position, setPosition] = React31.useState({
13500
+ const [position, setPosition] = React38.useState({
12464
13501
  top: -9999,
12465
13502
  left: -9999,
12466
13503
  actualSide: placement === "auto" ? "top" : placement
@@ -12535,24 +13572,24 @@ function useTooltipState(config) {
12535
13572
  isPersistent = false,
12536
13573
  duration = 1500
12537
13574
  } = config != null ? config : {};
12538
- const [isVisible, setIsVisible] = React31.useState(initialVisible);
12539
- const dismiss = React31.useCallback(() => {
13575
+ const [isVisible, setIsVisible] = React38.useState(initialVisible);
13576
+ const dismiss = React38.useCallback(() => {
12540
13577
  setIsVisible(false);
12541
13578
  activeTooltipDismissals.delete(dismiss);
12542
13579
  }, []);
12543
- const show = React31.useCallback(() => {
13580
+ const show = React38.useCallback(() => {
12544
13581
  for (const otherDismiss of activeTooltipDismissals) {
12545
13582
  if (otherDismiss !== dismiss) otherDismiss();
12546
13583
  }
12547
13584
  setIsVisible(true);
12548
13585
  activeTooltipDismissals.add(dismiss);
12549
13586
  }, [dismiss]);
12550
- React31.useEffect(() => {
13587
+ React38.useEffect(() => {
12551
13588
  if (!isVisible || isPersistent) return;
12552
13589
  const timeoutId = setTimeout(dismiss, duration);
12553
13590
  return () => clearTimeout(timeoutId);
12554
13591
  }, [isVisible, isPersistent, duration, dismiss]);
12555
- React31.useEffect(() => {
13592
+ React38.useEffect(() => {
12556
13593
  return () => {
12557
13594
  activeTooltipDismissals.delete(dismiss);
12558
13595
  };
@@ -12609,20 +13646,20 @@ function TooltipBox({
12609
13646
  }) {
12610
13647
  const internalState = useTooltipState();
12611
13648
  const state = controlledState != null ? controlledState : internalState;
12612
- const anchorRef = React31.useRef(null);
12613
- const tooltipRef = React31.useRef(null);
12614
- const hoverTimeoutRef = React31.useRef(null);
12615
- const hideTimeoutRef = React31.useRef(null);
12616
- const pressTimeoutRef = React31.useRef(null);
13649
+ const anchorRef = React38.useRef(null);
13650
+ const tooltipRef = React38.useRef(null);
13651
+ const hoverTimeoutRef = React38.useRef(null);
13652
+ const hideTimeoutRef = React38.useRef(null);
13653
+ const pressTimeoutRef = React38.useRef(null);
12617
13654
  const triggers = Array.isArray(trigger) ? trigger : [trigger];
12618
- const [mounted, setMounted] = React31.useState(false);
12619
- const [hasHoverSupport, setHasHoverSupport] = React31.useState(true);
12620
- const [prefersReducedMotion, setPrefersReducedMotion] = React31.useState(false);
12621
- React31.useEffect(() => {
13655
+ const [mounted, setMounted] = React38.useState(false);
13656
+ const [hasHoverSupport, setHasHoverSupport] = React38.useState(true);
13657
+ const [prefersReducedMotion, setPrefersReducedMotion] = React38.useState(false);
13658
+ React38.useEffect(() => {
12622
13659
  setMounted(true);
12623
13660
  setHasHoverSupport(!window.matchMedia("(hover: none)").matches);
12624
13661
  }, []);
12625
- React31.useEffect(() => {
13662
+ React38.useEffect(() => {
12626
13663
  const mediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
12627
13664
  setPrefersReducedMotion(mediaQuery.matches);
12628
13665
  const onChange = (e) => setPrefersReducedMotion(e.matches);
@@ -12694,7 +13731,7 @@ function TooltipBox({
12694
13731
  hideDelay
12695
13732
  );
12696
13733
  };
12697
- React31.useEffect(() => {
13734
+ React38.useEffect(() => {
12698
13735
  if (!state.isVisible) return;
12699
13736
  const onKeyDown = (e) => {
12700
13737
  var _a;
@@ -12706,8 +13743,8 @@ function TooltipBox({
12706
13743
  document.addEventListener("keydown", onKeyDown);
12707
13744
  return () => document.removeEventListener("keydown", onKeyDown);
12708
13745
  }, [state.isVisible, state]);
12709
- const tooltipId = React31.useId();
12710
- const tooltipWithProps = React31.cloneElement(
13746
+ const tooltipId = React38.useId();
13747
+ const tooltipWithProps = React38.cloneElement(
12711
13748
  tooltip,
12712
13749
  {
12713
13750
  "data-side": position.actualSide,
@@ -12735,7 +13772,7 @@ function TooltipBox({
12735
13772
  onKeyDown: handleKeyDown,
12736
13773
  "aria-label": ariaLabel,
12737
13774
  "aria-describedby": state.isVisible ? tooltipId : void 0,
12738
- children: React31__namespace.isValidElement(children) ? children : /* @__PURE__ */ jsxRuntime.jsx("span", { children })
13775
+ children: React38__namespace.isValidElement(children) ? children : /* @__PURE__ */ jsxRuntime.jsx("span", { children })
12739
13776
  }
12740
13777
  ),
12741
13778
  mounted && reactDom.createPortal(
@@ -12779,10 +13816,16 @@ exports.BadgedBox = BadgedBox;
12779
13816
  exports.BottomAppBar = BottomAppBar;
12780
13817
  exports.Button = Button;
12781
13818
  exports.ButtonGroup = ButtonGroup;
13819
+ exports.CHECK_ICON_VARIANTS = CHECK_ICON_VARIANTS;
12782
13820
  exports.Card = Card;
12783
13821
  exports.Checkbox = Checkbox;
12784
13822
  exports.Chip = Chip;
12785
13823
  exports.CodeBlock = CodeBlock;
13824
+ exports.ContextMenu = ContextMenu;
13825
+ exports.ContextMenuContent = ContextMenuContent;
13826
+ exports.ContextMenuTrigger = ContextMenuTrigger;
13827
+ exports.DIVIDER_COLOR = DIVIDER_COLOR;
13828
+ exports.DIVIDER_PADDING = DIVIDER_PADDING;
12786
13829
  exports.Dialog = Dialog;
12787
13830
  exports.DialogBody = DialogBody;
12788
13831
  exports.DialogClose = DialogClose;
@@ -12808,39 +13851,42 @@ exports.DrawerOverlay = DrawerOverlay;
12808
13851
  exports.DrawerPortal = DrawerPortal;
12809
13852
  exports.DrawerTitle = DrawerTitle;
12810
13853
  exports.DrawerTrigger = DrawerTrigger;
12811
- exports.DropdownMenu = DropdownMenu;
12812
- exports.DropdownMenuCheckboxItem = DropdownMenuCheckboxItem;
12813
- exports.DropdownMenuContent = DropdownMenuContent;
12814
- exports.DropdownMenuGroup = DropdownMenuGroup;
12815
- exports.DropdownMenuItem = DropdownMenuItem;
12816
- exports.DropdownMenuLabel = DropdownMenuLabel;
12817
- exports.DropdownMenuPortal = DropdownMenuPortal;
12818
- exports.DropdownMenuRadioGroup = DropdownMenuRadioGroup;
12819
- exports.DropdownMenuRadioItem = DropdownMenuRadioItem;
12820
- exports.DropdownMenuSeparator = DropdownMenuSeparator;
12821
- exports.DropdownMenuShortcut = DropdownMenuShortcut;
12822
- exports.DropdownMenuSub = DropdownMenuSub;
12823
- exports.DropdownMenuSubContent = DropdownMenuSubContent;
12824
- exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
12825
- exports.DropdownMenuTrigger = DropdownMenuTrigger;
12826
13854
  exports.FAB = FAB;
12827
13855
  exports.FABMenu = FABMenu;
12828
13856
  exports.FABMenuItem = FABMenuItem;
12829
13857
  exports.FABPosition = FABPosition;
13858
+ exports.FAST_EFFECTS_TRANSITION = FAST_EFFECTS_TRANSITION;
13859
+ exports.FAST_SPATIAL_SPRING = FAST_SPATIAL_SPRING;
13860
+ exports.GROUP_SHAPES = GROUP_SHAPES;
13861
+ exports.ITEM_SHAPE_CLASSES = ITEM_SHAPE_CLASSES;
12830
13862
  exports.Icon = Icon;
12831
13863
  exports.IconButton = IconButton;
12832
13864
  exports.LargeFlexibleAppBar = LargeFlexibleAppBar;
12833
13865
  exports.LoadingIndicator = LoadingIndicator;
12834
13866
  exports.MD3ThemeProvider = MD3ThemeProvider;
12835
13867
  exports.MD3_EXPRESSIVE_FONT_VARIATION = MD3_EXPRESSIVE_FONT_VARIATION;
13868
+ exports.MENU_CHECK_ICON_SIZE = MENU_CHECK_ICON_SIZE;
13869
+ exports.MENU_CONTAINER_VARIANTS = MENU_CONTAINER_VARIANTS;
13870
+ exports.MENU_GROUP_GAP = MENU_GROUP_GAP;
13871
+ exports.MENU_ICON_SIZE = MENU_ICON_SIZE;
13872
+ exports.MENU_ITEM_MIN_HEIGHT = MENU_ITEM_MIN_HEIGHT;
13873
+ exports.MENU_MAX_WIDTH = MENU_MAX_WIDTH;
13874
+ exports.MENU_MIN_WIDTH = MENU_MIN_WIDTH;
12836
13875
  exports.MaterialSymbolsPreconnect = MaterialSymbolsPreconnect;
12837
13876
  exports.MediumFlexibleAppBar = MediumFlexibleAppBar;
13877
+ exports.Menu = Menu;
13878
+ exports.MenuContent = MenuContent;
13879
+ exports.MenuDivider = MenuDivider;
13880
+ exports.MenuGroup = MenuGroup;
13881
+ exports.MenuItem = MenuItem;
13882
+ exports.MenuProvider = MenuProvider;
13883
+ exports.MenuTrigger = MenuTrigger;
12838
13884
  exports.NavigationRail = NavigationRail;
12839
13885
  exports.NavigationRailItem = NavigationRailItem;
12840
13886
  exports.PlainTooltip = PlainTooltip;
12841
13887
  exports.ProgressIndicator = ProgressIndicator;
12842
13888
  exports.RadioButton = RadioButton;
12843
- exports.RadioGroup = RadioGroup2;
13889
+ exports.RadioGroup = RadioGroup;
12844
13890
  exports.RangeSlider = RangeSlider;
12845
13891
  exports.RichTooltip = RichTooltip;
12846
13892
  exports.Ripple = Ripple;
@@ -12850,6 +13896,8 @@ exports.SEARCH_DOCKED_REVEAL_SPRING = SEARCH_DOCKED_REVEAL_SPRING;
12850
13896
  exports.SEARCH_FULLSCREEN_SPRING = SEARCH_FULLSCREEN_SPRING;
12851
13897
  exports.SEARCH_TYPOGRAPHY = SEARCH_TYPOGRAPHY;
12852
13898
  exports.SEARCH_VIEW_SPRING = SEARCH_VIEW_SPRING;
13899
+ exports.STANDARD_COLORS = STANDARD_COLORS;
13900
+ exports.SUBMENU_CONTAINER_VARIANTS = SUBMENU_CONTAINER_VARIANTS;
12853
13901
  exports.ScrollArea = ScrollArea;
12854
13902
  exports.ScrollAreaScrollbar = ScrollAreaScrollbar;
12855
13903
  exports.Search = Search;
@@ -12867,6 +13915,7 @@ exports.SmallAppBar = SmallAppBar;
12867
13915
  exports.Snackbar = Snackbar;
12868
13916
  exports.SnackbarHost = SnackbarHost;
12869
13917
  exports.SnackbarProvider = SnackbarProvider;
13918
+ exports.SubMenu = SubMenu;
12870
13919
  exports.Switch = Switch;
12871
13920
  exports.SwitchColors = SwitchColors;
12872
13921
  exports.SwitchTokens = SwitchTokens;
@@ -12877,6 +13926,7 @@ exports.TabsColors = TabsColors;
12877
13926
  exports.TabsContent = TabsContent;
12878
13927
  exports.TabsList = TabsList;
12879
13928
  exports.TabsTokens = TabsTokens;
13929
+ exports.Text = Text;
12880
13930
  exports.TextField = TextField;
12881
13931
  exports.ToggleFAB = ToggleFAB;
12882
13932
  exports.TooltipBox = TooltipBox;
@@ -12889,14 +13939,21 @@ exports.TypographyContext = TypographyContext;
12889
13939
  exports.TypographyKeyTokens = TypographyKeyTokens;
12890
13940
  exports.TypographyProvider = TypographyProvider;
12891
13941
  exports.TypographyTokens = TypographyTokens;
13942
+ exports.VIBRANT_COLORS = VIBRANT_COLORS;
13943
+ exports.VerticalMenu = VerticalMenu;
13944
+ exports.VerticalMenuContent = VerticalMenuContent;
13945
+ exports.VerticalMenuDivider = VerticalMenuDivider;
13946
+ exports.VerticalMenuGroup = VerticalMenuGroup;
12892
13947
  exports.appBarTypography = appBarTypography;
12893
13948
  exports.applyTheme = applyTheme;
12894
13949
  exports.buildWavePath = buildWavePath;
12895
13950
  exports.cn = cn;
12896
13951
  exports.generateM3Theme = generateM3Theme;
13952
+ exports.resolveMode = resolveMode;
12897
13953
  exports.useAppBarScroll = useAppBarScroll;
12898
13954
  exports.useDOMRipple = useRipple;
12899
13955
  exports.useMediaQuery = useMediaQuery;
13956
+ exports.useMenuContext = useMenuContext;
12900
13957
  exports.useRipple = useRipple2;
12901
13958
  exports.useRippleState = useRippleState;
12902
13959
  exports.useSearchKeyboard = useSearchKeyboard;