@kushagradhawan/kookie-ui 0.3.21 → 0.3.23

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 (548) hide show
  1. package/components.css +264 -329
  2. package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
  3. package/dist/cjs/components/_internal/base-button.js +1 -1
  4. package/dist/cjs/components/_internal/base-button.js.map +4 -4
  5. package/dist/cjs/components/_internal/dropdown-menu-drill-down.js +1 -1
  6. package/dist/cjs/components/_internal/dropdown-menu-drill-down.js.map +3 -3
  7. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  8. package/dist/cjs/components/_internal/shell-bottom.js.map +4 -4
  9. package/dist/cjs/components/_internal/shell-handles.d.ts.map +1 -1
  10. package/dist/cjs/components/_internal/shell-handles.js +1 -1
  11. package/dist/cjs/components/_internal/shell-handles.js.map +3 -3
  12. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  13. package/dist/cjs/components/_internal/shell-inspector.js.map +4 -4
  14. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  15. package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
  16. package/dist/cjs/components/accordion.d.ts.map +1 -1
  17. package/dist/cjs/components/accordion.js +1 -1
  18. package/dist/cjs/components/accordion.js.map +4 -4
  19. package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
  20. package/dist/cjs/components/alert-dialog.js +1 -1
  21. package/dist/cjs/components/alert-dialog.js.map +4 -4
  22. package/dist/cjs/components/avatar.js +1 -1
  23. package/dist/cjs/components/avatar.js.map +4 -4
  24. package/dist/cjs/components/badge.d.ts.map +1 -1
  25. package/dist/cjs/components/badge.js +1 -1
  26. package/dist/cjs/components/badge.js.map +4 -4
  27. package/dist/cjs/components/blockquote.js +1 -1
  28. package/dist/cjs/components/blockquote.js.map +4 -4
  29. package/dist/cjs/components/box.js +1 -1
  30. package/dist/cjs/components/box.js.map +4 -4
  31. package/dist/cjs/components/button.js +1 -1
  32. package/dist/cjs/components/button.js.map +4 -4
  33. package/dist/cjs/components/callout.js +1 -1
  34. package/dist/cjs/components/callout.js.map +4 -4
  35. package/dist/cjs/components/card.js +1 -1
  36. package/dist/cjs/components/card.js.map +4 -4
  37. package/dist/cjs/components/chatbar.js +2 -2
  38. package/dist/cjs/components/chatbar.js.map +4 -4
  39. package/dist/cjs/components/checkbox-cards.js +1 -1
  40. package/dist/cjs/components/checkbox-cards.js.map +4 -4
  41. package/dist/cjs/components/checkbox-group.js +1 -1
  42. package/dist/cjs/components/checkbox-group.js.map +4 -4
  43. package/dist/cjs/components/checkbox.js +1 -1
  44. package/dist/cjs/components/checkbox.js.map +4 -4
  45. package/dist/cjs/components/code.js +1 -1
  46. package/dist/cjs/components/code.js.map +4 -4
  47. package/dist/cjs/components/combobox.js +1 -1
  48. package/dist/cjs/components/combobox.js.map +4 -4
  49. package/dist/cjs/components/container.js +1 -1
  50. package/dist/cjs/components/container.js.map +4 -4
  51. package/dist/cjs/components/context-menu.d.ts.map +1 -1
  52. package/dist/cjs/components/context-menu.js +1 -1
  53. package/dist/cjs/components/context-menu.js.map +4 -4
  54. package/dist/cjs/components/data-list.js +1 -1
  55. package/dist/cjs/components/data-list.js.map +4 -4
  56. package/dist/cjs/components/dialog.d.ts.map +1 -1
  57. package/dist/cjs/components/dialog.js +1 -1
  58. package/dist/cjs/components/dialog.js.map +4 -4
  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/em.js +1 -1
  63. package/dist/cjs/components/em.js.map +4 -4
  64. package/dist/cjs/components/flex.js +1 -1
  65. package/dist/cjs/components/flex.js.map +4 -4
  66. package/dist/cjs/components/grid.js +1 -1
  67. package/dist/cjs/components/grid.js.map +4 -4
  68. package/dist/cjs/components/heading.js +1 -1
  69. package/dist/cjs/components/heading.js.map +4 -4
  70. package/dist/cjs/components/hover-card.js +1 -1
  71. package/dist/cjs/components/hover-card.js.map +4 -4
  72. package/dist/cjs/components/icon-button.js +2 -2
  73. package/dist/cjs/components/icon-button.js.map +4 -4
  74. package/dist/cjs/components/image.js +1 -1
  75. package/dist/cjs/components/image.js.map +4 -4
  76. package/dist/cjs/components/index.js +5 -5
  77. package/dist/cjs/components/index.js.map +4 -4
  78. package/dist/cjs/components/inset.js +1 -1
  79. package/dist/cjs/components/inset.js.map +4 -4
  80. package/dist/cjs/components/kbd.js +1 -1
  81. package/dist/cjs/components/kbd.js.map +4 -4
  82. package/dist/cjs/components/link.js +1 -1
  83. package/dist/cjs/components/link.js.map +4 -4
  84. package/dist/cjs/components/navbar.js +1 -1
  85. package/dist/cjs/components/navbar.js.map +4 -4
  86. package/dist/cjs/components/popover.js +1 -1
  87. package/dist/cjs/components/popover.js.map +4 -4
  88. package/dist/cjs/components/progress.js +1 -1
  89. package/dist/cjs/components/progress.js.map +4 -4
  90. package/dist/cjs/components/quote.js +1 -1
  91. package/dist/cjs/components/quote.js.map +4 -4
  92. package/dist/cjs/components/radio-cards.js +1 -1
  93. package/dist/cjs/components/radio-cards.js.map +4 -4
  94. package/dist/cjs/components/radio-group.js +1 -1
  95. package/dist/cjs/components/radio-group.js.map +4 -4
  96. package/dist/cjs/components/radio.js +1 -1
  97. package/dist/cjs/components/radio.js.map +4 -4
  98. package/dist/cjs/components/schemas/base-button.schema.d.ts +2 -2
  99. package/dist/cjs/components/schemas/button.schema.d.ts +2 -2
  100. package/dist/cjs/components/schemas/icon-button.schema.d.ts +4 -4
  101. package/dist/cjs/components/schemas/shell.schema.d.ts +2 -2
  102. package/dist/cjs/components/schemas/toggle-button.schema.d.ts +6 -6
  103. package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts +8 -8
  104. package/dist/cjs/components/scroll-area.js +1 -1
  105. package/dist/cjs/components/scroll-area.js.map +4 -4
  106. package/dist/cjs/components/section.js +1 -1
  107. package/dist/cjs/components/section.js.map +4 -4
  108. package/dist/cjs/components/segmented-control.js +1 -1
  109. package/dist/cjs/components/segmented-control.js.map +4 -4
  110. package/dist/cjs/components/select.js +1 -1
  111. package/dist/cjs/components/select.js.map +4 -4
  112. package/dist/cjs/components/separator.js +1 -1
  113. package/dist/cjs/components/separator.js.map +4 -4
  114. package/dist/cjs/components/sheet.d.ts.map +1 -1
  115. package/dist/cjs/components/sheet.js +1 -1
  116. package/dist/cjs/components/sheet.js.map +4 -4
  117. package/dist/cjs/components/shell.d.ts.map +1 -1
  118. package/dist/cjs/components/shell.js +1 -1
  119. package/dist/cjs/components/shell.js.map +4 -4
  120. package/dist/cjs/components/sidebar.js +1 -1
  121. package/dist/cjs/components/sidebar.js.map +4 -4
  122. package/dist/cjs/components/skeleton.js +1 -1
  123. package/dist/cjs/components/skeleton.js.map +4 -4
  124. package/dist/cjs/components/slider.js +1 -1
  125. package/dist/cjs/components/slider.js.map +4 -4
  126. package/dist/cjs/components/spinner.js +1 -1
  127. package/dist/cjs/components/spinner.js.map +4 -4
  128. package/dist/cjs/components/strong.js +1 -1
  129. package/dist/cjs/components/strong.js.map +4 -4
  130. package/dist/cjs/components/switch.js +1 -1
  131. package/dist/cjs/components/switch.js.map +4 -4
  132. package/dist/cjs/components/tab-nav.js +1 -1
  133. package/dist/cjs/components/tab-nav.js.map +4 -4
  134. package/dist/cjs/components/table.js +1 -1
  135. package/dist/cjs/components/table.js.map +4 -4
  136. package/dist/cjs/components/tabs.js +1 -1
  137. package/dist/cjs/components/tabs.js.map +4 -4
  138. package/dist/cjs/components/text-area.js +1 -1
  139. package/dist/cjs/components/text-area.js.map +4 -4
  140. package/dist/cjs/components/text-field.js +2 -2
  141. package/dist/cjs/components/text-field.js.map +4 -4
  142. package/dist/cjs/components/text.js +1 -1
  143. package/dist/cjs/components/text.js.map +4 -4
  144. package/dist/cjs/components/theme-panel.js +3 -3
  145. package/dist/cjs/components/theme-panel.js.map +4 -4
  146. package/dist/cjs/components/theme.d.ts.map +1 -1
  147. package/dist/cjs/components/theme.js +1 -1
  148. package/dist/cjs/components/theme.js.map +4 -4
  149. package/dist/cjs/components/toggle-button.js +2 -2
  150. package/dist/cjs/components/toggle-button.js.map +4 -4
  151. package/dist/cjs/components/toggle-icon-button.js +3 -3
  152. package/dist/cjs/components/toggle-icon-button.js.map +4 -4
  153. package/dist/cjs/components/toolbar.js +1 -1
  154. package/dist/cjs/components/toolbar.js.map +4 -4
  155. package/dist/cjs/components/tooltip.js +1 -1
  156. package/dist/cjs/components/tooltip.js.map +4 -4
  157. package/dist/cjs/components/user-card.js +1 -1
  158. package/dist/cjs/components/user-card.js.map +4 -4
  159. package/dist/cjs/helpers/compile-prop-defs.d.ts +49 -0
  160. package/dist/cjs/helpers/compile-prop-defs.d.ts.map +1 -0
  161. package/dist/cjs/helpers/compile-prop-defs.js +2 -0
  162. package/dist/cjs/helpers/compile-prop-defs.js.map +7 -0
  163. package/dist/cjs/helpers/extract-props.d.ts.map +1 -1
  164. package/dist/cjs/helpers/extract-props.js +1 -1
  165. package/dist/cjs/helpers/extract-props.js.map +4 -4
  166. package/dist/cjs/helpers/get-margin-styles.d.ts.map +1 -1
  167. package/dist/cjs/helpers/get-margin-styles.js +1 -1
  168. package/dist/cjs/helpers/get-margin-styles.js.map +3 -3
  169. package/dist/cjs/helpers/get-responsive-styles.d.ts +5 -2
  170. package/dist/cjs/helpers/get-responsive-styles.d.ts.map +1 -1
  171. package/dist/cjs/helpers/get-responsive-styles.js +1 -1
  172. package/dist/cjs/helpers/get-responsive-styles.js.map +3 -3
  173. package/dist/cjs/helpers/index.js +2 -2
  174. package/dist/cjs/helpers/index.js.map +4 -4
  175. package/dist/cjs/helpers/use-deprecation-warning.d.ts +10 -0
  176. package/dist/cjs/helpers/use-deprecation-warning.d.ts.map +1 -0
  177. package/dist/cjs/helpers/use-deprecation-warning.js +2 -0
  178. package/dist/cjs/helpers/use-deprecation-warning.js.map +7 -0
  179. package/dist/cjs/hooks/index.js +2 -2
  180. package/dist/cjs/hooks/index.js.map +3 -3
  181. package/dist/cjs/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -1
  182. package/dist/cjs/hooks/use-body-pointer-events-cleanup.js +1 -1
  183. package/dist/cjs/hooks/use-body-pointer-events-cleanup.js.map +3 -3
  184. package/dist/cjs/hooks/use-breakpoint.d.ts +7 -3
  185. package/dist/cjs/hooks/use-breakpoint.d.ts.map +1 -1
  186. package/dist/cjs/hooks/use-breakpoint.js +1 -1
  187. package/dist/cjs/hooks/use-breakpoint.js.map +3 -3
  188. package/dist/cjs/hooks/use-prop-synced-state.d.ts +14 -0
  189. package/dist/cjs/hooks/use-prop-synced-state.d.ts.map +1 -0
  190. package/dist/cjs/hooks/use-prop-synced-state.js +2 -0
  191. package/dist/cjs/hooks/use-prop-synced-state.js.map +7 -0
  192. package/dist/cjs/index.js +5 -5
  193. package/dist/cjs/index.js.map +4 -4
  194. package/dist/esm/{chunk-RQ2ZPMHJ.js → chunk-22HGLMPQ.js} +2 -2
  195. package/dist/esm/{chunk-WYA4IRU6.js → chunk-25WZA7ZU.js} +2 -2
  196. package/dist/esm/chunk-2UPAYDKR.js +2 -0
  197. package/dist/esm/chunk-2UPAYDKR.js.map +7 -0
  198. package/dist/esm/{chunk-XHQGMOXV.js → chunk-36ZQVP7F.js} +2 -2
  199. package/dist/esm/{chunk-K3R4AH3E.js → chunk-3MWWP4MW.js} +2 -2
  200. package/dist/esm/{chunk-HQ35PM4O.js → chunk-43A5GUSI.js} +2 -2
  201. package/dist/esm/{chunk-Z5DQ6FSA.js → chunk-4AQTUBVP.js} +2 -2
  202. package/dist/esm/{chunk-25U7DENY.js → chunk-4BBOHEF4.js} +2 -2
  203. package/dist/esm/chunk-4CKDU6FY.js +2 -0
  204. package/dist/esm/chunk-4CKDU6FY.js.map +7 -0
  205. package/dist/esm/{chunk-ZSEFZM5H.js → chunk-4IY2PR6N.js} +2 -2
  206. package/dist/esm/{chunk-QLIELX4I.js → chunk-4ME6O27S.js} +2 -2
  207. package/dist/esm/chunk-4XJY6FIK.js +2 -0
  208. package/dist/esm/chunk-4XJY6FIK.js.map +7 -0
  209. package/dist/esm/{chunk-JQOFJNCV.js → chunk-4YFJWXL2.js} +2 -2
  210. package/dist/esm/{chunk-DNI4QRXQ.js → chunk-5IBGFL6O.js} +2 -2
  211. package/dist/esm/chunk-5TXQLK4G.js +2 -0
  212. package/dist/esm/chunk-5TXQLK4G.js.map +7 -0
  213. package/dist/esm/{chunk-IPJUHVM6.js → chunk-666GX7O5.js} +2 -2
  214. package/dist/esm/chunk-6FLLFCBU.js +2 -0
  215. package/dist/esm/chunk-6FLLFCBU.js.map +7 -0
  216. package/dist/esm/{chunk-DJBPM5QK.js → chunk-7FC7HF76.js} +2 -2
  217. package/dist/esm/{chunk-SVLY6B5F.js → chunk-7QDTSBJF.js} +2 -2
  218. package/dist/esm/chunk-AX5S56DS.js +2 -0
  219. package/dist/esm/chunk-AX5S56DS.js.map +7 -0
  220. package/dist/esm/{chunk-DK5MHD6I.js → chunk-B24BDVG2.js} +2 -2
  221. package/dist/esm/{chunk-WZCZHCVE.js → chunk-BJYUPIXO.js} +2 -2
  222. package/dist/esm/{chunk-BJTJUIYJ.js → chunk-CRWYCLTE.js} +2 -2
  223. package/dist/esm/{chunk-OHJVFZMH.js → chunk-CSKZZOI2.js} +2 -2
  224. package/dist/esm/chunk-D5N627TH.js +2 -0
  225. package/dist/esm/chunk-D5N627TH.js.map +7 -0
  226. package/dist/esm/{chunk-ADYTQCZX.js → chunk-D6B7IMZU.js} +2 -2
  227. package/dist/esm/chunk-DL2O3GKG.js +2 -0
  228. package/dist/esm/chunk-DL2O3GKG.js.map +7 -0
  229. package/dist/esm/{chunk-USGTBZ43.js → chunk-E67CIG6A.js} +2 -2
  230. package/dist/esm/{chunk-42HFGCHX.js → chunk-ETMLMDW4.js} +2 -2
  231. package/dist/esm/{chunk-7CBAHIVG.js → chunk-F2HYQ3ZR.js} +2 -2
  232. package/dist/esm/{chunk-YUZPSUJE.js → chunk-F7IYL2VW.js} +2 -2
  233. package/dist/esm/{chunk-FVCWNSRU.js → chunk-FHOCUZDR.js} +2 -2
  234. package/dist/esm/{chunk-7MURQ6CR.js → chunk-FLFAXVFB.js} +2 -2
  235. package/dist/esm/{chunk-APRBRAOT.js → chunk-FOEZLQTW.js} +2 -2
  236. package/dist/esm/{chunk-WNSPLWRV.js → chunk-GJSGKE7B.js} +2 -2
  237. package/dist/esm/{chunk-OGOOZLUD.js → chunk-GLERJXVS.js} +2 -2
  238. package/dist/esm/{chunk-6VGPTAHM.js → chunk-GWXVETMF.js} +2 -2
  239. package/dist/esm/{chunk-ES7MK2MM.js → chunk-GYBLXQ4R.js} +2 -2
  240. package/dist/esm/{chunk-4OBMRJHC.js → chunk-H7ST535H.js} +2 -2
  241. package/dist/esm/{chunk-QLZ5XAW6.js → chunk-HF5WY5YE.js} +2 -2
  242. package/dist/esm/chunk-ICIGZ3N7.js +2 -0
  243. package/dist/esm/chunk-ICIGZ3N7.js.map +7 -0
  244. package/dist/esm/{chunk-RDP4UQ42.js → chunk-IEWCQU2S.js} +2 -2
  245. package/dist/esm/{chunk-XLOHPURR.js → chunk-IHK3H2OM.js} +2 -2
  246. package/dist/esm/{chunk-3F6I7YOR.js → chunk-JDGJSNWT.js} +2 -2
  247. package/dist/esm/chunk-JQQIPEGY.js +2 -0
  248. package/dist/esm/chunk-JQQIPEGY.js.map +7 -0
  249. package/dist/esm/chunk-JR2YOGII.js +2 -0
  250. package/dist/esm/chunk-JR2YOGII.js.map +7 -0
  251. package/dist/esm/chunk-JUY7CBSL.js +2 -0
  252. package/dist/esm/chunk-JUY7CBSL.js.map +7 -0
  253. package/dist/esm/{chunk-VF5TRT3H.js → chunk-KKM6T5P7.js} +2 -2
  254. package/dist/esm/{chunk-ZHYOJNWV.js → chunk-LKAK5GXF.js} +2 -2
  255. package/dist/esm/chunk-LOGJJF4I.js +2 -0
  256. package/dist/esm/chunk-LOGJJF4I.js.map +7 -0
  257. package/dist/esm/{chunk-JCYI4NTV.js → chunk-MBCBP73P.js} +2 -2
  258. package/dist/esm/{chunk-UYNYUR7O.js → chunk-MBE2YSBU.js} +2 -2
  259. package/dist/esm/chunk-MHANZINI.js +2 -0
  260. package/dist/esm/chunk-MHANZINI.js.map +7 -0
  261. package/dist/esm/chunk-MRECKC4D.js +2 -0
  262. package/dist/esm/chunk-MRECKC4D.js.map +7 -0
  263. package/dist/esm/{chunk-H2G446JG.js → chunk-NMKPFUNP.js} +2 -2
  264. package/dist/esm/{chunk-4N5JU7XQ.js → chunk-O3CDWEZA.js} +2 -2
  265. package/dist/esm/{chunk-TEULZKBM.js → chunk-OGXZHAQL.js} +2 -2
  266. package/dist/esm/{chunk-2AEELIG6.js → chunk-OWAUCLRT.js} +2 -2
  267. package/dist/esm/{chunk-7CXVHFMQ.js → chunk-P7HYVJSU.js} +2 -2
  268. package/dist/esm/{chunk-4532RT2B.js → chunk-P7IAHW4V.js} +2 -2
  269. package/dist/esm/{chunk-M3ZYJANH.js → chunk-PQZXQ4ST.js} +2 -2
  270. package/dist/esm/{chunk-SGU4HUHF.js → chunk-PTLFMWCN.js} +2 -2
  271. package/dist/esm/chunk-S2HA3W3V.js +2 -0
  272. package/dist/esm/chunk-S2HA3W3V.js.map +7 -0
  273. package/dist/esm/{chunk-E6IWYD3U.js → chunk-S5C5YRBS.js} +2 -2
  274. package/dist/esm/{chunk-A24PYRVV.js → chunk-SO67YEVQ.js} +2 -2
  275. package/dist/esm/chunk-TLWTUKKL.js +2 -0
  276. package/dist/esm/chunk-TLWTUKKL.js.map +7 -0
  277. package/dist/esm/{chunk-HACQF6F4.js → chunk-TOOSHJOA.js} +2 -2
  278. package/dist/esm/{chunk-QOWA5LK5.js → chunk-U2X2CAW4.js} +2 -2
  279. package/dist/esm/{chunk-U7AASKZI.js → chunk-UVCH7QKO.js} +2 -2
  280. package/dist/esm/{chunk-GWYFT3EI.js → chunk-VLO7NXSP.js} +2 -2
  281. package/dist/esm/{chunk-DXI5P5O4.js → chunk-VX6ARMWP.js} +2 -2
  282. package/dist/esm/chunk-WAURCNAS.js +2 -0
  283. package/dist/esm/chunk-WAURCNAS.js.map +7 -0
  284. package/dist/esm/{chunk-EJWAAFCI.js → chunk-WO43WW3A.js} +2 -2
  285. package/dist/esm/{chunk-GLC4QJBF.js → chunk-WTYNFBFV.js} +2 -2
  286. package/dist/esm/{chunk-6FAICIYS.js → chunk-XMRIRFM7.js} +2 -2
  287. package/dist/esm/chunk-YV2KYHGR.js +2 -0
  288. package/dist/esm/chunk-YV2KYHGR.js.map +7 -0
  289. package/dist/esm/{chunk-UIEUZLZZ.js → chunk-ZY6SQWHT.js} +2 -2
  290. package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
  291. package/dist/esm/components/_internal/base-button.js +1 -1
  292. package/dist/esm/components/_internal/dropdown-menu-drill-down.js +1 -1
  293. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  294. package/dist/esm/components/_internal/shell-handles.d.ts.map +1 -1
  295. package/dist/esm/components/_internal/shell-handles.js +1 -1
  296. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  297. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  298. package/dist/esm/components/accordion.d.ts.map +1 -1
  299. package/dist/esm/components/accordion.js +1 -1
  300. package/dist/esm/components/alert-dialog.d.ts.map +1 -1
  301. package/dist/esm/components/alert-dialog.js +1 -1
  302. package/dist/esm/components/avatar.js +1 -1
  303. package/dist/esm/components/badge.d.ts.map +1 -1
  304. package/dist/esm/components/badge.js +1 -1
  305. package/dist/esm/components/blockquote.js +1 -1
  306. package/dist/esm/components/box.js +1 -1
  307. package/dist/esm/components/button.js +1 -1
  308. package/dist/esm/components/callout.js +1 -1
  309. package/dist/esm/components/card.js +1 -1
  310. package/dist/esm/components/chatbar.js +1 -1
  311. package/dist/esm/components/checkbox-cards.js +1 -1
  312. package/dist/esm/components/checkbox-group.js +1 -1
  313. package/dist/esm/components/checkbox.js +1 -1
  314. package/dist/esm/components/code.js +1 -1
  315. package/dist/esm/components/combobox.js +1 -1
  316. package/dist/esm/components/container.js +1 -1
  317. package/dist/esm/components/context-menu.d.ts.map +1 -1
  318. package/dist/esm/components/context-menu.js +1 -1
  319. package/dist/esm/components/data-list.js +1 -1
  320. package/dist/esm/components/dialog.d.ts.map +1 -1
  321. package/dist/esm/components/dialog.js +1 -1
  322. package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
  323. package/dist/esm/components/dropdown-menu.js +1 -1
  324. package/dist/esm/components/em.js +1 -1
  325. package/dist/esm/components/flex.js +1 -1
  326. package/dist/esm/components/grid.js +1 -1
  327. package/dist/esm/components/heading.js +1 -1
  328. package/dist/esm/components/hover-card.js +1 -1
  329. package/dist/esm/components/icon-button.js +1 -1
  330. package/dist/esm/components/image.js +1 -1
  331. package/dist/esm/components/index.js +1 -1
  332. package/dist/esm/components/inset.js +1 -1
  333. package/dist/esm/components/kbd.js +1 -1
  334. package/dist/esm/components/link.js +1 -1
  335. package/dist/esm/components/navbar.js +1 -1
  336. package/dist/esm/components/popover.js +1 -1
  337. package/dist/esm/components/progress.js +1 -1
  338. package/dist/esm/components/quote.js +1 -1
  339. package/dist/esm/components/radio-cards.js +1 -1
  340. package/dist/esm/components/radio-group.js +1 -1
  341. package/dist/esm/components/radio.js +1 -1
  342. package/dist/esm/components/schemas/base-button.schema.d.ts +2 -2
  343. package/dist/esm/components/schemas/button.schema.d.ts +2 -2
  344. package/dist/esm/components/schemas/icon-button.schema.d.ts +4 -4
  345. package/dist/esm/components/schemas/shell.schema.d.ts +2 -2
  346. package/dist/esm/components/schemas/toggle-button.schema.d.ts +6 -6
  347. package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts +8 -8
  348. package/dist/esm/components/scroll-area.js +1 -1
  349. package/dist/esm/components/section.js +1 -1
  350. package/dist/esm/components/segmented-control.js +1 -1
  351. package/dist/esm/components/select.js +1 -1
  352. package/dist/esm/components/separator.js +1 -1
  353. package/dist/esm/components/sheet.d.ts.map +1 -1
  354. package/dist/esm/components/sheet.js +1 -1
  355. package/dist/esm/components/shell.d.ts.map +1 -1
  356. package/dist/esm/components/shell.js +1 -1
  357. package/dist/esm/components/sidebar.js +1 -1
  358. package/dist/esm/components/skeleton.js +1 -1
  359. package/dist/esm/components/slider.js +1 -1
  360. package/dist/esm/components/spinner.js +1 -1
  361. package/dist/esm/components/strong.js +1 -1
  362. package/dist/esm/components/switch.js +1 -1
  363. package/dist/esm/components/tab-nav.js +1 -1
  364. package/dist/esm/components/table.js +1 -1
  365. package/dist/esm/components/tabs.js +1 -1
  366. package/dist/esm/components/text-area.js +1 -1
  367. package/dist/esm/components/text-field.js +1 -1
  368. package/dist/esm/components/text.js +1 -1
  369. package/dist/esm/components/theme-panel.js +1 -1
  370. package/dist/esm/components/theme.d.ts.map +1 -1
  371. package/dist/esm/components/theme.js +1 -1
  372. package/dist/esm/components/toggle-button.js +1 -1
  373. package/dist/esm/components/toggle-icon-button.js +1 -1
  374. package/dist/esm/components/toolbar.js +1 -1
  375. package/dist/esm/components/tooltip.js +1 -1
  376. package/dist/esm/components/user-card.js +1 -1
  377. package/dist/esm/helpers/compile-prop-defs.d.ts +49 -0
  378. package/dist/esm/helpers/compile-prop-defs.d.ts.map +1 -0
  379. package/dist/esm/helpers/compile-prop-defs.js +2 -0
  380. package/dist/esm/helpers/compile-prop-defs.js.map +7 -0
  381. package/dist/esm/helpers/extract-props.d.ts.map +1 -1
  382. package/dist/esm/helpers/extract-props.js +1 -1
  383. package/dist/esm/helpers/get-margin-styles.d.ts.map +1 -1
  384. package/dist/esm/helpers/get-margin-styles.js +1 -1
  385. package/dist/esm/helpers/get-responsive-styles.d.ts +5 -2
  386. package/dist/esm/helpers/get-responsive-styles.d.ts.map +1 -1
  387. package/dist/esm/helpers/get-responsive-styles.js +1 -1
  388. package/dist/esm/helpers/index.js +1 -1
  389. package/dist/esm/helpers/use-deprecation-warning.d.ts +10 -0
  390. package/dist/esm/helpers/use-deprecation-warning.d.ts.map +1 -0
  391. package/dist/esm/helpers/use-deprecation-warning.js +2 -0
  392. package/dist/esm/helpers/use-deprecation-warning.js.map +7 -0
  393. package/dist/esm/hooks/index.js +1 -1
  394. package/dist/esm/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -1
  395. package/dist/esm/hooks/use-body-pointer-events-cleanup.js +1 -1
  396. package/dist/esm/hooks/use-breakpoint.d.ts +7 -3
  397. package/dist/esm/hooks/use-breakpoint.d.ts.map +1 -1
  398. package/dist/esm/hooks/use-breakpoint.js +1 -1
  399. package/dist/esm/hooks/use-prop-synced-state.d.ts +14 -0
  400. package/dist/esm/hooks/use-prop-synced-state.d.ts.map +1 -0
  401. package/dist/esm/hooks/use-prop-synced-state.js +2 -0
  402. package/dist/esm/hooks/use-prop-synced-state.js.map +7 -0
  403. package/dist/esm/index.js +1 -1
  404. package/package.json +2 -1
  405. package/schemas/base-button.json +0 -1
  406. package/schemas/button.json +0 -1
  407. package/schemas/icon-button.json +0 -1
  408. package/schemas/index.json +0 -6
  409. package/schemas/toggle-button.json +0 -1
  410. package/schemas/toggle-icon-button.json +0 -1
  411. package/src/components/_internal/base-button.css +2 -2
  412. package/src/components/_internal/base-button.tsx +3 -58
  413. package/src/components/_internal/base-card.css +19 -4
  414. package/src/components/_internal/base-checkbox.css +2 -2
  415. package/src/components/_internal/base-dialog.css +7 -13
  416. package/src/components/_internal/base-menu.css +7 -0
  417. package/src/components/_internal/base-radio.css +2 -2
  418. package/src/components/_internal/base-sidebar.css +7 -0
  419. package/src/components/_internal/base-tab-list.css +2 -2
  420. package/src/components/_internal/shell-handles.tsx +27 -0
  421. package/src/components/accordion.css +6 -6
  422. package/src/components/accordion.tsx +2 -8
  423. package/src/components/alert-dialog.tsx +22 -20
  424. package/src/components/avatar.css +2 -2
  425. package/src/components/badge.css +2 -2
  426. package/src/components/badge.tsx +2 -8
  427. package/src/components/callout.css +2 -2
  428. package/src/components/chatbar.css +1 -1
  429. package/src/components/context-menu.tsx +2 -8
  430. package/src/components/dialog.tsx +46 -72
  431. package/src/components/dropdown-menu.tsx +2 -8
  432. package/src/components/popover.css +7 -0
  433. package/src/components/progress.css +21 -8
  434. package/src/components/segmented-control.css +2 -2
  435. package/src/components/select.css +9 -2
  436. package/src/components/sheet.tsx +31 -28
  437. package/src/components/shell.css +106 -69
  438. package/src/components/shell.tsx +168 -97
  439. package/src/components/slider.css +2 -2
  440. package/src/components/switch.css +2 -2
  441. package/src/components/table.css +7 -0
  442. package/src/components/text-area.css +2 -2
  443. package/src/components/text-field.css +2 -2
  444. package/src/components/theme.tsx +35 -34
  445. package/src/helpers/compile-prop-defs.ts +121 -0
  446. package/src/helpers/extract-props.ts +104 -83
  447. package/src/helpers/get-margin-styles.ts +38 -71
  448. package/src/helpers/get-responsive-styles.ts +37 -38
  449. package/src/helpers/use-deprecation-warning.ts +26 -0
  450. package/src/hooks/use-body-pointer-events-cleanup.ts +36 -6
  451. package/src/hooks/use-breakpoint.ts +94 -53
  452. package/src/hooks/use-prop-synced-state.ts +24 -0
  453. package/src/styles/tokens/blur.css +28 -0
  454. package/src/styles/tokens/color.css +3 -3
  455. package/src/styles/tokens/constants.css +11 -0
  456. package/styles.css +280 -332
  457. package/tokens/base.css +13 -3
  458. package/tokens.css +16 -3
  459. package/dist/esm/chunk-2SS3FA3N.js +0 -2
  460. package/dist/esm/chunk-2SS3FA3N.js.map +0 -7
  461. package/dist/esm/chunk-5U2Q23K3.js +0 -2
  462. package/dist/esm/chunk-5U2Q23K3.js.map +0 -7
  463. package/dist/esm/chunk-6ELPYR73.js +0 -2
  464. package/dist/esm/chunk-6ELPYR73.js.map +0 -7
  465. package/dist/esm/chunk-DZ4H2KTP.js +0 -2
  466. package/dist/esm/chunk-DZ4H2KTP.js.map +0 -7
  467. package/dist/esm/chunk-H4MMVAGQ.js +0 -2
  468. package/dist/esm/chunk-H4MMVAGQ.js.map +0 -7
  469. package/dist/esm/chunk-HURTSXRY.js +0 -2
  470. package/dist/esm/chunk-HURTSXRY.js.map +0 -7
  471. package/dist/esm/chunk-ITRVKLYU.js +0 -2
  472. package/dist/esm/chunk-ITRVKLYU.js.map +0 -7
  473. package/dist/esm/chunk-KCAFSCOV.js +0 -2
  474. package/dist/esm/chunk-KCAFSCOV.js.map +0 -7
  475. package/dist/esm/chunk-KMPBTEZH.js +0 -2
  476. package/dist/esm/chunk-KMPBTEZH.js.map +0 -7
  477. package/dist/esm/chunk-LN5SP46K.js +0 -2
  478. package/dist/esm/chunk-LN5SP46K.js.map +0 -7
  479. package/dist/esm/chunk-Q73Y5O5P.js +0 -2
  480. package/dist/esm/chunk-Q73Y5O5P.js.map +0 -7
  481. package/dist/esm/chunk-RMBS6CAO.js +0 -2
  482. package/dist/esm/chunk-RMBS6CAO.js.map +0 -7
  483. package/dist/esm/chunk-UUX42HBM.js +0 -2
  484. package/dist/esm/chunk-UUX42HBM.js.map +0 -7
  485. package/dist/esm/chunk-X7BD5FLE.js +0 -2
  486. package/dist/esm/chunk-X7BD5FLE.js.map +0 -7
  487. package/dist/esm/chunk-YEA646GM.js +0 -2
  488. package/dist/esm/chunk-YEA646GM.js.map +0 -7
  489. package/dist/esm/chunk-ZMEXIPWM.js +0 -2
  490. package/dist/esm/chunk-ZMEXIPWM.js.map +0 -7
  491. /package/dist/esm/{chunk-RQ2ZPMHJ.js.map → chunk-22HGLMPQ.js.map} +0 -0
  492. /package/dist/esm/{chunk-WYA4IRU6.js.map → chunk-25WZA7ZU.js.map} +0 -0
  493. /package/dist/esm/{chunk-XHQGMOXV.js.map → chunk-36ZQVP7F.js.map} +0 -0
  494. /package/dist/esm/{chunk-K3R4AH3E.js.map → chunk-3MWWP4MW.js.map} +0 -0
  495. /package/dist/esm/{chunk-HQ35PM4O.js.map → chunk-43A5GUSI.js.map} +0 -0
  496. /package/dist/esm/{chunk-Z5DQ6FSA.js.map → chunk-4AQTUBVP.js.map} +0 -0
  497. /package/dist/esm/{chunk-25U7DENY.js.map → chunk-4BBOHEF4.js.map} +0 -0
  498. /package/dist/esm/{chunk-ZSEFZM5H.js.map → chunk-4IY2PR6N.js.map} +0 -0
  499. /package/dist/esm/{chunk-QLIELX4I.js.map → chunk-4ME6O27S.js.map} +0 -0
  500. /package/dist/esm/{chunk-JQOFJNCV.js.map → chunk-4YFJWXL2.js.map} +0 -0
  501. /package/dist/esm/{chunk-DNI4QRXQ.js.map → chunk-5IBGFL6O.js.map} +0 -0
  502. /package/dist/esm/{chunk-IPJUHVM6.js.map → chunk-666GX7O5.js.map} +0 -0
  503. /package/dist/esm/{chunk-DJBPM5QK.js.map → chunk-7FC7HF76.js.map} +0 -0
  504. /package/dist/esm/{chunk-SVLY6B5F.js.map → chunk-7QDTSBJF.js.map} +0 -0
  505. /package/dist/esm/{chunk-DK5MHD6I.js.map → chunk-B24BDVG2.js.map} +0 -0
  506. /package/dist/esm/{chunk-WZCZHCVE.js.map → chunk-BJYUPIXO.js.map} +0 -0
  507. /package/dist/esm/{chunk-BJTJUIYJ.js.map → chunk-CRWYCLTE.js.map} +0 -0
  508. /package/dist/esm/{chunk-OHJVFZMH.js.map → chunk-CSKZZOI2.js.map} +0 -0
  509. /package/dist/esm/{chunk-ADYTQCZX.js.map → chunk-D6B7IMZU.js.map} +0 -0
  510. /package/dist/esm/{chunk-USGTBZ43.js.map → chunk-E67CIG6A.js.map} +0 -0
  511. /package/dist/esm/{chunk-42HFGCHX.js.map → chunk-ETMLMDW4.js.map} +0 -0
  512. /package/dist/esm/{chunk-7CBAHIVG.js.map → chunk-F2HYQ3ZR.js.map} +0 -0
  513. /package/dist/esm/{chunk-YUZPSUJE.js.map → chunk-F7IYL2VW.js.map} +0 -0
  514. /package/dist/esm/{chunk-FVCWNSRU.js.map → chunk-FHOCUZDR.js.map} +0 -0
  515. /package/dist/esm/{chunk-7MURQ6CR.js.map → chunk-FLFAXVFB.js.map} +0 -0
  516. /package/dist/esm/{chunk-APRBRAOT.js.map → chunk-FOEZLQTW.js.map} +0 -0
  517. /package/dist/esm/{chunk-WNSPLWRV.js.map → chunk-GJSGKE7B.js.map} +0 -0
  518. /package/dist/esm/{chunk-OGOOZLUD.js.map → chunk-GLERJXVS.js.map} +0 -0
  519. /package/dist/esm/{chunk-6VGPTAHM.js.map → chunk-GWXVETMF.js.map} +0 -0
  520. /package/dist/esm/{chunk-ES7MK2MM.js.map → chunk-GYBLXQ4R.js.map} +0 -0
  521. /package/dist/esm/{chunk-4OBMRJHC.js.map → chunk-H7ST535H.js.map} +0 -0
  522. /package/dist/esm/{chunk-QLZ5XAW6.js.map → chunk-HF5WY5YE.js.map} +0 -0
  523. /package/dist/esm/{chunk-RDP4UQ42.js.map → chunk-IEWCQU2S.js.map} +0 -0
  524. /package/dist/esm/{chunk-XLOHPURR.js.map → chunk-IHK3H2OM.js.map} +0 -0
  525. /package/dist/esm/{chunk-3F6I7YOR.js.map → chunk-JDGJSNWT.js.map} +0 -0
  526. /package/dist/esm/{chunk-VF5TRT3H.js.map → chunk-KKM6T5P7.js.map} +0 -0
  527. /package/dist/esm/{chunk-ZHYOJNWV.js.map → chunk-LKAK5GXF.js.map} +0 -0
  528. /package/dist/esm/{chunk-JCYI4NTV.js.map → chunk-MBCBP73P.js.map} +0 -0
  529. /package/dist/esm/{chunk-UYNYUR7O.js.map → chunk-MBE2YSBU.js.map} +0 -0
  530. /package/dist/esm/{chunk-H2G446JG.js.map → chunk-NMKPFUNP.js.map} +0 -0
  531. /package/dist/esm/{chunk-4N5JU7XQ.js.map → chunk-O3CDWEZA.js.map} +0 -0
  532. /package/dist/esm/{chunk-TEULZKBM.js.map → chunk-OGXZHAQL.js.map} +0 -0
  533. /package/dist/esm/{chunk-2AEELIG6.js.map → chunk-OWAUCLRT.js.map} +0 -0
  534. /package/dist/esm/{chunk-7CXVHFMQ.js.map → chunk-P7HYVJSU.js.map} +0 -0
  535. /package/dist/esm/{chunk-4532RT2B.js.map → chunk-P7IAHW4V.js.map} +0 -0
  536. /package/dist/esm/{chunk-M3ZYJANH.js.map → chunk-PQZXQ4ST.js.map} +0 -0
  537. /package/dist/esm/{chunk-SGU4HUHF.js.map → chunk-PTLFMWCN.js.map} +0 -0
  538. /package/dist/esm/{chunk-E6IWYD3U.js.map → chunk-S5C5YRBS.js.map} +0 -0
  539. /package/dist/esm/{chunk-A24PYRVV.js.map → chunk-SO67YEVQ.js.map} +0 -0
  540. /package/dist/esm/{chunk-HACQF6F4.js.map → chunk-TOOSHJOA.js.map} +0 -0
  541. /package/dist/esm/{chunk-QOWA5LK5.js.map → chunk-U2X2CAW4.js.map} +0 -0
  542. /package/dist/esm/{chunk-U7AASKZI.js.map → chunk-UVCH7QKO.js.map} +0 -0
  543. /package/dist/esm/{chunk-GWYFT3EI.js.map → chunk-VLO7NXSP.js.map} +0 -0
  544. /package/dist/esm/{chunk-DXI5P5O4.js.map → chunk-VX6ARMWP.js.map} +0 -0
  545. /package/dist/esm/{chunk-EJWAAFCI.js.map → chunk-WO43WW3A.js.map} +0 -0
  546. /package/dist/esm/{chunk-GLC4QJBF.js.map → chunk-WTYNFBFV.js.map} +0 -0
  547. /package/dist/esm/{chunk-6FAICIYS.js.map → chunk-XMRIRFM7.js.map} +0 -0
  548. /package/dist/esm/{chunk-UIEUZLZZ.js.map → chunk-ZY6SQWHT.js.map} +0 -0
