@womp/kookie-ui 0.23.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. package/components.css +190 -185
  2. package/dist/cjs/components/_internal/base-button.d.ts +11 -1
  3. package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
  4. package/dist/cjs/components/_internal/base-button.js +1 -1
  5. package/dist/cjs/components/_internal/base-button.js.map +4 -4
  6. package/dist/cjs/components/_internal/menu-context.d.ts +2 -0
  7. package/dist/cjs/components/_internal/menu-context.d.ts.map +1 -1
  8. package/dist/cjs/components/_internal/menu-context.js +1 -1
  9. package/dist/cjs/components/_internal/menu-context.js.map +3 -3
  10. package/dist/cjs/components/_internal/pane-chrome.d.ts +17 -2
  11. package/dist/cjs/components/_internal/pane-chrome.d.ts.map +1 -1
  12. package/dist/cjs/components/_internal/pane-chrome.js +1 -1
  13. package/dist/cjs/components/_internal/pane-chrome.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 +2 -2
  17. package/dist/cjs/components/accordion.d.ts.map +1 -1
  18. package/dist/cjs/components/accordion.js +1 -1
  19. package/dist/cjs/components/accordion.js.map +4 -4
  20. package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
  21. package/dist/cjs/components/alert-dialog.js +1 -1
  22. package/dist/cjs/components/alert-dialog.js.map +3 -3
  23. package/dist/cjs/components/avatar.d.ts +1 -1
  24. package/dist/cjs/components/avatar.d.ts.map +1 -1
  25. package/dist/cjs/components/avatar.js +1 -1
  26. package/dist/cjs/components/avatar.js.map +3 -3
  27. package/dist/cjs/components/avatar.props.d.ts +8 -0
  28. package/dist/cjs/components/avatar.props.d.ts.map +1 -1
  29. package/dist/cjs/components/avatar.props.js +1 -1
  30. package/dist/cjs/components/avatar.props.js.map +2 -2
  31. package/dist/cjs/components/blockquote.d.ts +1 -1
  32. package/dist/cjs/components/blockquote.d.ts.map +1 -1
  33. package/dist/cjs/components/blockquote.js +1 -1
  34. package/dist/cjs/components/blockquote.js.map +4 -4
  35. package/dist/cjs/components/button.js +1 -1
  36. package/dist/cjs/components/button.js.map +4 -4
  37. package/dist/cjs/components/chatbar.d.ts.map +1 -1
  38. package/dist/cjs/components/chatbar.js +1 -1
  39. package/dist/cjs/components/chatbar.js.map +4 -4
  40. package/dist/cjs/components/checkbox-group.d.ts.map +1 -1
  41. package/dist/cjs/components/checkbox-group.js +1 -1
  42. package/dist/cjs/components/checkbox-group.js.map +3 -3
  43. package/dist/cjs/components/checkbox-group.primitive.d.ts +12 -5
  44. package/dist/cjs/components/checkbox-group.primitive.d.ts.map +1 -1
  45. package/dist/cjs/components/checkbox-group.primitive.js +1 -1
  46. package/dist/cjs/components/checkbox-group.primitive.js.map +3 -3
  47. package/dist/cjs/components/checkbox.js +1 -1
  48. package/dist/cjs/components/checkbox.js.map +3 -3
  49. package/dist/cjs/components/chip.d.ts.map +1 -1
  50. package/dist/cjs/components/chip.js +1 -1
  51. package/dist/cjs/components/chip.js.map +3 -3
  52. package/dist/cjs/components/code.d.ts.map +1 -1
  53. package/dist/cjs/components/code.js +1 -1
  54. package/dist/cjs/components/code.js.map +2 -2
  55. package/dist/cjs/components/combobox.js +1 -1
  56. package/dist/cjs/components/combobox.js.map +3 -3
  57. package/dist/cjs/components/context-menu.d.ts.map +1 -1
  58. package/dist/cjs/components/context-menu.js +1 -1
  59. package/dist/cjs/components/context-menu.js.map +4 -4
  60. package/dist/cjs/components/dialog.d.ts +1 -1
  61. package/dist/cjs/components/dialog.d.ts.map +1 -1
  62. package/dist/cjs/components/dialog.js +1 -1
  63. package/dist/cjs/components/dialog.js.map +3 -3
  64. package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
  65. package/dist/cjs/components/dropdown-menu.js +1 -1
  66. package/dist/cjs/components/dropdown-menu.js.map +4 -4
  67. package/dist/cjs/components/icons.d.ts +3 -1
  68. package/dist/cjs/components/icons.d.ts.map +1 -1
  69. package/dist/cjs/components/icons.js +1 -1
  70. package/dist/cjs/components/icons.js.map +3 -3
  71. package/dist/cjs/components/index.d.ts +1 -1
  72. package/dist/cjs/components/index.d.ts.map +1 -1
  73. package/dist/cjs/components/index.js +2 -10
  74. package/dist/cjs/components/index.js.map +4 -4
  75. package/dist/cjs/components/message-scroller.d.ts.map +1 -1
  76. package/dist/cjs/components/message-scroller.js +1 -1
  77. package/dist/cjs/components/message-scroller.js.map +4 -4
  78. package/dist/cjs/components/navbar.d.ts.map +1 -1
  79. package/dist/cjs/components/navbar.js +1 -1
  80. package/dist/cjs/components/navbar.js.map +3 -3
  81. package/dist/cjs/components/notice.d.ts +4 -1
  82. package/dist/cjs/components/notice.d.ts.map +1 -1
  83. package/dist/cjs/components/notice.js +1 -1
  84. package/dist/cjs/components/notice.js.map +4 -4
  85. package/dist/cjs/components/progress.d.ts.map +1 -1
  86. package/dist/cjs/components/progress.js +1 -1
  87. package/dist/cjs/components/progress.js.map +3 -3
  88. package/dist/cjs/components/schemas/button.schema.d.ts +2 -2
  89. package/dist/cjs/components/schemas/toggle.schema.d.ts +1 -1
  90. package/dist/cjs/components/scroll-area.d.ts +3 -1
  91. package/dist/cjs/components/scroll-area.d.ts.map +1 -1
  92. package/dist/cjs/components/scroll-area.js +1 -1
  93. package/dist/cjs/components/scroll-area.js.map +4 -4
  94. package/dist/cjs/components/segmented-control.d.ts +3 -1
  95. package/dist/cjs/components/segmented-control.d.ts.map +1 -1
  96. package/dist/cjs/components/segmented-control.js +1 -1
  97. package/dist/cjs/components/segmented-control.js.map +3 -3
  98. package/dist/cjs/components/select.d.ts.map +1 -1
  99. package/dist/cjs/components/select.js +1 -1
  100. package/dist/cjs/components/select.js.map +3 -3
  101. package/dist/cjs/components/separator.d.ts.map +1 -1
  102. package/dist/cjs/components/separator.js +1 -1
  103. package/dist/cjs/components/separator.js.map +3 -3
  104. package/dist/cjs/components/sheet.d.ts +1 -0
  105. package/dist/cjs/components/sheet.d.ts.map +1 -1
  106. package/dist/cjs/components/sheet.js +1 -1
  107. package/dist/cjs/components/sheet.js.map +3 -3
  108. package/dist/cjs/components/shell.d.ts +12 -1
  109. package/dist/cjs/components/shell.d.ts.map +1 -1
  110. package/dist/cjs/components/shell.js +1 -1
  111. package/dist/cjs/components/shell.js.map +4 -4
  112. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  113. package/dist/cjs/components/sidebar.js +1 -1
  114. package/dist/cjs/components/sidebar.js.map +4 -4
  115. package/dist/cjs/components/slider.d.ts.map +1 -1
  116. package/dist/cjs/components/slider.js +1 -1
  117. package/dist/cjs/components/slider.js.map +3 -3
  118. package/dist/cjs/components/spinner.d.ts.map +1 -1
  119. package/dist/cjs/components/spinner.js +1 -1
  120. package/dist/cjs/components/spinner.js.map +3 -3
  121. package/dist/cjs/components/table.d.ts.map +1 -1
  122. package/dist/cjs/components/table.js +1 -1
  123. package/dist/cjs/components/table.js.map +4 -4
  124. package/dist/cjs/components/tabs.d.ts.map +1 -1
  125. package/dist/cjs/components/tabs.js +1 -1
  126. package/dist/cjs/components/tabs.js.map +2 -2
  127. package/dist/cjs/components/text-area.js +1 -1
  128. package/dist/cjs/components/text-area.js.map +2 -2
  129. package/dist/cjs/components/text-field.js +2 -2
  130. package/dist/cjs/components/text-field.js.map +2 -2
  131. package/dist/cjs/components/toggle.d.ts +3 -2
  132. package/dist/cjs/components/toggle.d.ts.map +1 -1
  133. package/dist/cjs/components/toggle.js +1 -9
  134. package/dist/cjs/components/toggle.js.map +4 -4
  135. package/dist/cjs/components/toolbar.d.ts +80 -8
  136. package/dist/cjs/components/toolbar.d.ts.map +1 -1
  137. package/dist/cjs/components/toolbar.js +1 -1
  138. package/dist/cjs/components/toolbar.js.map +4 -4
  139. package/dist/cjs/components/virtual-menu.d.ts +3 -5
  140. package/dist/cjs/components/virtual-menu.d.ts.map +1 -1
  141. package/dist/cjs/components/virtual-menu.js +1 -1
  142. package/dist/cjs/components/virtual-menu.js.map +3 -3
  143. package/dist/cjs/helpers/extract-margin-props.d.ts +7 -7
  144. package/dist/cjs/hooks/use-scroll-edges.d.ts +4 -2
  145. package/dist/cjs/hooks/use-scroll-edges.d.ts.map +1 -1
  146. package/dist/cjs/hooks/use-scroll-edges.js +1 -1
  147. package/dist/cjs/hooks/use-scroll-edges.js.map +3 -3
  148. package/dist/cjs/index.js +5 -5
  149. package/dist/cjs/index.js.map +4 -4
  150. package/dist/cjs/props/index.js +1 -1
  151. package/dist/cjs/props/index.js.map +2 -2
  152. package/dist/esm/chunk-3VTS4C63.js +2 -0
  153. package/dist/esm/chunk-3VTS4C63.js.map +7 -0
  154. package/dist/esm/chunk-3WE4E2WQ.js +2 -0
  155. package/dist/esm/chunk-3WE4E2WQ.js.map +7 -0
  156. package/dist/esm/chunk-3XUY5WFA.js +2 -0
  157. package/dist/esm/chunk-3XUY5WFA.js.map +7 -0
  158. package/dist/esm/chunk-3XZOE2IQ.js +2 -0
  159. package/dist/esm/chunk-3XZOE2IQ.js.map +7 -0
  160. package/dist/esm/chunk-432YLNB3.js +2 -0
  161. package/dist/esm/chunk-432YLNB3.js.map +7 -0
  162. package/dist/esm/chunk-4QKZYCCH.js +2 -0
  163. package/dist/esm/chunk-4QKZYCCH.js.map +7 -0
  164. package/dist/esm/chunk-4R5EMVB3.js +2 -0
  165. package/dist/esm/chunk-4R5EMVB3.js.map +7 -0
  166. package/dist/esm/chunk-4ZOVV3TY.js +2 -0
  167. package/dist/esm/chunk-4ZOVV3TY.js.map +7 -0
  168. package/dist/esm/{chunk-IX5HIHVI.js → chunk-62ZGP4ET.js} +2 -2
  169. package/dist/esm/{chunk-IX5HIHVI.js.map → chunk-62ZGP4ET.js.map} +3 -3
  170. package/dist/esm/chunk-BGAJ2MDF.js +2 -0
  171. package/dist/esm/chunk-BGAJ2MDF.js.map +7 -0
  172. package/dist/esm/chunk-CHPT42BY.js +2 -0
  173. package/dist/esm/{chunk-Y3JYEEFB.js.map → chunk-CHPT42BY.js.map} +2 -2
  174. package/dist/esm/{chunk-KS4U4VPH.js → chunk-CMHUK7OG.js} +2 -2
  175. package/dist/esm/{chunk-KS4U4VPH.js.map → chunk-CMHUK7OG.js.map} +2 -2
  176. package/dist/esm/chunk-CN6F4REJ.js +2 -0
  177. package/dist/esm/chunk-CN6F4REJ.js.map +7 -0
  178. package/dist/esm/chunk-DUTZUWZP.js +2 -0
  179. package/dist/esm/chunk-DUTZUWZP.js.map +7 -0
  180. package/dist/esm/chunk-FDJV5RXX.js +2 -0
  181. package/dist/esm/chunk-FDJV5RXX.js.map +7 -0
  182. package/dist/esm/chunk-G2JD52O5.js +2 -0
  183. package/dist/esm/{chunk-23KT3D2Z.js.map → chunk-G2JD52O5.js.map} +3 -3
  184. package/dist/esm/{chunk-6DDOR73D.js → chunk-G4ETY2NP.js} +2 -2
  185. package/dist/esm/chunk-GPOCLDBR.js +2 -0
  186. package/dist/esm/chunk-GPOCLDBR.js.map +7 -0
  187. package/dist/esm/chunk-GYP66ZK2.js +2 -0
  188. package/dist/esm/chunk-GYP66ZK2.js.map +7 -0
  189. package/dist/esm/chunk-H5BYPX6V.js +2 -0
  190. package/dist/esm/chunk-H5BYPX6V.js.map +7 -0
  191. package/dist/esm/chunk-H5G7UECV.js +2 -0
  192. package/dist/esm/chunk-H5G7UECV.js.map +7 -0
  193. package/dist/esm/chunk-I4FLQELQ.js +2 -0
  194. package/dist/esm/chunk-I4FLQELQ.js.map +7 -0
  195. package/dist/esm/chunk-JYQGCXXI.js +2 -0
  196. package/dist/esm/chunk-JYQGCXXI.js.map +7 -0
  197. package/dist/esm/chunk-KA5UE2VN.js +2 -0
  198. package/dist/esm/chunk-KA5UE2VN.js.map +7 -0
  199. package/dist/esm/{chunk-QGCXTULQ.js → chunk-KEGCX5VM.js} +2 -2
  200. package/dist/esm/chunk-KVHKPUZ2.js +2 -0
  201. package/dist/esm/chunk-KVHKPUZ2.js.map +7 -0
  202. package/dist/esm/{chunk-FFG32ERA.js → chunk-N3WBEQWL.js} +3 -3
  203. package/dist/esm/chunk-N3WBEQWL.js.map +7 -0
  204. package/dist/esm/{chunk-HKPXDQ2B.js → chunk-NC3CJUE3.js} +2 -2
  205. package/dist/esm/chunk-P2MV6HLA.js +2 -0
  206. package/dist/esm/{chunk-7SS4UUJH.js.map → chunk-P2MV6HLA.js.map} +3 -3
  207. package/dist/esm/chunk-PALE5UWK.js +2 -0
  208. package/dist/esm/{chunk-DSPYHO3L.js.map → chunk-PALE5UWK.js.map} +2 -2
  209. package/dist/esm/chunk-PDMCLVYT.js +2 -0
  210. package/dist/esm/chunk-PDMCLVYT.js.map +7 -0
  211. package/dist/esm/chunk-PM6QY3JO.js +2 -0
  212. package/dist/esm/{chunk-ZEX2DECM.js.map → chunk-PM6QY3JO.js.map} +3 -3
  213. package/dist/esm/chunk-RKZVXVBN.js +2 -0
  214. package/dist/esm/chunk-RKZVXVBN.js.map +7 -0
  215. package/dist/esm/chunk-TXQZ5HLV.js +2 -0
  216. package/dist/esm/chunk-TXQZ5HLV.js.map +7 -0
  217. package/dist/esm/chunk-UKASIY6M.js +2 -0
  218. package/dist/esm/chunk-UKASIY6M.js.map +7 -0
  219. package/dist/esm/{chunk-OJQNLROL.js → chunk-UY6WJUNA.js} +2 -2
  220. package/dist/esm/chunk-V5O3TF57.js +2 -0
  221. package/dist/esm/{chunk-3KQE2PSJ.js.map → chunk-V5O3TF57.js.map} +3 -3
  222. package/dist/esm/chunk-VUNCI6A6.js +2 -0
  223. package/dist/esm/chunk-VUNCI6A6.js.map +7 -0
  224. package/dist/esm/{chunk-JBHRV364.js → chunk-VUPIJNG2.js} +2 -2
  225. package/dist/esm/chunk-W6BN5QLH.js +2 -0
  226. package/dist/esm/{chunk-ZNDCZM5A.js.map → chunk-W6BN5QLH.js.map} +2 -2
  227. package/dist/esm/chunk-WG5ORTIW.js +2 -0
  228. package/dist/esm/chunk-WG5ORTIW.js.map +7 -0
  229. package/dist/esm/chunk-WMVR2XBR.js +2 -0
  230. package/dist/esm/{chunk-XKSU3NLG.js.map → chunk-WMVR2XBR.js.map} +2 -2
  231. package/dist/esm/{chunk-NNZTSXKH.js → chunk-WX7SX5BN.js} +2 -2
  232. package/dist/esm/chunk-XOACTIBL.js +2 -0
  233. package/dist/esm/chunk-XOACTIBL.js.map +7 -0
  234. package/dist/esm/components/_internal/base-button.d.ts +11 -1
  235. package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
  236. package/dist/esm/components/_internal/base-button.js +1 -1
  237. package/dist/esm/components/_internal/menu-context.d.ts +2 -0
  238. package/dist/esm/components/_internal/menu-context.d.ts.map +1 -1
  239. package/dist/esm/components/_internal/menu-context.js +1 -1
  240. package/dist/esm/components/_internal/pane-chrome.d.ts +17 -2
  241. package/dist/esm/components/_internal/pane-chrome.d.ts.map +1 -1
  242. package/dist/esm/components/_internal/pane-chrome.js +1 -1
  243. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  244. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  245. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  246. package/dist/esm/components/accordion.d.ts +2 -2
  247. package/dist/esm/components/accordion.d.ts.map +1 -1
  248. package/dist/esm/components/accordion.js +1 -1
  249. package/dist/esm/components/alert-dialog.d.ts.map +1 -1
  250. package/dist/esm/components/alert-dialog.js +1 -1
  251. package/dist/esm/components/avatar.d.ts +1 -1
  252. package/dist/esm/components/avatar.d.ts.map +1 -1
  253. package/dist/esm/components/avatar.js +1 -1
  254. package/dist/esm/components/avatar.props.d.ts +8 -0
  255. package/dist/esm/components/avatar.props.d.ts.map +1 -1
  256. package/dist/esm/components/avatar.props.js +1 -1
  257. package/dist/esm/components/blockquote.d.ts +1 -1
  258. package/dist/esm/components/blockquote.d.ts.map +1 -1
  259. package/dist/esm/components/blockquote.js +1 -1
  260. package/dist/esm/components/button.js +1 -1
  261. package/dist/esm/components/chatbar.d.ts.map +1 -1
  262. package/dist/esm/components/chatbar.js +1 -1
  263. package/dist/esm/components/checkbox-group.d.ts.map +1 -1
  264. package/dist/esm/components/checkbox-group.js +1 -1
  265. package/dist/esm/components/checkbox-group.primitive.d.ts +12 -5
  266. package/dist/esm/components/checkbox-group.primitive.d.ts.map +1 -1
  267. package/dist/esm/components/checkbox-group.primitive.js +1 -1
  268. package/dist/esm/components/checkbox.js +1 -1
  269. package/dist/esm/components/chip.d.ts.map +1 -1
  270. package/dist/esm/components/chip.js +1 -1
  271. package/dist/esm/components/code.d.ts.map +1 -1
  272. package/dist/esm/components/code.js +1 -1
  273. package/dist/esm/components/combobox.js +1 -1
  274. package/dist/esm/components/context-menu.d.ts.map +1 -1
  275. package/dist/esm/components/context-menu.js +1 -1
  276. package/dist/esm/components/dialog.d.ts +1 -1
  277. package/dist/esm/components/dialog.d.ts.map +1 -1
  278. package/dist/esm/components/dialog.js +1 -1
  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/icons.d.ts +3 -1
  282. package/dist/esm/components/icons.d.ts.map +1 -1
  283. package/dist/esm/components/icons.js +1 -1
  284. package/dist/esm/components/index.d.ts +1 -1
  285. package/dist/esm/components/index.d.ts.map +1 -1
  286. package/dist/esm/components/index.js +1 -1
  287. package/dist/esm/components/message-scroller.d.ts.map +1 -1
  288. package/dist/esm/components/message-scroller.js +1 -1
  289. package/dist/esm/components/navbar.d.ts.map +1 -1
  290. package/dist/esm/components/navbar.js +1 -1
  291. package/dist/esm/components/notice.d.ts +4 -1
  292. package/dist/esm/components/notice.d.ts.map +1 -1
  293. package/dist/esm/components/notice.js +1 -1
  294. package/dist/esm/components/progress.d.ts.map +1 -1
  295. package/dist/esm/components/progress.js +1 -1
  296. package/dist/esm/components/schemas/button.schema.d.ts +2 -2
  297. package/dist/esm/components/schemas/toggle.schema.d.ts +1 -1
  298. package/dist/esm/components/scroll-area.d.ts +3 -1
  299. package/dist/esm/components/scroll-area.d.ts.map +1 -1
  300. package/dist/esm/components/scroll-area.js +1 -1
  301. package/dist/esm/components/segmented-control.d.ts +3 -1
  302. package/dist/esm/components/segmented-control.d.ts.map +1 -1
  303. package/dist/esm/components/segmented-control.js +1 -1
  304. package/dist/esm/components/select.d.ts.map +1 -1
  305. package/dist/esm/components/select.js +1 -1
  306. package/dist/esm/components/separator.d.ts.map +1 -1
  307. package/dist/esm/components/separator.js +1 -1
  308. package/dist/esm/components/sheet.d.ts +1 -0
  309. package/dist/esm/components/sheet.d.ts.map +1 -1
  310. package/dist/esm/components/sheet.js +1 -1
  311. package/dist/esm/components/shell.d.ts +12 -1
  312. package/dist/esm/components/shell.d.ts.map +1 -1
  313. package/dist/esm/components/shell.js +1 -1
  314. package/dist/esm/components/sidebar.d.ts.map +1 -1
  315. package/dist/esm/components/sidebar.js +1 -1
  316. package/dist/esm/components/slider.d.ts.map +1 -1
  317. package/dist/esm/components/slider.js +1 -1
  318. package/dist/esm/components/spinner.d.ts.map +1 -1
  319. package/dist/esm/components/spinner.js +1 -1
  320. package/dist/esm/components/table.d.ts.map +1 -1
  321. package/dist/esm/components/table.js +1 -1
  322. package/dist/esm/components/tabs.d.ts.map +1 -1
  323. package/dist/esm/components/tabs.js +1 -1
  324. package/dist/esm/components/text-area.js +1 -1
  325. package/dist/esm/components/text-field.js +1 -1
  326. package/dist/esm/components/toggle.d.ts +3 -2
  327. package/dist/esm/components/toggle.d.ts.map +1 -1
  328. package/dist/esm/components/toggle.js +1 -1
  329. package/dist/esm/components/toolbar.d.ts +80 -8
  330. package/dist/esm/components/toolbar.d.ts.map +1 -1
  331. package/dist/esm/components/toolbar.js +1 -1
  332. package/dist/esm/components/virtual-menu.d.ts +3 -5
  333. package/dist/esm/components/virtual-menu.d.ts.map +1 -1
  334. package/dist/esm/components/virtual-menu.js +1 -1
  335. package/dist/esm/helpers/extract-margin-props.d.ts +7 -7
  336. package/dist/esm/hooks/index.js +1 -1
  337. package/dist/esm/hooks/use-scroll-edges.d.ts +4 -2
  338. package/dist/esm/hooks/use-scroll-edges.d.ts.map +1 -1
  339. package/dist/esm/hooks/use-scroll-edges.js +1 -1
  340. package/dist/esm/index.js +1 -1
  341. package/dist/esm/props/index.js +1 -1
  342. package/package.json +1 -1
  343. package/src/components/_internal/base-button.tsx +51 -12
  344. package/src/components/_internal/base-sidebar-menu.css +8 -0
  345. package/src/components/_internal/menu-context.tsx +11 -0
  346. package/src/components/_internal/pane-chrome.tsx +45 -8
  347. package/src/components/accordion.css +35 -3
  348. package/src/components/accordion.tsx +12 -16
  349. package/src/components/alert-dialog.tsx +59 -161
  350. package/src/components/avatar.props.tsx +6 -0
  351. package/src/components/avatar.tsx +57 -71
  352. package/src/components/blockquote.tsx +8 -9
  353. package/src/components/chatbar.tsx +27 -20
  354. package/src/components/checkbox-group.primitive.tsx +40 -51
  355. package/src/components/checkbox-group.tsx +1 -9
  356. package/src/components/chip.css +18 -20
  357. package/src/components/chip.tsx +3 -4
  358. package/src/components/code.tsx +3 -2
  359. package/src/components/context-menu.tsx +23 -5
  360. package/src/components/dialog.tsx +59 -160
  361. package/src/components/dropdown-menu.tsx +8 -5
  362. package/src/components/icons.tsx +11 -1
  363. package/src/components/index.tsx +7 -0
  364. package/src/components/message-scroller.tsx +48 -26
  365. package/src/components/navbar.tsx +34 -69
  366. package/src/components/notice.tsx +6 -3
  367. package/src/components/progress.tsx +6 -3
  368. package/src/components/scroll-area.css +28 -2
  369. package/src/components/scroll-area.tsx +49 -3
  370. package/src/components/segmented-control.css +8 -130
  371. package/src/components/segmented-control.tsx +36 -5
  372. package/src/components/select.tsx +23 -3
  373. package/src/components/separator.tsx +13 -1
  374. package/src/components/sheet.css +7 -6
  375. package/src/components/sheet.tsx +76 -143
  376. package/src/components/shell.css +14 -0
  377. package/src/components/shell.tsx +29 -8
  378. package/src/components/sidebar.tsx +27 -16
  379. package/src/components/slider.tsx +51 -32
  380. package/src/components/spinner.tsx +10 -2
  381. package/src/components/table.tsx +18 -5
  382. package/src/components/tabs.css +34 -0
  383. package/src/components/tabs.tsx +0 -2
  384. package/src/components/text-area.css +2 -1
  385. package/src/components/text-area.tsx +1 -1
  386. package/src/components/text-field.tsx +1 -1
  387. package/src/components/toggle.tsx +21 -39
  388. package/src/components/toolbar.css +34 -0
  389. package/src/components/toolbar.tsx +432 -23
  390. package/src/components/virtual-menu.tsx +110 -37
  391. package/src/hooks/use-scroll-edges.ts +11 -2
  392. package/src/styles/utilities/truncate.css +10 -0
  393. package/styles.css +195 -185
  394. package/utilities.css +5 -0
  395. package/dist/esm/chunk-23KT3D2Z.js +0 -2
  396. package/dist/esm/chunk-3JA7SJDT.js +0 -2
  397. package/dist/esm/chunk-3JA7SJDT.js.map +0 -7
  398. package/dist/esm/chunk-3KQE2PSJ.js +0 -2
  399. package/dist/esm/chunk-5BWLY27A.js +0 -2
  400. package/dist/esm/chunk-5BWLY27A.js.map +0 -7
  401. package/dist/esm/chunk-6CK7UTNH.js +0 -2
  402. package/dist/esm/chunk-6CK7UTNH.js.map +0 -7
  403. package/dist/esm/chunk-6RK26HIY.js +0 -2
  404. package/dist/esm/chunk-6RK26HIY.js.map +0 -7
  405. package/dist/esm/chunk-7ESWH773.js +0 -2
  406. package/dist/esm/chunk-7ESWH773.js.map +0 -7
  407. package/dist/esm/chunk-7SS4UUJH.js +0 -2
  408. package/dist/esm/chunk-AB3QCCUM.js +0 -2
  409. package/dist/esm/chunk-AB3QCCUM.js.map +0 -7
  410. package/dist/esm/chunk-BEP4AH5V.js +0 -2
  411. package/dist/esm/chunk-BEP4AH5V.js.map +0 -7
  412. package/dist/esm/chunk-BOL3VVSN.js +0 -2
  413. package/dist/esm/chunk-BOL3VVSN.js.map +0 -7
  414. package/dist/esm/chunk-DBROSD2J.js +0 -2
  415. package/dist/esm/chunk-DBROSD2J.js.map +0 -7
  416. package/dist/esm/chunk-DSPYHO3L.js +0 -2
  417. package/dist/esm/chunk-E2D2VWUI.js +0 -2
  418. package/dist/esm/chunk-E2D2VWUI.js.map +0 -7
  419. package/dist/esm/chunk-EMNSA65L.js +0 -2
  420. package/dist/esm/chunk-EMNSA65L.js.map +0 -7
  421. package/dist/esm/chunk-FFG32ERA.js.map +0 -7
  422. package/dist/esm/chunk-FHPHEIYJ.js +0 -2
  423. package/dist/esm/chunk-FHPHEIYJ.js.map +0 -7
  424. package/dist/esm/chunk-FJFBM7HW.js +0 -2
  425. package/dist/esm/chunk-FJFBM7HW.js.map +0 -7
  426. package/dist/esm/chunk-FYT7TYGS.js +0 -2
  427. package/dist/esm/chunk-FYT7TYGS.js.map +0 -7
  428. package/dist/esm/chunk-GLV7VGBH.js +0 -2
  429. package/dist/esm/chunk-GLV7VGBH.js.map +0 -7
  430. package/dist/esm/chunk-HIKMKGPT.js +0 -2
  431. package/dist/esm/chunk-HIKMKGPT.js.map +0 -7
  432. package/dist/esm/chunk-L2R62BOB.js +0 -2
  433. package/dist/esm/chunk-L2R62BOB.js.map +0 -7
  434. package/dist/esm/chunk-LHIS3UKQ.js +0 -2
  435. package/dist/esm/chunk-LHIS3UKQ.js.map +0 -7
  436. package/dist/esm/chunk-NQDMTOGB.js +0 -2
  437. package/dist/esm/chunk-NQDMTOGB.js.map +0 -7
  438. package/dist/esm/chunk-Q6MFPATL.js +0 -2
  439. package/dist/esm/chunk-Q6MFPATL.js.map +0 -7
  440. package/dist/esm/chunk-QOHJIF25.js +0 -2
  441. package/dist/esm/chunk-QOHJIF25.js.map +0 -7
  442. package/dist/esm/chunk-R4XJNQX5.js +0 -2
  443. package/dist/esm/chunk-R4XJNQX5.js.map +0 -7
  444. package/dist/esm/chunk-UE3HATOA.js +0 -2
  445. package/dist/esm/chunk-UE3HATOA.js.map +0 -7
  446. package/dist/esm/chunk-V32EP3S7.js +0 -2
  447. package/dist/esm/chunk-V32EP3S7.js.map +0 -7
  448. package/dist/esm/chunk-XKSU3NLG.js +0 -2
  449. package/dist/esm/chunk-XRCMPBAY.js +0 -2
  450. package/dist/esm/chunk-XRCMPBAY.js.map +0 -7
  451. package/dist/esm/chunk-Y3JYEEFB.js +0 -2
  452. package/dist/esm/chunk-YZM54IJE.js +0 -2
  453. package/dist/esm/chunk-YZM54IJE.js.map +0 -7
  454. package/dist/esm/chunk-ZEX2DECM.js +0 -2
  455. package/dist/esm/chunk-ZJI2IK7C.js +0 -2
  456. package/dist/esm/chunk-ZJI2IK7C.js.map +0 -7
  457. package/dist/esm/chunk-ZNDCZM5A.js +0 -2
  458. /package/dist/esm/{chunk-6DDOR73D.js.map → chunk-G4ETY2NP.js.map} +0 -0
  459. /package/dist/esm/{chunk-QGCXTULQ.js.map → chunk-KEGCX5VM.js.map} +0 -0
  460. /package/dist/esm/{chunk-HKPXDQ2B.js.map → chunk-NC3CJUE3.js.map} +0 -0
  461. /package/dist/esm/{chunk-OJQNLROL.js.map → chunk-UY6WJUNA.js.map} +0 -0
  462. /package/dist/esm/{chunk-JBHRV364.js.map → chunk-VUPIJNG2.js.map} +0 -0
  463. /package/dist/esm/{chunk-NNZTSXKH.js.map → chunk-WX7SX5BN.js.map} +0 -0
