@arolariu/components 1.0.0 → 2.0.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 (451) hide show
  1. package/CHANGELOG.md +89 -0
  2. package/EXAMPLES.md +2510 -0
  3. package/dist/components/ui/accordion.js +3 -3
  4. package/dist/components/ui/accordion.js.map +1 -1
  5. package/dist/components/ui/accordion_module.css.map +1 -1
  6. package/dist/components/ui/alert-dialog.d.ts +4 -16
  7. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  8. package/dist/components/ui/alert-dialog.js +21 -17
  9. package/dist/components/ui/alert-dialog.js.map +1 -1
  10. package/dist/components/ui/alert-dialog_module.css +1 -1
  11. package/dist/components/ui/alert-dialog_module.css.map +1 -1
  12. package/dist/components/ui/alert.js +4 -4
  13. package/dist/components/ui/alert.js.map +1 -1
  14. package/dist/components/ui/alert_module.css.map +1 -1
  15. package/dist/components/ui/aspect-ratio.js +2 -2
  16. package/dist/components/ui/aspect-ratio.js.map +1 -1
  17. package/dist/components/ui/aspect-ratio_module.css.map +1 -1
  18. package/dist/components/ui/async-boundary.js +2 -2
  19. package/dist/components/ui/async-boundary.js.map +1 -1
  20. package/dist/components/ui/avatar.d.ts +3 -12
  21. package/dist/components/ui/avatar.d.ts.map +1 -1
  22. package/dist/components/ui/avatar.js +18 -15
  23. package/dist/components/ui/avatar.js.map +1 -1
  24. package/dist/components/ui/avatar_module.css.map +1 -1
  25. package/dist/components/ui/background-beams.js +3 -3
  26. package/dist/components/ui/background-beams.js.map +1 -1
  27. package/dist/components/ui/background-beams_module.css.map +1 -1
  28. package/dist/components/ui/badge.js +2 -2
  29. package/dist/components/ui/badge.js.map +1 -1
  30. package/dist/components/ui/badge_module.css.map +1 -1
  31. package/dist/components/ui/breadcrumb.js +10 -10
  32. package/dist/components/ui/breadcrumb.js.map +1 -1
  33. package/dist/components/ui/breadcrumb_module.css.map +1 -1
  34. package/dist/components/ui/bubble-background.js +5 -5
  35. package/dist/components/ui/bubble-background.js.map +1 -1
  36. package/dist/components/ui/bubble-background_module.css.map +1 -1
  37. package/dist/components/ui/button-group.d.ts +1 -1
  38. package/dist/components/ui/button-group.d.ts.map +1 -1
  39. package/dist/components/ui/button-group.js +6 -6
  40. package/dist/components/ui/button-group.js.map +1 -1
  41. package/dist/components/ui/button-group_module.css.map +1 -1
  42. package/dist/components/ui/button.js +4 -4
  43. package/dist/components/ui/button.js.map +1 -1
  44. package/dist/components/ui/button_module.css.map +1 -1
  45. package/dist/components/ui/calendar.d.ts +3 -5
  46. package/dist/components/ui/calendar.d.ts.map +1 -1
  47. package/dist/components/ui/calendar.js +9 -9
  48. package/dist/components/ui/calendar.js.map +1 -1
  49. package/dist/components/ui/calendar_module.css.map +1 -1
  50. package/dist/components/ui/card-skeleton.js +2 -2
  51. package/dist/components/ui/card-skeleton.js.map +1 -1
  52. package/dist/components/ui/card-skeleton_module.css.map +1 -1
  53. package/dist/components/ui/card.js +8 -8
  54. package/dist/components/ui/card.js.map +1 -1
  55. package/dist/components/ui/card_module.css.map +1 -1
  56. package/dist/components/ui/carousel.d.ts.map +1 -1
  57. package/dist/components/ui/carousel.js +16 -16
  58. package/dist/components/ui/carousel.js.map +1 -1
  59. package/dist/components/ui/carousel_module.css +1 -1
  60. package/dist/components/ui/carousel_module.css.map +1 -1
  61. package/dist/components/ui/chart.d.ts +6 -3
  62. package/dist/components/ui/chart.d.ts.map +1 -1
  63. package/dist/components/ui/chart.js +70 -70
  64. package/dist/components/ui/chart.js.map +1 -1
  65. package/dist/components/ui/chart_module.css.map +1 -1
  66. package/dist/components/ui/checkbox-group.d.ts +2 -6
  67. package/dist/components/ui/checkbox-group.d.ts.map +1 -1
  68. package/dist/components/ui/checkbox-group.js +8 -7
  69. package/dist/components/ui/checkbox-group.js.map +1 -1
  70. package/dist/components/ui/checkbox-group_module.css.map +1 -1
  71. package/dist/components/ui/checkbox.d.ts +3 -1
  72. package/dist/components/ui/checkbox.d.ts.map +1 -1
  73. package/dist/components/ui/checkbox.js +6 -3
  74. package/dist/components/ui/checkbox.js.map +1 -1
  75. package/dist/components/ui/checkbox_module.css.map +1 -1
  76. package/dist/components/ui/collapsible.d.ts.map +1 -1
  77. package/dist/components/ui/collapsible.js +4 -4
  78. package/dist/components/ui/collapsible.js.map +1 -1
  79. package/dist/components/ui/collapsible_module.css.map +1 -1
  80. package/dist/components/ui/combobox.d.ts +335 -0
  81. package/dist/components/ui/combobox.d.ts.map +1 -0
  82. package/dist/components/ui/combobox.js +206 -0
  83. package/dist/components/ui/combobox.js.map +1 -0
  84. package/dist/components/ui/combobox.module.js +23 -0
  85. package/dist/components/ui/combobox.module.js.map +1 -0
  86. package/dist/components/ui/combobox_module.css +142 -0
  87. package/dist/components/ui/combobox_module.css.map +1 -0
  88. package/dist/components/ui/command.d.ts.map +1 -1
  89. package/dist/components/ui/command.js +62 -53
  90. package/dist/components/ui/command.js.map +1 -1
  91. package/dist/components/ui/command_module.css +1 -1
  92. package/dist/components/ui/command_module.css.map +1 -1
  93. package/dist/components/ui/context-menu.d.ts.map +1 -1
  94. package/dist/components/ui/context-menu.js +6 -6
  95. package/dist/components/ui/context-menu.js.map +1 -1
  96. package/dist/components/ui/context-menu_module.css.map +1 -1
  97. package/dist/components/ui/copy-button.js +6 -6
  98. package/dist/components/ui/copy-button.js.map +1 -1
  99. package/dist/components/ui/copy-button_module.css.map +1 -1
  100. package/dist/components/ui/counting-number.js +6 -6
  101. package/dist/components/ui/counting-number.js.map +1 -1
  102. package/dist/components/ui/counting-number_module.css.map +1 -1
  103. package/dist/components/ui/dialog.js +6 -6
  104. package/dist/components/ui/dialog.js.map +1 -1
  105. package/dist/components/ui/dialog_module.css +1 -1
  106. package/dist/components/ui/dialog_module.css.map +1 -1
  107. package/dist/components/ui/dot-background_module.css.map +1 -1
  108. package/dist/components/ui/drawer.d.ts.map +1 -1
  109. package/dist/components/ui/drawer.js +5 -5
  110. package/dist/components/ui/drawer.js.map +1 -1
  111. package/dist/components/ui/drawer_module.css.map +1 -1
  112. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  113. package/dist/components/ui/dropdown-menu.js +6 -6
  114. package/dist/components/ui/dropdown-menu.js.map +1 -1
  115. package/dist/components/ui/dropdown-menu_module.css.map +1 -1
  116. package/dist/components/ui/dropdrawer.d.ts +10 -16
  117. package/dist/components/ui/dropdrawer.d.ts.map +1 -1
  118. package/dist/components/ui/dropdrawer.js +73 -65
  119. package/dist/components/ui/dropdrawer.js.map +1 -1
  120. package/dist/components/ui/dropdrawer_module.css.map +1 -1
  121. package/dist/components/ui/empty.js +7 -7
  122. package/dist/components/ui/empty.js.map +1 -1
  123. package/dist/components/ui/empty_module.css.map +1 -1
  124. package/dist/components/ui/error-boundary.js +2 -2
  125. package/dist/components/ui/error-boundary.js.map +1 -1
  126. package/dist/components/ui/error-boundary_module.css.map +1 -1
  127. package/dist/components/ui/field.js +12 -12
  128. package/dist/components/ui/field.js.map +1 -1
  129. package/dist/components/ui/field_module.css.map +1 -1
  130. package/dist/components/ui/fireworks-background.js +6 -6
  131. package/dist/components/ui/fireworks-background.js.map +1 -1
  132. package/dist/components/ui/fireworks-background_module.css.map +1 -1
  133. package/dist/components/ui/flip-button.js +5 -5
  134. package/dist/components/ui/flip-button.js.map +1 -1
  135. package/dist/components/ui/flip-button_module.css.map +1 -1
  136. package/dist/components/ui/focus-scope.js +6 -6
  137. package/dist/components/ui/focus-scope.js.map +1 -1
  138. package/dist/components/ui/focus-scope_module.css.map +1 -1
  139. package/dist/components/ui/form-skeleton.js +2 -2
  140. package/dist/components/ui/form-skeleton.js.map +1 -1
  141. package/dist/components/ui/form-skeleton_module.css.map +1 -1
  142. package/dist/components/ui/form.d.ts +3 -3
  143. package/dist/components/ui/form.d.ts.map +1 -1
  144. package/dist/components/ui/form.js +13 -13
  145. package/dist/components/ui/form.js.map +1 -1
  146. package/dist/components/ui/form_module.css.map +1 -1
  147. package/dist/components/ui/gradient-background.js +2 -2
  148. package/dist/components/ui/gradient-background.js.map +1 -1
  149. package/dist/components/ui/gradient-background_module.css.map +1 -1
  150. package/dist/components/ui/gradient-text.js +2 -2
  151. package/dist/components/ui/gradient-text.js.map +1 -1
  152. package/dist/components/ui/gradient-text_module.css.map +1 -1
  153. package/dist/components/ui/highlight-text.js +4 -4
  154. package/dist/components/ui/highlight-text.js.map +1 -1
  155. package/dist/components/ui/highlight-text_module.css.map +1 -1
  156. package/dist/components/ui/hole-background.js +21 -21
  157. package/dist/components/ui/hole-background.js.map +1 -1
  158. package/dist/components/ui/hole-background_module.css.map +1 -1
  159. package/dist/components/ui/hover-card.js +3 -3
  160. package/dist/components/ui/hover-card.js.map +1 -1
  161. package/dist/components/ui/hover-card_module.css.map +1 -1
  162. package/dist/components/ui/input-group.js +7 -7
  163. package/dist/components/ui/input-group.js.map +1 -1
  164. package/dist/components/ui/input-group_module.css.map +1 -1
  165. package/dist/components/ui/input-otp.d.ts +3 -3
  166. package/dist/components/ui/input-otp.d.ts.map +1 -1
  167. package/dist/components/ui/input-otp.js +6 -6
  168. package/dist/components/ui/input-otp.js.map +1 -1
  169. package/dist/components/ui/input-otp_module.css.map +1 -1
  170. package/dist/components/ui/input.js +2 -2
  171. package/dist/components/ui/input.js.map +1 -1
  172. package/dist/components/ui/input_module.css.map +1 -1
  173. package/dist/components/ui/item.d.ts +1 -1
  174. package/dist/components/ui/item.d.ts.map +1 -1
  175. package/dist/components/ui/item.js +13 -13
  176. package/dist/components/ui/item.js.map +1 -1
  177. package/dist/components/ui/item_module.css.map +1 -1
  178. package/dist/components/ui/kbd.js +3 -3
  179. package/dist/components/ui/kbd.js.map +1 -1
  180. package/dist/components/ui/kbd_module.css.map +1 -1
  181. package/dist/components/ui/label.js +2 -2
  182. package/dist/components/ui/label.js.map +1 -1
  183. package/dist/components/ui/label_module.css.map +1 -1
  184. package/dist/components/ui/list-skeleton.js +2 -2
  185. package/dist/components/ui/list-skeleton.js.map +1 -1
  186. package/dist/components/ui/list-skeleton_module.css.map +1 -1
  187. package/dist/components/ui/loading-overlay.js +2 -2
  188. package/dist/components/ui/loading-overlay.js.map +1 -1
  189. package/dist/components/ui/loading-overlay_module.css.map +1 -1
  190. package/dist/components/ui/menubar.d.ts +11 -13
  191. package/dist/components/ui/menubar.d.ts.map +1 -1
  192. package/dist/components/ui/menubar.js +4 -4
  193. package/dist/components/ui/menubar.js.map +1 -1
  194. package/dist/components/ui/menubar_module.css.map +1 -1
  195. package/dist/components/ui/meter.d.ts +8 -24
  196. package/dist/components/ui/meter.d.ts.map +1 -1
  197. package/dist/components/ui/meter.js +23 -19
  198. package/dist/components/ui/meter.js.map +1 -1
  199. package/dist/components/ui/meter_module.css.map +1 -1
  200. package/dist/components/ui/navigation-menu.d.ts +3 -12
  201. package/dist/components/ui/navigation-menu.d.ts.map +1 -1
  202. package/dist/components/ui/navigation-menu.js +15 -12
  203. package/dist/components/ui/navigation-menu.js.map +1 -1
  204. package/dist/components/ui/navigation-menu_module.css +1 -1
  205. package/dist/components/ui/navigation-menu_module.css.map +1 -1
  206. package/dist/components/ui/number-field.d.ts +6 -12
  207. package/dist/components/ui/number-field.d.ts.map +1 -1
  208. package/dist/components/ui/number-field.js +3 -3
  209. package/dist/components/ui/number-field.js.map +1 -1
  210. package/dist/components/ui/number-field_module.css.map +1 -1
  211. package/dist/components/ui/pagination.js +8 -8
  212. package/dist/components/ui/pagination.js.map +1 -1
  213. package/dist/components/ui/pagination_module.css.map +1 -1
  214. package/dist/components/ui/popover.js +5 -5
  215. package/dist/components/ui/popover.js.map +1 -1
  216. package/dist/components/ui/popover_module.css.map +1 -1
  217. package/dist/components/ui/progress.d.ts +1 -4
  218. package/dist/components/ui/progress.d.ts.map +1 -1
  219. package/dist/components/ui/progress.js +10 -9
  220. package/dist/components/ui/progress.js.map +1 -1
  221. package/dist/components/ui/progress_module.css.map +1 -1
  222. package/dist/components/ui/radio-group.d.ts +2 -4
  223. package/dist/components/ui/radio-group.d.ts.map +1 -1
  224. package/dist/components/ui/radio-group.js +3 -3
  225. package/dist/components/ui/radio-group.js.map +1 -1
  226. package/dist/components/ui/radio-group_module.css.map +1 -1
  227. package/dist/components/ui/resizable.d.ts +13 -29
  228. package/dist/components/ui/resizable.d.ts.map +1 -1
  229. package/dist/components/ui/resizable.js +8 -7
  230. package/dist/components/ui/resizable.js.map +1 -1
  231. package/dist/components/ui/resizable_module.css.map +1 -1
  232. package/dist/components/ui/ripple-button.js +9 -9
  233. package/dist/components/ui/ripple-button.js.map +1 -1
  234. package/dist/components/ui/ripple-button_module.css.map +1 -1
  235. package/dist/components/ui/scratcher.d.ts +1 -1
  236. package/dist/components/ui/scratcher.d.ts.map +1 -1
  237. package/dist/components/ui/scratcher.js +5 -4
  238. package/dist/components/ui/scratcher.js.map +1 -1
  239. package/dist/components/ui/scratcher_module.css.map +1 -1
  240. package/dist/components/ui/scroll-area.d.ts +2 -4
  241. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  242. package/dist/components/ui/scroll-area.js +2 -2
  243. package/dist/components/ui/scroll-area.js.map +1 -1
  244. package/dist/components/ui/scroll-area_module.css.map +1 -1
  245. package/dist/components/ui/select.js +4 -4
  246. package/dist/components/ui/select.js.map +1 -1
  247. package/dist/components/ui/select_module.css.map +1 -1
  248. package/dist/components/ui/separator.d.ts +1 -4
  249. package/dist/components/ui/separator.d.ts.map +1 -1
  250. package/dist/components/ui/separator.js +9 -8
  251. package/dist/components/ui/separator.js.map +1 -1
  252. package/dist/components/ui/separator_module.css.map +1 -1
  253. package/dist/components/ui/sheet.d.ts.map +1 -1
  254. package/dist/components/ui/sheet.js +6 -6
  255. package/dist/components/ui/sheet.js.map +1 -1
  256. package/dist/components/ui/sheet_module.css.map +1 -1
  257. package/dist/components/ui/sidebar.d.ts +1 -1
  258. package/dist/components/ui/sidebar.d.ts.map +1 -1
  259. package/dist/components/ui/sidebar.js +36 -36
  260. package/dist/components/ui/sidebar.js.map +1 -1
  261. package/dist/components/ui/sidebar_module.css.map +1 -1
  262. package/dist/components/ui/skeleton.js +2 -2
  263. package/dist/components/ui/skeleton.js.map +1 -1
  264. package/dist/components/ui/skeleton_module.css.map +1 -1
  265. package/dist/components/ui/slider.js +2 -2
  266. package/dist/components/ui/slider.js.map +1 -1
  267. package/dist/components/ui/slider_module.css.map +1 -1
  268. package/dist/components/ui/spinner.js +2 -2
  269. package/dist/components/ui/spinner.js.map +1 -1
  270. package/dist/components/ui/spinner_module.css.map +1 -1
  271. package/dist/components/ui/stepper.js +2 -2
  272. package/dist/components/ui/stepper.js.map +1 -1
  273. package/dist/components/ui/stepper_module.css.map +1 -1
  274. package/dist/components/ui/switch.js +2 -2
  275. package/dist/components/ui/switch.js.map +1 -1
  276. package/dist/components/ui/switch_module.css.map +1 -1
  277. package/dist/components/ui/table-skeleton.js +2 -2
  278. package/dist/components/ui/table-skeleton.js.map +1 -1
  279. package/dist/components/ui/table-skeleton_module.css.map +1 -1
  280. package/dist/components/ui/table.js +9 -9
  281. package/dist/components/ui/table.js.map +1 -1
  282. package/dist/components/ui/table_module.css.map +1 -1
  283. package/dist/components/ui/tabs.js +3 -3
  284. package/dist/components/ui/tabs.js.map +1 -1
  285. package/dist/components/ui/tabs_module.css.map +1 -1
  286. package/dist/components/ui/textarea.js +2 -2
  287. package/dist/components/ui/textarea.js.map +1 -1
  288. package/dist/components/ui/textarea_module.css.map +1 -1
  289. package/dist/components/ui/timeline.js +5 -5
  290. package/dist/components/ui/timeline.js.map +1 -1
  291. package/dist/components/ui/timeline_module.css.map +1 -1
  292. package/dist/components/ui/{sonner.d.ts → toast.d.ts} +15 -6
  293. package/dist/components/ui/toast.d.ts.map +1 -0
  294. package/dist/components/ui/{sonner.js → toast.js} +43 -42
  295. package/dist/components/ui/toast.js.map +1 -0
  296. package/dist/components/ui/toast.module.js +34 -0
  297. package/dist/components/ui/toast.module.js.map +1 -0
  298. package/dist/components/ui/{sonner_module.css → toast_module.css} +35 -35
  299. package/dist/components/ui/toast_module.css.map +1 -0
  300. package/dist/components/ui/toggle-group.d.ts +2 -8
  301. package/dist/components/ui/toggle-group.d.ts.map +1 -1
  302. package/dist/components/ui/toggle-group.js +14 -12
  303. package/dist/components/ui/toggle-group.js.map +1 -1
  304. package/dist/components/ui/toggle-group_module.css.map +1 -1
  305. package/dist/components/ui/toggle.js +2 -2
  306. package/dist/components/ui/toggle.js.map +1 -1
  307. package/dist/components/ui/toggle_module.css.map +1 -1
  308. package/dist/components/ui/toolbar.d.ts +10 -30
  309. package/dist/components/ui/toolbar.d.ts.map +1 -1
  310. package/dist/components/ui/toolbar.js +28 -23
  311. package/dist/components/ui/toolbar.js.map +1 -1
  312. package/dist/components/ui/toolbar_module.css.map +1 -1
  313. package/dist/components/ui/tooltip.js +4 -4
  314. package/dist/components/ui/tooltip.js.map +1 -1
  315. package/dist/components/ui/tooltip_module.css.map +1 -1
  316. package/dist/components/ui/typewriter.js +4 -4
  317. package/dist/components/ui/typewriter.js.map +1 -1
  318. package/dist/components/ui/typewriter_module.css.map +1 -1
  319. package/dist/components/ui/visually-hidden.js +2 -2
  320. package/dist/components/ui/visually-hidden.js.map +1 -1
  321. package/dist/components/ui/visually-hidden_module.css.map +1 -1
  322. package/dist/hooks/useAnnounce.js +5 -5
  323. package/dist/hooks/useAnnounce.js.map +1 -1
  324. package/dist/hooks/useClipboard.d.ts +77 -0
  325. package/dist/hooks/useClipboard.d.ts.map +1 -0
  326. package/dist/hooks/useClipboard.js +42 -0
  327. package/dist/hooks/useClipboard.js.map +1 -0
  328. package/dist/hooks/useControllableState.d.ts +54 -0
  329. package/dist/hooks/useControllableState.d.ts.map +1 -0
  330. package/dist/hooks/useControllableState.js +29 -0
  331. package/dist/hooks/useControllableState.js.map +1 -0
  332. package/dist/hooks/useDebounce.d.ts +33 -0
  333. package/dist/hooks/useDebounce.d.ts.map +1 -0
  334. package/dist/hooks/useDebounce.js +20 -0
  335. package/dist/hooks/useDebounce.js.map +1 -0
  336. package/dist/hooks/useEventCallback.d.ts +34 -0
  337. package/dist/hooks/useEventCallback.d.ts.map +1 -0
  338. package/dist/hooks/useEventCallback.js +12 -0
  339. package/dist/hooks/useEventCallback.js.map +1 -0
  340. package/dist/hooks/useFocusManager.js +6 -6
  341. package/dist/hooks/useFocusManager.js.map +1 -1
  342. package/dist/hooks/useFocusVisible.js +5 -5
  343. package/dist/hooks/useFocusVisible.js.map +1 -1
  344. package/dist/hooks/useId.d.ts +30 -0
  345. package/dist/hooks/useId.d.ts.map +1 -0
  346. package/dist/hooks/useId.js +9 -0
  347. package/dist/hooks/useId.js.map +1 -0
  348. package/dist/hooks/useIntersectionObserver.d.ts +51 -0
  349. package/dist/hooks/useIntersectionObserver.d.ts.map +1 -0
  350. package/dist/hooks/useIntersectionObserver.js +25 -0
  351. package/dist/hooks/useIntersectionObserver.js.map +1 -0
  352. package/dist/hooks/useInterval.d.ts +55 -0
  353. package/dist/hooks/useInterval.d.ts.map +1 -0
  354. package/dist/hooks/useInterval.js +24 -0
  355. package/dist/hooks/useInterval.js.map +1 -0
  356. package/dist/hooks/useLocalStorage.d.ts +43 -0
  357. package/dist/hooks/useLocalStorage.d.ts.map +1 -0
  358. package/dist/hooks/useLocalStorage.js +53 -0
  359. package/dist/hooks/useLocalStorage.js.map +1 -0
  360. package/dist/hooks/useMediaQuery.js +3 -3
  361. package/dist/hooks/useMediaQuery.js.map +1 -1
  362. package/dist/hooks/useMergedRefs.d.ts +27 -0
  363. package/dist/hooks/useMergedRefs.d.ts.map +1 -0
  364. package/dist/hooks/useMergedRefs.js +11 -0
  365. package/dist/hooks/useMergedRefs.js.map +1 -0
  366. package/dist/hooks/useOnClickOutside.d.ts +32 -0
  367. package/dist/hooks/useOnClickOutside.d.ts.map +1 -0
  368. package/dist/hooks/useOnClickOutside.js +23 -0
  369. package/dist/hooks/useOnClickOutside.js.map +1 -0
  370. package/dist/hooks/usePrevious.d.ts +33 -0
  371. package/dist/hooks/usePrevious.d.ts.map +1 -0
  372. package/dist/hooks/usePrevious.js +14 -0
  373. package/dist/hooks/usePrevious.js.map +1 -0
  374. package/dist/hooks/useThrottle.d.ts +37 -0
  375. package/dist/hooks/useThrottle.d.ts.map +1 -0
  376. package/dist/hooks/useThrottle.js +34 -0
  377. package/dist/hooks/useThrottle.js.map +1 -0
  378. package/dist/hooks/useTimeout.d.ts +28 -0
  379. package/dist/hooks/useTimeout.d.ts.map +1 -0
  380. package/dist/hooks/useTimeout.js +24 -0
  381. package/dist/hooks/useTimeout.js.map +1 -0
  382. package/dist/index.css.map +1 -1
  383. package/dist/index.d.ts +17 -3
  384. package/dist/index.d.ts.map +1 -1
  385. package/dist/index.js +15 -1
  386. package/dist/lib/utilities.d.ts +2 -3
  387. package/dist/lib/utilities.d.ts.map +1 -1
  388. package/dist/lib/utilities.js.map +1 -1
  389. package/dist/motion/Collapse.js +2 -2
  390. package/dist/motion/Collapse.js.map +1 -1
  391. package/dist/motion/Collapse_module.css.map +1 -1
  392. package/dist/motion/tokens.js +5 -5
  393. package/dist/motion/tokens.js.map +1 -1
  394. package/package.json +88 -10
  395. package/src/components/ui/alert-dialog.tsx +15 -8
  396. package/src/components/ui/avatar.tsx +9 -6
  397. package/src/components/ui/calendar.tsx +9 -14
  398. package/src/components/ui/carousel.tsx +2 -0
  399. package/src/components/ui/chart.tsx +65 -62
  400. package/src/components/ui/checkbox-group.tsx +4 -5
  401. package/src/components/ui/checkbox.tsx +10 -2
  402. package/src/components/ui/collapsible.tsx +1 -0
  403. package/src/components/ui/combobox.module.css +158 -0
  404. package/src/components/ui/combobox.tsx +569 -0
  405. package/src/components/ui/command.tsx +31 -15
  406. package/src/components/ui/context-menu.tsx +3 -0
  407. package/src/components/ui/drawer.tsx +2 -0
  408. package/src/components/ui/dropdown-menu.tsx +3 -0
  409. package/src/components/ui/dropdrawer.tsx +80 -62
  410. package/src/components/ui/form.tsx +28 -3
  411. package/src/components/ui/input-otp.tsx +3 -3
  412. package/src/components/ui/menubar.tsx +9 -10
  413. package/src/components/ui/meter.tsx +16 -17
  414. package/src/components/ui/navigation-menu.tsx +41 -33
  415. package/src/components/ui/number-field.tsx +6 -13
  416. package/src/components/ui/progress.tsx +3 -2
  417. package/src/components/ui/radio-group.tsx +2 -5
  418. package/src/components/ui/resizable.tsx +15 -18
  419. package/src/components/ui/scratcher.tsx +6 -10
  420. package/src/components/ui/scroll-area.tsx +2 -5
  421. package/src/components/ui/separator.tsx +4 -3
  422. package/src/components/ui/sheet.tsx +3 -0
  423. package/src/components/ui/sidebar.tsx +1 -0
  424. package/src/components/ui/{sonner.module.css → toast.module.css} +1 -1
  425. package/src/components/ui/{sonner.tsx → toast.tsx} +22 -14
  426. package/src/components/ui/toggle-group.tsx +6 -4
  427. package/src/components/ui/toolbar.tsx +20 -21
  428. package/src/hooks/useClipboard.tsx +137 -0
  429. package/src/hooks/useControllableState.tsx +81 -0
  430. package/src/hooks/useDebounce.tsx +50 -0
  431. package/src/hooks/useEventCallback.tsx +47 -0
  432. package/src/hooks/useId.tsx +36 -0
  433. package/src/hooks/useIntersectionObserver.tsx +81 -0
  434. package/src/hooks/useInterval.tsx +80 -0
  435. package/src/hooks/useLocalStorage.tsx +111 -0
  436. package/src/hooks/useMergedRefs.tsx +48 -0
  437. package/src/hooks/useOnClickOutside.tsx +55 -0
  438. package/src/hooks/usePrevious.tsx +44 -0
  439. package/src/hooks/useThrottle.tsx +78 -0
  440. package/src/hooks/useTimeout.tsx +51 -0
  441. package/src/index.ts +27 -4
  442. package/src/lib/utilities.ts +4 -4
  443. package/src/motion/tokens.ts +4 -4
  444. package/src/stories/DesignPrinciples.mdx +48 -0
  445. package/src/stories/GettingStarted.mdx +92 -0
  446. package/src/stories/Welcome.mdx +44 -0
  447. package/dist/components/ui/sonner.d.ts.map +0 -1
  448. package/dist/components/ui/sonner.js.map +0 -1
  449. package/dist/components/ui/sonner.module.js +0 -34
  450. package/dist/components/ui/sonner.module.js.map +0 -1
  451. package/dist/components/ui/sonner_module.css.map +0 -1