@@ -88,7 +88,7 @@
88
88
  /* Backdrop-filter for ::before - applies to outline, soft, surface */
89
89
  :where([data-panel-background='translucent'], [data-material='translucent']) &::before {
90
90
  backdrop-filter: var(--backdrop-filter-panel);
91
- --backdrop-filter-panel: blur(var(--backdrop-blur-panel));
91
+ --backdrop-filter-panel: var(--backdrop-filter-panel-enabled);
92
92
  }
93
93
 
94
94
  &:where([data-material='solid'], [data-panel-background='solid'])::before {
@@ -97,7 +97,7 @@
97
97
 
98
98
  &:where([data-material='translucent'], [data-panel-background='translucent'])::before {
99
99
  backdrop-filter: var(--backdrop-filter-panel);
100
- --backdrop-filter-panel: blur(var(--backdrop-blur-panel));
100
+ --backdrop-filter-panel: var(--backdrop-filter-panel-enabled);
101
101
  }
102
102
 
103
103
  /* Interactive scale - applies to all interactive cards */
@@ -413,6 +413,21 @@
413
413
  ***************************************************************************************************/
414
414
 
415
415
  .rt-BaseCard:where(.rt-variant-ghost) {
416
+ /*
417
+ * Ghost is the only card variant whose backdrop filter sits on the element
418
+ * rather than on ::before, which makes it — and only it — the backdrop root
419
+ * for its contents. A component nested here would re-blur an already blurred
420
+ * surface, so switch the component filter off for the subtree.
421
+ *
422
+ * The other variants deliberately do not do this: their filter is on
423
+ * ::before, so the card element is not a backdrop root and a nested
424
+ * component is still blurring the page itself. Measured over a textured
425
+ * background, dropping it there is a visible change (max 82/255 channel
426
+ * delta) rather than the imperceptible one it is on a real backdrop root
427
+ * (max 7/255).
428
+ */
429
+ --backdrop-filter-components-enabled: none;
430
+
416
431
  --card-border-width: 0px;
417
432
  --v-bg-hover: var(--gray-3);
418
433
  --v-bg-hover-a: var(--gray-a3);
@@ -454,7 +469,7 @@
454
469
  /* Backdrop-filter handling for ghost - on element, not ::before */
455
470
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
456
471
  backdrop-filter: var(--backdrop-filter-panel);
457
- --backdrop-filter-panel: blur(var(--backdrop-blur-panel));
472
+ --backdrop-filter-panel: var(--backdrop-filter-panel-enabled);
458
473
  }
459
474
 
460
475
  &:where([data-panel-background='solid'], [data-material='solid']) {
@@ -463,7 +478,7 @@
463
478
 
464
479
  &:where([data-panel-background='translucent'], [data-material='translucent']) {
465
480
  backdrop-filter: var(--backdrop-filter-panel);
466
- --backdrop-filter-panel: blur(var(--backdrop-blur-panel));
481
+ --backdrop-filter-panel: var(--backdrop-filter-panel-enabled);
467
482
  }
468
483
 
469
484
  /* Interactive states - background on element, not ::before */
@@ -19,7 +19,7 @@
19
19
  /* Theme-level translucent override */
20
20
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
21
21
  backdrop-filter: var(--backdrop-filter-components);
22
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
22
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
23
23
  }
24
24
 
25
25
  /* Prevent backdrop-filter stacking with parents */
@@ -33,7 +33,7 @@
33
33
 
34
34
  &:where([data-panel-background='translucent'], [data-material='translucent']) {
35
35
  backdrop-filter: var(--backdrop-filter-components);
36
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
36
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
37
37
  }
38
38
 
39
39
 
@@ -18,19 +18,6 @@
18
18
  inset: 0;
19
19
  }
