@womp/kookie-ui 0.5.0 → 0.6.2

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 (534) hide show
  1. package/components.css +306 -508
  2. package/dist/cjs/components/_internal/base-menu.utils.d.ts +48 -0
  3. package/dist/cjs/components/_internal/base-menu.utils.d.ts.map +1 -0
  4. package/dist/cjs/components/_internal/base-menu.utils.js +2 -0
  5. package/dist/cjs/components/_internal/base-menu.utils.js.map +7 -0
  6. package/dist/cjs/components/_internal/dropdown-menu-drill-down.d.ts +77 -59
  7. package/dist/cjs/components/_internal/dropdown-menu-drill-down.d.ts.map +1 -1
  8. package/dist/cjs/components/_internal/dropdown-menu-drill-down.js +1 -1
  9. package/dist/cjs/components/_internal/dropdown-menu-drill-down.js.map +4 -4
  10. package/dist/cjs/components/_internal/menu-context.d.ts +7 -3
  11. package/dist/cjs/components/_internal/menu-context.d.ts.map +1 -1
  12. package/dist/cjs/components/_internal/menu-context.js +1 -1
  13. package/dist/cjs/components/_internal/menu-context.js.map +4 -4
  14. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  15. package/dist/cjs/components/_internal/shell-bottom.js.map +2 -2
  16. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  17. package/dist/cjs/components/_internal/shell-inspector.js.map +2 -2
  18. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  19. package/dist/cjs/components/_internal/shell-sidebar.js.map +2 -2
  20. package/dist/cjs/components/accordion.js +1 -1
  21. package/dist/cjs/components/alert-dialog.js +1 -1
  22. package/dist/cjs/components/alert-dialog.js.map +2 -2
  23. package/dist/cjs/components/badge.js +1 -1
  24. package/dist/cjs/components/badge.js.map +2 -2
  25. package/dist/cjs/components/blockquote.js +1 -1
  26. package/dist/cjs/components/button.js +1 -1
  27. package/dist/cjs/components/button.js.map +2 -2
  28. package/dist/cjs/components/callout.js +1 -1
  29. package/dist/cjs/components/callout.js.map +2 -2
  30. package/dist/cjs/components/card.js +1 -1
  31. package/dist/cjs/components/card.js.map +2 -2
  32. package/dist/cjs/components/chatbar.d.ts +46 -44
  33. package/dist/cjs/components/chatbar.d.ts.map +1 -1
  34. package/dist/cjs/components/chatbar.js +2 -2
  35. package/dist/cjs/components/chatbar.js.map +3 -3
  36. package/dist/cjs/components/checkbox-cards.js +1 -1
  37. package/dist/cjs/components/checkbox-cards.js.map +2 -2
  38. package/dist/cjs/components/checkbox-group.js +1 -1
  39. package/dist/cjs/components/checkbox.js +1 -1
  40. package/dist/cjs/components/combobox.d.ts +28 -15
  41. package/dist/cjs/components/combobox.d.ts.map +1 -1
  42. package/dist/cjs/components/combobox.js +1 -1
  43. package/dist/cjs/components/combobox.js.map +4 -4
  44. package/dist/cjs/components/combobox.props.d.ts +48 -0
  45. package/dist/cjs/components/combobox.props.d.ts.map +1 -1
  46. package/dist/cjs/components/combobox.props.js +1 -1
  47. package/dist/cjs/components/combobox.props.js.map +4 -4
  48. package/dist/cjs/components/context-menu.d.ts +18 -5
  49. package/dist/cjs/components/context-menu.d.ts.map +1 -1
  50. package/dist/cjs/components/context-menu.js +1 -1
  51. package/dist/cjs/components/context-menu.js.map +4 -4
  52. package/dist/cjs/components/context-menu.props.d.ts +1 -1
  53. package/dist/cjs/components/context-menu.props.d.ts.map +1 -1
  54. package/dist/cjs/components/context-menu.props.js +1 -1
  55. package/dist/cjs/components/context-menu.props.js.map +3 -3
  56. package/dist/cjs/components/dialog.js +1 -1
  57. package/dist/cjs/components/dialog.js.map +2 -2
  58. package/dist/cjs/components/dropdown-menu.d.ts +11 -18
  59. package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
  60. package/dist/cjs/components/dropdown-menu.js +1 -1
  61. package/dist/cjs/components/dropdown-menu.js.map +4 -4
  62. package/dist/cjs/components/heading.js +1 -1
  63. package/dist/cjs/components/hover-card.js +1 -1
  64. package/dist/cjs/components/hover-card.js.map +2 -2
  65. package/dist/cjs/components/icon-button.js +1 -1
  66. package/dist/cjs/components/icon-button.js.map +2 -2
  67. package/dist/cjs/components/index.js +5 -5
  68. package/dist/cjs/components/index.js.map +4 -4
  69. package/dist/cjs/components/link.js +1 -1
  70. package/dist/cjs/components/popover.js +1 -1
  71. package/dist/cjs/components/popover.js.map +2 -2
  72. package/dist/cjs/components/radio-cards.js +1 -1
  73. package/dist/cjs/components/radio-cards.js.map +2 -2
  74. package/dist/cjs/components/radio.js +1 -1
  75. package/dist/cjs/components/radio.js.map +2 -2
  76. package/dist/cjs/components/schemas/base-button.schema.d.ts +111 -256
  77. package/dist/cjs/components/schemas/base-button.schema.d.ts.map +1 -1
  78. package/dist/cjs/components/schemas/button.schema.d.ts +136 -557
  79. package/dist/cjs/components/schemas/button.schema.d.ts.map +1 -1
  80. package/dist/cjs/components/schemas/icon-button.schema.d.ts +123 -240
  81. package/dist/cjs/components/schemas/icon-button.schema.d.ts.map +1 -1
  82. package/dist/cjs/components/schemas/index.js +1 -1
  83. package/dist/cjs/components/schemas/index.js.map +2 -2
  84. package/dist/cjs/components/schemas/shell.schema.d.ts +592 -851
  85. package/dist/cjs/components/schemas/shell.schema.d.ts.map +1 -1
  86. package/dist/cjs/components/schemas/shell.schema.js +1 -1
  87. package/dist/cjs/components/schemas/shell.schema.js.map +2 -2
  88. package/dist/cjs/components/schemas/toggle-button.schema.d.ts +138 -1026
  89. package/dist/cjs/components/schemas/toggle-button.schema.d.ts.map +1 -1
  90. package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts +124 -465
  91. package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts.map +1 -1
  92. package/dist/cjs/components/scroll-area.js +1 -1
  93. package/dist/cjs/components/segmented-control.js +1 -1
  94. package/dist/cjs/components/select.js +1 -1
  95. package/dist/cjs/components/select.js.map +2 -2
  96. package/dist/cjs/components/sheet.js +1 -1
  97. package/dist/cjs/components/sheet.js.map +2 -2
  98. package/dist/cjs/components/shell.js +1 -1
  99. package/dist/cjs/components/shell.js.map +3 -3
  100. package/dist/cjs/components/sidebar.js +1 -1
  101. package/dist/cjs/components/sidebar.js.map +4 -4
  102. package/dist/cjs/components/slider.js +1 -1
  103. package/dist/cjs/components/slot.d.ts +6 -2
  104. package/dist/cjs/components/slot.d.ts.map +1 -1
  105. package/dist/cjs/components/switch.js +1 -1
  106. package/dist/cjs/components/tab-nav.js +1 -1
  107. package/dist/cjs/components/text-field.js +2 -2
  108. package/dist/cjs/components/text.js +1 -1
  109. package/dist/cjs/components/theme-panel.js +3 -3
  110. package/dist/cjs/components/theme-panel.js.map +2 -2
  111. package/dist/cjs/components/theme.js +1 -1
  112. package/dist/cjs/components/theme.js.map +2 -2
  113. package/dist/cjs/components/theme.props.d.ts +1 -1
  114. package/dist/cjs/components/theme.props.js +1 -1
  115. package/dist/cjs/components/theme.props.js.map +2 -2
  116. package/dist/cjs/components/toggle-button.js +1 -1
  117. package/dist/cjs/components/toggle-button.js.map +2 -2
  118. package/dist/cjs/components/toggle-icon-button.js +1 -1
  119. package/dist/cjs/components/toggle-icon-button.js.map +2 -2
  120. package/dist/cjs/components/tooltip.js +1 -1
  121. package/dist/cjs/components/tooltip.js.map +2 -2
  122. package/dist/cjs/components/user-card.js +1 -1
  123. package/dist/cjs/components/user-card.js.map +2 -2
  124. package/dist/cjs/components/virtual-menu.d.ts.map +1 -1
  125. package/dist/cjs/components/virtual-menu.js +1 -1
  126. package/dist/cjs/components/virtual-menu.js.map +4 -4
  127. package/dist/cjs/helpers/extract-props.js +1 -1
  128. package/dist/cjs/helpers/extract-props.js.map +2 -2
  129. package/dist/cjs/helpers/get-margin-styles.js +1 -1
  130. package/dist/cjs/helpers/get-margin-styles.js.map +2 -2
  131. package/dist/cjs/hooks/use-breakpoint.d.ts +4 -1
  132. package/dist/cjs/hooks/use-breakpoint.d.ts.map +1 -1
  133. package/dist/cjs/hooks/use-breakpoint.js +1 -1
  134. package/dist/cjs/hooks/use-breakpoint.js.map +3 -3
  135. package/dist/cjs/index.js +5 -5
  136. package/dist/cjs/index.js.map +4 -4
  137. package/dist/cjs/props/index.js +1 -1
  138. package/dist/cjs/props/index.js.map +3 -3
  139. package/dist/esm/{chunk-P7HYVJSU.js → chunk-2TIADHPD.js} +2 -2
  140. package/dist/esm/chunk-37OGSEQR.js +2 -0
  141. package/dist/esm/chunk-37OGSEQR.js.map +7 -0
  142. package/dist/esm/{chunk-RMKXWYOV.js → chunk-3OBXZUFJ.js} +2 -2
  143. package/dist/esm/{chunk-S2HA3W3V.js → chunk-3R7XMRV5.js} +2 -2
  144. package/dist/esm/chunk-4SMJ7D4S.js +2 -0
  145. package/dist/esm/chunk-4SMJ7D4S.js.map +7 -0
  146. package/dist/esm/{chunk-S56YSRHP.js → chunk-56TS6OKQ.js} +2 -2
  147. package/dist/esm/{chunk-2FYJTSOP.js → chunk-5BYHEYO6.js} +2 -2
  148. package/dist/esm/{chunk-B24BDVG2.js → chunk-5MNBQROW.js} +2 -2
  149. package/dist/esm/{chunk-W7N7V5YD.js → chunk-7ESHXHHO.js} +2 -2
  150. package/dist/esm/{chunk-CRWYCLTE.js → chunk-ABSKRHVM.js} +2 -2
  151. package/dist/esm/chunk-ADBLURLJ.js +2 -0
  152. package/dist/esm/chunk-ADBLURLJ.js.map +7 -0
  153. package/dist/esm/{chunk-3MWWP4MW.js → chunk-BBJUB52V.js} +2 -2
  154. package/dist/esm/{chunk-PTLFMWCN.js → chunk-CQNPBTM5.js} +2 -2
  155. package/dist/esm/{chunk-GJSGKE7B.js → chunk-CTA5ODAO.js} +2 -2
  156. package/dist/esm/{chunk-GWXVETMF.js → chunk-DCAZPMOB.js} +2 -2
  157. package/dist/esm/{chunk-PLWXTEVE.js → chunk-DMJJM5IS.js} +2 -2
  158. package/dist/esm/{chunk-A2RZGGMY.js → chunk-DQAUX5ZL.js} +2 -2
  159. package/dist/esm/{chunk-6XGZPIUT.js → chunk-DX5JJYMZ.js} +2 -2
  160. package/dist/esm/{chunk-6XGZPIUT.js.map → chunk-DX5JJYMZ.js.map} +2 -2
  161. package/dist/esm/{chunk-YUP6EICB.js → chunk-DXL6V2A5.js} +2 -2
  162. package/dist/esm/{chunk-XMRIRFM7.js → chunk-FG7XM7KJ.js} +2 -2
  163. package/dist/esm/{chunk-IKSN4RNB.js → chunk-FIB3XATL.js} +3 -3
  164. package/dist/esm/chunk-FMBECDL4.js +2 -0
  165. package/dist/esm/{chunk-4XJY6FIK.js.map → chunk-FMBECDL4.js.map} +3 -3
  166. package/dist/esm/{chunk-374ZYJUP.js → chunk-HBR42MIX.js} +2 -2
  167. package/dist/esm/{chunk-2UPAYDKR.js → chunk-HIKVMKYQ.js} +2 -2
  168. package/dist/esm/{chunk-VX6ARMWP.js → chunk-HSAG7C53.js} +2 -2
  169. package/dist/esm/{chunk-OSRJRBKP.js → chunk-HW324FK3.js} +2 -2
  170. package/dist/esm/{chunk-DNHUQLXO.js → chunk-JBO5YOUM.js} +2 -2
  171. package/dist/esm/{chunk-HF5WY5YE.js → chunk-JGLAE5G7.js} +2 -2
  172. package/dist/esm/{chunk-4YFJWXL2.js → chunk-JJKQ7CGI.js} +2 -2
  173. package/dist/esm/chunk-JSW6J6RS.js +2 -0
  174. package/dist/esm/chunk-JSW6J6RS.js.map +7 -0
  175. package/dist/esm/chunk-KRDP5SQ7.js +2 -0
  176. package/dist/esm/chunk-KRDP5SQ7.js.map +7 -0
  177. package/dist/esm/{chunk-CWRNW44F.js → chunk-L6PVH3RM.js} +2 -2
  178. package/dist/esm/{chunk-MK2R6DAU.js → chunk-LAOMR7SE.js} +2 -2
  179. package/dist/esm/{chunk-FHOCUZDR.js → chunk-NIQT45PJ.js} +2 -2
  180. package/dist/esm/chunk-NKEJTTIL.js +2 -0
  181. package/dist/esm/chunk-NKEJTTIL.js.map +7 -0
  182. package/dist/esm/chunk-NVDXXGVW.js +2 -0
  183. package/dist/esm/chunk-NVDXXGVW.js.map +7 -0
  184. package/dist/esm/chunk-OS3FCYZY.js +2 -0
  185. package/dist/esm/{chunk-7QDTSBJF.js → chunk-OYF6YXH7.js} +2 -2
  186. package/dist/esm/{chunk-WFMYNZXZ.js → chunk-P5OSU4NX.js} +2 -2
  187. package/dist/esm/{chunk-QEOAXJLN.js → chunk-PTS6QYQW.js} +2 -2
  188. package/dist/esm/{chunk-CVWCKOHO.js → chunk-RLPKKCBL.js} +2 -2
  189. package/dist/esm/{chunk-LKAK5GXF.js → chunk-SPIU5JYC.js} +2 -2
  190. package/dist/esm/chunk-SZTZ2XLI.js +2 -0
  191. package/dist/esm/chunk-SZTZ2XLI.js.map +7 -0
  192. package/dist/esm/chunk-T2FZN7G3.js +2 -0
  193. package/dist/esm/chunk-T2FZN7G3.js.map +7 -0
  194. package/dist/esm/{chunk-4AQTUBVP.js → chunk-T4UHUQFJ.js} +2 -2
  195. package/dist/esm/{chunk-K6QZMNCD.js → chunk-TS623UPD.js} +2 -2
  196. package/dist/esm/{chunk-YV2KYHGR.js → chunk-UBOOUDS4.js} +2 -2
  197. package/dist/esm/{chunk-D6B7IMZU.js → chunk-UFI53QUC.js} +2 -2
  198. package/dist/esm/{chunk-AU3D6F42.js → chunk-UIRSGVJG.js} +2 -2
  199. package/dist/esm/{chunk-FXUUI6Z2.js → chunk-UUUZXUIP.js} +2 -2
  200. package/dist/esm/{chunk-25WZA7ZU.js → chunk-VA4CTVQL.js} +2 -2
  201. package/dist/esm/{chunk-TOLLPRMM.js → chunk-VNPNEJI6.js} +2 -2
  202. package/dist/esm/{chunk-6IGTK4JE.js → chunk-YMUGKYGW.js} +2 -2
  203. package/dist/esm/chunk-ZWYYPFZW.js +2 -0
  204. package/dist/esm/chunk-ZWYYPFZW.js.map +7 -0
  205. package/dist/esm/{chunk-M24UXMOQ.js → chunk-ZXZOH63L.js} +2 -2
  206. package/dist/esm/components/_internal/base-button.js +1 -1
  207. package/dist/esm/components/_internal/base-button.props.js +1 -1
  208. package/dist/esm/components/_internal/base-checkbox.props.js +1 -1
  209. package/dist/esm/components/_internal/base-menu.props.js +1 -1
  210. package/dist/esm/components/_internal/base-menu.utils.d.ts +48 -0
  211. package/dist/esm/components/_internal/base-menu.utils.d.ts.map +1 -0
  212. package/dist/esm/components/_internal/base-menu.utils.js +2 -0
  213. package/dist/esm/components/_internal/base-menu.utils.js.map +7 -0
  214. package/dist/esm/components/_internal/base-radio.props.js +1 -1
  215. package/dist/esm/components/_internal/base-tab-list.props.js +1 -1
  216. package/dist/esm/components/_internal/dropdown-menu-drill-down.d.ts +77 -59
  217. package/dist/esm/components/_internal/dropdown-menu-drill-down.d.ts.map +1 -1
  218. package/dist/esm/components/_internal/dropdown-menu-drill-down.js +1 -1
  219. package/dist/esm/components/_internal/menu-context.d.ts +7 -3
  220. package/dist/esm/components/_internal/menu-context.d.ts.map +1 -1
  221. package/dist/esm/components/_internal/menu-context.js +1 -1
  222. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  223. package/dist/esm/components/_internal/shell-handles.js +1 -1
  224. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  225. package/dist/esm/components/_internal/shell-prop-helpers.js +1 -1
  226. package/dist/esm/components/_internal/shell-resize.js +1 -1
  227. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  228. package/dist/esm/components/accessible-icon.js +1 -1
  229. package/dist/esm/components/accordion.js +1 -1
  230. package/dist/esm/components/accordion.props.js +1 -1
  231. package/dist/esm/components/alert-dialog.js +1 -1
  232. package/dist/esm/components/alert-dialog.props.js +1 -1
  233. package/dist/esm/components/aspect-ratio.js +1 -1
  234. package/dist/esm/components/avatar.js +1 -1
  235. package/dist/esm/components/avatar.props.js +1 -1
  236. package/dist/esm/components/badge.js +1 -1
  237. package/dist/esm/components/badge.props.js +1 -1
  238. package/dist/esm/components/blockquote.js +1 -1
  239. package/dist/esm/components/blockquote.props.js +1 -1
  240. package/dist/esm/components/box.js +1 -1
  241. package/dist/esm/components/box.props.js +1 -1
  242. package/dist/esm/components/button.js +1 -1
  243. package/dist/esm/components/button.props.js +1 -1
  244. package/dist/esm/components/callout.js +1 -1
  245. package/dist/esm/components/callout.props.js +1 -1
  246. package/dist/esm/components/card.js +1 -1
  247. package/dist/esm/components/card.props.js +1 -1
  248. package/dist/esm/components/chatbar.d.ts +46 -44
  249. package/dist/esm/components/chatbar.d.ts.map +1 -1
  250. package/dist/esm/components/chatbar.js +1 -1
  251. package/dist/esm/components/checkbox-cards.js +1 -1
  252. package/dist/esm/components/checkbox-cards.props.js +1 -1
  253. package/dist/esm/components/checkbox-group.js +1 -1
  254. package/dist/esm/components/checkbox-group.primitive.js +1 -1
  255. package/dist/esm/components/checkbox-group.props.js +1 -1
  256. package/dist/esm/components/checkbox.js +1 -1
  257. package/dist/esm/components/checkbox.props.js +1 -1
  258. package/dist/esm/components/code.js +1 -1
  259. package/dist/esm/components/code.props.js +1 -1
  260. package/dist/esm/components/combobox.d.ts +28 -15
  261. package/dist/esm/components/combobox.d.ts.map +1 -1
  262. package/dist/esm/components/combobox.js +1 -1
  263. package/dist/esm/components/combobox.props.d.ts +48 -0
  264. package/dist/esm/components/combobox.props.d.ts.map +1 -1
  265. package/dist/esm/components/combobox.props.js +1 -1
  266. package/dist/esm/components/container.js +1 -1
  267. package/dist/esm/components/container.props.js +1 -1
  268. package/dist/esm/components/context-menu.d.ts +18 -5
  269. package/dist/esm/components/context-menu.d.ts.map +1 -1
  270. package/dist/esm/components/context-menu.js +1 -1
  271. package/dist/esm/components/context-menu.props.d.ts +1 -1
  272. package/dist/esm/components/context-menu.props.d.ts.map +1 -1
  273. package/dist/esm/components/context-menu.props.js +1 -1
  274. package/dist/esm/components/data-list.js +1 -1
  275. package/dist/esm/components/data-list.props.js +1 -1
  276. package/dist/esm/components/dialog.js +1 -1
  277. package/dist/esm/components/dialog.props.js +1 -1
  278. package/dist/esm/components/dropdown-menu.d.ts +11 -18
  279. package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
  280. package/dist/esm/components/dropdown-menu.js +1 -1
  281. package/dist/esm/components/dropdown-menu.props.js +1 -1
  282. package/dist/esm/components/em.js +1 -1
  283. package/dist/esm/components/em.props.js +1 -1
  284. package/dist/esm/components/flex.js +1 -1
  285. package/dist/esm/components/flex.props.js +1 -1
  286. package/dist/esm/components/grid.js +1 -1
  287. package/dist/esm/components/grid.props.js +1 -1
  288. package/dist/esm/components/heading.js +1 -1
  289. package/dist/esm/components/heading.props.js +1 -1
  290. package/dist/esm/components/hover-card.js +1 -1
  291. package/dist/esm/components/hover-card.props.js +1 -1
  292. package/dist/esm/components/icon-button.js +1 -1
  293. package/dist/esm/components/icon-button.props.js +1 -1
  294. package/dist/esm/components/icons.js +1 -1
  295. package/dist/esm/components/image.js +1 -1
  296. package/dist/esm/components/image.props.js +1 -1
  297. package/dist/esm/components/index.js +1 -1
  298. package/dist/esm/components/inset.js +1 -1
  299. package/dist/esm/components/inset.props.js +1 -1
  300. package/dist/esm/components/kbd.js +1 -1
  301. package/dist/esm/components/kbd.props.js +1 -1
  302. package/dist/esm/components/link.js +1 -1
  303. package/dist/esm/components/link.props.js +1 -1
  304. package/dist/esm/components/navbar.js +1 -1
  305. package/dist/esm/components/navbar.props.js +1 -1
  306. package/dist/esm/components/popover.js +1 -1
  307. package/dist/esm/components/popover.props.js +1 -1
  308. package/dist/esm/components/portal.js +1 -1
  309. package/dist/esm/components/progress.js +1 -1
  310. package/dist/esm/components/progress.props.js +1 -1
  311. package/dist/esm/components/quote.js +1 -1
  312. package/dist/esm/components/quote.props.js +1 -1
  313. package/dist/esm/components/radio-cards.js +1 -1
  314. package/dist/esm/components/radio-cards.props.js +1 -1
  315. package/dist/esm/components/radio-group.js +1 -1
  316. package/dist/esm/components/radio-group.props.js +1 -1
  317. package/dist/esm/components/radio.js +1 -1
  318. package/dist/esm/components/radio.props.js +1 -1
  319. package/dist/esm/components/reset.js +1 -1
  320. package/dist/esm/components/schemas/base-button.schema.d.ts +111 -256
  321. package/dist/esm/components/schemas/base-button.schema.d.ts.map +1 -1
  322. package/dist/esm/components/schemas/base-button.schema.js +1 -1
  323. package/dist/esm/components/schemas/button.schema.d.ts +136 -557
  324. package/dist/esm/components/schemas/button.schema.d.ts.map +1 -1
  325. package/dist/esm/components/schemas/button.schema.js +1 -1
  326. package/dist/esm/components/schemas/icon-button.schema.d.ts +123 -240
  327. package/dist/esm/components/schemas/icon-button.schema.d.ts.map +1 -1
  328. package/dist/esm/components/schemas/icon-button.schema.js +1 -1
  329. package/dist/esm/components/schemas/index.js +1 -1
  330. package/dist/esm/components/schemas/shell.schema.d.ts +592 -851
  331. package/dist/esm/components/schemas/shell.schema.d.ts.map +1 -1
  332. package/dist/esm/components/schemas/shell.schema.js +1 -1
  333. package/dist/esm/components/schemas/toggle-button.schema.d.ts +138 -1026
  334. package/dist/esm/components/schemas/toggle-button.schema.d.ts.map +1 -1
  335. package/dist/esm/components/schemas/toggle-button.schema.js +1 -1
  336. package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts +124 -465
  337. package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts.map +1 -1
  338. package/dist/esm/components/schemas/toggle-icon-button.schema.js +1 -1
  339. package/dist/esm/components/scroll-area.js +1 -1
  340. package/dist/esm/components/scroll-area.props.js +1 -1
  341. package/dist/esm/components/section.js +1 -1
  342. package/dist/esm/components/section.props.js +1 -1
  343. package/dist/esm/components/segmented-control.js +1 -1
  344. package/dist/esm/components/segmented-control.props.js +1 -1
  345. package/dist/esm/components/select.js +1 -1
  346. package/dist/esm/components/select.props.js +1 -1
  347. package/dist/esm/components/separator.js +1 -1
  348. package/dist/esm/components/separator.props.js +1 -1
  349. package/dist/esm/components/sheet.js +1 -1
  350. package/dist/esm/components/shell.context.js +1 -1
  351. package/dist/esm/components/shell.hooks.js +1 -1
  352. package/dist/esm/components/shell.js +1 -1
  353. package/dist/esm/components/shell.types.js +1 -1
  354. package/dist/esm/components/sidebar.js +1 -1
  355. package/dist/esm/components/sidebar.props.js +1 -1
  356. package/dist/esm/components/skeleton.js +1 -1
  357. package/dist/esm/components/skeleton.props.js +1 -1
  358. package/dist/esm/components/slider.js +1 -1
  359. package/dist/esm/components/slider.props.js +1 -1
  360. package/dist/esm/components/slot.d.ts +6 -2
  361. package/dist/esm/components/slot.d.ts.map +1 -1
  362. package/dist/esm/components/slot.js +1 -1
  363. package/dist/esm/components/spinner.js +1 -1
  364. package/dist/esm/components/spinner.props.js +1 -1
  365. package/dist/esm/components/strong.js +1 -1
  366. package/dist/esm/components/strong.props.js +1 -1
  367. package/dist/esm/components/switch.js +1 -1
  368. package/dist/esm/components/switch.props.js +1 -1
  369. package/dist/esm/components/tab-nav.js +1 -1
  370. package/dist/esm/components/tab-nav.props.js +1 -1
  371. package/dist/esm/components/table.js +1 -1
  372. package/dist/esm/components/table.props.js +1 -1
  373. package/dist/esm/components/tabs.js +1 -1
  374. package/dist/esm/components/tabs.props.js +1 -1
  375. package/dist/esm/components/text-area.js +1 -1
  376. package/dist/esm/components/text-area.props.js +1 -1
  377. package/dist/esm/components/text-field.js +1 -1
  378. package/dist/esm/components/text-field.props.js +1 -1
  379. package/dist/esm/components/text.js +1 -1
  380. package/dist/esm/components/text.props.js +1 -1
  381. package/dist/esm/components/theme-panel.js +1 -1
  382. package/dist/esm/components/theme.js +1 -1
  383. package/dist/esm/components/theme.props.d.ts +1 -1
  384. package/dist/esm/components/theme.props.js +1 -1
  385. package/dist/esm/components/toggle-button.js +1 -1
  386. package/dist/esm/components/toggle-icon-button.js +1 -1
  387. package/dist/esm/components/toolbar.js +1 -1
  388. package/dist/esm/components/tooltip.js +1 -1
  389. package/dist/esm/components/tooltip.props.js +1 -1
  390. package/dist/esm/components/user-card.js +1 -1
  391. package/dist/esm/components/user-card.props.js +1 -1
  392. package/dist/esm/components/virtual-menu.d.ts.map +1 -1
  393. package/dist/esm/components/virtual-menu.js +1 -1
  394. package/dist/esm/components/visually-hidden.js +1 -1
  395. package/dist/esm/helpers/compile-prop-defs.js +1 -1
  396. package/dist/esm/helpers/extract-margin-props.js +1 -1
  397. package/dist/esm/helpers/extract-props.js +1 -1
  398. package/dist/esm/helpers/font-config.js +1 -1
  399. package/dist/esm/helpers/get-margin-styles.js +1 -1
  400. package/dist/esm/helpers/get-matching-gray-color.js +1 -1
  401. package/dist/esm/helpers/get-responsive-styles.js +1 -1
  402. package/dist/esm/helpers/get-subtree.js +1 -1
  403. package/dist/esm/helpers/has-own-property.js +1 -1
  404. package/dist/esm/helpers/index.js +1 -1
  405. package/dist/esm/helpers/inert.js +1 -1
  406. package/dist/esm/helpers/is-responsive-object.js +1 -1
  407. package/dist/esm/helpers/map-prop-values.js +1 -1
  408. package/dist/esm/helpers/merge-styles.js +1 -1
  409. package/dist/esm/helpers/normalize-to-px.js +1 -1
  410. package/dist/esm/helpers/require-react-element.js +1 -1
  411. package/dist/esm/helpers/use-deprecation-warning.js +1 -1
  412. package/dist/esm/hooks/index.js +1 -1
  413. package/dist/esm/hooks/use-body-pointer-events-cleanup.js +1 -1
  414. package/dist/esm/hooks/use-breakpoint.d.ts +4 -1
  415. package/dist/esm/hooks/use-breakpoint.d.ts.map +1 -1
  416. package/dist/esm/hooks/use-breakpoint.js +1 -1
  417. package/dist/esm/hooks/use-live-announcer.js +1 -1
  418. package/dist/esm/hooks/use-prop-synced-state.js +1 -1
  419. package/dist/esm/hooks/use-toggle-state.js +1 -1
  420. package/dist/esm/hooks/use-tooltip-wrapper.js +1 -1
  421. package/dist/esm/index.js +1 -1
  422. package/dist/esm/props/as-child.prop.js +1 -1
  423. package/dist/esm/props/color.prop.js +1 -1
  424. package/dist/esm/props/font-family.prop.js +1 -1
  425. package/dist/esm/props/gap.props.js +1 -1
  426. package/dist/esm/props/height.props.js +1 -1
  427. package/dist/esm/props/high-contrast.prop.js +1 -1
  428. package/dist/esm/props/index.js +1 -1
  429. package/dist/esm/props/layout.props.js +1 -1
  430. package/dist/esm/props/leading-trim.prop.js +1 -1
  431. package/dist/esm/props/margin.props.js +1 -1
  432. package/dist/esm/props/padding.props.js +1 -1
  433. package/dist/esm/props/prop-def.js +1 -1
  434. package/dist/esm/props/radius.prop.js +1 -1
  435. package/dist/esm/props/shadow.props.js +1 -1
  436. package/dist/esm/props/text-align.prop.js +1 -1
  437. package/dist/esm/props/text-wrap.prop.js +1 -1
  438. package/dist/esm/props/truncate.prop.js +1 -1
  439. package/dist/esm/props/weight.prop.js +1 -1
  440. package/dist/esm/props/width.props.js +1 -1
  441. package/fonts.css +2 -0
  442. package/package.json +36 -36
  443. package/schemas/base-button.json +66 -60
  444. package/schemas/button.json +80 -74
  445. package/schemas/icon-button.json +78 -72
  446. package/schemas/index.json +390 -360
  447. package/schemas/toggle-button.json +84 -78
  448. package/schemas/toggle-icon-button.json +82 -76
  449. package/src/components/_internal/base-menu.css +65 -140
  450. package/src/components/_internal/base-menu.utils.tsx +144 -0
  451. package/src/components/_internal/dropdown-menu-drill-down.tsx +281 -183
  452. package/src/components/_internal/menu-context.tsx +24 -15
  453. package/src/components/chatbar.css +94 -26
  454. package/src/components/chatbar.tsx +739 -735
  455. package/src/components/combobox.css +62 -115
  456. package/src/components/combobox.props.tsx +14 -0
  457. package/src/components/combobox.tsx +440 -212
  458. package/src/components/context-menu.props.tsx +4 -1
  459. package/src/components/context-menu.tsx +108 -62
  460. package/src/components/dropdown-menu.css +41 -121
  461. package/src/components/dropdown-menu.tsx +430 -275
  462. package/src/components/schemas/shell.schema.ts +11 -18
  463. package/src/components/scroll-area.css +2 -3
  464. package/src/components/theme.props.tsx +1 -1
  465. package/src/components/virtual-menu.tsx +12 -8
  466. package/src/hooks/use-breakpoint.ts +19 -3
  467. package/src/styles/fonts.css +6 -1
  468. package/src/styles/tokens/font-family.css +13 -5
  469. package/styles.css +307 -509
  470. package/tokens/base.css +1 -1
  471. package/tokens.css +1 -1
  472. package/dist/esm/chunk-3XT5P2HO.js +0 -2
  473. package/dist/esm/chunk-4XJY6FIK.js +0 -2
  474. package/dist/esm/chunk-4Z33XHOK.js +0 -2
  475. package/dist/esm/chunk-4Z33XHOK.js.map +0 -7
  476. package/dist/esm/chunk-E2Z5IA2P.js +0 -2
  477. package/dist/esm/chunk-E2Z5IA2P.js.map +0 -7
  478. package/dist/esm/chunk-HVWEPVBH.js +0 -2
  479. package/dist/esm/chunk-HVWEPVBH.js.map +0 -7
  480. package/dist/esm/chunk-KKBP2CRH.js +0 -2
  481. package/dist/esm/chunk-KKBP2CRH.js.map +0 -7
  482. package/dist/esm/chunk-MOR3NSXQ.js +0 -2
  483. package/dist/esm/chunk-MOR3NSXQ.js.map +0 -7
  484. package/dist/esm/chunk-QCNUTT4R.js +0 -2
  485. package/dist/esm/chunk-QCNUTT4R.js.map +0 -7
  486. package/dist/esm/chunk-UGD7Z3L4.js +0 -2
  487. package/dist/esm/chunk-UGD7Z3L4.js.map +0 -7
  488. package/dist/esm/chunk-YEB3H7QN.js +0 -2
  489. package/dist/esm/chunk-YEB3H7QN.js.map +0 -7
  490. package/dist/esm/chunk-ZY6SQWHT.js +0 -2
  491. package/dist/esm/chunk-ZY6SQWHT.js.map +0 -7
  492. /package/dist/esm/{chunk-P7HYVJSU.js.map → chunk-2TIADHPD.js.map} +0 -0
  493. /package/dist/esm/{chunk-RMKXWYOV.js.map → chunk-3OBXZUFJ.js.map} +0 -0
  494. /package/dist/esm/{chunk-S2HA3W3V.js.map → chunk-3R7XMRV5.js.map} +0 -0
  495. /package/dist/esm/{chunk-S56YSRHP.js.map → chunk-56TS6OKQ.js.map} +0 -0
  496. /package/dist/esm/{chunk-2FYJTSOP.js.map → chunk-5BYHEYO6.js.map} +0 -0
  497. /package/dist/esm/{chunk-B24BDVG2.js.map → chunk-5MNBQROW.js.map} +0 -0
  498. /package/dist/esm/{chunk-W7N7V5YD.js.map → chunk-7ESHXHHO.js.map} +0 -0
  499. /package/dist/esm/{chunk-CRWYCLTE.js.map → chunk-ABSKRHVM.js.map} +0 -0
  500. /package/dist/esm/{chunk-3MWWP4MW.js.map → chunk-BBJUB52V.js.map} +0 -0
  501. /package/dist/esm/{chunk-PTLFMWCN.js.map → chunk-CQNPBTM5.js.map} +0 -0
  502. /package/dist/esm/{chunk-GJSGKE7B.js.map → chunk-CTA5ODAO.js.map} +0 -0
  503. /package/dist/esm/{chunk-GWXVETMF.js.map → chunk-DCAZPMOB.js.map} +0 -0
  504. /package/dist/esm/{chunk-PLWXTEVE.js.map → chunk-DMJJM5IS.js.map} +0 -0
  505. /package/dist/esm/{chunk-A2RZGGMY.js.map → chunk-DQAUX5ZL.js.map} +0 -0
  506. /package/dist/esm/{chunk-YUP6EICB.js.map → chunk-DXL6V2A5.js.map} +0 -0
  507. /package/dist/esm/{chunk-XMRIRFM7.js.map → chunk-FG7XM7KJ.js.map} +0 -0
  508. /package/dist/esm/{chunk-IKSN4RNB.js.map → chunk-FIB3XATL.js.map} +0 -0
  509. /package/dist/esm/{chunk-374ZYJUP.js.map → chunk-HBR42MIX.js.map} +0 -0
  510. /package/dist/esm/{chunk-2UPAYDKR.js.map → chunk-HIKVMKYQ.js.map} +0 -0
  511. /package/dist/esm/{chunk-VX6ARMWP.js.map → chunk-HSAG7C53.js.map} +0 -0
  512. /package/dist/esm/{chunk-OSRJRBKP.js.map → chunk-HW324FK3.js.map} +0 -0
  513. /package/dist/esm/{chunk-DNHUQLXO.js.map → chunk-JBO5YOUM.js.map} +0 -0
  514. /package/dist/esm/{chunk-HF5WY5YE.js.map → chunk-JGLAE5G7.js.map} +0 -0
  515. /package/dist/esm/{chunk-4YFJWXL2.js.map → chunk-JJKQ7CGI.js.map} +0 -0
  516. /package/dist/esm/{chunk-CWRNW44F.js.map → chunk-L6PVH3RM.js.map} +0 -0
  517. /package/dist/esm/{chunk-MK2R6DAU.js.map → chunk-LAOMR7SE.js.map} +0 -0
  518. /package/dist/esm/{chunk-FHOCUZDR.js.map → chunk-NIQT45PJ.js.map} +0 -0
  519. /package/dist/esm/{chunk-3XT5P2HO.js.map → chunk-OS3FCYZY.js.map} +0 -0
  520. /package/dist/esm/{chunk-7QDTSBJF.js.map → chunk-OYF6YXH7.js.map} +0 -0
  521. /package/dist/esm/{chunk-WFMYNZXZ.js.map → chunk-P5OSU4NX.js.map} +0 -0
  522. /package/dist/esm/{chunk-QEOAXJLN.js.map → chunk-PTS6QYQW.js.map} +0 -0
  523. /package/dist/esm/{chunk-CVWCKOHO.js.map → chunk-RLPKKCBL.js.map} +0 -0
  524. /package/dist/esm/{chunk-LKAK5GXF.js.map → chunk-SPIU5JYC.js.map} +0 -0
  525. /package/dist/esm/{chunk-4AQTUBVP.js.map → chunk-T4UHUQFJ.js.map} +0 -0
  526. /package/dist/esm/{chunk-K6QZMNCD.js.map → chunk-TS623UPD.js.map} +0 -0
  527. /package/dist/esm/{chunk-YV2KYHGR.js.map → chunk-UBOOUDS4.js.map} +0 -0
  528. /package/dist/esm/{chunk-D6B7IMZU.js.map → chunk-UFI53QUC.js.map} +0 -0
  529. /package/dist/esm/{chunk-AU3D6F42.js.map → chunk-UIRSGVJG.js.map} +0 -0
  530. /package/dist/esm/{chunk-FXUUI6Z2.js.map → chunk-UUUZXUIP.js.map} +0 -0
  531. /package/dist/esm/{chunk-25WZA7ZU.js.map → chunk-VA4CTVQL.js.map} +0 -0
  532. /package/dist/esm/{chunk-TOLLPRMM.js.map → chunk-VNPNEJI6.js.map} +0 -0
  533. /package/dist/esm/{chunk-6IGTK4JE.js.map → chunk-YMUGKYGW.js.map} +0 -0
  534. /package/dist/esm/{chunk-M24UXMOQ.js.map → chunk-ZXZOH63L.js.map} +0 -0