@@ -2,13 +2,7 @@
2
2
 
3
3
  import * as React from 'react';
4
4
  import { Checkbox as CheckboxPrimitive, Direction } from 'radix-ui';
5
- import {
6
- Context,
7
- Primitive,
8
- useComposedRefs,
9
- RovingFocus,
10
- useControllableState,
11
- } from 'radix-ui/internal';
5
+ import { Context, Primitive, useControllableState } from 'radix-ui/internal';
12
6
 
13
7
  const { useDirection } = Direction;
14
8
 
@@ -20,9 +14,8 @@ const CHECKBOX_GROUP_NAME = 'CheckboxGroup';
20
14
  type ScopedProps<P> = P & { __scopeCheckboxGroup?: Context.Scope };
21
15
  const [createCheckboxGroupContext, createCheckboxGroupScope] = Context.createContextScope(
22
16
  CHECKBOX_GROUP_NAME,
23
- [RovingFocus.createRovingFocusGroupScope, CheckboxPrimitive.createCheckboxScope],
17
+ [CheckboxPrimitive.createCheckboxScope],
24
18
  );
25
- const useRovingFocusGroupScope = RovingFocus.createRovingFocusGroupScope();
26
19
  const useCheckboxScope = CheckboxPrimitive.createCheckboxScope();