20
20
 
21
- /* When forceMount detaches the scroll wrapper from the overlay, it needs its
22
- own fixed positioning and must become inert when the content is closed. */
23
- .rt-BaseDialogScroll--detached {
24
- position: fixed;
25
- inset: 0;
26
- z-index: 100;
27
-
28
- &:where(:has([data-state='closed'])) {
29
- pointer-events: none;
30
- visibility: hidden;
31
- }
32
- }
33
-
34
21
  .rt-BaseDialogScrollPadding {
35
22
  flex-grow: 1;
36
23
  margin: auto;
@@ -50,6 +37,13 @@
50
37
  }
51
38
 
52
39
  .rt-BaseDialogContent {
40
+ /*
41
+ * This surface blurs its own backdrop, which makes it the backdrop root for
42
+ * everything inside it. A component nested here would re-blur an already
43
+ * blurred, already flat surface for the full cost of another blur pass, so
44
+ * switch the component filter off for the subtree. See tokens/blur.css.
45
+ */
46
+ --backdrop-filter-components-enabled: none;
53
47
  margin: auto;
54
48
  width: 100%;
55
49
  z-index: 1;
@@ -1,4 +1,11 @@
1
1
  .rt-BaseMenuContent {
2
+ /*
3
+ * This surface blurs its own backdrop, which makes it the backdrop root for
4
+ * everything inside it. A component nested here would re-blur an already
5
+ * blurred, already flat surface for the full cost of another blur pass, so
6
+ * switch the component filter off for the subtree. See tokens/blur.css.
7
+ */
8
+ --backdrop-filter-components-enabled: none;
2
9
  --scrollarea-scrollbar-vertical-margin-top: var(--base-menu-content-padding);
3
10
  --scrollarea-scrollbar-vertical-margin-bottom: var(--base-menu-content-padding);
4
11
  --scrollarea-scrollbar-horizontal-margin-left: var(--base-menu-content-padding);
@@ -19,7 +19,7 @@
19
19
  /* Theme-level translucent override */
20
20
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
21
21
  backdrop-filter: var(--backdrop-filter-components);
22
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
22
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
23
23
  }
24
24
 
25
25
  /* Prevent backdrop-filter stacking with parents */
@@ -33,7 +33,7 @@
33
33
 
34
34
  &:where([data-panel-background='translucent'], [data-material='translucent']) {
35
35
  backdrop-filter: var(--backdrop-filter-components);
36
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
36
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
37
37
  }
38
38
 
39
39
  &:where(:disabled, [data-disabled]) {
@@ -28,6 +28,13 @@
28
28
 
29
29
  /* Sidebar Container */
30
30
  .rt-SidebarContainer {
31
+ /*
32
+ * This surface blurs its own backdrop, which makes it the backdrop root for
33
+ * everything inside it. A component nested here would re-blur an already
34
+ * blurred, already flat surface for the full cost of another blur pass, so
35
+ * switch the component filter off for the subtree. See tokens/blur.css.
36
+ */
37
+ --backdrop-filter-components-enabled: none;
31
38
  --sidebar-base-border-radius: 0; /* Default to no radius */
32
39
  display: flex;
33
40
  flex-direction: column;
@@ -161,7 +161,7 @@
161
161
  :where(.rt-BaseTabList[data-panel-background='translucent']) & {
162
162
  background-color: var(--gray-a3);
163
163
  backdrop-filter: var(--backdrop-filter-components);
164
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
164
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
165
165
  }
166
166
 
167
167
  /* Disable backdrop-filter when inside elements that already have backdrop-filter */
@@ -189,7 +189,7 @@
189
189
  :where(.rt-BaseTabList[data-panel-background='translucent']) & {
190
190
  background-color: var(--accent-a3);
191
191
  backdrop-filter: var(--backdrop-filter-components);
192
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
192
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
193
193
  }
194
194
  }
195
195
  }
@@ -77,7 +77,30 @@ export const PaneHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsW
77
77
  body.style.cursor = orientation === 'vertical' ? 'col-resize' : 'row-resize';
78
78
  body.style.userSelect = 'none';
79
79
  onResizeStart?.(startSize);
80
+
81
+ // The move handler is attached to the handle, the document and the
82
+ // window so the drag survives environments where PointerEvent does not
83
+ // reach all three. A real move therefore arrives here several times:
84
+ // once per node it propagates through, plus again as the compatibility
85
+ // mouse event. Doing the work more than once per movement is pure waste
86
+ // on the most latency-sensitive interaction in the shell, so ignore the
87
+ // repeats.
88
+ let lastHandledMove: Event | null = null;
89
+ let seenPointerEvent = false;
90
+
91
+ const shouldHandle = (ev: Event, pointerType: string) => {
92
+ if (ev.type === pointerType) seenPointerEvent = true;
93
+ // Once pointer events are known to work, the mouse fallbacks are
94
+ // duplicates of an event we have already handled.
95
+ else if (seenPointerEvent) return false;
96
+ return true;
97
+ };
98
+
80
99
  const handleMove = (ev: PointerEvent) => {
100
+ if (!shouldHandle(ev, 'pointermove')) return;
101
+ if (ev === lastHandledMove) return;
102
+ lastHandledMove = ev;
103
+
81
104
  const client = orientation === 'vertical' ? ev.clientX : ev.clientY;
82
105
  const next = clamp(computeNext(client, startClient, startSize));
83
106
  container.style.setProperty(cssVarName, `${next}px`);
@@ -106,7 +129,11 @@ export const PaneHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsW
106
129
  body.style.userSelect = prevUserSelect;
107
130
  activeCleanupRef.current = null;
108
131
  };
132
+ let finished = false;
109
133
  const handleUp = () => {
134
+ if (finished) return;
135
+ finished = true;
136
+
110
137
  const finalSize = parseFloat(getComputedStyle(container).getPropertyValue(cssVarName) || `${defaultSize}`);
111
138
  let snapped = finalSize;
112
139
  if (snapPoints && snapPoints.length) {
@@ -7,7 +7,7 @@
7
7
  /* Theme-level translucent override */
8
8
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
9
9
  backdrop-filter: var(--backdrop-filter-components);
10
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
10
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
11
11
  }
12
12
 
13
13
  /* Prevent backdrop-filter stacking with parents */
@@ -21,7 +21,7 @@
21
21
 
22
22
  &:where([data-panel-background='translucent'], [data-material='translucent']) {
23
23
  backdrop-filter: var(--backdrop-filter-components);
24
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
24
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
25
25
  }
26
26
  }
27
27
 
@@ -68,7 +68,7 @@
68
68
  background-color: color-mix(in srgb, var(--accent-a2), var(--accent-2) 60%);
69
69
  box-shadow: inset 0 0 0 1px var(--accent-a6);
70
70
  backdrop-filter: var(--backdrop-filter-components);
71
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
71
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
72
72
  }