@@ -26,16 +26,9 @@
26
26
  contain: paint;
27
27
  isolation: isolate;
28
28
 
29
- /* Optimize backdrop-filter performance during animations */
30
- &:where([data-state='open']) {
31
- will-change: transform, opacity;
32
- }
33
-
34
29
  /* Enhanced reduced motion support */
35
30
  @media (prefers-reduced-motion: reduce) {
36
31
  transition: none;
37
- will-change: auto;
38
- backdrop-filter: none; /* Remove blur for motion-sensitive users */
39
32
  }
40
33
 
41
34
  /* Component-level overrides (higher specificity) */
@@ -58,10 +51,6 @@
58
51
  padding: var(--base-menu-content-padding);
59
52
  box-sizing: border-box;
60
53
 
61
- :where(.rt-BaseMenuContent:has(.rt-ScrollAreaScrollbar[data-orientation='vertical'])) & {
62
- padding-inline-end: var(--space-3);
63
- }
64
-
65
54
  /* Remove right padding when virtualized so scrollbar sits at the edge */
66
55
  &:where(.rt-virtualized) {
67
56
  padding-inline-end: 0;
@@ -95,7 +84,6 @@
95
84
  /* Enhanced reduced motion support */
96
85
  @media (prefers-reduced-motion: reduce) {
97
86
  transition: none;
98
- backdrop-filter: none; /* Remove any backdrop effects for motion-sensitive users */
99
87
  }
100
88
  }