27
20
 
28
21
  type CheckboxGroupContextValue = {
@@ -38,15 +31,22 @@ const [CheckboxGroupProvider, useCheckboxGroupContext] =
38
31
  createCheckboxGroupContext<CheckboxGroupContextValue>(CHECKBOX_GROUP_NAME);
39
32
 
40
33
  type CheckboxGroupElement = React.ElementRef<typeof Primitive.div>;
41
- type RovingFocusGroupProps = React.ComponentPropsWithoutRef<typeof RovingFocus.Root>;
42
34
  type PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;
43
35
  interface CheckboxGroupProps extends PrimitiveDivProps {
44
36
  name?: CheckboxGroupContextValue['name'];
45
37
  required?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>['required'];
46
38
  disabled?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>['disabled'];
47
- dir?: RovingFocusGroupProps['dir'];
48
- orientation?: RovingFocusGroupProps['orientation'];
49
- loop?: RovingFocusGroupProps['loop'];
39
+ dir?: 'ltr' | 'rtl';
40
+ /**
41
+ * @deprecated Has no effect. Each checkbox is its own tab stop, as with native checkboxes,
42
+ * so there is no arrow-key navigation to orient.
43
+ */
44
+ orientation?: 'horizontal' | 'vertical';
45
+ /**
46
+ * @deprecated Has no effect. Each checkbox is its own tab stop, as with native checkboxes,
47
+ * so there is no arrow-key navigation to loop.
48
+ */
49
+ loop?: boolean;
50
50
  defaultValue?: string[];
51
51
  value?: CheckboxGroupContextValue['value'];
52
52
  onValueChange?: (value: string[]) => void;
@@ -61,13 +61,12 @@ const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>
61
61
  value: valueProp,
62
62
  required = false,
63
63
  disabled = false,
64
- orientation,
64
+ orientation: _orientation,
65
65
  dir,
66
- loop = true,
66
+ loop: _loop,
67
67
  onValueChange,
68
68
  ...groupProps
69
69
  } = props;
70
- const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeCheckboxGroup);
71
70
  const direction = useDirection(dir);