73
73
  }
74
74
 
@@ -94,7 +94,7 @@
94
94
  &:where([data-panel-background='translucent'], [data-material='translucent']) {
95
95
  background-color: var(--color-surface-translucent);
96
96
  backdrop-filter: var(--backdrop-filter-components);
97
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
97
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
98
98
  }
99
99
  }
100
100
 
@@ -119,7 +119,7 @@
119
119
  &:where([data-panel-background='translucent'], [data-material='translucent']) {
120
120
  background-color: color-mix(in srgb, var(--accent-a2), var(--accent-2) 60%);
121
121
  backdrop-filter: var(--backdrop-filter-components);
122
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
122
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
123
123
  }
124
124
  }
125
125
 
@@ -143,7 +143,7 @@
143
143
  &:where([data-panel-background='translucent'], [data-material='translucent']) {
144
144
  box-shadow: inset 0 0 0 1px var(--accent-a6);
145
145
  backdrop-filter: var(--backdrop-filter-components);
146
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
146
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
147
147
  }
148
148
  }
149
149
 
@@ -19,6 +19,7 @@ import type {
19
19
  AccordionContentOwnProps,
20
20
  } from './accordion.props.js';
21
21
  import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';
22
+ import { useDeprecatedPanelBackgroundWarning } from '../helpers/use-deprecation-warning.js';
22
23
 