101
89
 
@@ -138,7 +126,7 @@
138
126
  padding-inline-start: var(--base-menu-item-padding-left);
139
127
  padding-inline-end: var(--base-menu-item-padding-right);
140
128
  box-sizing: border-box;
141
- color: var(--gray-a10);
129
+ color: var(--gray-a11);
142
130
  user-select: none;
143
131
  cursor: default;
144
132
 
@@ -147,16 +135,21 @@
147
135
  }
148
136
  }
149
137
 
150
- .rt-BaseMenuArrow {
151
- fill: var(--color-panel);
138
+ /* Chevrons point the other way in right-to-left menus */
139
+ .rt-BaseMenuContent:where([dir='rtl']) :where(.rt-BaseMenuSubTriggerIcon) {
140
+ transform: scaleX(-1);
141
+ }
152
142
 
153
- /* Component-level overrides (higher specificity) */
154
- :where(.rt-BaseMenuContent[data-panel-background='solid']) & {
155
- fill: var(--color-panel-solid);
156
- }
143
+ /*
144
+ * Items leave room for the check/radio indicator only when the menu has one.
145
+ * The size blocks below set both paddings; this picks one. Browsers without
146
+ * :has() keep the indicator padding, which never overlaps.
147
+ */
148
+ .rt-BaseMenuContent {
149
+ --base-menu-item-padding-left: var(--base-menu-item-padding-left-indicator);
157
150
 
158
- :where(.rt-BaseMenuContent[data-panel-background='translucent']) & {
159
- fill: var(--color-panel-translucent);
151
+ &:where(:not(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem))) {
152
+ --base-menu-item-padding-left: var(--base-menu-item-padding-left-plain);
160
153
  }
161
154
  }
162
155
 
@@ -170,7 +163,8 @@
170
163
  .rt-BaseMenuContent {
171
164
  &:where(.rt-r-size-1) {
172
165
  --base-menu-content-padding: var(--space-2);
173
- --base-menu-item-padding-left: calc(var(--space-5) / 1.2);
166
+ --base-menu-item-padding-left-plain: var(--space-2);
167
+ --base-menu-item-padding-left-indicator: calc(var(--space-5) / 1.2);
174
168
  --base-menu-item-padding-right: var(--space-2);
175
169
  --base-menu-item-padding-y: var(--space-1);
176
170
  --base-menu-item-height: var(--space-5);
@@ -195,7 +189,7 @@
195
189
  font-size: var(--font-size-1);
196
190
  line-height: var(--line-height-1);
197
191
  letter-spacing: var(--letter-spacing-1);
198
- padding-inline-start: calc(var(--base-menu-item-padding-left));
192
+ padding-inline-start: var(--base-menu-item-padding-left);
199
193
  }
200
194
 
201
195
  & :where(.rt-BaseMenuItemIndicatorIcon, .rt-BaseMenuSubTriggerIcon) {
@@ -203,18 +197,12 @@
203
197
  height: var(--indicator-icon-size-1);
204
198
  }
205
199
 
206
- /* reset with :not:has so we still support browsers without :has */
207
- &:where(:not(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem))) {
208
- --base-menu-item-padding-left: var(--space-2);
209
- }
210
- &:where(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem)) {
211
- --base-menu-item-padding-left: calc(var(--space-5) / 1.2);
212
- }
213
200
  }