72
71
  const [value = [], setValue] = useControllableState({
73
72
  prop: valueProp,
@@ -96,21 +95,13 @@ const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>
96
95
  onItemCheck={handleItemCheck}
97
96
  onItemUncheck={handleItemUncheck}
98
97
  >
99
- <RovingFocus.Root
100
- asChild
101
- {...rovingFocusGroupScope}
102
- orientation={orientation}
98
+ <Primitive.div
99
+ role="group"
100
+ data-disabled={disabled ? '' : undefined}
103
101
  dir={direction}
104
- loop={loop}
105
- >
106
- <Primitive.div
107
- role="group"
108
- data-disabled={disabled ? '' : undefined}
109
- dir={direction}
110
- {...groupProps}
111
- ref={forwardedRef}
112
- />
113
- </RovingFocus.Root>
102
+ {...groupProps}
103
+ ref={forwardedRef}
104
+ />
114
105
  </CheckboxGroupProvider>
115
106
  );
116
107
  },
@@ -136,31 +127,29 @@ const CheckboxGroupItem = React.forwardRef<CheckboxGroupItemElement, CheckboxGro
136
127
  const { __scopeCheckboxGroup, disabled, ...itemProps } = props;
137
128
  const context = useCheckboxGroupContext(ITEM_NAME, __scopeCheckboxGroup);