23
24
  // Root component
24
25
  type AccordionRootElement = React.ElementRef<typeof AccordionPrimitive.Root>;
@@ -35,14 +36,7 @@ const AccordionRoot = React.forwardRef<AccordionRootElement, AccordionRootProps>
35
36
  typeof AccordionPrimitive.Root
36
37
  >;
37
38
 
38
- // Show deprecation warning for panelBackground when used
39
- React.useEffect(() => {
40
- if (props.panelBackground !== undefined) {
41
- console.warn(
42
- 'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',
43
- );
44
- }
45
- }, [props.panelBackground]);
39
+ useDeprecatedPanelBackgroundWarning(props.panelBackground);
46
40
 
47
41
  // Material takes precedence over panelBackground
48
42
  const effectiveMaterial = material ?? panelBackground;
@@ -7,6 +7,7 @@ import { Heading } from './heading.js';
7
7
  import { Text } from './text.js';
8
8
  import { Theme } from './theme.js';
9
9
  import { extractProps } from '../helpers/extract-props.js';
10
+ import { useDeprecatedPanelBackgroundWarning } from '../helpers/use-deprecation-warning.js';
10
11
  import { requireReactElement } from '../helpers/require-react-element.js';
11
12
 
12
13
  import type { AlertDialogContentOwnProps } from './alert-dialog.props.js';