214
201
 
215
202
  &:where(.rt-r-size-2) {
216
203
  --base-menu-content-padding: var(--space-3);
217
- --base-menu-item-padding-left: var(--space-3);
204
+ --base-menu-item-padding-left-plain: var(--space-3);
205
+ --base-menu-item-padding-left-indicator: var(--space-5);
218
206
  --base-menu-item-padding-right: var(--space-3);
219
207
  --base-menu-item-padding-y: var(--space-1);
220
208
  --base-menu-item-height: var(--space-6);
@@ -239,7 +227,7 @@
239
227
  font-size: var(--font-size-2);
240
228
  line-height: var(--line-height-2);
241
229
  letter-spacing: var(--letter-spacing-2);
242
- padding-left: calc(var(--base-menu-item-padding-left));
230
+ padding-inline-start: var(--base-menu-item-padding-left);
243
231
  }
244
232
 
245
233
  & :where(.rt-BaseMenuItemIndicatorIcon, .rt-BaseMenuSubTriggerIcon) {
@@ -247,18 +235,12 @@
247
235
  height: var(--indicator-icon-size-2);
248
236
  }
249
237
 
250
- /* reset with :not:has so we still support browsers without :has */
251
- &:where(:not(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem))) {
252
- --base-menu-item-padding-left: var(--space-3);
253
- }
254
- &:where(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem)) {
255
- --base-menu-item-padding-left: var(--space-5);
256
- }
257
238
  }