@@ -222,6 +222,7 @@ const ContextMenuSub: typeof BaseContextMenu.SubmenuRoot & {displayName?: string
222
222
  */
223
223
  const ContextMenuTrigger = React.forwardRef<React.ComponentRef<typeof BaseContextMenu.Trigger>, ContextMenuTrigger.Props>(
224
224
  (props: Readonly<ContextMenuTrigger.Props>, ref): React.ReactElement => {
225
+ // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild API
225
226
  const {asChild = false, children, className, render, ...otherProps} = props;
226
227
  const renderProp = asChild && React.isValidElement(children) ? children : render;
227
228
 
@@ -367,6 +368,7 @@ const ContextMenuContent = React.forwardRef<React.ComponentRef<typeof BaseContex
367
368
  * @see {@link https://base-ui.com/react/components/context-menu | Base UI Documentation}
368
369
  */
369
370
  function ContextMenuItem(props: Readonly<ContextMenuItem.Props>): React.ReactElement {
371
+ // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild API
370
372
  const {asChild = false, children, className, inset = false, render, ...otherProps} = props;
371
373
  const renderProp = asChild && React.isValidElement(children) ? children : render;
372
374
 
@@ -532,6 +534,7 @@ function ContextMenuSeparator(props: Readonly<ContextMenuSeparator.Props>): Reac
532
534
  * @see {@link https://base-ui.com/react/components/context-menu | Base UI Documentation}
533
535
  */
534
536
  function ContextMenuShortcut(props: Readonly<ContextMenuShortcut.Props>): React.ReactElement {
537
+ // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild API
535
538
  const {asChild = false, children, className, render, ...otherProps} = props;
536
539
  const renderProp = asChild && React.isValidElement(children) ? children : render;
537
540
 
@@ -258,6 +258,7 @@ const DrawerContent = React.forwardRef<React.ComponentRef<typeof BaseDrawer.Popu
258
258
  * @see {@link https://base-ui.com/react/components/drawer | Base UI Documentation}
259
259
  */
260
260
  function DrawerHeader(props: Readonly<DrawerHeader.Props>): React.ReactElement {
261
+ // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild API
261
262
  const {asChild = false, children, className, render, ...otherProps} = props;
262
263
  const renderProp = asChild && React.isValidElement(children) ? children : render;
263
264
 
@@ -286,6 +287,7 @@ function DrawerHeader(props: Readonly<DrawerHeader.Props>): React.ReactElement {
286
287
  * @see {@link https://base-ui.com/react/components/drawer | Base UI Documentation}
287
288
  */
288
289
  function DrawerFooter(props: Readonly<DrawerFooter.Props>): React.ReactElement {
290
+ // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild API
289
291
  const {asChild = false, children, className, render, ...otherProps} = props;
290
292
  const renderProp = asChild && React.isValidElement(children) ? children : render;
291
293
 
@@ -222,6 +222,7 @@ const DropdownMenuSub: typeof BaseMenu.SubmenuRoot & {displayName?: string} = Ba
222
222
  */
223
223
  const DropdownMenuTrigger = React.forwardRef<HTMLButtonElement, DropdownMenuTrigger.Props>(
224
224
  (props: Readonly<DropdownMenuTrigger.Props>, ref): React.ReactElement => {
225
+ // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild API
225
226
  const {asChild = false, children, className, render, ...otherProps} = props;
226
227
  const renderProp = asChild && React.isValidElement(children) ? children : render;
227
228
 
@@ -367,6 +368,7 @@ const DropdownMenuContent = React.forwardRef<React.ComponentRef<typeof BaseMenu.
367
368
  * @see {@link https://base-ui.com/react/components/menu | Base UI Documentation}
368
369
  */
369
370
  function DropdownMenuItem(props: Readonly<DropdownMenuItem.Props>): React.ReactElement {
371
+ // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild API
370
372
  const {asChild = false, children, className, inset = false, render, ...otherProps} = props;
371
373
  const renderProp = asChild && React.isValidElement(children) ? children : render;
372
374
 
@@ -532,6 +534,7 @@ function DropdownMenuSeparator(props: Readonly<DropdownMenuSeparator.Props>): Re
532
534
  * @see {@link https://base-ui.com/react/components/menu | Base UI Documentation}
533
535
  */
534
536
  function DropdownMenuShortcut(props: Readonly<DropdownMenuShortcut.Props>): React.ReactElement {
537
+ // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild API
535
538
  const {asChild = false, children, className, render, ...otherProps} = props;
536
539
  const renderProp = asChild && React.isValidElement(children) ? children : render;
537
540
 
@@ -37,22 +37,25 @@ const useDropDrawerContext = (): DropDrawerContextValue => {
37
37
  const Drawer = BaseDrawer.Root;
38
38
  const DrawerPortal = BaseDrawer.Portal;
39
39
 
40
- function DrawerTrigger(props: Readonly<React.ComponentPropsWithRef<typeof BaseDrawer.Trigger> & {asChild?: boolean}>): React.ReactElement {
41
- const {asChild = false, children, className, render, ...otherProps} = props;
42
- const renderProp = asChild && React.isValidElement(children) ? children : render;
40
+ const DrawerTrigger = React.forwardRef<HTMLButtonElement, React.ComponentPropsWithRef<typeof BaseDrawer.Trigger> & {asChild?: boolean}>(
41
+ function DrawerTrigger(props, forwardedRef) {
42
+ const {asChild = false, children, className, render, ...otherProps} = props;
43
+ const renderProp = asChild && React.isValidElement(children) ? children : render;
43
44
 
44
- return (
45
- <BaseDrawer.Trigger
46
- {...otherProps}
47
- render={useRender({
48
- defaultTagName: "button",
49
- render: renderProp as never,
50
- props: mergeProps({className}, {}),
51
- })}>
52
- {renderProp ? undefined : children}
53
- </BaseDrawer.Trigger>
54
- );
55
- }
45
+ return (
46
+ <BaseDrawer.Trigger
47
+ {...otherProps}
48
+ ref={forwardedRef}
49
+ render={useRender({
50
+ defaultTagName: "button",
51
+ render: renderProp as never,
52
+ props: mergeProps({className}, {}),
53
+ })}>
54
+ {renderProp ? undefined : children}
55
+ </BaseDrawer.Trigger>
56
+ );
57
+ },
58
+ );
56
59
 
57
60
  function DrawerOverlay(props: Readonly<React.ComponentPropsWithRef<typeof BaseDrawer.Backdrop>>): React.ReactElement {
58
61
  const {className, render, ...otherProps} = props;
@@ -69,29 +72,30 @@ function DrawerOverlay(props: Readonly<React.ComponentPropsWithRef<typeof BaseDr
69
72
  );
70
73
  }
71
74
 
72
- function DrawerContent(
73
- props: Readonly<React.ComponentPropsWithRef<typeof BaseDrawer.Popup> & {children?: React.ReactNode}>,
74
- ): React.ReactElement {
75
- const {className, children, render, ...otherProps} = props;
75
+ const DrawerContent = React.forwardRef<HTMLDivElement, React.ComponentPropsWithRef<typeof BaseDrawer.Popup> & {children?: React.ReactNode}>(
76
+ function DrawerContent(props, forwardedRef) {
77
+ const {className, children, render, ...otherProps} = props;
76
78
 
77
- return (
78
- <DrawerPortal>
79
- <DrawerOverlay />
80
- <BaseDrawer.Viewport className={styles.drawerViewport}>
81
- <BaseDrawer.Popup
82
- {...otherProps}
83
- render={useRender({
84
- defaultTagName: "div",
85
- render: render as never,
86
- props: mergeProps({className: cn(styles.drawerContent, className)}, {}),
87
- })}>
88
- <div className={styles.drawerHandle} />
89
- <BaseDrawer.Content className={styles.drawerInnerContent}>{children}</BaseDrawer.Content>
90
- </BaseDrawer.Popup>
91
- </BaseDrawer.Viewport>
92
- </DrawerPortal>
93
- );
94
- }
79
+ return (
80
+ <DrawerPortal>
81
+ <DrawerOverlay />
82
+ <BaseDrawer.Viewport className={styles.drawerViewport}>
83
+ <BaseDrawer.Popup
84
+ {...otherProps}
85
+ ref={forwardedRef}
86
+ render={useRender({
87
+ defaultTagName: "div",
88
+ render: render as never,
89
+ props: mergeProps({className: cn(styles.drawerContent, className)}, {}),
90
+ })}>
91
+ <div className={styles.drawerHandle} />
92
+ <BaseDrawer.Content className={styles.drawerInnerContent}>{children}</BaseDrawer.Content>
93
+ </BaseDrawer.Popup>
94
+ </BaseDrawer.Viewport>
95
+ </DrawerPortal>
96
+ );
97
+ },
98
+ );
95
99
 
96
100
  function DrawerHeader(
97
101
  props: Readonly<React.ComponentPropsWithRef<"div"> & {render?: useRender.RenderProp<Record<string, never>>}>,
@@ -136,34 +140,37 @@ function DrawerTitle(props: Readonly<React.ComponentPropsWithRef<typeof BaseDraw
136
140
  const DropdownMenu = BaseMenu.Root;
137
141
  const DropdownMenuSub = BaseMenu.SubmenuRoot;
138
142
 
139
- function DropdownMenuTrigger(
140
- props: Readonly<React.ComponentPropsWithRef<typeof BaseMenu.Trigger> & {asChild?: boolean}>,
141
- ): React.ReactElement {
142
- const {asChild = false, children, className, render, ...otherProps} = props;
143
- const renderProp = asChild && React.isValidElement(children) ? children : render;
143
+ const DropdownMenuTrigger = React.forwardRef<HTMLButtonElement, React.ComponentPropsWithRef<typeof BaseMenu.Trigger> & {asChild?: boolean}>(
144
+ function DropdownMenuTrigger(props, forwardedRef) {
145
+ const {asChild = false, children, className, render, ...otherProps} = props;
146
+ const renderProp = asChild && React.isValidElement(children) ? children : render;
144
147
 
145
- return (
146
- <BaseMenu.Trigger
147
- {...otherProps}
148
- render={useRender({
149
- defaultTagName: "button",
150
- render: renderProp as never,
151
- props: mergeProps({className}, {}),
152
- })}>
153
- {renderProp ? undefined : children}
154
- </BaseMenu.Trigger>
155
- );
156
- }
148
+ return (
149
+ <BaseMenu.Trigger
150
+ {...otherProps}
151
+ ref={forwardedRef}
152
+ render={useRender({
153
+ defaultTagName: "button",
154
+ render: renderProp as never,
155
+ props: mergeProps({className}, {}),
156
+ })}>
157
+ {renderProp ? undefined : children}
158
+ </BaseMenu.Trigger>
159
+ );
160
+ },
161
+ );
157
162
 
158
- function DropdownMenuContent(
159
- props: Readonly<React.ComponentPropsWithRef<typeof BaseMenu.Positioner> & {children?: React.ReactNode}>,
160
- ): React.ReactElement {
163
+ const DropdownMenuContent = React.forwardRef<
164
+ HTMLDivElement,
165
+ React.ComponentPropsWithRef<typeof BaseMenu.Positioner> & {children?: React.ReactNode}
166
+ >(function DropdownMenuContent(props, forwardedRef) {
161
167
  const {className, children, render, ...otherProps} = props;
162
168
 
163
169
  return (
164
170
  <BaseMenu.Portal>
165
171
  <BaseMenu.Positioner
166
172
  {...otherProps}
173
+ ref={forwardedRef}
167
174
  render={useRender({
168
175
  defaultTagName: "div",
169
176
  props: mergeProps({className: styles.dropdownPositioner}, {}),
@@ -179,7 +186,7 @@ function DropdownMenuContent(
179
186
  </BaseMenu.Positioner>
180
187
  </BaseMenu.Portal>
181
188
  );
182
- }
189
+ });
183
190
 
184
191
  interface DropdownMenuItemProps extends React.ComponentPropsWithRef<typeof BaseMenu.Item> {
185
192
  /** @deprecated Prefer Base UI's `render` prop. */
@@ -192,6 +199,7 @@ interface DropdownMenuItemProps extends React.ComponentPropsWithRef<typeof BaseM
192
199
  }
193
200
 
194
201
  function DropdownMenuItem(props: Readonly<DropdownMenuItemProps>): React.ReactElement {
202
+ // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild API
195
203
  const {asChild = false, children, className, inset = false, render, ...otherProps} = props;
196
204
  const renderProp = asChild && React.isValidElement(children) ? children : render;
197
205
 
@@ -408,11 +416,15 @@ function DropDrawer({children, ...props}: DropDrawerRootProps): React.JSX.Elemen
408
416
  *
409
417
  * @see {@link https://base-ui.com/react/components/drawer | Base UI Drawer Docs}
410
418
  */
411
- function DropDrawerTrigger({className, children, ...props}: DropDrawerTriggerProps): React.JSX.Element {
419
+ const DropDrawerTrigger = React.forwardRef<HTMLButtonElement, DropDrawerTriggerProps>(function DropDrawerTrigger(
420
+ {className, children, ...props},
421
+ forwardedRef,
422
+ ) {
412
423
  const {isMobile} = useDropDrawerContext();
413
424
 
414
425
  return isMobile ? (
415
426
  <DrawerTrigger
427
+ ref={forwardedRef}
416
428
  data-slot='drop-drawer-trigger'
417
429
  className={className}
418
430
  {...(props as React.ComponentProps<typeof DrawerTrigger>)}>
@@ -420,13 +432,14 @@ function DropDrawerTrigger({className, children, ...props}: DropDrawerTriggerPro
420
432
  </DrawerTrigger>
421
433
  ) : (
422
434
  <DropdownMenuTrigger
435
+ ref={forwardedRef}
423
436
  data-slot='drop-drawer-trigger'
424
437
  className={className}
425
438
  {...(props as React.ComponentProps<typeof DropdownMenuTrigger>)}>
426
439
  {children}
427
440
  </DropdownMenuTrigger>
428
441
  );
429
- }
442
+ });
430
443
 
431
444
  /**
432
445
  * Renders the responsive dropdown or drawer content surface.
@@ -444,7 +457,10 @@ function DropDrawerTrigger({className, children, ...props}: DropDrawerTriggerPro
444
457
  *
445
458
  * @see {@link https://base-ui.com/react/components/menu | Base UI Menu Docs}
446
459
  */
447
- function DropDrawerContent({className, children, ...props}: DropDrawerContentProps): React.JSX.Element {
460
+ const DropDrawerContent = React.forwardRef<HTMLDivElement, DropDrawerContentProps>(function DropDrawerContent(
461
+ {className, children, ...props},
462
+ forwardedRef,
463
+ ) {
448
464
  const {isMobile} = useDropDrawerContext();
449
465
  const [activeSubmenu, setActiveSubmenu] = React.useState<string | null>(null);
450
466
  const [submenuTitle, setSubmenuTitle] = React.useState<string | null>(null);
@@ -594,6 +610,7 @@ function DropDrawerContent({className, children, ...props}: DropDrawerContentPro
594
610
  submenuTitle,
595
611
  }}>
596
612
  <DrawerContent
613
+ ref={forwardedRef}
597
614
  data-slot='drop-drawer-content'
598
615
  className={cn(styles.mobileContent, className)}
599
616
  {...(props as React.ComponentProps<typeof DrawerContent>)}>
@@ -670,6 +687,7 @@ function DropDrawerContent({className, children, ...props}: DropDrawerContentPro
670
687
  submenuTitle,
671
688
  }}>
672
689
  <DropdownMenuContent
690
+ ref={forwardedRef}
673
691
  data-slot='drop-drawer-content'
674
692
  align='end'
675
693
  sideOffset={4}
@@ -679,7 +697,7 @@ function DropDrawerContent({className, children, ...props}: DropDrawerContentPro
679
697
  </DropdownMenuContent>
680
698
  </SubmenuContext.Provider>
681
699
  );
682
- }
700
+ });
683
701
 
684
702
  /**
685
703
  * Renders an actionable item inside the drop drawer surface.
@@ -3,7 +3,32 @@
3
3
  /* eslint-disable react/prop-types */
4
4
 
5
5
  import * as React from "react";
6
- import {Controller, FormProvider, useFormContext, type ControllerProps, type FieldPath, type FieldValues} from "react-hook-form";
6
+ import {
7
+ Controller,
8
+ FormProvider,
9
+ useController,
10
+ useFieldArray,
11
+ useForm,
12
+ useFormContext,
13
+ useFormState,
14
+ useWatch,
15
+ type Control,
16
+ type ControllerFieldState,
17
+ type ControllerProps,
18
+ type ControllerRenderProps,
19
+ type DefaultValues,
20
+ type FieldError,
21
+ type FieldErrors,
22
+ type FieldPath,
23
+ type FieldValues,
24
+ type Path,
25
+ type RegisterOptions,
26
+ type Resolver,
27
+ type SubmitHandler,
28
+ type UseControllerReturn,
29
+ type UseFieldArrayReturn,
30
+ type UseFormReturn,
31
+ } from "react-hook-form";
7
32
 
8
33
  import {cn} from "@/lib/utilities";
9
34
 
@@ -336,7 +361,7 @@ const FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<
336
361
  FormMessage.displayName = "FormMessage";
337
362
  FormField.displayName = "FormField";
338
363
 
339
- export {Controller, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch} from "react-hook-form";
364
+ export {Controller, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch};
340
365
  export type {
341
366
  Control,
342
367
  ControllerFieldState,
@@ -354,6 +379,6 @@ export type {
354
379
  UseControllerReturn,
355
380
  UseFieldArrayReturn,
356
381
  UseFormReturn,
357
- } from "react-hook-form";
382
+ };
358
383
  export {Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField};
359
384
  export type {FormControlProps};
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import {OTPInput, OTPInputContext} from "input-otp";
3
+ import {OTPInput, OTPInputContext, REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS, type OTPInputProps, type SlotProps} from "input-otp";
4
4
  import {Minus} from "lucide-react";
5
5
  import * as React from "react";
6
6
 
@@ -10,8 +10,8 @@ import styles from "./input-otp.module.css";
10
10
 
11
11
  const DEFAULT_SLOT_PLACEHOLDER_CHARACTER = "·";
12
12
 
13
- export {REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS} from "input-otp";
14
- export type {OTPInputProps, SlotProps} from "input-otp";
13
+ export {REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS};
14
+ export type {OTPInputProps, SlotProps};
15
15
 
16
16
  /**
17
17
  * Props for the {@link InputOTP} component.
@@ -10,14 +10,6 @@ import * as React from "react";
10
10
  import {cn} from "@/lib/utilities";
11
11
  import styles from "./menubar.module.css";
12
12
 
13
- type MenubarProps = Omit<React.ComponentPropsWithRef<typeof BaseMenubar>, "className"> & {className?: string};
14
- interface MenubarTriggerProps extends Omit<React.ComponentPropsWithRef<typeof BaseMenu.Trigger>, "className"> {
15
- /**
16
- * Applies additional CSS classes to the component root element.
17
- * @default undefined
18
- */
19
- className?: string;
20
- }
21
13
  interface MenubarSubTriggerProps extends Omit<React.ComponentPropsWithRef<typeof BaseMenu.SubmenuTrigger>, "className"> {
22
14
  /**
23
15
  * Applies additional CSS classes to the component root element.
@@ -540,6 +532,7 @@ function MenubarSeparator(props: Readonly<MenubarSeparator.Props>): React.ReactE
540
532
  * @see {@link https://base-ui.com/react/components/menubar | Base UI Documentation}
541
533
  */
542
534
  function MenubarShortcut(props: Readonly<MenubarShortcut.Props>): React.ReactElement {
535
+ // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild API
543
536
  const {asChild = false, children, className, render, ...otherProps} = props;
544
537
  const renderProp = asChild && React.isValidElement(children) ? children : render;
545
538
 
@@ -554,13 +547,19 @@ function MenubarShortcut(props: Readonly<MenubarShortcut.Props>): React.ReactEle
554
547
 
555
548
  // eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API
556
549
  namespace Menubar {
557
- export type Props = MenubarProps;
550
+ export type Props = Omit<React.ComponentPropsWithRef<typeof BaseMenubar>, "className"> & {className?: string};
558
551
  export type State = BaseMenubar.State;
559
552
  }
560
553
 
561
554
  // eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API
562
555
  namespace MenubarTrigger {
563
- export type Props = MenubarTriggerProps;
556
+ export type Props = Omit<React.ComponentPropsWithRef<typeof BaseMenu.Trigger>, "className"> & {
557
+ /**
558
+ * Applies additional CSS classes to the component root element.
559
+ * @default undefined
560
+ */
561
+ className?: string;
562
+ };
564
563
  export type State = BaseMenu.Trigger.State;
565
564
  }
566
565
  // eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API
@@ -8,11 +8,6 @@ import * as React from "react";
8
8
  import {cn} from "@/lib/utilities";
9
9
  import styles from "./meter.module.css";
10
10
 
11
- type MeterProps = React.ComponentPropsWithRef<typeof BaseMeter.Root>;
12
- type MeterTrackProps = React.ComponentPropsWithRef<typeof BaseMeter.Track>;
13
- type MeterIndicatorProps = React.ComponentPropsWithRef<typeof BaseMeter.Indicator>;
14
- type MeterLabelProps = React.ComponentPropsWithRef<typeof BaseMeter.Label>;
15
-
16
11
  /**
17
12
  * Displays a scalar measurement within a known range.
18
13
  *
@@ -32,12 +27,13 @@ type MeterLabelProps = React.ComponentPropsWithRef<typeof BaseMeter.Label>;
32
27
  *
33
28
  * @see {@link https://base-ui.com/react/components/meter | Base UI Meter Docs}
34
29
  */
35
- function Meter(props: Readonly<Meter.Props>): React.ReactElement {
30
+ const Meter = React.forwardRef<HTMLDivElement, Meter.Props>(function Meter(props, forwardedRef) {
36
31
  const {className, children, render, ...otherProps} = props;
37
32
 
38
33
  return (
39
34
  <BaseMeter.Root
40
35
  {...otherProps}
36
+ ref={forwardedRef}
41
37
  render={useRender({
42
38
  defaultTagName: "div",
43
39
  render: render as never,
@@ -46,7 +42,7 @@ function Meter(props: Readonly<Meter.Props>): React.ReactElement {
46
42
  {children}
47
43
  </BaseMeter.Root>
48
44
  );
49
- }
45
+ });
50
46
 
51
47
  /**
52
48
  * Renders the background track for a meter.
@@ -62,12 +58,13 @@ function Meter(props: Readonly<Meter.Props>): React.ReactElement {
62
58
  *
63
59
  * @see {@link https://base-ui.com/react/components/meter | Base UI Meter Docs}
64
60
  */
65
- function MeterTrack(props: Readonly<MeterTrack.Props>): React.ReactElement {
61
+ const MeterTrack = React.forwardRef<HTMLDivElement, MeterTrack.Props>(function MeterTrack(props, forwardedRef) {
66
62
  const {className, children, render, ...otherProps} = props;
67
63
 
68
64
  return (
69
65
  <BaseMeter.Track
70
66
  {...otherProps}
67
+ ref={forwardedRef}
71
68
  render={useRender({
72
69
  defaultTagName: "div",
73
70
  render: render as never,
@@ -76,7 +73,7 @@ function MeterTrack(props: Readonly<MeterTrack.Props>): React.ReactElement {
76
73
  {children}
77
74
  </BaseMeter.Track>
78
75
  );
79
- }
76
+ });
80
77
 
81
78
  /**
82
79
  * Renders the filled indicator that reflects the current meter value.
@@ -92,12 +89,13 @@ function MeterTrack(props: Readonly<MeterTrack.Props>): React.ReactElement {
92
89
  *
93
90
  * @see {@link https://base-ui.com/react/components/meter | Base UI Meter Docs}
94
91
  */
95
- function MeterIndicator(props: Readonly<MeterIndicator.Props>): React.ReactElement {
92
+ const MeterIndicator = React.forwardRef<HTMLDivElement, MeterIndicator.Props>(function MeterIndicator(props, forwardedRef) {
96
93
  const {className, children, render, ...otherProps} = props;
97
94
 
98
95
  return (
99
96
  <BaseMeter.Indicator
100
97
  {...otherProps}
98
+ ref={forwardedRef}
101
99
  render={useRender({
102
100
  defaultTagName: "div",
103
101
  render: render as never,
@@ -106,7 +104,7 @@ function MeterIndicator(props: Readonly<MeterIndicator.Props>): React.ReactEleme
106
104
  {children}
107
105
  </BaseMeter.Indicator>
108
106
  );
109
- }
107
+ });
110
108
 
111
109
  /**
112
110
  * Renders the accessible label associated with a meter.
@@ -122,12 +120,13 @@ function MeterIndicator(props: Readonly<MeterIndicator.Props>): React.ReactEleme
122
120
  *
123
121
  * @see {@link https://base-ui.com/react/components/meter | Base UI Meter Docs}
124
122
  */
125
- function MeterLabel(props: Readonly<MeterLabel.Props>): React.ReactElement {
123
+ const MeterLabel = React.forwardRef<HTMLSpanElement, MeterLabel.Props>(function MeterLabel(props, forwardedRef) {
126
124
  const {className, children, render, ...otherProps} = props;
127
125
 
128
126
  return (
129
127
  <BaseMeter.Label
130
128
  {...otherProps}
129
+ ref={forwardedRef}
131
130
  render={useRender({
132
131
  defaultTagName: "span",
133
132
  render: render as never,
@@ -136,29 +135,29 @@ function MeterLabel(props: Readonly<MeterLabel.Props>): React.ReactElement {
136
135
  {children}
137
136
  </BaseMeter.Label>
138
137
  );
139
- }
138
+ });
140
139
 
141
140
  // eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API
142
141
  namespace Meter {
143
- export type Props = MeterProps;
142
+ export type Props = React.ComponentPropsWithRef<typeof BaseMeter.Root>;
144
143
  export type State = BaseMeter.Root.State;
145
144
  }
146
145
 
147
146
  // eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API
148
147
  namespace MeterTrack {
149
- export type Props = MeterTrackProps;
148
+ export type Props = React.ComponentPropsWithRef<typeof BaseMeter.Track>;
150
149
  export type State = BaseMeter.Track.State;
151
150
  }
152
151
 
153
152
  // eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API
154
153
  namespace MeterIndicator {
155
- export type Props = MeterIndicatorProps;
154
+ export type Props = React.ComponentPropsWithRef<typeof BaseMeter.Indicator>;
156
155
  export type State = BaseMeter.Indicator.State;
157
156
  }
158
157
 
159
158
  // eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API
160
159
  namespace MeterLabel {
161
- export type Props = MeterLabelProps;
160
+ export type Props = React.ComponentPropsWithRef<typeof BaseMeter.Label>;
162
161
  export type State = BaseMeter.Label.State;
163
162
  }
164
163
 
@@ -176,22 +176,25 @@ const NavigationMenuItem = BaseNavigationMenu.Item;
176
176
  *
177
177
  * @see {@link https://base-ui.com/react/components/navigation-menu | Base UI Documentation}
178
178
  */
179
- function NavigationMenuTrigger(props: Readonly<NavigationMenuTrigger.Props>): React.ReactElement {
180
- const {className, children, render, ...otherProps} = props;
181
-
182
- return (
183
- <BaseNavigationMenu.Trigger
184
- {...otherProps}
185
- render={useRender({
186
- defaultTagName: "button",
187
- render: render as never,
188
- props: mergeProps({className: cn(styles.trigger, className)}, {}),
189
- })}>
190
- {children}
191
- <ChevronDown className={styles.triggerIcon} />
192
- </BaseNavigationMenu.Trigger>
193
- );
194
- }
179
+ const NavigationMenuTrigger = React.forwardRef<HTMLButtonElement, NavigationMenuTrigger.Props>(
180
+ function NavigationMenuTrigger(props, forwardedRef) {
181
+ const {className, children, render, ...otherProps} = props;
182
+
183
+ return (
184
+ <BaseNavigationMenu.Trigger
185
+ {...otherProps}
186
+ ref={forwardedRef}
187
+ render={useRender({
188
+ defaultTagName: "button",
189
+ render: render as never,
190
+ props: mergeProps({className: cn(styles.trigger, className)}, {}),
191
+ })}>
192
+ {children}
193
+ <ChevronDown className={styles.triggerIcon} />
194
+ </BaseNavigationMenu.Trigger>
195
+ );
196
+ },
197
+ );
195
198
 
196
199
  /**
197
200
  * Renders the navigation menu content.
@@ -208,21 +211,24 @@ function NavigationMenuTrigger(props: Readonly<NavigationMenuTrigger.Props>): Re
208
211
  *
209
212
  * @see {@link https://base-ui.com/react/components/navigation-menu | Base UI Documentation}
210
213
  */
211
- function NavigationMenuContent(props: Readonly<NavigationMenuContent.Props>): React.ReactElement {
212
- const {className, children, render, ...otherProps} = props;
213
-
214
- return (
215
- <BaseNavigationMenu.Content
216
- {...otherProps}
217
- render={useRender({
218
- defaultTagName: "div",
219
- render: render as never,
220
- props: mergeProps({className: cn(styles.content, className)}, {}),
221
- })}>
222
- {children}
223
- </BaseNavigationMenu.Content>
224
- );
225
- }
214
+ const NavigationMenuContent = React.forwardRef<HTMLDivElement, NavigationMenuContent.Props>(
215
+ function NavigationMenuContent(props, forwardedRef) {
216
+ const {className, children, render, ...otherProps} = props;
217
+
218
+ return (
219
+ <BaseNavigationMenu.Content
220
+ {...otherProps}
221
+ ref={forwardedRef}
222
+ render={useRender({
223
+ defaultTagName: "div",
224
+ render: render as never,
225
+ props: mergeProps({className: cn(styles.content, className)}, {}),
226
+ })}>
227
+ {children}
228
+ </BaseNavigationMenu.Content>
229
+ );
230
+ },
231
+ );
226
232
 
227
233
  /**
228
234
  * Renders the navigation menu link.
@@ -239,12 +245,13 @@ function NavigationMenuContent(props: Readonly<NavigationMenuContent.Props>): Re
239
245
  *
240
246
  * @see {@link https://base-ui.com/react/components/navigation-menu | Base UI Documentation}
241
247
  */
242
- function NavigationMenuLink(props: Readonly<NavigationMenuLink.Props>): React.ReactElement {
248
+ const NavigationMenuLink = React.forwardRef<HTMLAnchorElement, NavigationMenuLink.Props>(function NavigationMenuLink(props, forwardedRef) {
243
249
  const {className, children, render, ...otherProps} = props;
244
250
 
245
251
  return (
246
252
  <BaseNavigationMenu.Link
247
253
  {...otherProps}
254
+ ref={forwardedRef}
248
255
  render={useRender({
249
256
  defaultTagName: "a",
250
257
  render: render as never,
@@ -253,7 +260,7 @@ function NavigationMenuLink(props: Readonly<NavigationMenuLink.Props>): React.Re
253
260
  {children}
254
261
  </BaseNavigationMenu.Link>
255
262
  );
256
- }
263
+ });
257
264
 
258
265
  /**
259
266
  * Renders the navigation menu viewport.
@@ -318,6 +325,7 @@ function NavigationMenuViewport(props: Readonly<NavigationMenuViewport.Props>):
318
325
  * @see {@link https://base-ui.com/react/components/navigation-menu | Base UI Documentation}
319
326
  */
320
327
  function NavigationMenuIndicator(props: Readonly<NavigationMenuIndicator.Props>): React.ReactElement {
328
+ // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild API
321
329
  const {asChild = false, children, className, render, ...otherProps} = props;
322
330
  const renderProp = asChild && React.isValidElement(children) ? children : render;
323
331