@@ -35,6 +36,19 @@ const AlertDialogTrigger = React.forwardRef<AlertDialogTriggerElement, AlertDial
35
36
  );
36
37
  AlertDialogTrigger.displayName = 'AlertDialog.Trigger';
37
38
 
39
+ // Split once at module scope. `extractProps` memoises on the identity of the
40
+ // prop def objects it is handed, so rebuilding these per render would recompile
41
+ // them on every render.
42
+ const {
43
+ align: alignPropDef,
44
+ panelBackground: panelBackgroundPropDef,
45
+ material: materialPropDef,
46
+ ...contentPropDefs
47
+ } = alertDialogContentPropDefs;
48
+ const alignPropDefs = { align: alignPropDef };
49
+ const panelBackgroundPropDefs = { panelBackground: panelBackgroundPropDef };
50
+ const materialPropDefs = { material: materialPropDef };
51
+
38
52
  type AlertDialogContentElement = React.ElementRef<typeof AlertDialogPrimitive.Content>;
39
53
  interface AlertDialogContentProps
40
54
  extends ComponentPropsWithout<typeof AlertDialogPrimitive.Content, RemovedProps>,
@@ -43,35 +57,23 @@ interface AlertDialogContentProps
43
57
  }
44
58
  const AlertDialogContent = React.forwardRef<AlertDialogContentElement, AlertDialogContentProps>(
45
59
  ({ align, ...props }, forwardedRef) => {
46
- const {
47
- align: alignPropDef,
48
- panelBackground: panelBackgroundPropDef,
49
- material: materialPropDef,
50
- ...propDefs
51
- } = alertDialogContentPropDefs;
52
-
53
- const { className: alignClassName } = extractProps({ align }, { align: alignPropDef });
60
+ const { className: alignClassName } = extractProps({ align }, alignPropDefs);
54
61
 
55
62
  // Extract panelBackground and material from props
56
63
  const { panelBackground: extractedPanelBackground } = extractProps(
57
64
  { panelBackground: props.panelBackground },
58
- { panelBackground: panelBackgroundPropDef },
65
+ panelBackgroundPropDefs,
59
66
  );
60
67
 
61
68
  const { material: extractedMaterial } = extractProps(
62
69
  { material: props.material },
63
- { material: materialPropDef },
70
+ materialPropDefs,
64
71
  );
65
72
 
66
- // Handle material prop with panelBackground fallback
67
- const materialValue = React.useMemo(() => {
68
- if (extractedMaterial !== undefined) {
69
- console.warn(
70
- 'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',
71
- );
72
- }
73
- return extractedMaterial ?? extractedPanelBackground;
74
- }, [extractedMaterial, extractedPanelBackground]);
73
+ useDeprecatedPanelBackgroundWarning(props.panelBackground);
74
+
75
+ // Material takes precedence over the deprecated panelBackground
76
+ const materialValue = extractedMaterial ?? extractedPanelBackground;
75
77
 
76
78
  const {
77
79
  className,
@@ -80,7 +82,7 @@ const AlertDialogContent = React.forwardRef<AlertDialogContentElement, AlertDial
80
82
  panelBackground: _,
81
83
  material: __,
82
84
  ...contentProps
83
- } = extractProps(props, propDefs);
85
+ } = extractProps(props, contentPropDefs);
84
86
 
85
87
  // Focus management
86
88
  const contentRef = React.useRef<HTMLDivElement>(null);
@@ -44,7 +44,7 @@
44
44
  /* Theme-level translucent override */
45
45
  :where([data-panel-background='translucent'], [data-material='translucent']) & {
46
46
  backdrop-filter: var(--backdrop-filter-components);
47
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
47
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
48
48
  }
49
49
 
50
50
  /* Prevent backdrop-filter stacking with parents */
@@ -58,7 +58,7 @@
58
58
 
59
59
  &:where([data-panel-background='translucent'], [data-material='translucent']) {
60
60
  backdrop-filter: var(--backdrop-filter-components);
61
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
61
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
62
62
  }
63
63
  }