258
239
 
259
240
  &:where(.rt-r-size-3) {
260
241
  --base-menu-content-padding: var(--space-3);
261
- --base-menu-item-padding-left: var(--space-3);
242
+ --base-menu-item-padding-left-plain: var(--space-3);
243
+ --base-menu-item-padding-left-indicator: var(--space-5);
262
244
  --base-menu-item-padding-right: var(--space-3);
263
245
  --base-menu-item-padding-y: var(--space-2);
264
246
  --base-menu-item-height: var(--space-7);
@@ -267,37 +249,30 @@
267
249
  & :where(.rt-BaseMenuItem) {
268
250
  gap: var(--component-gap-4);
269
251
  font-size: var(--font-size-3);
270
- line-height: var(--line-height-2);
252
+ line-height: var(--line-height-3);
271
253
  letter-spacing: var(--letter-spacing-3);
272
254
  border-radius: var(--radius-2);
273
255
 
274
256
  /* stylelint-disable-next-line selector-max-type */
275
257
  & :where(svg) {
276
- width: var(--content-icon-size-2);
277
- height: var(--content-icon-size-2);
258
+ width: var(--content-icon-size-3);
259
+ height: var(--content-icon-size-3);
278
260
  flex-shrink: 0;
279
261
  }
280
262
  }
281
263
 
282
264
  & :where(.rt-BaseMenuLabel) {
283
- font-size: var(--font-size-2);
284
- line-height: var(--line-height-2);
285
- letter-spacing: var(--letter-spacing-2);
286
- padding-left: calc(var(--base-menu-item-padding-left));
265
+ font-size: var(--font-size-3);
266
+ line-height: var(--line-height-3);
267
+ letter-spacing: var(--letter-spacing-3);
268
+ padding-inline-start: var(--base-menu-item-padding-left);
287
269
  }
288
270
 
289
271
  & :where(.rt-BaseMenuItemIndicatorIcon, .rt-BaseMenuSubTriggerIcon) {
290
- width: var(--indicator-icon-size-2);
291
- height: var(--indicator-icon-size-2);
272
+ width: var(--indicator-icon-size-3);
273
+ height: var(--indicator-icon-size-3);
292
274
  }
293
275
 
294
- /* reset with :not:has so we still support browsers without :has */
295
- &:where(:not(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem))) {
296
- --base-menu-item-padding-left: var(--space-3);
297
- }
298
- &:where(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem)) {
299
- --base-menu-item-padding-left: var(--space-5);
300
- }
301
276
  }