138
129
  const isDisabled = context.disabled || disabled;
139
- const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeCheckboxGroup);
140
130
  const checkboxScope = useCheckboxScope(__scopeCheckboxGroup);
141
- const ref = React.useRef<React.ElementRef<typeof CheckboxPrimitive.Root>>(null);
142
- const composedRefs = useComposedRefs(forwardedRef, ref);
143
131
  const checked = context.value?.includes(itemProps.value);
132
+ // A required group needs at least one box checked, not every box: the items are
133
+ // required only while none is checked.
134
+ const isRequired = context.required && (context.value?.length ?? 0) === 0;
144
135
 
145
136
  return (
146
- <RovingFocus.Item asChild {...rovingFocusGroupScope} focusable={!isDisabled} active={checked}>
147
- <CheckboxPrimitive.Root
148
- name={context.name}
149
- disabled={isDisabled}
150
- required={context.required}
151
- checked={checked}
152
- {...checkboxScope}
153
- {...itemProps}
154
- ref={composedRefs}
155
- onCheckedChange={(checked) => {
156
- if (checked) {
157
- context.onItemCheck(props.value);
158
- } else {
159
- context.onItemUncheck(props.value);
160
- }
161
- }}
162
- />
163
- </RovingFocus.Item>
137
+ <CheckboxPrimitive.Root
138
+ name={context.name}
139
+ disabled={isDisabled}
140
+ required={isRequired}
141
+ checked={checked}
142
+ {...checkboxScope}
143
+ {...itemProps}
144
+ ref={forwardedRef}
145
+ onCheckedChange={(checked) => {
146
+ if (checked) {
147
+ context.onItemCheck(props.value);
148
+ } else {
149
+ context.onItemUncheck(props.value);
150
+ }
151
+ }}
152
+ />
164
153
  );
165
154
  },
166
155
  );
@@ -76,21 +76,13 @@ const CheckboxGroupItem = React.forwardRef<CheckboxGroupItemElement, CheckboxGro
76
76
  const { __scopeCheckboxGroup, children, className, style, ...props } = _props;