64
64
 
@@ -27,7 +27,7 @@
27
27
  --material-blend: 60%;
28
28
  --material-alpha: 1;
29
29
  backdrop-filter: var(--backdrop-filter-components);
30
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
30
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
31
31
  }
32
32
 
33
33
  /* Prevent backdrop-filter stacking with parents */
@@ -45,7 +45,7 @@
45
45
  --material-blend: 60%;
46
46
  --material-alpha: 1;
47
47
  backdrop-filter: var(--backdrop-filter-components);
48
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
48
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
49
49
  }
50
50
 
51
51
  /* Reduced motion support */
@@ -10,6 +10,7 @@ import { Tooltip } from './tooltip.js';
10
10
  import type { MarginProps } from '../props/margin.props.js';
11
11
  import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';
12
12
  import type { GetPropDefTypes } from '../props/prop-def.js';
13
+ import { useDeprecatedPanelBackgroundWarning } from '../helpers/use-deprecation-warning.js';
13
14
 
14
15
  type BadgeElement = React.ElementRef<'span'>;
15
16
  type BadgeOwnProps = GetPropDefTypes<typeof badgePropDefs>;
@@ -52,14 +53,7 @@ const Badge = React.forwardRef<BadgeElement, BadgeProps>((props, forwardedRef) =
52
53
  [material, panelBackground],
53
54
  );
54
55
 
55
- // Show deprecation warning for panelBackground when used
56
- React.useEffect(() => {
57
- if (panelBackground !== undefined) {
58
- console.warn(
59
- 'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',
60
- );
61
- }
62
- }, [panelBackground]);
56
+ useDeprecatedPanelBackgroundWarning(panelBackground);
63
57
 
64
58
  // Memoize component variable to prevent unnecessary re-renders
65
59
  const Comp = React.useMemo(() => (asChild ? Slot.Root : 'span'), [asChild]);
@@ -17,7 +17,7 @@
17
17
  --material-blend: 60%;
18
18
  --material-alpha: 1;
19
19
  backdrop-filter: var(--backdrop-filter-components);
20
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
20
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
21
21
  }
22
22
 
23
23
  /* Prevent backdrop-filter stacking with parents */
@@ -35,7 +35,7 @@
35
35
  --material-blend: 60%;
36
36
  --material-alpha: 1;
37
37
  backdrop-filter: var(--backdrop-filter-components);
38
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
38
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
39
39
  }