302
277
  }
303
278
  }
@@ -319,7 +294,12 @@
319
294
 
320
295
  /* Ensure gray text appears muted in non-highlighted state */
321
296
  .rt-BaseMenuItem :where(.rt-Text[data-accent-color='gray'], [data-accent-color='gray']:not(.rt-Badge)) {
322
- color: var(--gray-a10);
297
+ color: var(--gray-a11);
298
+ }
299
+ /* Kbd sets its own color and loads later, so a disabled item's shortcut needs the extra class to dim */
300
+ /* stylelint-disable-next-line selector-max-specificity */
301
+ .rt-BaseMenuItem:where([data-disabled]) .rt-Kbd {
302
+ color: var(--gray-a8);
323
303
  }
324
304
  .rt-BaseMenuItem:where([data-disabled], [data-highlighted]),
325
305
  .rt-BaseMenuSubTrigger:where([data-state='open']) {
@@ -331,59 +311,14 @@
331
311
  background-color: var(--gray-a6);
332
312
  }
333
313
 
334
- /* solid and soft variants - consolidated to reduce duplication */
335
-
336
- .rt-BaseMenuContent:where(.rt-variant-solid, .rt-variant-soft) {
337
- & :where(.rt-BaseMenuSubTrigger) {
338
- transition: var(--transition-menu);
339
-
340
- /* Enhanced reduced motion support */
341
- @media (prefers-reduced-motion: reduce) {
342
- transition: none;
343
- backdrop-filter: none; /* Remove backdrop effects for motion-sensitive users */
344
- }
345
-
346
- /* Remove backdrop-filter transitions in translucent mode to prevent flickering */
347
- :where([data-panel-background='translucent']) & {
348
- transition:
349
- background var(--motion-duration-micro) var(--motion-ease-standard),
350
- color var(--motion-duration-small) var(--motion-ease-standard);
351
- }
352
- }
353
-
354
- & :where(.rt-BaseMenuItem) {
355
- /* Remove backdrop-filter transitions in translucent mode to prevent flickering */
356
- :where([data-panel-background='translucent']) & {
357
- transition:
358
- background var(--motion-duration-micro) var(--motion-ease-standard),
359
- color var(--motion-duration-small) var(--motion-ease-standard);
360
- }
361
- }
362
- }
363
-
364
314
  /* solid variant specific styles */