77
77
  const { size } = useCheckboxGroupContext('CheckboxGroupItem', __scopeCheckboxGroup);
78
78
 
79
- // Helper to safely convert size to Text-compatible size
80
- const getTextSize = (sizeValue: any): '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' => {
81
- if (typeof sizeValue === 'string' && /^[1-9]$/.test(sizeValue)) {
82
- return sizeValue as any;
83
- }
84
- return '3';
85
- };
86
-
87
79
  // Render `<Text as="label">` if children are provided, otherwise render
88
80
  // the solo checkbox to allow building out your custom layouts with it.
89
81
  if (children) {
90
82
  return (
91
83
  <Text
92
84
  as="label"
93
- size={getTextSize(size)}
85
+ size={size}
94
86
  className={classNames('kui-CheckboxGroupItem', className)}
95
87
  style={style}
96
88
  >
@@ -19,6 +19,20 @@
19
19
 
20
20
  isolation: isolate;
21
21
 
22
+ /* An icon is one line tall, so it never changes the chip's height. */
23
+ /* stylelint-disable-next-line selector-max-type */
24
+ & :where(svg) {
25
+ flex: none;
26
+ width: var(--chip-icon-size);
27
+ height: var(--chip-icon-size);
28
+ }
29
+
30
+ /* A chip with a tooltip is focusable, and shows the ring every control does. */
31
+ &:where(:focus-visible) {
32
+ outline: var(--focus-ring-width) solid var(--focus-8);
33
+ outline-offset: var(--focus-ring-offset);
34
+ }
35
+
22
36
  /* Forced colors support */
23
37
  @media (forced-colors: active) {
24
38
  border: 1px solid CanvasText;
@@ -37,6 +51,7 @@
37
51
  @breakpoints {
38
52
  .kui-Chip {
39
53
  &:where(.kui-r-size-1) {
54
+ --chip-icon-size: var(--icon-size-1);
40
55
  font-size: var(--font-size-1);
41
56
  line-height: var(--line-height-1);
42
57
  letter-spacing: var(--letter-spacing-1);
@@ -45,6 +60,7 @@
45
60
  border-radius: max(calc(var(--radius-1) * var(--spacing-multiplier-medium)), var(--radius-full));
46
61
  }
47
62
  &:where(.kui-r-size-2) {
63
+ --chip-icon-size: var(--icon-size-2);
48
64
  font-size: var(--font-size-1);
49
65
  line-height: var(--line-height-1);
50
66
  letter-spacing: var(--letter-spacing-1);
@@ -57,6 +73,7 @@
57
73
  }
58
74
  }
59
75
  &:where(.kui-r-size-3) {
76
+ --chip-icon-size: var(--icon-size-3);
60
77
  font-size: var(--font-size-2);
61
78
  line-height: var(--line-height-2);
62
79
  letter-spacing: var(--letter-spacing-2);
@@ -70,6 +87,7 @@
70
87
  }
71
88
  }
72
89
  &:where(.kui-r-size-4) {
90
+ --chip-icon-size: var(--icon-size-4);
73
91
  font-size: var(--font-size-3);
74
92
  line-height: var(--line-height-3);
75
93
  letter-spacing: var(--letter-spacing-3);
@@ -95,14 +113,6 @@
95
113
  .kui-Chip:where(.kui-variant-solid) {
96
114
  background-color: var(--accent-solid);
97
115
  color: var(--accent-solid-contrast);
98
-
99
- &:where([data-disabled]) {
100
- color: var(--neutral-a8);
101
- background-color: var(--neutral-a3);
102
- outline: none;
103
- filter: none;
104
- cursor: default;
105
- }
106
116
  }
107
117
 
108
118
  /* surface */
@@ -117,22 +127,10 @@
117
127
 
118
128
  .kui-Chip:where(.kui-variant-soft, .kui-variant-ghost) {
119
129
  color: var(--accent-ink);
120
-
121
- &:where([data-disabled]) {
122
- color: var(--neutral-a8);
123
- background-color: var(--neutral-a3);
124
- cursor: default;
125
- }
126
130
  }
127
131
 
128
132
  .kui-Chip:where(.kui-variant-soft) {
129
133
  background-color: var(--accent-3);
130
-
131
- &:where([data-disabled]) {
132
- color: var(--neutral-a8);
133
- background-color: var(--neutral-a3);
134
- cursor: default;
135
- }
136
134
  }
137
135
 
138
136
  /* outline */
@@ -41,15 +41,14 @@ const Chip = React.forwardRef<ChipElement, ChipProps>((props, forwardedRef) => {
41
41
  ...chipProps
42
42
  } = extractProps(props, chipPropDefs);
43
43
 
44
-
45
-
46
- // Memoize component variable to prevent unnecessary re-renders
47
- const Comp = React.useMemo(() => (asChild ? Slot.Root : 'span'), [asChild]);
44
+ const Comp = asChild ? Slot.Root : 'span';
48
45
 
49
46
  const chip = (
50
47
  <Comp
51
48
  data-accent-color={color}
52
49
  data-radius={radius}
50
+ // A tooltip opens on focus, so a chip that has one joins the tab order.
51
+ tabIndex={tooltip ? 0 : undefined}
53
52
  {...chipProps}
54
53
  ref={forwardedRef}
55
54
  className={classNames('kui-reset', 'kui-Chip', className)}
@@ -18,8 +18,9 @@ const Code = React.forwardRef<CodeElement, CodeProps>((props, forwardedRef) => {
18
18
  props,
19
19
  codePropDefs,
20
20
  );
21
- // Code ghost color prop should work as text color by default
22
- const resolvedColor = props.variant === 'ghost' ? color || undefined : color;
21
+ // A ghost Code has no fill, so it rests on the surrounding text colour: only a colour the caller
22
+ // set reaches it, never the gray default.
23
+ const resolvedColor = props.variant === 'ghost' && !props.color ? undefined : color;
23
24
  const Comp = asChild ? Slot.Root : 'code';
24
25
  return (
25
26
  <Comp
@@ -4,11 +4,11 @@
4
4
  */
5
5
  'use client';
6
6
 
7
- import { warnDeprecated } from '../helpers/warn-deprecated.js';
8
7
  import * as React from 'react';
9
8
  import { VirtualMenu } from './virtual-menu.js';
10
9
  import classNames from 'classnames';
11
10
  import { ContextMenu as ContextMenuPrimitive, Slot } from 'radix-ui';
11
+ import { useCallbackRef } from 'radix-ui/internal';
12
12
 
13
13
  import { ScrollArea } from './scroll-area.js';
14
14
  import {
@@ -23,7 +23,7 @@ import { ThickCheckIcon, ThickChevronRightIcon, ThickDotIcon } from './icons.js'
23
23
  import { extractProps } from '../helpers/extract-props.js';
24
24
  import { useThemeSizeProps } from '../helpers/theme-size.js';
25
25
  import { requireReactElement } from '../helpers/require-react-element.js';
26
- import { MenuProvider } from './_internal/menu-context.js';
26
+ import { MenuCloseProvider, MenuProvider } from './_internal/menu-context.js';
27
27
  import {
28
28
  MenuShortcut,
29
29
  getMenuAlignOffset,
@@ -36,9 +36,27 @@ import type { GetPropDefTypes, Responsive } from '../props/prop-def.js';
36
36
 
37
37
  interface ContextMenuRootProps
38
38
  extends React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Root> {}
39
- const ContextMenuRoot: React.FC<ContextMenuRootProps> = (props) => (
40
- <ContextMenuPrimitive.Root {...props} />
41
- );
39
+ const ContextMenuRoot: React.FC<ContextMenuRootProps> = (props) => {
40
+ const { open: openProp, onOpenChange } = props;
41
+ const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);
42
+ const open = openProp ?? uncontrolledOpen;
43
+
44
+ const handleOpenChangeProp = useCallbackRef(onOpenChange);
45
+ const handleOpenChange = React.useCallback(
46
+ (next: boolean) => {
47
+ setUncontrolledOpen(next);
48
+ handleOpenChangeProp(next);
49
+ },
50
+ [handleOpenChangeProp],
51
+ );
52
+ const close = React.useCallback(() => handleOpenChange(false), [handleOpenChange]);
53
+
54
+ return (
55
+ <MenuCloseProvider value={close}>
56
+ <ContextMenuPrimitive.Root {...props} open={open} onOpenChange={handleOpenChange} />
57
+ </MenuCloseProvider>
58
+ );
59
+ };
42
60
  ContextMenuRoot.displayName = 'ContextMenu.Root';
43
61
 
44
62
  type ContextMenuTriggerElement = React.ElementRef<typeof ContextMenuPrimitive.Trigger>;
@@ -12,196 +12,95 @@ import { requireReactElement } from '../helpers/require-react-element.js';
12
12
  import { useBodyPointerEventsCleanup } from '../hooks/use-body-pointer-events-cleanup.js';
13
13
 
14
14
  import type { DialogContentOwnProps } from './dialog.props.js';
15
- import type {
16
- ComponentPropsWithout,
17
- RemovedProps,
18
- ComponentPropsAs,
19
- } from '../helpers/component-props.js';
15
+ import type { ComponentPropsWithout, RemovedProps, ComponentPropsAs } from '../helpers/component-props.js';
20
16
 
21
17
  interface DialogRootProps extends ComponentPropsWithout<typeof DialogPrimitive.Root, 'modal'> {}
22
18
  const DialogRoot: React.FC<DialogRootProps> = (props) => <DialogPrimitive.Root {...props} modal />;
23
19
  DialogRoot.displayName = 'Dialog.Root';
24
20
 
25
21
  type DialogTriggerElement = React.ElementRef<typeof DialogPrimitive.Trigger>;
26
- interface DialogTriggerProps
27
- extends ComponentPropsWithout<typeof DialogPrimitive.Trigger, RemovedProps> {}
28
- const DialogTrigger = React.forwardRef<DialogTriggerElement, DialogTriggerProps>(
29
- ({ children, ...props }, forwardedRef) => (
30
- <DialogPrimitive.Trigger {...props} ref={forwardedRef} asChild>
31
- {requireReactElement(children)}
32
- </DialogPrimitive.Trigger>
33
- ),
34
- );
22
+ interface DialogTriggerProps extends ComponentPropsWithout<typeof DialogPrimitive.Trigger, RemovedProps> {}
23
+ const DialogTrigger = React.forwardRef<DialogTriggerElement, DialogTriggerProps>(({ children, ...props }, forwardedRef) => (
24
+ <DialogPrimitive.Trigger {...props} ref={forwardedRef} asChild>
25
+ {requireReactElement(children)}
26
+ </DialogPrimitive.Trigger>
27
+ ));
35
28
  DialogTrigger.displayName = 'Dialog.Trigger';
36
29
 
37
30
  // Split once at module scope. `extractProps` memoises on the identity of the
38
31
  // prop def objects it is handed, so rebuilding these per render would recompile
39
32
  // them on every render.
40
- const {
41
- align: alignPropDef,
42
- ...contentPropDefs
43
- } = dialogContentPropDefs;
33
+ const { align: alignPropDef, ...contentPropDefs } = dialogContentPropDefs;
44
34
  const alignPropDefs = { align: alignPropDef };
45
35
 
46
36
  type DialogContentElement = React.ElementRef<typeof DialogPrimitive.Content>;
47
- interface DialogContentProps
48
- extends ComponentPropsWithout<typeof DialogPrimitive.Content, RemovedProps>,
49
- DialogContentOwnProps {
37
+ interface DialogContentProps extends ComponentPropsWithout<typeof DialogPrimitive.Content, RemovedProps>, DialogContentOwnProps {
50
38
  container?: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>['container'];
51
39
  }
52
- const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>(
53
- ({ align, ...ownProps }, forwardedRef) => {
54
- const props = useThemeSizeProps(ownProps, contentPropDefs.size);
55
- const { className: alignClassName } = extractProps({ align }, alignPropDefs);
56
-
57
- const {
58
- className,
59
- forceMount,
60
- container,
61
- ...contentProps
62
- } = extractProps(props, contentPropDefs);
63
-
64
- // Focus management
65
- const contentRef = React.useRef<HTMLDivElement>(null);
66
- const combinedRef = React.useMemo(
67
- () => (node: HTMLDivElement | null) => {
68
- contentRef.current = node;
69
- if (typeof forwardedRef === 'function') {
70
- forwardedRef(node);
71
- } else if (forwardedRef) {
72
- forwardedRef.current = node;
73
- }
74
- },
75
- [forwardedRef],
76
- );
77
-
78
- // Cleanup stuck pointer-events on body
79
- useBodyPointerEventsCleanup();
80
-
81
- // Focus trap effect
82
- React.useEffect(() => {
83
- // SSR safety - only run on client
84
- if (typeof window === 'undefined') return;
85
-
86
- const content = contentRef.current;
87
- if (!content) return;
88
-
89
- const focusableElements = content.querySelectorAll(
90
- 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
91
- );
92
-
93
- if (focusableElements.length === 0) return;
94
-
95
- const firstElement = focusableElements[0] as HTMLElement;
96
- const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;
97
-
98
- const handleKeyDown = (event: KeyboardEvent) => {
99
- if (event.key === 'Tab') {
100
- if (event.shiftKey) {
101
- if (document.activeElement === firstElement) {
102
- event.preventDefault();
103
- lastElement.focus();
104
- }
105
- } else {
106
- if (document.activeElement === lastElement) {
107
- event.preventDefault();
108
- firstElement.focus();
109
- }
110
- }
111
- }
112
- };
113
-
114
- content.addEventListener('keydown', handleKeyDown);
115
-
116
- // Focus first element when dialog opens
117
- firstElement.focus();
118
-
119
- return () => {
120
- content.removeEventListener('keydown', handleKeyDown);
121
- };
122
- }, []);
123
-
124
- return (
125
- <DialogPrimitive.Portal container={container} forceMount={forceMount}>
126
- <Theme asChild>
127
- <DialogPrimitive.Overlay className="kui-BaseDialogOverlay kui-DialogOverlay">
128
- <div className="kui-BaseDialogScroll kui-DialogScroll">
129
- <div
130
- className={`kui-BaseDialogScrollPadding kui-DialogScrollPadding ${alignClassName}`}
131
- >
132
- <DialogPrimitive.Content
133
- {...contentProps}
134
- ref={combinedRef}
135
- className={classNames('kui-BaseDialogContent', 'kui-DialogContent', className)}
136
- tabIndex={-1}
137
- role="dialog"
138
- aria-modal="true"
139
- onCloseAutoFocus={(event) => {
140
- // Prevent default focus behavior
141
- event.preventDefault();
142
- // Restore pointer-events to body (Radix UI fix for issue #1241)
143
- document.body.style.pointerEvents = '';
144
- }}
145
- />
146
- {/* ARIA live region for screen reader announcements */}
147
- <div
148
- aria-live="polite"
149
- aria-atomic="true"
150
- className="kui-sr-only"
151
- id="dialog-announcement"
152
- />
153
- </div>
40
+ const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>(({ align, ...ownProps }, forwardedRef) => {
41
+ const props = useThemeSizeProps(ownProps, contentPropDefs.size);
42
+ const { className: alignClassName } = extractProps({ align }, alignPropDefs);
43
+
44
+ const { className, forceMount, container, onCloseAutoFocus, ...contentProps } = extractProps(props, contentPropDefs);
45
+
46
+ // Cleanup stuck pointer-events on body
47
+ useBodyPointerEventsCleanup();
48
+
49
+ return (
50
+ <DialogPrimitive.Portal container={container} forceMount={forceMount}>
51
+ <Theme asChild>
52
+ <DialogPrimitive.Overlay className="kui-BaseDialogOverlay kui-DialogOverlay">
53
+ <div className="kui-BaseDialogScroll kui-DialogScroll">
54
+ <div className={`kui-BaseDialogScrollPadding kui-DialogScrollPadding ${alignClassName}`}>
55
+ <DialogPrimitive.Content
56
+ {...contentProps}
57
+ ref={forwardedRef}
58
+ className={classNames('kui-BaseDialogContent', 'kui-DialogContent', className)}
59
+ aria-modal="true"
60
+ onCloseAutoFocus={(event) => {
61
+ // Radix returns focus to the trigger unless the caller prevents it.
62
+ onCloseAutoFocus?.(event);
63
+ // Restore pointer-events to body (Radix UI fix for issue #1241)
64
+ document.body.style.pointerEvents = '';
65
+ }}
66
+ />
154
67
  </div>
155
- </DialogPrimitive.Overlay>
156
- </Theme>
157
- </DialogPrimitive.Portal>
158
- );
159
- },
160
- );
68
+ </div>
69
+ </DialogPrimitive.Overlay>
70
+ </Theme>
71
+ </DialogPrimitive.Portal>
72
+ );
73
+ });
161
74
  DialogContent.displayName = 'Dialog.Content';
162
75
 
163
76
  type DialogTitleElement = React.ElementRef<typeof Heading>;
164
77
  type DialogTitleProps = ComponentPropsWithout<typeof Heading, 'asChild'>;
165
- const DialogTitle = React.forwardRef<DialogTitleElement, DialogTitleProps>(
166
- (props, forwardedRef) => (
167
- <DialogPrimitive.Title asChild>
168
- <Heading size="5" trim="start" {...props} asChild={false} ref={forwardedRef} />
169
- </DialogPrimitive.Title>
170
- ),
171
- );
78
+ const DialogTitle = React.forwardRef<DialogTitleElement, DialogTitleProps>((props, forwardedRef) => (
79
+ <DialogPrimitive.Title asChild>
80
+ <Heading size="5" trim="start" {...props} asChild={false} ref={forwardedRef} />
81
+ </DialogPrimitive.Title>
82
+ ));
172
83
  DialogTitle.displayName = 'Dialog.Title';
173
84
 
174
85
  type DialogDescriptionElement = HTMLParagraphElement;
175
86
  type DialogDescriptionProps = ComponentPropsAs<typeof Text, 'p'>;
176
- const DialogDescription = React.forwardRef<DialogDescriptionElement, DialogDescriptionProps>(
177
- (props, forwardedRef) => (
178
- <DialogPrimitive.Description asChild>
179
- <Text as="p" size="3" {...props} asChild={false} ref={forwardedRef} />
180
- </DialogPrimitive.Description>
181
- ),
182
- );
87
+ const DialogDescription = React.forwardRef<DialogDescriptionElement, DialogDescriptionProps>((props, forwardedRef) => (
88
+ <DialogPrimitive.Description asChild>
89
+ <Text as="p" size="3" {...props} asChild={false} ref={forwardedRef} />
90
+ </DialogPrimitive.Description>
91
+ ));
183
92
  DialogDescription.displayName = 'Dialog.Description';
184
93
 
185
94
  type DialogCloseElement = React.ElementRef<typeof DialogPrimitive.Close>;
186
- interface DialogCloseProps
187
- extends ComponentPropsWithout<typeof DialogPrimitive.Close, RemovedProps> {}
188
- const DialogClose = React.forwardRef<DialogCloseElement, DialogCloseProps>(
189
- ({ children, ...props }, forwardedRef) => (
190
- <DialogPrimitive.Close {...props} ref={forwardedRef} asChild>
191
- {requireReactElement(children)}
192
- </DialogPrimitive.Close>
193
- ),
194
- );
95
+ interface DialogCloseProps extends ComponentPropsWithout<typeof DialogPrimitive.Close, RemovedProps> {}
96
+ const DialogClose = React.forwardRef<DialogCloseElement, DialogCloseProps>(({ children, ...props }, forwardedRef) => (
97
+ <DialogPrimitive.Close {...props} ref={forwardedRef} asChild>
98
+ {requireReactElement(children)}
99
+ </DialogPrimitive.Close>
100
+ ));
195
101
  DialogClose.displayName = 'Dialog.Close';
196
102
 
197
- export {
198
- DialogRoot as Root,
199
- DialogTrigger as Trigger,
200
- DialogContent as Content,
201
- DialogTitle as Title,
202
- DialogDescription as Description,
203
- DialogClose as Close,
204
- };
103
+ export { DialogRoot as Root, DialogTrigger as Trigger, DialogContent as Content, DialogTitle as Title, DialogDescription as Description, DialogClose as Close };
205
104
 
206
105
  export type {
207
106
  DialogRootProps as RootProps,
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
 
3
- import { warnDeprecated } from '../helpers/warn-deprecated.js';
4
3
  import * as React from 'react';
5
4
  import { VirtualMenu } from './virtual-menu.js';
6
5
  import classNames from 'classnames';
@@ -30,7 +29,7 @@ import {
30
29
  useStackEntry,
31
30
  useSubContext,
32
31
  } from './_internal/dropdown-menu-drill-down.js';
33
- import { MenuProvider } from './_internal/menu-context.js';
32
+ import { MenuCloseProvider, MenuProvider } from './_internal/menu-context.js';
34
33
  import {
35
34
  MenuShortcut,
36
35
  getMenuAlignOffset,
@@ -66,9 +65,13 @@ const DropdownMenuRoot: React.FC<DropdownMenuRootProps> = (props) => {
66
65
  [handleOpenChangeProp],
67
66
  );
68
67
 
68
+ const close = React.useCallback(() => handleOpenChange(false), [handleOpenChange]);
69
+
69
70
  return (
70
71
  <DropdownMenuOpenContext.Provider value={open}>
71
- <DropdownMenuPrimitive.Root {...props} onOpenChange={handleOpenChange} />
72
+ <MenuCloseProvider value={close}>
73
+ <DropdownMenuPrimitive.Root {...props} open={open} onOpenChange={handleOpenChange} />
74
+ </MenuCloseProvider>
72
75
  </DropdownMenuOpenContext.Provider>
73
76
  );
74
77
  };
@@ -338,7 +341,7 @@ const DropdownMenuRadioItem = React.forwardRef<
338
341
  className,
339
342
  )}
340
343
  >
341
- {children}
344
+ <Slot.Slottable>{children}</Slot.Slottable>
342
345
  <DropdownMenuPrimitive.ItemIndicator className="kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator">
343
346
  <ThickDotIcon className="kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon" />
344
347
  </DropdownMenuPrimitive.ItemIndicator>
@@ -379,7 +382,7 @@ const DropdownMenuCheckboxItem = React.forwardRef<
379
382
  className,
380
383
  )}
381
384
  >
382
- {children}
385
+ <Slot.Slottable>{children}</Slot.Slottable>
383
386
  <DropdownMenuPrimitive.ItemIndicator className="kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator">
384
387
  <ThickCheckIcon className="kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon" />
385
388
  </DropdownMenuPrimitive.ItemIndicator>
@@ -146,4 +146,14 @@ const FileTextIcon = React.forwardRef<IconElement, IconProps>((_props, _forwarde
146
146
  });
147
147
  FileTextIcon.displayName = 'FileTextIcon';
148
148
 
149
- export { CloseIcon, PaperclipIcon, FileIcon, FileTextIcon };
149
+ /** The tick a button shows in place of its icon while `done`. Drawn on the 24 grid at the icon set's stroke. */
150
+ const TickIcon = React.forwardRef<IconElement, IconProps>((props, forwardedRef) => {
151
+ return (
152
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" {...props} ref={forwardedRef}>
153
+ <path d="M5 12.75L9.5 17.25L19 7.25" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
154
+ </svg>
155
+ );
156
+ });
157
+ TickIcon.displayName = 'TickIcon';
158
+
159
+ export { CloseIcon, PaperclipIcon, FileIcon, FileTextIcon, TickIcon };