40
40
 
41
41
  &:where(.rt-high-contrast) {
@@ -173,7 +173,7 @@
173
173
  /* Theme-level translucent override for the visual shell */
174
174
  .rt-ChatbarRoot:where([data-panel-background='translucent'], [data-material='translucent']) .rt-ChatbarBox {
175
175
  backdrop-filter: var(--backdrop-filter-components);
176
- --backdrop-filter-components: blur(var(--backdrop-blur-components));
176
+ --backdrop-filter-components: var(--backdrop-filter-components-enabled);
177
177
  }
178
178
  .rt-ChatbarRoot:where([data-panel-background='solid'], [data-material='solid']) .rt-ChatbarBox {
179
179
  backdrop-filter: none;
@@ -23,6 +23,7 @@ import { Kbd } from './kbd.js';
23
23
 
24
24
  import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';
25
25
  import type { GetPropDefTypes } from '../props/prop-def.js';
26
+ import { useDeprecatedPanelBackgroundWarning } from '../helpers/use-deprecation-warning.js';
26
27
 
27
28
  interface ContextMenuRootProps
28
29
  extends React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Root> {}
@@ -56,14 +57,7 @@ const ContextMenuContent = React.forwardRef<ContextMenuContentElement, ContextMe
56
57
  (props, forwardedRef) => {
57
58
  const themeContext = useThemeContext();
58
59
 
59
- // Show deprecation warning for panelBackground when used
60
- React.useEffect(() => {
61
- if (props.panelBackground !== undefined) {
62
- console.warn(
63
- 'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',
64
- );
65
- }
66
- }, [props.panelBackground]);
60
+ useDeprecatedPanelBackgroundWarning(props.panelBackground);
67
61
 
68
62
  // Material takes precedence over panelBackground
69
63
  const effectiveMaterial =
@@ -7,6 +7,7 @@ import { Heading } from './heading.js';
7
7
  import { Text } from './text.js';
8
8
  import { Theme } from './theme.js';
9
9
  import { extractProps } from '../helpers/extract-props.js';
10
+ import { useDeprecatedPanelBackgroundWarning } from '../helpers/use-deprecation-warning.js';
10
11
  import { requireReactElement } from '../helpers/require-react-element.js';
11
12
  import { useBodyPointerEventsCleanup } from '../hooks/use-body-pointer-events-cleanup.js';
12
13
 
@@ -33,6 +34,19 @@ const DialogTrigger = React.forwardRef<DialogTriggerElement, DialogTriggerProps>
33
34
  );
34
35
  DialogTrigger.displayName = 'Dialog.Trigger';
35
36
 
37
+ // Split once at module scope. `extractProps` memoises on the identity of the
38
+ // prop def objects it is handed, so rebuilding these per render would recompile
39
+ // them on every render.
40
+ const {
41
+ align: alignPropDef,
42
+ panelBackground: panelBackgroundPropDef,
43
+ material: materialPropDef,
44
+ ...contentPropDefs
45
+ } = dialogContentPropDefs;
46
+ const alignPropDefs = { align: alignPropDef };
47
+ const panelBackgroundPropDefs = { panelBackground: panelBackgroundPropDef };
48
+ const materialPropDefs = { material: materialPropDef };
49
+
36
50
  type DialogContentElement = React.ElementRef<typeof DialogPrimitive.Content>;
37
51
  interface DialogContentProps
38
52
  extends ComponentPropsWithout<typeof DialogPrimitive.Content, RemovedProps>,
@@ -41,35 +55,23 @@ interface DialogContentProps
41
55
  }
42
56
  const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>(
43
57
  ({ align, ...props }, forwardedRef) => {
44
- const {
45
- align: alignPropDef,
46
- panelBackground: panelBackgroundPropDef,
47
- material: materialPropDef,
48
- ...propDefs
49
- } = dialogContentPropDefs;
50
-
51
- const { className: alignClassName } = extractProps({ align }, { align: alignPropDef });
58
+ const { className: alignClassName } = extractProps({ align }, alignPropDefs);
52
59
 
53
60
  // Extract panelBackground and material from props
54
61
  const { panelBackground: extractedPanelBackground } = extractProps(
55
62
  { panelBackground: props.panelBackground },
56
- { panelBackground: panelBackgroundPropDef },
63
+ panelBackgroundPropDefs,
57
64
  );
58
65
 
59
66
  const { material: extractedMaterial } = extractProps(
60
67
  { material: props.material },
61
- { material: materialPropDef },
68
+ materialPropDefs,
62
69
  );
63
70
 
64
- // Handle material prop with panelBackground fallback
65
- const materialValue = React.useMemo(() => {
66
- if (extractedMaterial !== undefined) {
67
- console.warn(
68
- 'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',
69
- );
70
- }
71
- return extractedMaterial ?? extractedPanelBackground;
72
- }, [extractedMaterial, extractedPanelBackground]);
71
+ useDeprecatedPanelBackgroundWarning(props.panelBackground);
72
+
73
+ // Material takes precedence over the deprecated panelBackground
74
+ const materialValue = extractedMaterial ?? extractedPanelBackground;
73
75
 
74
76
  const {
75
77
  className,
@@ -78,7 +80,7 @@ const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>
78
80
  panelBackground: _,
79
81
  material: __,
80
82
  ...contentProps
81
- } = extractProps(props, propDefs);
83
+ } = extractProps(props, contentPropDefs);
82
84
 
83
85
  // Focus management
84
86
  const contentRef = React.useRef<HTMLDivElement>(null);
@@ -140,65 +142,37 @@ const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>
140
142
  };
141
143
  }, []);
142
144
 
143
- const contentElement = (
144
- <DialogPrimitive.Content
145
- {...contentProps}
146
- ref={combinedRef}
147
- className={classNames('rt-BaseDialogContent', 'rt-DialogContent', className)}
148
- data-material={materialValue}
149
- data-panel-background={materialValue}
150
- tabIndex={-1}
151
- role="dialog"
152
- aria-modal="true"
153
- onCloseAutoFocus={(event) => {
154
- // Prevent default focus behavior
155
- event.preventDefault();
156
- // Restore pointer-events to body (Radix UI fix for issue #1241)
157
- document.body.style.pointerEvents = '';
158
- }}
159
- />
160
- );
161
-
162
- const ariaLiveRegion = (
163
- <div
164
- aria-live="polite"
165
- aria-atomic="true"
166
- className="rt-sr-only"
167
- id="dialog-announcement"
168
- />
169
- );
170
-
171
- // When forceMount is used, render Overlay and Content as siblings so the
172
- // Overlay (which uses react-remove-scroll) can unmount independently when
173
- // the dialog closes, while the Content stays mounted.
174
- if (forceMount) {
175
- return (
176
- <DialogPrimitive.Portal container={container} forceMount>
177
- <Theme>
178
- <DialogPrimitive.Overlay className="rt-BaseDialogOverlay rt-DialogOverlay" />
179
- <div className="rt-BaseDialogScroll rt-DialogScroll rt-BaseDialogScroll--detached">
180
- <div
181
- className={`rt-BaseDialogScrollPadding rt-DialogScrollPadding ${alignClassName}`}
182
- >
183
- {React.cloneElement(contentElement, { forceMount: true })}
184
- {ariaLiveRegion}
185
- </div>
186
- </div>
187
- </Theme>
188
- </DialogPrimitive.Portal>
189
- );
190
- }
191
-
192
145
  return (
193
- <DialogPrimitive.Portal container={container}>
146
+ <DialogPrimitive.Portal container={container} forceMount={forceMount}>
194
147
  <Theme asChild>
195
148
  <DialogPrimitive.Overlay className="rt-BaseDialogOverlay rt-DialogOverlay">
196
149
  <div className="rt-BaseDialogScroll rt-DialogScroll">
197
150
  <div
198
151
  className={`rt-BaseDialogScrollPadding rt-DialogScrollPadding ${alignClassName}`}
199
152
  >
200
- {contentElement}
201
- {ariaLiveRegion}
153
+ <DialogPrimitive.Content
154
+ {...contentProps}
155
+ ref={combinedRef}
156
+ className={classNames('rt-BaseDialogContent', 'rt-DialogContent', className)}
157
+ data-material={materialValue}
158
+ data-panel-background={materialValue}
159
+ tabIndex={-1}
160
+ role="dialog"
161
+ aria-modal="true"
162
+ onCloseAutoFocus={(event) => {
163
+ // Prevent default focus behavior
164
+ event.preventDefault();
165
+ // Restore pointer-events to body (Radix UI fix for issue #1241)
166
+ document.body.style.pointerEvents = '';
167
+ }}
168
+ />
169
+ {/* ARIA live region for screen reader announcements */}
170
+ <div
171
+ aria-live="polite"
172
+ aria-atomic="true"
173
+ className="rt-sr-only"
174
+ id="dialog-announcement"
175
+ />
202
176
  </div>
203
177
  </div>
204
178
  </DialogPrimitive.Overlay>