365
315
  .rt-BaseMenuContent:where(.rt-variant-solid) {
366
316
  & :where(.rt-BaseMenuSubTrigger[data-state='open']) {
367
- /* Base state: solid gray for solid panels */
368
317
  background-color: var(--gray-3);
318
+ }
369
319
 
370
- /* Theme-level translucent override */
371
- :where([data-panel-background='translucent']) & {
372
- background-color: var(--gray-a3);
373
- /* Remove individual backdrop-filter to prevent layering with container backdrop-filter */
374
- }
375
-
376
- /* Component-level overrides (higher specificity) */
377
- &:where([data-panel-background='solid']) {
378
- background-color: var(--gray-3);
379
- backdrop-filter: none;
380
- --backdrop-filter-components: none;
381
- }
382
-
383
- &:where([data-panel-background='translucent']) {
384
- background-color: var(--gray-a3);
385
- /* No backdrop-filter here to prevent double-blur with container */
386
- }
320
+ &:where([data-panel-background='translucent']) :where(.rt-BaseMenuSubTrigger[data-state='open']) {
321
+ background-color: var(--gray-a3);
387
322
  }
388
323
 
389
324
  & :where(.rt-BaseMenuItem[data-highlighted]) {
@@ -443,53 +378,43 @@
443
378
  /* soft variant specific styles */
444
379
  .rt-BaseMenuContent:where(.rt-variant-soft) {
445
380
  & :where(.rt-BaseMenuSubTrigger[data-state='open']) {
446
- /* Base state: solid accent for solid panels */
447
381
  background-color: var(--accent-3);
382
+ }
448
383
 
449
- /* Theme-level translucent override */
450
- :where([data-panel-background='translucent']) & {
451
- background-color: var(--accent-a3);
452
- /* Remove individual backdrop-filter to prevent layering with container backdrop-filter */
453
- }
454
-
455
- /* Component-level overrides (higher specificity) */
456
- &:where([data-panel-background='solid']) {
457
- background-color: var(--accent-3);
458
- backdrop-filter: none;
459
- --backdrop-filter-components: none;
460
- }
461
-
462
- &:where([data-panel-background='translucent']) {
463
- background-color: var(--accent-a3);
464
- /* No backdrop-filter here to prevent double-blur with container */
465
- }
384
+ &:where([data-panel-background='translucent']) :where(.rt-BaseMenuSubTrigger[data-state='open']) {
385
+ background-color: var(--accent-a3);
466
386
  }
467
387
 
468
388
  & :where(.rt-BaseMenuItem[data-highlighted]) {
469
- /* Base state: solid accent for solid panels */
470
389
  background-color: var(--accent-4);
471
390
 
472
- /* Theme-level translucent override */
473
- :where([data-panel-background='translucent']) & {
474
- background-color: var(--accent-a4);
475
- /* Remove individual backdrop-filter to prevent layering with container backdrop-filter */
391
+ /* In soft variant, improve contrast for gray text while maintaining hierarchy */
392
+ & :where(.rt-Text[data-accent-color='gray'], [data-accent-color='gray']:not(.rt-Badge)) {
393
+ color: var(--gray-11) !important;
476
394
  }
395
+ }
477
396
 
478
- /* Component-level overrides (higher specificity) */
479
- &:where([data-panel-background='solid']) {
480
- background-color: var(--accent-4);
481
- backdrop-filter: none;
482
- --backdrop-filter-components: none;
483
- }
397
+ &:where([data-panel-background='translucent']) :where(.rt-BaseMenuItem[data-highlighted]) {
398
+ background-color: var(--accent-a4);
399
+ }
400
+
401
+ /* The soft fill is faint on its own; keyboard focus also gets a ring */
402
+ & :where(.rt-BaseMenuItem[data-highlighted]:focus-visible) {
403
+ box-shadow: inset 0 0 0 1px var(--accent-a8);
404
+ }
484
405
 
485
- &:where([data-panel-background='translucent']) {
486
- background-color: var(--accent-a4);
487
- /* No backdrop-filter here to prevent double-blur with container */
406
+ &:where(.rt-high-contrast) {
407
+ & :where(.rt-BaseMenuItem[data-highlighted]) {
408
+ background-color: var(--accent-5);
409
+ color: var(--accent-12);
410
+
411
+ & :where(.rt-BaseMenuSubTriggerIcon) {
412
+ color: var(--accent-12);
413
+ }
488
414
  }
489
415
 
490
- /* In soft variant, improve contrast for gray text while maintaining hierarchy */
491
- & :where(.rt-Text[data-accent-color='gray'], [data-accent-color='gray']:not(.rt-Badge)) {
492
- color: var(--gray-11) !important;
416
+ &:where([data-panel-background='translucent']) :where(.rt-BaseMenuItem[data-highlighted]) {
417
+ background-color: var(--accent-a5);
493
418
  }
494
419
  }
495
420
  }
@@ -0,0 +1,144 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+ import classNames from 'classnames';
5
+
6
+ import { Kbd } from '../kbd.js';
7
+ import { useBreakpoint } from '../../hooks/use-breakpoint.js';
8
+
9
+ import type { Breakpoint, Responsive } from '../../props/prop-def.js';
10
+
11
+ const BREAKPOINTS_DESCENDING: Breakpoint[] = ['xl', 'lg', 'md', 'sm', 'xs', 'initial'];
12
+
13
+ /**
14
+ * Resolves a responsive value for the given breakpoint, falling back through
15
+ * the smaller breakpoints when the current one is not set.
16
+ */
17
+ function resolveResponsiveValue<T>(
18
+ value: T | Partial<Record<Breakpoint, T>> | undefined,
19
+ currentBreakpoint: Breakpoint,
20
+ defaultValue: T,
21
+ ): T {
22
+ if (value === undefined || value === null) return defaultValue;
23
+ if (typeof value !== 'object') return value;
24
+
25
+ const map = value as Partial<Record<Breakpoint, T>>;
26
+ for (let i = BREAKPOINTS_DESCENDING.indexOf(currentBreakpoint); i < BREAKPOINTS_DESCENDING.length; i++) {
27
+ const resolved = map[BREAKPOINTS_DESCENDING[i]];
28
+ if (resolved !== undefined) return resolved;
29
+ }
30
+ return defaultValue;
31
+ }
32
+
33
+ /**
34
+ * Resolves a possibly responsive value against the current viewport. Only a
35
+ * responsive object subscribes to breakpoint changes; a plain value costs
36
+ * nothing.
37
+ */
38
+ function useResolvedResponsiveValue<T>(value: Responsive<T> | undefined, defaultValue: T): T {
39
+ const isResponsive = typeof value === 'object' && value !== null;
40
+ const { breakpoint } = useBreakpoint(isResponsive);
41
+ return resolveResponsiveValue(value as T | Partial<Record<Breakpoint, T>> | undefined, breakpoint, defaultValue);
42
+ }
43
+
44
+ type MenuMaterial = 'solid' | 'translucent';
45
+
46
+ /**
47
+ * The menu surface material. The component props win, then the nearest
48
+ * Theme's `material`. Theme keeps `panelBackground` in sync with `material` at
49
+ * the root, but a nested `<Theme material="solid">` only updates `material`,
50
+ * so reading the deprecated `panelBackground` from the theme gave the wrong
51
+ * surface there.
52
+ */
53
+ function resolveMenuMaterial(
54
+ material: MenuMaterial | undefined,
55
+ panelBackground: MenuMaterial | undefined,
56
+ theme: { material: MenuMaterial; panelBackground: MenuMaterial },
57
+ ): MenuMaterial {
58
+ return material ?? panelBackground ?? theme.material ?? theme.panelBackground;
59
+ }
60
+
61
+ /** Content padding per menu size, in px at 100% scaling (see base-menu.css). */
62
+ const CONTENT_PADDING: Record<string, number> = { '1': 8, '2': 12, '3': 12 };
63
+
64
+ /**
65
+ * Offset that lines the first item of a menu up with its anchor: the pointer
66
+ * for a context menu, or the sub trigger for a submenu. It cancels the content
67
+ * padding, which scales with the theme.
68
+ */
69
+ function getMenuAlignOffset(size: string, scaling: string | undefined): number {
70
+ const scale = scaling ? parseFloat(scaling) / 100 : 1;
71
+ const padding = CONTENT_PADDING[size] ?? CONTENT_PADDING['2'];
72
+ return -Math.round(padding * (Number.isFinite(scale) ? scale : 1));
73
+ }
74
+
75
+ const KEY_SYMBOLS: Record<string, string> = {
76
+ '⌘': 'Meta',
77
+ cmd: 'Meta',
78
+ command: 'Meta',
79
+ meta: 'Meta',
80
+ '⌥': 'Alt',
81
+ option: 'Alt',
82
+ opt: 'Alt',
83
+ alt: 'Alt',
84
+ '⇧': 'Shift',
85
+ shift: 'Shift',
86
+ '⌃': 'Control',
87
+ ctrl: 'Control',
88
+ control: 'Control',
89
+ '⌫': 'Backspace',
90
+ '⌦': 'Delete',
91
+ '⏎': 'Enter',
92
+ '↵': 'Enter',
93
+ '⎋': 'Escape',
94
+ esc: 'Escape',
95
+ '⇥': 'Tab',
96
+ '↑': 'ArrowUp',
97
+ '↓': 'ArrowDown',
98
+ '←': 'ArrowLeft',
99
+ '→': 'ArrowRight',
100
+ };
101
+
102
+ const ariaKeyShortcutsCache = new Map<string, string>();
103
+
104
+ /**
105
+ * Converts a display shortcut such as "⌘ ⇧ P" or "Ctrl+S" into the
106
+ * `aria-keyshortcuts` format ("Meta+Shift+P", "Control+S").
107
+ */
108
+ function toAriaKeyShortcuts(shortcut: string): string | undefined {
109
+ const cached = ariaKeyShortcutsCache.get(shortcut);
110
+ if (cached !== undefined) return cached || undefined;
111
+
112
+ // Modifier symbols are tokens of their own ("⌘⇧P"); otherwise split on "+" and spaces.
113
+ const tokens = shortcut.match(/[⌘⌥⇧⌃]|[^\s+⌘⌥⇧⌃]+/gu) ?? [];
114
+ const keys = tokens.map((token) => {
115
+ const mapped = KEY_SYMBOLS[token] ?? KEY_SYMBOLS[token.toLowerCase()];
116
+ return mapped ?? (token.length === 1 ? token.toUpperCase() : token);
117
+ });
118
+ const result = keys.join('+');
119
+ ariaKeyShortcutsCache.set(shortcut, result);
120
+ return result || undefined;
121
+ }
122
+
123
+ /**
124
+ * The keyboard shortcut hint at the end of a menu item. It is hidden from
125
+ * assistive technology because the item exposes it through
126
+ * `aria-keyshortcuts` instead of reading it as part of the item name.
127
+ */
128
+ function MenuShortcut({ shortcut, className }: { shortcut: string; className?: string }) {
129
+ return (
130
+ <div aria-hidden className={classNames('rt-BaseMenuShortcut', className)}>
131
+ <Kbd size="1">{shortcut}</Kbd>
132
+ </div>
133
+ );
134
+ }
135
+
136
+ export {
137
+ resolveResponsiveValue,
138
+ useResolvedResponsiveValue,
139
+ resolveMenuMaterial,
140
+ getMenuAlignOffset,
141
+ toAriaKeyShortcuts,
142
+ MenuShortcut,
143
+ };
144
+ export type { MenuMaterial };