@burtson-labs/ui 0.13.1 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (460) hide show
  1. package/LICENSES/DEPENDENCIES.txt +2745 -0
  2. package/LICENSES/Radix-MIT.txt +21 -0
  3. package/LICENSES/cmdk-MIT.txt +21 -0
  4. package/LICENSES/overrides/react-remove-scroll-bar.txt +26 -0
  5. package/LICENSES/shadcn-MIT.txt +21 -0
  6. package/README.md +20 -12
  7. package/THIRD_PARTY_NOTICES.md +15 -3
  8. package/dist/components/accordion.d.ts +4 -4
  9. package/dist/components/accordion.js +22 -18
  10. package/dist/components/accordion.js.map +1 -1
  11. package/dist/components/alert-dialog.d.ts +13 -11
  12. package/dist/components/alert-dialog.js +41 -31
  13. package/dist/components/alert-dialog.js.map +1 -1
  14. package/dist/components/alert.d.ts +5 -3
  15. package/dist/components/alert.js +12 -7
  16. package/dist/components/alert.js.map +1 -1
  17. package/dist/components/app-shell.d.ts +7 -6
  18. package/dist/components/app-shell.js +22 -14
  19. package/dist/components/app-shell.js.map +1 -1
  20. package/dist/components/attachment.d.ts +3 -3
  21. package/dist/components/attachment.js +11 -7
  22. package/dist/components/attachment.js.map +1 -1
  23. package/dist/components/audio-player.d.ts +2 -2
  24. package/dist/components/audio-player.js +9 -6
  25. package/dist/components/audio-player.js.map +1 -1
  26. package/dist/components/avatar.d.ts +4 -4
  27. package/dist/components/avatar.js +16 -12
  28. package/dist/components/avatar.js.map +1 -1
  29. package/dist/components/badge.d.ts +1 -1
  30. package/dist/components/badge.js +15 -13
  31. package/dist/components/badge.js.map +1 -1
  32. package/dist/components/breadcrumb.d.ts +8 -8
  33. package/dist/components/breadcrumb.js +27 -20
  34. package/dist/components/breadcrumb.js.map +1 -1
  35. package/dist/components/button.d.ts +9 -2
  36. package/dist/components/button.js +15 -6
  37. package/dist/components/button.js.map +1 -1
  38. package/dist/components/card.d.ts +9 -9
  39. package/dist/components/card.js +33 -23
  40. package/dist/components/card.js.map +1 -1
  41. package/dist/components/chat-history.d.ts +1 -1
  42. package/dist/components/chat-history.js +11 -9
  43. package/dist/components/chat-history.js.map +1 -1
  44. package/dist/components/chat-layout.d.ts +1 -1
  45. package/dist/components/chat-layout.js +8 -3
  46. package/dist/components/chat-layout.js.map +1 -1
  47. package/dist/components/checkbox-card.d.ts +3 -3
  48. package/dist/components/checkbox-card.js +12 -10
  49. package/dist/components/checkbox-card.js.map +1 -1
  50. package/dist/components/checkbox.d.ts +24 -3
  51. package/dist/components/checkbox.js +52 -9
  52. package/dist/components/checkbox.js.map +1 -1
  53. package/dist/components/collapsible.d.ts +3 -3
  54. package/dist/components/collapsible.js +14 -11
  55. package/dist/components/collapsible.js.map +1 -1
  56. package/dist/components/combobox.d.ts +14 -4
  57. package/dist/components/combobox.js +19 -8
  58. package/dist/components/combobox.js.map +1 -1
  59. package/dist/components/command.d.ts +68 -12
  60. package/dist/components/command.js +48 -34
  61. package/dist/components/command.js.map +1 -1
  62. package/dist/components/composer.d.ts +2 -2
  63. package/dist/components/composer.js +10 -7
  64. package/dist/components/composer.js.map +1 -1
  65. package/dist/components/connection-status.d.ts +3 -3
  66. package/dist/components/connection-status.js +19 -14
  67. package/dist/components/connection-status.js.map +1 -1
  68. package/dist/components/context-menu.d.ts +15 -14
  69. package/dist/components/context-menu.js +52 -41
  70. package/dist/components/context-menu.js.map +1 -1
  71. package/dist/components/conversation.d.ts +1 -1
  72. package/dist/components/conversation.js +7 -5
  73. package/dist/components/conversation.js.map +1 -1
  74. package/dist/components/copy-button.d.ts +1 -1
  75. package/dist/components/copy-button.js +4 -2
  76. package/dist/components/copy-button.js.map +1 -1
  77. package/dist/components/data-table.d.ts +7 -2
  78. package/dist/components/data-table.js +17 -42
  79. package/dist/components/data-table.js.map +1 -1
  80. package/dist/components/dialog.d.ts +19 -10
  81. package/dist/components/dialog.js +50 -33
  82. package/dist/components/dialog.js.map +1 -1
  83. package/dist/components/dropdown-menu.d.ts +15 -14
  84. package/dist/components/dropdown-menu.js +52 -41
  85. package/dist/components/dropdown-menu.js.map +1 -1
  86. package/dist/components/editor-tabs.d.ts +1 -1
  87. package/dist/components/editor-tabs.js +7 -5
  88. package/dist/components/editor-tabs.js.map +1 -1
  89. package/dist/components/empty-state.d.ts +5 -5
  90. package/dist/components/empty-state.js +17 -11
  91. package/dist/components/empty-state.js.map +1 -1
  92. package/dist/components/error-summary.d.ts +21 -0
  93. package/dist/components/error-summary.js +62 -0
  94. package/dist/components/error-summary.js.map +1 -0
  95. package/dist/components/field.d.ts +66 -7
  96. package/dist/components/field.js +152 -20
  97. package/dist/components/field.js.map +1 -1
  98. package/dist/components/form-actions.d.ts +18 -0
  99. package/dist/components/form-actions.js +30 -0
  100. package/dist/components/form-actions.js.map +1 -0
  101. package/dist/components/icon-button.d.ts +3 -1
  102. package/dist/components/icon-button.js +6 -3
  103. package/dist/components/icon-button.js.map +1 -1
  104. package/dist/components/input.d.ts +42 -7
  105. package/dist/components/input.js +54 -10
  106. package/dist/components/input.js.map +1 -1
  107. package/dist/components/kbd.d.ts +2 -2
  108. package/dist/components/kbd.js +8 -5
  109. package/dist/components/kbd.js.map +1 -1
  110. package/dist/components/label.d.ts +7 -2
  111. package/dist/components/label.js +14 -7
  112. package/dist/components/label.js.map +1 -1
  113. package/dist/components/markdown.d.ts +4 -3
  114. package/dist/components/markdown.js +8 -6
  115. package/dist/components/markdown.js.map +1 -1
  116. package/dist/components/menubar.d.ts +17 -15
  117. package/dist/components/menubar.js +58 -45
  118. package/dist/components/menubar.js.map +1 -1
  119. package/dist/components/message-actions.d.ts +3 -3
  120. package/dist/components/message-actions.js +16 -12
  121. package/dist/components/message-actions.js.map +1 -1
  122. package/dist/components/message.d.ts +1 -1
  123. package/dist/components/message.js +6 -3
  124. package/dist/components/message.js.map +1 -1
  125. package/dist/components/mobile-nav.d.ts +1 -1
  126. package/dist/components/mobile-nav.js +7 -5
  127. package/dist/components/mobile-nav.js.map +1 -1
  128. package/dist/components/native-select.d.ts +16 -0
  129. package/dist/components/native-select.js +33 -0
  130. package/dist/components/native-select.js.map +1 -0
  131. package/dist/components/navigation-menu.d.ts +13 -12
  132. package/dist/components/navigation-menu.js +43 -33
  133. package/dist/components/navigation-menu.js.map +1 -1
  134. package/dist/components/number-input.d.ts +23 -0
  135. package/dist/components/number-input.js +45 -0
  136. package/dist/components/number-input.js.map +1 -0
  137. package/dist/components/onboarding-checklist.d.ts +1 -1
  138. package/dist/components/onboarding-checklist.js +5 -3
  139. package/dist/components/onboarding-checklist.js.map +1 -1
  140. package/dist/components/page-header.d.ts +7 -6
  141. package/dist/components/page-header.js +23 -15
  142. package/dist/components/page-header.js.map +1 -1
  143. package/dist/components/pagination.d.ts +1 -1
  144. package/dist/components/pagination.js +4 -2
  145. package/dist/components/pagination.js.map +1 -1
  146. package/dist/components/popover.d.ts +14 -11
  147. package/dist/components/popover.js +30 -23
  148. package/dist/components/popover.js.map +1 -1
  149. package/dist/components/progress.d.ts +2 -2
  150. package/dist/components/progress.js +11 -9
  151. package/dist/components/progress.js.map +1 -1
  152. package/dist/components/radio-group.d.ts +23 -4
  153. package/dist/components/radio-group.js +56 -14
  154. package/dist/components/radio-group.js.map +1 -1
  155. package/dist/components/reasoning.d.ts +3 -3
  156. package/dist/components/reasoning.js +14 -11
  157. package/dist/components/reasoning.js.map +1 -1
  158. package/dist/components/resizable.js +1 -0
  159. package/dist/components/resizable.js.map +1 -1
  160. package/dist/components/scroll-area.d.ts +4 -3
  161. package/dist/components/scroll-area.js +18 -14
  162. package/dist/components/scroll-area.js.map +1 -1
  163. package/dist/components/secret-input.d.ts +3 -2
  164. package/dist/components/secret-input.js +7 -4
  165. package/dist/components/secret-input.js.map +1 -1
  166. package/dist/components/select.d.ts +12 -7
  167. package/dist/components/select.js +42 -35
  168. package/dist/components/select.js.map +1 -1
  169. package/dist/components/separator.d.ts +2 -2
  170. package/dist/components/separator.js +8 -6
  171. package/dist/components/separator.js.map +1 -1
  172. package/dist/components/sheet.d.ts +11 -9
  173. package/dist/components/sheet.js +41 -29
  174. package/dist/components/sheet.js.map +1 -1
  175. package/dist/components/skeleton.d.ts +2 -1
  176. package/dist/components/skeleton.js +7 -4
  177. package/dist/components/skeleton.js.map +1 -1
  178. package/dist/components/slider.d.ts +10 -6
  179. package/dist/components/slider.js +16 -7
  180. package/dist/components/slider.js.map +1 -1
  181. package/dist/components/source.d.ts +2 -2
  182. package/dist/components/source.js +10 -7
  183. package/dist/components/source.js.map +1 -1
  184. package/dist/components/spinner.d.ts +4 -2
  185. package/dist/components/spinner.js +5 -3
  186. package/dist/components/spinner.js.map +1 -1
  187. package/dist/components/stat-card.d.ts +27 -2
  188. package/dist/components/stat-card.js +70 -9
  189. package/dist/components/stat-card.js.map +1 -1
  190. package/dist/components/status.d.ts +7 -6
  191. package/dist/components/status.js +12 -5
  192. package/dist/components/status.js.map +1 -1
  193. package/dist/components/steps.d.ts +1 -1
  194. package/dist/components/steps.js +5 -3
  195. package/dist/components/steps.js.map +1 -1
  196. package/dist/components/switch.d.ts +47 -3
  197. package/dist/components/switch.js +89 -11
  198. package/dist/components/switch.js.map +1 -1
  199. package/dist/components/table.d.ts +29 -12
  200. package/dist/components/table.js +80 -34
  201. package/dist/components/table.js.map +1 -1
  202. package/dist/components/tabs.d.ts +10 -5
  203. package/dist/components/tabs.js +29 -19
  204. package/dist/components/tabs.js.map +1 -1
  205. package/dist/components/textarea.d.ts +6 -1
  206. package/dist/components/textarea.js +4 -3
  207. package/dist/components/textarea.js.map +1 -1
  208. package/dist/components/toast.d.ts +11 -7
  209. package/dist/components/toast.js +37 -27
  210. package/dist/components/toast.js.map +1 -1
  211. package/dist/components/toaster.d.ts +4 -2
  212. package/dist/components/toaster.js +7 -2
  213. package/dist/components/toaster.js.map +1 -1
  214. package/dist/components/tool-call.d.ts +2 -2
  215. package/dist/components/tool-call.js +15 -12
  216. package/dist/components/tool-call.js.map +1 -1
  217. package/dist/components/toolbar.d.ts +9 -4
  218. package/dist/components/toolbar.js +15 -9
  219. package/dist/components/toolbar.js.map +1 -1
  220. package/dist/components/tooltip.d.ts +4 -3
  221. package/dist/components/tooltip.js +17 -13
  222. package/dist/components/tooltip.js.map +1 -1
  223. package/dist/components/tour.js +10 -8
  224. package/dist/components/tour.js.map +1 -1
  225. package/dist/components/tree-view.d.ts +1 -1
  226. package/dist/components/tree-view.js +10 -5
  227. package/dist/components/tree-view.js.map +1 -1
  228. package/dist/components/voice-recorder.d.ts +1 -1
  229. package/dist/components/voice-recorder.js +5 -2
  230. package/dist/components/voice-recorder.js.map +1 -1
  231. package/dist/index.d.ts +6 -1
  232. package/dist/index.js +17 -12
  233. package/dist/lib/media.d.ts +18 -0
  234. package/dist/lib/media.js +34 -0
  235. package/dist/lib/media.js.map +1 -0
  236. package/dist/lib/utils.d.ts +32 -0
  237. package/dist/lib/utils.js +33 -1
  238. package/dist/lib/utils.js.map +1 -1
  239. package/dist/mui/index.js +20 -8
  240. package/dist/mui/index.js.map +1 -1
  241. package/dist/primitives/vendor/cmdk/command-score.d.ts +1 -0
  242. package/dist/primitives/vendor/cmdk/command-score.js +64 -0
  243. package/dist/primitives/vendor/cmdk/command-score.js.map +1 -0
  244. package/dist/primitives/vendor/cmdk/index.d.ts +384 -0
  245. package/dist/primitives/vendor/cmdk/index.js +687 -0
  246. package/dist/primitives/vendor/cmdk/index.js.map +1 -0
  247. package/dist/primitives/vendor/radix/number/index.d.ts +1 -0
  248. package/dist/primitives/vendor/radix/number/number.d.ts +2 -0
  249. package/dist/primitives/vendor/radix/number/number.js +9 -0
  250. package/dist/primitives/vendor/radix/number/number.js.map +1 -0
  251. package/dist/primitives/vendor/radix/primitive/index.d.ts +2 -0
  252. package/dist/primitives/vendor/radix/primitive/is-development.d.ts +1 -0
  253. package/dist/primitives/vendor/radix/primitive/is-development.js +7 -0
  254. package/dist/primitives/vendor/radix/primitive/is-development.js.map +1 -0
  255. package/dist/primitives/vendor/radix/primitive/primitive.d.ts +14 -0
  256. package/dist/primitives/vendor/radix/primitive/primitive.js +12 -0
  257. package/dist/primitives/vendor/radix/primitive/primitive.js.map +1 -0
  258. package/dist/primitives/vendor/radix/primitive/types.d.ts +5 -0
  259. package/dist/primitives/vendor/radix/react-accordion/accordion.d.ts +112 -0
  260. package/dist/primitives/vendor/radix/react-accordion/accordion.js +266 -0
  261. package/dist/primitives/vendor/radix/react-accordion/accordion.js.map +1 -0
  262. package/dist/primitives/vendor/radix/react-accordion/index.d.ts +2 -0
  263. package/dist/primitives/vendor/radix/react-alert-dialog/alert-dialog.d.ts +49 -0
  264. package/dist/primitives/vendor/radix/react-alert-dialog/alert-dialog.js +122 -0
  265. package/dist/primitives/vendor/radix/react-alert-dialog/alert-dialog.js.map +1 -0
  266. package/dist/primitives/vendor/radix/react-alert-dialog/index.d.ts +2 -0
  267. package/dist/primitives/vendor/radix/react-arrow/arrow.d.ts +9 -0
  268. package/dist/primitives/vendor/radix/react-arrow/arrow.js +22 -0
  269. package/dist/primitives/vendor/radix/react-arrow/arrow.js.map +1 -0
  270. package/dist/primitives/vendor/radix/react-arrow/index.d.ts +2 -0
  271. package/dist/primitives/vendor/radix/react-avatar/avatar.d.ts +19 -0
  272. package/dist/primitives/vendor/radix/react-avatar/avatar.js +132 -0
  273. package/dist/primitives/vendor/radix/react-avatar/avatar.js.map +1 -0
  274. package/dist/primitives/vendor/radix/react-avatar/index.d.ts +2 -0
  275. package/dist/primitives/vendor/radix/react-checkbox/checkbox.d.ts +47 -0
  276. package/dist/primitives/vendor/radix/react-checkbox/checkbox.js +197 -0
  277. package/dist/primitives/vendor/radix/react-checkbox/checkbox.js.map +1 -0
  278. package/dist/primitives/vendor/radix/react-checkbox/index.d.ts +2 -0
  279. package/dist/primitives/vendor/radix/react-collapsible/collapsible.d.ts +31 -0
  280. package/dist/primitives/vendor/radix/react-collapsible/collapsible.js +133 -0
  281. package/dist/primitives/vendor/radix/react-collapsible/collapsible.js.map +1 -0
  282. package/dist/primitives/vendor/radix/react-collapsible/index.d.ts +2 -0
  283. package/dist/primitives/vendor/radix/react-collection/collection-legacy.d.ts +21 -0
  284. package/dist/primitives/vendor/radix/react-collection/collection-legacy.js +84 -0
  285. package/dist/primitives/vendor/radix/react-collection/collection-legacy.js.map +1 -0
  286. package/dist/primitives/vendor/radix/react-collection/collection.d.ts +32 -0
  287. package/dist/primitives/vendor/radix/react-collection/index.d.ts +4 -0
  288. package/dist/primitives/vendor/radix/react-collection/ordered-dictionary.d.ts +51 -0
  289. package/dist/primitives/vendor/radix/react-compose-refs/compose-refs.d.ts +13 -0
  290. package/dist/primitives/vendor/radix/react-compose-refs/compose-refs.js +43 -0
  291. package/dist/primitives/vendor/radix/react-compose-refs/compose-refs.js.map +1 -0
  292. package/dist/primitives/vendor/radix/react-compose-refs/index.d.ts +1 -0
  293. package/dist/primitives/vendor/radix/react-context/create-context.d.ts +45 -0
  294. package/dist/primitives/vendor/radix/react-context/create-context.js +74 -0
  295. package/dist/primitives/vendor/radix/react-context/create-context.js.map +1 -0
  296. package/dist/primitives/vendor/radix/react-context/index.d.ts +2 -0
  297. package/dist/primitives/vendor/radix/react-context-menu/context-menu.d.ts +95 -0
  298. package/dist/primitives/vendor/radix/react-context-menu/context-menu.js +279 -0
  299. package/dist/primitives/vendor/radix/react-context-menu/context-menu.js.map +1 -0
  300. package/dist/primitives/vendor/radix/react-context-menu/index.d.ts +2 -0
  301. package/dist/primitives/vendor/radix/react-dialog/dialog.d.ts +97 -0
  302. package/dist/primitives/vendor/radix/react-dialog/dialog.js +262 -0
  303. package/dist/primitives/vendor/radix/react-dialog/dialog.js.map +1 -0
  304. package/dist/primitives/vendor/radix/react-dialog/index.d.ts +4 -0
  305. package/dist/primitives/vendor/radix/react-direction/direction.d.ts +10 -0
  306. package/dist/primitives/vendor/radix/react-direction/direction.js +13 -0
  307. package/dist/primitives/vendor/radix/react-direction/direction.js.map +1 -0
  308. package/dist/primitives/vendor/radix/react-direction/index.d.ts +1 -0
  309. package/dist/primitives/vendor/radix/react-dismissable-layer/dismissable-layer.d.ts +61 -0
  310. package/dist/primitives/vendor/radix/react-dismissable-layer/dismissable-layer.js +336 -0
  311. package/dist/primitives/vendor/radix/react-dismissable-layer/dismissable-layer.js.map +1 -0
  312. package/dist/primitives/vendor/radix/react-dismissable-layer/index.d.ts +4 -0
  313. package/dist/primitives/vendor/radix/react-dropdown-menu/dropdown-menu.d.ts +95 -0
  314. package/dist/primitives/vendor/radix/react-dropdown-menu/dropdown-menu.js +257 -0
  315. package/dist/primitives/vendor/radix/react-dropdown-menu/dropdown-menu.js.map +1 -0
  316. package/dist/primitives/vendor/radix/react-dropdown-menu/index.d.ts +2 -0
  317. package/dist/primitives/vendor/radix/react-focus-guards/focus-guards.d.ts +11 -0
  318. package/dist/primitives/vendor/radix/react-focus-guards/focus-guards.js +49 -0
  319. package/dist/primitives/vendor/radix/react-focus-guards/focus-guards.js.map +1 -0
  320. package/dist/primitives/vendor/radix/react-focus-guards/index.d.ts +1 -0
  321. package/dist/primitives/vendor/radix/react-focus-scope/focus-scope.d.ts +31 -0
  322. package/dist/primitives/vendor/radix/react-focus-scope/focus-scope.js +221 -0
  323. package/dist/primitives/vendor/radix/react-focus-scope/focus-scope.js.map +1 -0
  324. package/dist/primitives/vendor/radix/react-focus-scope/index.d.ts +1 -0
  325. package/dist/primitives/vendor/radix/react-id/id.d.ts +2 -0
  326. package/dist/primitives/vendor/radix/react-id/id.js +17 -0
  327. package/dist/primitives/vendor/radix/react-id/id.js.map +1 -0
  328. package/dist/primitives/vendor/radix/react-id/index.d.ts +1 -0
  329. package/dist/primitives/vendor/radix/react-label/index.d.ts +2 -0
  330. package/dist/primitives/vendor/radix/react-label/label.d.ts +9 -0
  331. package/dist/primitives/vendor/radix/react-label/label.js +21 -0
  332. package/dist/primitives/vendor/radix/react-label/label.js.map +1 -0
  333. package/dist/primitives/vendor/radix/react-menu/index.d.ts +2 -0
  334. package/dist/primitives/vendor/radix/react-menu/menu.d.ts +173 -0
  335. package/dist/primitives/vendor/radix/react-menu/menu.js +806 -0
  336. package/dist/primitives/vendor/radix/react-menu/menu.js.map +1 -0
  337. package/dist/primitives/vendor/radix/react-menubar/index.d.ts +2 -0
  338. package/dist/primitives/vendor/radix/react-menubar/menubar.d.ts +106 -0
  339. package/dist/primitives/vendor/radix/react-menubar/menubar.js +377 -0
  340. package/dist/primitives/vendor/radix/react-menubar/menubar.js.map +1 -0
  341. package/dist/primitives/vendor/radix/react-navigation-menu/index.d.ts +2 -0
  342. package/dist/primitives/vendor/radix/react-navigation-menu/navigation-menu.d.ts +124 -0
  343. package/dist/primitives/vendor/radix/react-navigation-menu/navigation-menu.js +743 -0
  344. package/dist/primitives/vendor/radix/react-navigation-menu/navigation-menu.js.map +1 -0
  345. package/dist/primitives/vendor/radix/react-popover/index.d.ts +1 -0
  346. package/dist/primitives/vendor/radix/react-popover/popover.d.ts +83 -0
  347. package/dist/primitives/vendor/radix/react-popover/popover.js +236 -0
  348. package/dist/primitives/vendor/radix/react-popover/popover.js.map +1 -0
  349. package/dist/primitives/vendor/radix/react-popper/index.d.ts +2 -0
  350. package/dist/primitives/vendor/radix/react-popper/popper.d.ts +44 -0
  351. package/dist/primitives/vendor/radix/react-popper/popper.js +276 -0
  352. package/dist/primitives/vendor/radix/react-popper/popper.js.map +1 -0
  353. package/dist/primitives/vendor/radix/react-portal/index.d.ts +2 -0
  354. package/dist/primitives/vendor/radix/react-portal/portal.d.ts +13 -0
  355. package/dist/primitives/vendor/radix/react-portal/portal.js +21 -0
  356. package/dist/primitives/vendor/radix/react-portal/portal.js.map +1 -0
  357. package/dist/primitives/vendor/radix/react-presence/index.d.ts +2 -0
  358. package/dist/primitives/vendor/radix/react-presence/presence.d.ts +11 -0
  359. package/dist/primitives/vendor/radix/react-presence/presence.js +152 -0
  360. package/dist/primitives/vendor/radix/react-presence/presence.js.map +1 -0
  361. package/dist/primitives/vendor/radix/react-presence/use-state-machine.d.ts +10 -0
  362. package/dist/primitives/vendor/radix/react-presence/use-state-machine.js +12 -0
  363. package/dist/primitives/vendor/radix/react-presence/use-state-machine.js.map +1 -0
  364. package/dist/primitives/vendor/radix/react-primitive/index.d.ts +2 -0
  365. package/dist/primitives/vendor/radix/react-primitive/primitive.d.ts +56 -0
  366. package/dist/primitives/vendor/radix/react-primitive/primitive.js +84 -0
  367. package/dist/primitives/vendor/radix/react-primitive/primitive.js.map +1 -0
  368. package/dist/primitives/vendor/radix/react-progress/index.d.ts +2 -0
  369. package/dist/primitives/vendor/radix/react-progress/progress.d.ts +17 -0
  370. package/dist/primitives/vendor/radix/react-progress/progress.js +79 -0
  371. package/dist/primitives/vendor/radix/react-progress/progress.js.map +1 -0
  372. package/dist/primitives/vendor/radix/react-radio-group/index.d.ts +2 -0
  373. package/dist/primitives/vendor/radix/react-radio-group/radio-group.d.ts +55 -0
  374. package/dist/primitives/vendor/radix/react-radio-group/radio-group.js +173 -0
  375. package/dist/primitives/vendor/radix/react-radio-group/radio-group.js.map +1 -0
  376. package/dist/primitives/vendor/radix/react-radio-group/radio.d.ts +62 -0
  377. package/dist/primitives/vendor/radix/react-radio-group/radio.js +150 -0
  378. package/dist/primitives/vendor/radix/react-radio-group/radio.js.map +1 -0
  379. package/dist/primitives/vendor/radix/react-roving-focus/index.d.ts +2 -0
  380. package/dist/primitives/vendor/radix/react-roving-focus/roving-focus-group.d.ts +47 -0
  381. package/dist/primitives/vendor/radix/react-roving-focus/roving-focus-group.js +218 -0
  382. package/dist/primitives/vendor/radix/react-roving-focus/roving-focus-group.js.map +1 -0
  383. package/dist/primitives/vendor/radix/react-scroll-area/index.d.ts +2 -0
  384. package/dist/primitives/vendor/radix/react-scroll-area/scroll-area.d.ts +121 -0
  385. package/dist/primitives/vendor/radix/react-scroll-area/scroll-area.js +713 -0
  386. package/dist/primitives/vendor/radix/react-scroll-area/scroll-area.js.map +1 -0
  387. package/dist/primitives/vendor/radix/react-scroll-area/use-state-machine.d.ts +10 -0
  388. package/dist/primitives/vendor/radix/react-scroll-area/use-state-machine.js +12 -0
  389. package/dist/primitives/vendor/radix/react-scroll-area/use-state-machine.js.map +1 -0
  390. package/dist/primitives/vendor/radix/react-select/index.d.ts +2 -0
  391. package/dist/primitives/vendor/radix/react-select/select.d.ts +163 -0
  392. package/dist/primitives/vendor/radix/react-select/select.js +1040 -0
  393. package/dist/primitives/vendor/radix/react-select/select.js.map +1 -0
  394. package/dist/primitives/vendor/radix/react-separator/index.d.ts +2 -0
  395. package/dist/primitives/vendor/radix/react-separator/separator.d.ts +20 -0
  396. package/dist/primitives/vendor/radix/react-separator/separator.js +29 -0
  397. package/dist/primitives/vendor/radix/react-separator/separator.js.map +1 -0
  398. package/dist/primitives/vendor/radix/react-slot/index.d.ts +1 -0
  399. package/dist/primitives/vendor/radix/react-slot/slot.d.ts +29 -0
  400. package/dist/primitives/vendor/radix/react-slot/slot.js +107 -0
  401. package/dist/primitives/vendor/radix/react-slot/slot.js.map +1 -0
  402. package/dist/primitives/vendor/radix/react-switch/index.d.ts +2 -0
  403. package/dist/primitives/vendor/radix/react-switch/switch.d.ts +41 -0
  404. package/dist/primitives/vendor/radix/react-switch/switch.js +185 -0
  405. package/dist/primitives/vendor/radix/react-switch/switch.js.map +1 -0
  406. package/dist/primitives/vendor/radix/react-tabs/index.d.ts +2 -0
  407. package/dist/primitives/vendor/radix/react-tabs/tabs.d.ts +54 -0
  408. package/dist/primitives/vendor/radix/react-tabs/tabs.js +145 -0
  409. package/dist/primitives/vendor/radix/react-tabs/tabs.js.map +1 -0
  410. package/dist/primitives/vendor/radix/react-toast/index.d.ts +2 -0
  411. package/dist/primitives/vendor/radix/react-toast/toast.d.ts +125 -0
  412. package/dist/primitives/vendor/radix/react-toast/toast.js +557 -0
  413. package/dist/primitives/vendor/radix/react-toast/toast.js.map +1 -0
  414. package/dist/primitives/vendor/radix/react-tooltip/index.d.ts +2 -0
  415. package/dist/primitives/vendor/radix/react-tooltip/tooltip.d.ts +99 -0
  416. package/dist/primitives/vendor/radix/react-tooltip/tooltip.js +503 -0
  417. package/dist/primitives/vendor/radix/react-tooltip/tooltip.js.map +1 -0
  418. package/dist/primitives/vendor/radix/react-use-callback-ref/index.d.ts +1 -0
  419. package/dist/primitives/vendor/radix/react-use-callback-ref/use-callback-ref.d.ts +6 -0
  420. package/dist/primitives/vendor/radix/react-use-callback-ref/use-callback-ref.js +18 -0
  421. package/dist/primitives/vendor/radix/react-use-callback-ref/use-callback-ref.js.map +1 -0
  422. package/dist/primitives/vendor/radix/react-use-controllable-state/index.d.ts +2 -0
  423. package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state-reducer.d.ts +28 -0
  424. package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state.d.ts +11 -0
  425. package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state.js +59 -0
  426. package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state.js.map +1 -0
  427. package/dist/primitives/vendor/radix/react-use-effect-event/index.d.ts +1 -0
  428. package/dist/primitives/vendor/radix/react-use-effect-event/use-effect-event.d.ts +7 -0
  429. package/dist/primitives/vendor/radix/react-use-is-hydrated/index.d.ts +1 -0
  430. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated-legacy.d.ts +1 -0
  431. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated-legacy.js +18 -0
  432. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated-legacy.js.map +1 -0
  433. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated.d.ts +6 -0
  434. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated.js +19 -0
  435. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated.js.map +1 -0
  436. package/dist/primitives/vendor/radix/react-use-layout-effect/index.d.ts +1 -0
  437. package/dist/primitives/vendor/radix/react-use-layout-effect/use-layout-effect.d.ts +10 -0
  438. package/dist/primitives/vendor/radix/react-use-layout-effect/use-layout-effect.js +15 -0
  439. package/dist/primitives/vendor/radix/react-use-layout-effect/use-layout-effect.js.map +1 -0
  440. package/dist/primitives/vendor/radix/react-use-previous/index.d.ts +1 -0
  441. package/dist/primitives/vendor/radix/react-use-previous/use-previous.d.ts +2 -0
  442. package/dist/primitives/vendor/radix/react-use-previous/use-previous.js +20 -0
  443. package/dist/primitives/vendor/radix/react-use-previous/use-previous.js.map +1 -0
  444. package/dist/primitives/vendor/radix/react-use-size/index.d.ts +1 -0
  445. package/dist/primitives/vendor/radix/react-use-size/use-size.d.ts +5 -0
  446. package/dist/primitives/vendor/radix/react-use-size/use-size.js +42 -0
  447. package/dist/primitives/vendor/radix/react-use-size/use-size.js.map +1 -0
  448. package/dist/primitives/vendor/radix/react-visually-hidden/index.d.ts +2 -0
  449. package/dist/primitives/vendor/radix/react-visually-hidden/visually-hidden.d.ts +21 -0
  450. package/dist/primitives/vendor/radix/react-visually-hidden/visually-hidden.js +32 -0
  451. package/dist/primitives/vendor/radix/react-visually-hidden/visually-hidden.js.map +1 -0
  452. package/dist/primitives/vendor/radix/rect/index.d.ts +2 -0
  453. package/dist/primitives/vendor/radix/rect/observe-element-rect.d.ts +16 -0
  454. package/dist/styles.css +1 -1
  455. package/dist/theme.css +36 -17
  456. package/dist/tokens.d.ts +78 -36
  457. package/dist/tokens.js +63 -32
  458. package/dist/tokens.js.map +1 -1
  459. package/package.json +25 -13
  460. package/vendor-manifest.json +1101 -0
@@ -0,0 +1,150 @@
1
+ "use client";
2
+ import { createContextScope } from "../react-context/create-context.js";
3
+ import { useComposedRefs } from "../react-compose-refs/compose-refs.js";
4
+ import { composeEventHandlers } from "../primitive/primitive.js";
5
+ import { Primitive } from "../react-primitive/primitive.js";
6
+ import { Presence } from "../react-presence/presence.js";
7
+ import { useSize } from "../react-use-size/use-size.js";
8
+ import * as React from "react";
9
+ import { jsx } from "react/jsx-runtime";
10
+ //#region src/primitives/vendor/radix/react-radio-group/radio.tsx
11
+ var RADIO_NAME = "Radio";
12
+ var [createRadioContext, createRadioScope] = createContextScope(RADIO_NAME);
13
+ var [RadioProviderImpl, useRadioContext] = createRadioContext(RADIO_NAME);
14
+ function RadioProvider(props) {
15
+ const { __scopeRadio, checked = false, children, disabled, form, name, onCheck, required, value = "on", internal_do_not_use_render } = props;
16
+ const [control, setControl] = React.useState(null);
17
+ const [bubbleInput, setBubbleInput] = React.useState(null);
18
+ const hasConsumerStoppedPropagationRef = React.useRef(false);
19
+ const [userInteractionCount, onUserInteraction] = React.useReducer((count) => count + 1, 0);
20
+ const context = {
21
+ checked,
22
+ disabled,
23
+ required,
24
+ name,
25
+ form,
26
+ value,
27
+ control,
28
+ setControl,
29
+ hasConsumerStoppedPropagationRef,
30
+ userInteractionCount,
31
+ onUserInteraction,
32
+ isFormControl: control ? !!form || !!control.closest("form") : true,
33
+ bubbleInput,
34
+ setBubbleInput,
35
+ onCheck: () => onCheck?.()
36
+ };
37
+ return /* @__PURE__ */ jsx(RadioProviderImpl, {
38
+ scope: __scopeRadio,
39
+ ...context,
40
+ children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children
41
+ });
42
+ }
43
+ var TRIGGER_NAME = "RadioTrigger";
44
+ var RadioTrigger = /* @__PURE__ */ React.forwardRef(function RadioTrigger({ __scopeRadio, onClick, ...radioProps }, forwardedRef) {
45
+ const { checked, disabled, value, setControl, onCheck, hasConsumerStoppedPropagationRef, onUserInteraction, isFormControl, bubbleInput } = useRadioContext(TRIGGER_NAME, __scopeRadio);
46
+ const composedRefs = useComposedRefs(forwardedRef, setControl);
47
+ return /* @__PURE__ */ jsx(Primitive.button, {
48
+ type: "button",
49
+ role: "radio",
50
+ "aria-checked": checked,
51
+ "data-state": getState(checked),
52
+ "data-disabled": disabled ? "" : void 0,
53
+ disabled,
54
+ value,
55
+ ...radioProps,
56
+ ref: composedRefs,
57
+ onClick: composeEventHandlers(onClick, (event) => {
58
+ if (!checked) {
59
+ onUserInteraction();
60
+ onCheck();
61
+ }
62
+ if (bubbleInput && isFormControl) {
63
+ hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();
64
+ if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();
65
+ }
66
+ })
67
+ });
68
+ });
69
+ var INDICATOR_NAME = "RadioIndicator";
70
+ var RadioIndicator = /* @__PURE__ */ React.forwardRef(function RadioIndicator(props, forwardedRef) {
71
+ const { __scopeRadio, forceMount, ...indicatorProps } = props;
72
+ const context = useRadioContext(INDICATOR_NAME, __scopeRadio);
73
+ return /* @__PURE__ */ jsx(Presence, {
74
+ present: forceMount || context.checked,
75
+ children: /* @__PURE__ */ jsx(Primitive.span, {
76
+ "data-state": getState(context.checked),
77
+ "data-disabled": context.disabled ? "" : void 0,
78
+ ...indicatorProps,
79
+ ref: forwardedRef
80
+ })
81
+ });
82
+ });
83
+ var BUBBLE_INPUT_NAME = "RadioBubbleInput";
84
+ var RadioBubbleInput = /* @__PURE__ */ React.forwardRef(function RadioBubbleInput({ __scopeRadio, onClick, ...props }, forwardedRef) {
85
+ const { control, checked, required, disabled, name, value, form, bubbleInput, setBubbleInput, hasConsumerStoppedPropagationRef, userInteractionCount } = useRadioContext(BUBBLE_INPUT_NAME, __scopeRadio);
86
+ const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);
87
+ const controlSize = useSize(control);
88
+ const shouldStopClickPropagationRef = React.useRef(false);
89
+ const prevCheckedRef = React.useRef(checked);
90
+ const prevUserInteractionCountRef = React.useRef(userInteractionCount);
91
+ React.useEffect(() => {
92
+ const input = bubbleInput;
93
+ if (!input) return;
94
+ const inputProto = window.HTMLInputElement.prototype;
95
+ const setChecked = Object.getOwnPropertyDescriptor(inputProto, "checked").set;
96
+ const isUserInteraction = userInteractionCount !== prevUserInteractionCountRef.current;
97
+ prevUserInteractionCountRef.current = userInteractionCount;
98
+ const checkedChanged = prevCheckedRef.current !== checked;
99
+ prevCheckedRef.current = checked;
100
+ const bubbles = !(isUserInteraction && hasConsumerStoppedPropagationRef.current);
101
+ if (checkedChanged && setChecked) {
102
+ shouldStopClickPropagationRef.current = !isUserInteraction;
103
+ const event = new Event("click", { bubbles });
104
+ setChecked.call(input, checked);
105
+ input.dispatchEvent(event);
106
+ shouldStopClickPropagationRef.current = false;
107
+ }
108
+ }, [
109
+ bubbleInput,
110
+ checked,
111
+ hasConsumerStoppedPropagationRef,
112
+ userInteractionCount
113
+ ]);
114
+ const defaultCheckedRef = React.useRef(checked);
115
+ return /* @__PURE__ */ jsx(Primitive.input, {
116
+ type: "radio",
117
+ "aria-hidden": true,
118
+ defaultChecked: defaultCheckedRef.current,
119
+ required,
120
+ disabled,
121
+ name,
122
+ value,
123
+ form,
124
+ ...props,
125
+ tabIndex: -1,
126
+ ref: composedRefs,
127
+ onClick: composeEventHandlers(onClick, (event) => {
128
+ if (shouldStopClickPropagationRef.current) event.stopPropagation();
129
+ }),
130
+ style: {
131
+ ...props.style,
132
+ ...controlSize,
133
+ position: "absolute",
134
+ pointerEvents: "none",
135
+ opacity: 0,
136
+ margin: 0,
137
+ transform: "translateX(-100%)"
138
+ }
139
+ });
140
+ });
141
+ function isFunction(value) {
142
+ return typeof value === "function";
143
+ }
144
+ function getState(checked) {
145
+ return checked ? "checked" : "unchecked";
146
+ }
147
+ //#endregion
148
+ export { RadioBubbleInput, RadioIndicator, RadioProvider, RadioTrigger, createRadioScope, useRadioContext };
149
+
150
+ //# sourceMappingURL=radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio.js","names":[],"sources":["../../../../../src/primitives/vendor/radix/react-radio-group/radio.tsx"],"sourcesContent":["// Vendored from Radix Primitives (c) 2022 WorkOS, MIT. See vendor/LICENSE.radix.\n// Local modification: package imports resolve to the pinned local source.\nimport * as React from 'react';\nimport { composeEventHandlers } from '../primitive';\nimport { useComposedRefs } from '../react-compose-refs';\nimport { createContextScope } from '../react-context';\nimport { useSize } from '../react-use-size';\nimport { Presence } from '../react-presence';\nimport { Primitive } from '../react-primitive';\n\nimport type { Scope } from '../react-context';\n\nconst RADIO_NAME = 'Radio';\n\ntype ScopedProps<P> = P & { __scopeRadio?: Scope };\nconst [createRadioContext, createRadioScope] = createContextScope(RADIO_NAME);\n\ntype RadioContextValue = {\n checked: boolean;\n disabled: boolean | undefined;\n required: boolean | undefined;\n name: string | undefined;\n form: string | undefined;\n value: string | number | readonly string[];\n control: HTMLButtonElement | null;\n setControl: React.Dispatch<React.SetStateAction<HTMLButtonElement | null>>;\n hasConsumerStoppedPropagationRef: React.RefObject<boolean>;\n userInteractionCount: number;\n onUserInteraction: () => void;\n isFormControl: boolean;\n bubbleInput: HTMLInputElement | null;\n setBubbleInput: React.Dispatch<React.SetStateAction<HTMLInputElement | null>>;\n onCheck(): void;\n};\n\nconst [RadioProviderImpl, useRadioContext] = createRadioContext<RadioContextValue>(RADIO_NAME);\n\n/* -------------------------------------------------------------------------------------------------\n * RadioProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RadioProviderProps {\n checked?: boolean;\n required?: boolean;\n disabled?: boolean;\n name?: string;\n form?: string;\n value?: string | number | readonly string[];\n onCheck?(): void;\n children?: React.ReactNode;\n}\n\nfunction RadioProvider(props: ScopedProps<RadioProviderProps>) {\n const {\n __scopeRadio,\n checked = false,\n children,\n disabled,\n form,\n name,\n onCheck,\n required,\n value = 'on',\n // @ts-expect-error\n internal_do_not_use_render,\n } = props;\n\n const [control, setControl] = React.useState<HTMLButtonElement | null>(null);\n const [bubbleInput, setBubbleInput] = React.useState<HTMLInputElement | null>(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n\n // Incremented on every user interaction with the trigger. The bubble input\n // compares this against the value it last handled to tell whether a `checked`\n // change was driven by the user (vs. a controlled/programmatic update). Using\n // a counter guarantees the marker is updated in the same commit as the\n // resulting render, so it can never go stale and leak into a later\n // programmatic update.\n const [userInteractionCount, onUserInteraction] = React.useReducer(\n (count: number): number => count + 1,\n 0,\n );\n\n const isFormControl = control\n ? !!form || !!control.closest('form')\n : // We set this to true by default so that events bubble to forms without JS (SSR)\n true;\n\n const context: RadioContextValue = {\n checked,\n disabled,\n required,\n name,\n form,\n value,\n control,\n setControl,\n hasConsumerStoppedPropagationRef,\n userInteractionCount,\n onUserInteraction,\n isFormControl,\n bubbleInput,\n setBubbleInput,\n onCheck: () => onCheck?.(),\n };\n\n return (\n <RadioProviderImpl scope={__scopeRadio} {...context}>\n {isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children}\n </RadioProviderImpl>\n );\n}\n\n/* -------------------------------------------------------------------------------------------------\n * RadioTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'RadioTrigger';\n\ninterface RadioTriggerProps extends Omit<\n React.ComponentPropsWithoutRef<typeof Primitive.button>,\n keyof RadioProviderProps\n> {\n children?: React.ReactNode;\n}\n\nconst RadioTrigger = /* @__PURE__ */ React.forwardRef<HTMLButtonElement, RadioTriggerProps>(\n function RadioTrigger(\n { __scopeRadio, onClick, ...radioProps }: ScopedProps<RadioTriggerProps>,\n forwardedRef,\n ) {\n const {\n checked,\n disabled,\n value,\n setControl,\n onCheck,\n hasConsumerStoppedPropagationRef,\n onUserInteraction,\n isFormControl,\n bubbleInput,\n } = useRadioContext(TRIGGER_NAME, __scopeRadio);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n\n return (\n <Primitive.button\n type=\"button\"\n role=\"radio\"\n aria-checked={checked}\n data-state={getState(checked)}\n data-disabled={disabled ? '' : undefined}\n disabled={disabled}\n value={value}\n {...radioProps}\n ref={composedRefs}\n onClick={composeEventHandlers(onClick, (event) => {\n // radios cannot be unchecked so we only communicate a checked state.\n // Only mark a user interaction when the click actually changes the\n // value, otherwise re-selecting the checked radio would leave a stale\n // interaction marker.\n if (!checked) {\n onUserInteraction();\n onCheck();\n }\n\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n // if radio has a bubble input and is a form control, stop propagation\n // from the button so that we only propagate one click event (from the\n // input). We propagate changes from an input so that native form\n // validation works and form events reflect radio updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })}\n />\n );\n },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Radio\n * -----------------------------------------------------------------------------------------------*/\n\ntype RadioElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface RadioProps extends Omit<PrimitiveButtonProps, 'checked'> {\n checked?: boolean;\n required?: boolean;\n onCheck?(): void;\n}\n\nconst Radio = /* @__PURE__ */ React.forwardRef<RadioElement, RadioProps>(\n // blank line to reduce diff noise\n function Radio(props: ScopedProps<RadioProps>, forwardedRef) {\n const { __scopeRadio, name, checked, required, disabled, value, onCheck, form, ...radioProps } =\n props;\n\n return (\n <RadioProvider\n __scopeRadio={__scopeRadio}\n checked={checked}\n disabled={disabled}\n required={required}\n onCheck={onCheck}\n name={name}\n form={form}\n value={value}\n // @ts-expect-error\n internal_do_not_use_render={({ isFormControl }: RadioContextValue) => (\n <>\n <RadioTrigger\n {...radioProps}\n ref={forwardedRef}\n // @ts-expect-error\n __scopeRadio={__scopeRadio}\n />\n {isFormControl && (\n <RadioBubbleInput\n // @ts-expect-error\n __scopeRadio={__scopeRadio}\n />\n )}\n </>\n )}\n />\n );\n },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * RadioIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'RadioIndicator';\n\ntype RadioIndicatorElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\nexport interface RadioIndicatorProps extends PrimitiveSpanProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst RadioIndicator = /* @__PURE__ */ React.forwardRef<RadioIndicatorElement, RadioIndicatorProps>(\n function RadioIndicator(props: ScopedProps<RadioIndicatorProps>, forwardedRef) {\n const { __scopeRadio, forceMount, ...indicatorProps } = props;\n const context = useRadioContext(INDICATOR_NAME, __scopeRadio);\n return (\n <Presence present={forceMount || context.checked}>\n <Primitive.span\n data-state={getState(context.checked)}\n data-disabled={context.disabled ? '' : undefined}\n {...indicatorProps}\n ref={forwardedRef}\n />\n </Presence>\n );\n },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * RadioBubbleInput\n * -----------------------------------------------------------------------------------------------*/\n\nconst BUBBLE_INPUT_NAME = 'RadioBubbleInput';\n\ntype InputProps = React.ComponentPropsWithoutRef<typeof Primitive.input>;\ninterface RadioBubbleInputProps extends Omit<InputProps, 'checked'> {}\n\nconst RadioBubbleInput = /* @__PURE__ */ React.forwardRef<HTMLInputElement, RadioBubbleInputProps>(\n function RadioBubbleInput(\n { __scopeRadio, onClick, ...props }: ScopedProps<RadioBubbleInputProps>,\n forwardedRef,\n ) {\n const {\n control,\n checked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput,\n hasConsumerStoppedPropagationRef,\n userInteractionCount,\n } = useRadioContext(BUBBLE_INPUT_NAME, __scopeRadio);\n\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const controlSize = useSize(control);\n // When the checked change is not driven by a user interaction (e.g. a\n // controlled `checked` update), the `click` event we dispatch to notify\n // forms must not reach ancestor `onClick` handlers. We can't simply make it\n // non-bubbling because React derives the radio's `change` event from a\n // bubbling `click`. Instead we stop propagation of the synthetic click,\n // which still lets the `change` event reach the form.\n const shouldStopClickPropagationRef = React.useRef(false);\n // The `checked` value we last synced to the input, and the interaction\n // counter we last accounted for. Comparing against these lets us detect a\n // genuine `checked` change and whether it followed a user interaction, even\n // on renders caused by clicks that don't change `checked` (e.g. re-selecting\n // a checked radio, or a controlled value that ignores the change).\n const prevCheckedRef = React.useRef(checked);\n const prevUserInteractionCountRef = React.useRef(userInteractionCount);\n\n // Bubble checked change to parents (e.g form change event)\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n 'checked',\n ) as PropertyDescriptor;\n const setChecked = descriptor.set;\n\n const isUserInteraction = userInteractionCount !== prevUserInteractionCountRef.current;\n prevUserInteractionCountRef.current = userInteractionCount;\n const checkedChanged = prevCheckedRef.current !== checked;\n prevCheckedRef.current = checked;\n\n const bubbles = !(isUserInteraction && hasConsumerStoppedPropagationRef.current);\n if (checkedChanged && setChecked) {\n shouldStopClickPropagationRef.current = !isUserInteraction;\n const event = new Event('click', { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n shouldStopClickPropagationRef.current = false;\n }\n }, [bubbleInput, checked, hasConsumerStoppedPropagationRef, userInteractionCount]);\n\n const defaultCheckedRef = React.useRef(checked);\n return (\n <Primitive.input\n type=\"radio\"\n aria-hidden\n defaultChecked={defaultCheckedRef.current}\n required={required}\n disabled={disabled}\n name={name}\n value={value}\n form={form}\n {...props}\n tabIndex={-1}\n ref={composedRefs}\n onClick={composeEventHandlers(onClick, (event) => {\n // Prevent the synthetic click dispatched on controlled/programmatic\n // updates from triggering ancestor `onClick` handlers, while still\n // allowing the resulting `change` event to reach the form.\n if (shouldStopClickPropagationRef.current) {\n event.stopPropagation();\n }\n })}\n style={{\n ...props.style,\n ...controlSize,\n position: 'absolute',\n pointerEvents: 'none',\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: 'translateX(-100%)',\n }}\n />\n );\n },\n);\n\n/* ---------------------------------------------------------------------------------------------- */\n\nfunction isFunction(value: unknown): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n\nfunction getState(checked: boolean) {\n return checked ? 'checked' : 'unchecked';\n}\n\nexport {\n createRadioScope,\n useRadioContext,\n //\n Radio,\n RadioProvider,\n RadioTrigger,\n RadioIndicator,\n RadioBubbleInput,\n};\nexport type { RadioProps, RadioProviderProps, RadioTriggerProps, RadioBubbleInputProps };\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { createRovingFocusGroupScope, RovingFocusGroup, RovingFocusGroupItem, Root, Item, } from './roving-focus-group';
2
+ export type { RovingFocusGroupProps, RovingFocusItemProps } from './roving-focus-group';
@@ -0,0 +1,47 @@
1
+ import * as React from 'react';
2
+ import { Primitive } from '../react-primitive';
3
+ declare const createRovingFocusGroupScope: import("../react-context").CreateScope;
4
+ type Orientation = React.AriaAttributes['aria-orientation'];
5
+ type Direction = 'ltr' | 'rtl';
6
+ interface RovingFocusGroupOptions {
7
+ /**
8
+ * The orientation of the group.
9
+ * Mainly so arrow navigation is done accordingly (left & right vs. up & down)
10
+ */
11
+ orientation?: Orientation;
12
+ /**
13
+ * The direction of navigation between items.
14
+ */
15
+ dir?: Direction;
16
+ /**
17
+ * Whether keyboard navigation should loop around
18
+ * @defaultValue false
19
+ */
20
+ loop?: boolean;
21
+ }
22
+ interface RovingFocusGroupProps extends RovingFocusGroupImplProps {
23
+ }
24
+ declare const RovingFocusGroup: React.ForwardRefExoticComponent<RovingFocusGroupProps & React.RefAttributes<HTMLDivElement>>;
25
+ type PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;
26
+ interface RovingFocusGroupImplProps extends Omit<PrimitiveDivProps, 'dir'>, RovingFocusGroupOptions {
27
+ currentTabStopId?: string | null;
28
+ defaultCurrentTabStopId?: string;
29
+ onCurrentTabStopIdChange?: (tabStopId: string | null) => void;
30
+ onEntryFocus?: (event: Event) => void;
31
+ preventScrollOnEntryFocus?: boolean;
32
+ }
33
+ type PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;
34
+ interface RovingFocusItemProps extends Omit<PrimitiveSpanProps, 'children'> {
35
+ tabStopId?: string;
36
+ focusable?: boolean;
37
+ active?: boolean;
38
+ children?: React.ReactNode | ((props: {
39
+ hasTabStop: boolean;
40
+ isCurrentTabStop: boolean;
41
+ }) => React.ReactNode);
42
+ }
43
+ declare const RovingFocusGroupItem: React.ForwardRefExoticComponent<RovingFocusItemProps & React.RefAttributes<HTMLSpanElement>>;
44
+ declare const Root: React.ForwardRefExoticComponent<RovingFocusGroupProps & React.RefAttributes<HTMLDivElement>>;
45
+ declare const Item: React.ForwardRefExoticComponent<RovingFocusItemProps & React.RefAttributes<HTMLSpanElement>>;
46
+ export { createRovingFocusGroupScope, RovingFocusGroup, RovingFocusGroupItem, Root, Item, };
47
+ export type { RovingFocusGroupProps, RovingFocusItemProps };
@@ -0,0 +1,218 @@
1
+ "use client";
2
+ import { createContextScope } from "../react-context/create-context.js";
3
+ import { useComposedRefs } from "../react-compose-refs/compose-refs.js";
4
+ import { createCollection } from "../react-collection/collection-legacy.js";
5
+ import { composeEventHandlers } from "../primitive/primitive.js";
6
+ import { useLayoutEffect } from "../react-use-layout-effect/use-layout-effect.js";
7
+ import { useControllableState } from "../react-use-controllable-state/use-controllable-state.js";
8
+ import { Primitive } from "../react-primitive/primitive.js";
9
+ import { useId } from "../react-id/id.js";
10
+ import { useDirection } from "../react-direction/direction.js";
11
+ import { useCallbackRef } from "../react-use-callback-ref/use-callback-ref.js";
12
+ import { useIsHydrated } from "../react-use-is-hydrated/use-is-hydrated.js";
13
+ import * as React from "react";
14
+ import { jsx } from "react/jsx-runtime";
15
+ //#region src/primitives/vendor/radix/react-roving-focus/roving-focus-group.tsx
16
+ var ENTRY_FOCUS = "rovingFocusGroup.onEntryFocus";
17
+ var EVENT_OPTIONS = {
18
+ bubbles: false,
19
+ cancelable: true
20
+ };
21
+ var GROUP_NAME = "RovingFocusGroup";
22
+ var [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);
23
+ var [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(GROUP_NAME, [createCollectionScope]);
24
+ var [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);
25
+ var RovingFocusGroup = /* @__PURE__ */ React.forwardRef(function RovingFocusGroup(props, forwardedRef) {
26
+ return /* @__PURE__ */ jsx(Collection.Provider, {
27
+ scope: props.__scopeRovingFocusGroup,
28
+ children: /* @__PURE__ */ jsx(Collection.Slot, {
29
+ scope: props.__scopeRovingFocusGroup,
30
+ children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, {
31
+ ...props,
32
+ ref: forwardedRef
33
+ })
34
+ })
35
+ });
36
+ });
37
+ var RovingFocusGroupImpl = /* @__PURE__ */ React.forwardRef(function RovingFocusGroupImpl(props, forwardedRef) {
38
+ const { __scopeRovingFocusGroup, orientation, loop = false, dir, currentTabStopId: currentTabStopIdProp, defaultCurrentTabStopId, onCurrentTabStopIdChange, onEntryFocus, preventScrollOnEntryFocus = false, ...groupProps } = props;
39
+ const ref = React.useRef(null);
40
+ const composedRefs = useComposedRefs(forwardedRef, ref);
41
+ const direction = useDirection(dir);
42
+ const [currentTabStopId, setCurrentTabStopId] = useControllableState({
43
+ prop: currentTabStopIdProp,
44
+ defaultProp: defaultCurrentTabStopId ?? null,
45
+ onChange: onCurrentTabStopIdChange,
46
+ caller: GROUP_NAME
47
+ });
48
+ const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);
49
+ const handleEntryFocus = useCallbackRef(onEntryFocus);
50
+ const getItems = useCollection(__scopeRovingFocusGroup);
51
+ const isClickFocusRef = React.useRef(false);
52
+ const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);
53
+ React.useEffect(() => {
54
+ const node = ref.current;
55
+ if (node) {
56
+ node.addEventListener(ENTRY_FOCUS, handleEntryFocus);
57
+ return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);
58
+ }
59
+ }, [handleEntryFocus]);
60
+ return /* @__PURE__ */ jsx(RovingFocusProvider, {
61
+ scope: __scopeRovingFocusGroup,
62
+ orientation,
63
+ dir: direction,
64
+ loop,
65
+ currentTabStopId,
66
+ onItemFocus: React.useCallback((tabStopId) => setCurrentTabStopId(tabStopId), [setCurrentTabStopId]),
67
+ onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),
68
+ onFocusableItemAdd: React.useCallback(() => setFocusableItemsCount((prevCount) => prevCount + 1), []),
69
+ onFocusableItemRemove: React.useCallback(() => setFocusableItemsCount((prevCount) => prevCount - 1), []),
70
+ children: /* @__PURE__ */ jsx(Primitive.div, {
71
+ tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,
72
+ "data-orientation": orientation,
73
+ ...groupProps,
74
+ ref: composedRefs,
75
+ style: {
76
+ outline: "none",
77
+ ...props.style
78
+ },
79
+ onMouseDown: composeEventHandlers(props.onMouseDown, () => {
80
+ isClickFocusRef.current = true;
81
+ }),
82
+ onFocus: composeEventHandlers(props.onFocus, (event) => {
83
+ const isKeyboardFocus = !isClickFocusRef.current;
84
+ if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {
85
+ const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);
86
+ event.currentTarget.dispatchEvent(entryFocusEvent);
87
+ if (!entryFocusEvent.defaultPrevented) {
88
+ const items = getItems().filter((item) => item.focusable);
89
+ focusFirst([
90
+ items.find((item) => item.active),
91
+ items.find((item) => item.id === currentTabStopId),
92
+ ...items
93
+ ].filter(Boolean).map((item) => item.ref.current), preventScrollOnEntryFocus);
94
+ }
95
+ }
96
+ isClickFocusRef.current = false;
97
+ }),
98
+ onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))
99
+ })
100
+ });
101
+ });
102
+ var ITEM_NAME = "RovingFocusGroupItem";
103
+ var RovingFocusGroupItem = /* @__PURE__ */ React.forwardRef(function RovingFocusGroupItem(props, forwardedRef) {
104
+ const { __scopeRovingFocusGroup, focusable = true, active = false, tabStopId, children, ...itemProps } = props;
105
+ const autoId = useId();
106
+ const id = tabStopId || autoId;
107
+ const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);
108
+ const isCurrentTabStop = context.currentTabStopId === id;
109
+ const getItems = useCollection(__scopeRovingFocusGroup);
110
+ const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;
111
+ const isHydrated = useIsHydrated();
112
+ useLayoutEffect(() => {
113
+ if (!isHydrated || !focusable) return;
114
+ onFocusableItemAdd();
115
+ return () => onFocusableItemRemove();
116
+ }, [
117
+ isHydrated,
118
+ focusable,
119
+ onFocusableItemAdd,
120
+ onFocusableItemRemove
121
+ ]);
122
+ React.useEffect(() => {
123
+ if (isHydrated || !focusable) return;
124
+ onFocusableItemAdd();
125
+ return () => onFocusableItemRemove();
126
+ }, [
127
+ isHydrated,
128
+ focusable,
129
+ onFocusableItemAdd,
130
+ onFocusableItemRemove
131
+ ]);
132
+ return /* @__PURE__ */ jsx(Collection.ItemSlot, {
133
+ scope: __scopeRovingFocusGroup,
134
+ id,
135
+ focusable,
136
+ active,
137
+ children: /* @__PURE__ */ jsx(Primitive.span, {
138
+ tabIndex: isCurrentTabStop ? 0 : -1,
139
+ "data-orientation": context.orientation,
140
+ ...itemProps,
141
+ ref: forwardedRef,
142
+ onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {
143
+ if (!focusable) event.preventDefault();
144
+ else context.onItemFocus(id);
145
+ }),
146
+ onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),
147
+ onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
148
+ if (event.key === "Tab" && event.shiftKey) {
149
+ context.onItemShiftTab();
150
+ return;
151
+ }
152
+ if (event.target !== event.currentTarget) return;
153
+ const focusIntent = getFocusIntent(event, context.orientation, context.dir);
154
+ if (focusIntent !== void 0) {
155
+ if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;
156
+ event.preventDefault();
157
+ let candidateNodes = getItems().filter((item) => item.focusable).map((item) => item.ref.current);
158
+ if (focusIntent === "last") candidateNodes.reverse();
159
+ else if (focusIntent === "prev" || focusIntent === "next") {
160
+ if (focusIntent === "prev") candidateNodes.reverse();
161
+ const currentIndex = candidateNodes.indexOf(event.currentTarget);
162
+ candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);
163
+ }
164
+ /**
165
+ * Imperative focus during keydown is risky so we prevent React's batching updates
166
+ * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332
167
+ */
168
+ setTimeout(() => focusFirst(candidateNodes));
169
+ }
170
+ }),
171
+ children: typeof children === "function" ? children({
172
+ isCurrentTabStop,
173
+ hasTabStop: currentTabStopId != null
174
+ }) : children
175
+ })
176
+ });
177
+ });
178
+ var MAP_KEY_TO_FOCUS_INTENT = {
179
+ ArrowLeft: "prev",
180
+ ArrowUp: "prev",
181
+ ArrowRight: "next",
182
+ ArrowDown: "next",
183
+ PageUp: "first",
184
+ Home: "first",
185
+ PageDown: "last",
186
+ End: "last"
187
+ };
188
+ function getDirectionAwareKey(key, dir) {
189
+ if (dir !== "rtl") return key;
190
+ return key === "ArrowLeft" ? "ArrowRight" : key === "ArrowRight" ? "ArrowLeft" : key;
191
+ }
192
+ function getFocusIntent(event, orientation, dir) {
193
+ const key = getDirectionAwareKey(event.key, dir);
194
+ if (orientation === "vertical" && ["ArrowLeft", "ArrowRight"].includes(key)) return void 0;
195
+ if (orientation === "horizontal" && ["ArrowUp", "ArrowDown"].includes(key)) return void 0;
196
+ return MAP_KEY_TO_FOCUS_INTENT[key];
197
+ }
198
+ function focusFirst(candidates, preventScroll = false) {
199
+ const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
200
+ for (const candidate of candidates) {
201
+ if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
202
+ candidate.focus({ preventScroll });
203
+ if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
204
+ }
205
+ }
206
+ /**
207
+ * Wraps an array around itself at a given start index
208
+ * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`
209
+ */
210
+ function wrapArray(array, startIndex) {
211
+ return array.map((_, index) => array[(startIndex + index) % array.length]);
212
+ }
213
+ var Root = RovingFocusGroup;
214
+ var Item = RovingFocusGroupItem;
215
+ //#endregion
216
+ export { Item, Root, RovingFocusGroup, RovingFocusGroupItem, createRovingFocusGroupScope };
217
+
218
+ //# sourceMappingURL=roving-focus-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roving-focus-group.js","names":[],"sources":["../../../../../src/primitives/vendor/radix/react-roving-focus/roving-focus-group.tsx"],"sourcesContent":["// Vendored from Radix Primitives (c) 2022 WorkOS, MIT. See vendor/LICENSE.radix.\n// Local modification: package imports resolve to the pinned local source.\nimport * as React from 'react';\nimport { composeEventHandlers } from '../primitive';\nimport { createCollection } from '../react-collection';\nimport { useComposedRefs } from '../react-compose-refs';\nimport { createContextScope } from '../react-context';\nimport { useId } from '../react-id';\nimport { Primitive } from '../react-primitive';\nimport { useCallbackRef } from '../react-use-callback-ref';\nimport { useControllableState } from '../react-use-controllable-state';\nimport { useDirection } from '../react-direction';\nimport type { Scope } from '../react-context';\nimport { useLayoutEffect } from '../react-use-layout-effect';\n\nimport { useIsHydrated } from '../react-use-is-hydrated';\n\nconst ENTRY_FOCUS = 'rovingFocusGroup.onEntryFocus';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\n/* -------------------------------------------------------------------------------------------------\n * RovingFocusGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'RovingFocusGroup';\n\ntype ItemData = { id: string; focusable: boolean; active: boolean };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n HTMLSpanElement,\n ItemData\n>(GROUP_NAME);\n\ntype ScopedProps<P> = P & { __scopeRovingFocusGroup?: Scope };\nconst [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope],\n);\n\ntype Orientation = React.AriaAttributes['aria-orientation'];\ntype Direction = 'ltr' | 'rtl';\n\ninterface RovingFocusGroupOptions {\n /**\n * The orientation of the group.\n * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n */\n orientation?: Orientation;\n /**\n * The direction of navigation between items.\n */\n dir?: Direction;\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: boolean;\n}\n\ntype RovingContextValue = RovingFocusGroupOptions & {\n currentTabStopId: string | null;\n onItemFocus(tabStopId: string): void;\n onItemShiftTab(): void;\n onFocusableItemAdd(): void;\n onFocusableItemRemove(): void;\n};\n\nconst [RovingFocusProvider, useRovingFocusContext] =\n createRovingFocusGroupContext<RovingContextValue>(GROUP_NAME);\n\ntype RovingFocusGroupElement = RovingFocusGroupImplElement;\ninterface RovingFocusGroupProps extends RovingFocusGroupImplProps {}\n\nconst RovingFocusGroup = /* @__PURE__ */ React.forwardRef<\n RovingFocusGroupElement,\n RovingFocusGroupProps\n>(\n // blank line to reduce diff noise\n function RovingFocusGroup(props: ScopedProps<RovingFocusGroupProps>, forwardedRef) {\n return (\n <Collection.Provider scope={props.__scopeRovingFocusGroup}>\n <Collection.Slot scope={props.__scopeRovingFocusGroup}>\n <RovingFocusGroupImpl {...props} ref={forwardedRef} />\n </Collection.Slot>\n </Collection.Provider>\n );\n },\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype RovingFocusGroupImplElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface RovingFocusGroupImplProps\n extends Omit<PrimitiveDivProps, 'dir'>, RovingFocusGroupOptions {\n currentTabStopId?: string | null;\n defaultCurrentTabStopId?: string;\n onCurrentTabStopIdChange?: (tabStopId: string | null) => void;\n onEntryFocus?: (event: Event) => void;\n preventScrollOnEntryFocus?: boolean;\n}\n\nconst RovingFocusGroupImpl = /* @__PURE__ */ React.forwardRef<\n RovingFocusGroupImplElement,\n RovingFocusGroupImplProps\n>(function RovingFocusGroupImpl(props: ScopedProps<RovingFocusGroupImplProps>, forwardedRef) {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef<RovingFocusGroupImplElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME,\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n\n return (\n <RovingFocusProvider\n scope={__scopeRovingFocusGroup}\n orientation={orientation}\n dir={direction}\n loop={loop}\n currentTabStopId={currentTabStopId}\n onItemFocus={React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId],\n )}\n onItemShiftTab={React.useCallback(() => setIsTabbingBackOut(true), [])}\n onFocusableItemAdd={React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n [],\n )}\n onFocusableItemRemove={React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n [],\n )}\n >\n <Primitive.div\n tabIndex={isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0}\n data-orientation={orientation}\n {...groupProps}\n ref={composedRefs}\n style={{ outline: 'none', ...props.style }}\n onMouseDown={composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n })}\n onFocus={composeEventHandlers(props.onFocus, (event) => {\n // We normally wouldn't need this check, because we already check\n // that the focus is on the current target and not bubbling to it.\n // We do this because Safari doesn't focus buttons when clicked, and\n // instead, the wrapper will get focused and not through a bubbling event.\n const isKeyboardFocus = !isClickFocusRef.current;\n\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean,\n ) as typeof items;\n const candidateNodes = candidateItems.map((item) => item.ref.current!);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n\n isClickFocusRef.current = false;\n })}\n onBlur={composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))}\n />\n </RovingFocusProvider>\n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * RovingFocusGroupItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'RovingFocusGroupItem';\n\ntype RovingFocusItemElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface RovingFocusItemProps extends Omit<PrimitiveSpanProps, 'children'> {\n tabStopId?: string;\n focusable?: boolean;\n active?: boolean;\n children?:\n | React.ReactNode\n | ((props: { hasTabStop: boolean; isCurrentTabStop: boolean }) => React.ReactNode);\n}\n\nconst RovingFocusGroupItem = /* @__PURE__ */ React.forwardRef<\n RovingFocusItemElement,\n RovingFocusItemProps\n>(\n // blank line to reduce diff noise\n function RovingFocusGroupItem(props: ScopedProps<RovingFocusItemProps>, forwardedRef) {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n\n const isHydrated = useIsHydrated();\n\n // The group's tab stop is driven by how many focusable items are registered\n // (`tabIndex={focusableItemsCount === 0 ? -1 : 0}`). Registering focusable\n // items happens in an effect, so the group renders with `tabIndex={-1}` and\n // only becomes tabbable once items have registered.\n //\n // Post-hydration (e.g. when a `Dialog`/`Popover` opens) we register in a\n // layout effect so the count (and therefore the group's `tabIndex`) is\n // resolved before paint. Otherwise focus libraries such as `FocusScope` can\n // read the stale `tabIndex={-1}` and skip the group when auto-focusing on\n // open.\n //\n // See: https://github.com/radix-ui/primitives/issues/3077\n useLayoutEffect(() => {\n if (!isHydrated || !focusable) {\n return;\n }\n\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }, [isHydrated, focusable, onFocusableItemAdd, onFocusableItemRemove]);\n\n // Before hydration we register in a passive effect instead. Running a\n // layout effect during hydration would trigger a synchronous re-render\n // mid-hydration, so we keep the pre-hydration path asynchronous.\n React.useEffect(() => {\n if (isHydrated || !focusable) {\n return;\n }\n\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }, [isHydrated, focusable, onFocusableItemAdd, onFocusableItemRemove]);\n\n return (\n <Collection.ItemSlot\n scope={__scopeRovingFocusGroup}\n id={id}\n focusable={focusable}\n active={active}\n >\n <Primitive.span\n tabIndex={isCurrentTabStop ? 0 : -1}\n data-orientation={context.orientation}\n {...itemProps}\n ref={forwardedRef}\n onMouseDown={composeEventHandlers(props.onMouseDown, (event) => {\n // We prevent focusing non-focusable items on `mousedown`.\n // Even though the item has tabIndex={-1}, that only means take it out of the tab order.\n if (!focusable) event.preventDefault();\n // Safari doesn't focus a button when clicked so we run our logic on mousedown also\n else context.onItemFocus(id);\n })}\n onFocus={composeEventHandlers(props.onFocus, () => context.onItemFocus(id))}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === 'Tab' && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n\n if (event.target !== event.currentTarget) return;\n\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n\n if (focusIntent !== undefined) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current!);\n\n if (focusIntent === 'last') candidateNodes.reverse();\n else if (focusIntent === 'prev' || focusIntent === 'next') {\n if (focusIntent === 'prev') candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop\n ? wrapArray(candidateNodes, currentIndex + 1)\n : candidateNodes.slice(currentIndex + 1);\n }\n\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => focusFirst(candidateNodes));\n }\n })}\n >\n {typeof children === 'function'\n ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null })\n : children}\n </Primitive.span>\n </Collection.ItemSlot>\n );\n },\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\n ArrowLeft: 'prev',\n ArrowUp: 'prev',\n ArrowRight: 'next',\n ArrowDown: 'next',\n PageUp: 'first',\n Home: 'first',\n PageDown: 'last',\n End: 'last',\n};\n\nfunction getDirectionAwareKey(key: string, dir?: Direction) {\n if (dir !== 'rtl') return key;\n return key === 'ArrowLeft' ? 'ArrowRight' : key === 'ArrowRight' ? 'ArrowLeft' : key;\n}\n\ntype FocusIntent = 'first' | 'last' | 'prev' | 'next';\n\nfunction getFocusIntent(event: React.KeyboardEvent, orientation?: Orientation, dir?: Direction) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === 'vertical' && ['ArrowLeft', 'ArrowRight'].includes(key)) return undefined;\n if (orientation === 'horizontal' && ['ArrowUp', 'ArrowDown'].includes(key)) return undefined;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\n\nfunction focusFirst(candidates: HTMLElement[], preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map<T>((_, index) => array[(startIndex + index) % array.length]!);\n}\n\nconst Root = RovingFocusGroup;\nconst Item = RovingFocusGroupItem;\n\nexport {\n createRovingFocusGroupScope,\n //\n RovingFocusGroup,\n RovingFocusGroupItem,\n //\n Root,\n Item,\n};\nexport type { RovingFocusGroupProps, RovingFocusItemProps };\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { createScrollAreaScope, ScrollArea, ScrollAreaViewport, ScrollAreaScrollbar, ScrollAreaThumb, ScrollAreaCorner, Root, Viewport, Scrollbar, Thumb, Corner, } from './scroll-area';
2
+ export type { ScrollAreaProps, ScrollAreaViewportProps, ScrollAreaScrollbarProps, ScrollAreaThumbProps, ScrollAreaCornerProps, } from './scroll-area';
@@ -0,0 +1,121 @@
1
+ import * as React from 'react';
2
+ import { Primitive } from '../react-primitive';
3
+ type Direction = 'ltr' | 'rtl';
4
+ type Sizes = {
5
+ content: number;
6
+ viewport: number;
7
+ scrollbar: {
8
+ size: number;
9
+ paddingStart: number;
10
+ paddingEnd: number;
11
+ };
12
+ };
13
+ declare const createScrollAreaScope: import("../react-context").CreateScope;
14
+ type ScrollAreaContextValue = {
15
+ type: 'auto' | 'always' | 'scroll' | 'hover';
16
+ dir: Direction;
17
+ scrollHideDelay: number;
18
+ scrollArea: ScrollAreaElement | null;
19
+ viewport: ScrollAreaViewportElement | null;
20
+ onViewportChange(viewport: ScrollAreaViewportElement | null): void;
21
+ content: HTMLDivElement | null;
22
+ onContentChange(content: HTMLDivElement): void;
23
+ scrollbarX: ScrollAreaScrollbarElement | null;
24
+ onScrollbarXChange(scrollbar: ScrollAreaScrollbarElement | null): void;
25
+ scrollbarXEnabled: boolean;
26
+ onScrollbarXEnabledChange(rendered: boolean): void;
27
+ scrollbarY: ScrollAreaScrollbarElement | null;
28
+ onScrollbarYChange(scrollbar: ScrollAreaScrollbarElement | null): void;
29
+ scrollbarYEnabled: boolean;
30
+ onScrollbarYEnabledChange(rendered: boolean): void;
31
+ onCornerWidthChange(width: number): void;
32
+ onCornerHeightChange(height: number): void;
33
+ };
34
+ type ScrollAreaElement = React.ComponentRef<typeof Primitive.div>;
35
+ type PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;
36
+ interface ScrollAreaProps extends PrimitiveDivProps {
37
+ type?: ScrollAreaContextValue['type'];
38
+ dir?: ScrollAreaContextValue['dir'];
39
+ scrollHideDelay?: number;
40
+ }
41
+ declare const ScrollArea: React.ForwardRefExoticComponent<ScrollAreaProps & React.RefAttributes<HTMLDivElement>>;
42
+ type ScrollAreaViewportElement = React.ComponentRef<typeof Primitive.div>;
43
+ interface ScrollAreaViewportProps extends PrimitiveDivProps {
44
+ nonce?: string;
45
+ }
46
+ declare const ScrollAreaViewport: React.ForwardRefExoticComponent<ScrollAreaViewportProps & React.RefAttributes<HTMLDivElement>>;
47
+ type ScrollAreaScrollbarElement = ScrollAreaScrollbarVisibleElement;
48
+ interface ScrollAreaScrollbarProps extends ScrollAreaScrollbarVisibleProps {
49
+ forceMount?: true;
50
+ }
51
+ declare const ScrollAreaScrollbar: React.ForwardRefExoticComponent<ScrollAreaScrollbarProps & React.RefAttributes<HTMLDivElement>>;
52
+ type ScrollAreaScrollbarVisibleElement = ScrollAreaScrollbarAxisElement;
53
+ interface ScrollAreaScrollbarVisibleProps extends Omit<ScrollAreaScrollbarAxisProps, keyof ScrollAreaScrollbarAxisPrivateProps> {
54
+ orientation?: 'horizontal' | 'vertical';
55
+ }
56
+ type ScrollAreaScrollbarAxisPrivateProps = {
57
+ hasThumb: boolean;
58
+ sizes: Sizes;
59
+ onSizesChange(sizes: Sizes): void;
60
+ onThumbChange(thumb: ScrollAreaThumbElement | null): void;
61
+ onThumbPointerDown(pointerPos: number): void;
62
+ onThumbPointerUp(): void;
63
+ onThumbPositionChange(): void;
64
+ onWheelScroll(scrollPos: number): void;
65
+ onDragScroll(pointerPos: number): void;
66
+ };
67
+ type ScrollAreaScrollbarAxisElement = ScrollAreaScrollbarImplElement;
68
+ interface ScrollAreaScrollbarAxisProps extends Omit<ScrollAreaScrollbarImplProps, keyof ScrollAreaScrollbarImplPrivateProps>, ScrollAreaScrollbarAxisPrivateProps {
69
+ }
70
+ type ScrollbarContext = {
71
+ hasThumb: boolean;
72
+ scrollbar: ScrollAreaScrollbarElement | null;
73
+ onThumbChange(thumb: ScrollAreaThumbElement | null): void;
74
+ onThumbPointerUp(): void;
75
+ onThumbPointerDown(pointerPos: {
76
+ x: number;
77
+ y: number;
78
+ }): void;
79
+ onThumbPositionChange(): void;
80
+ };
81
+ type ScrollAreaScrollbarImplElement = React.ComponentRef<typeof Primitive.div>;
82
+ type ScrollAreaScrollbarImplPrivateProps = {
83
+ sizes: Sizes;
84
+ hasThumb: boolean;
85
+ onThumbChange: ScrollbarContext['onThumbChange'];
86
+ onThumbPointerUp: ScrollbarContext['onThumbPointerUp'];
87
+ onThumbPointerDown: ScrollbarContext['onThumbPointerDown'];
88
+ onThumbPositionChange: ScrollbarContext['onThumbPositionChange'];
89
+ onWheelScroll(event: WheelEvent, maxScrollPos: number): void;
90
+ onDragScroll(pointerPos: {
91
+ x: number;
92
+ y: number;
93
+ }): void;
94
+ onResize(): void;
95
+ };
96
+ interface ScrollAreaScrollbarImplProps extends Omit<PrimitiveDivProps, keyof ScrollAreaScrollbarImplPrivateProps>, ScrollAreaScrollbarImplPrivateProps {
97
+ }
98
+ type ScrollAreaThumbElement = ScrollAreaThumbImplElement;
99
+ interface ScrollAreaThumbProps extends ScrollAreaThumbImplProps {
100
+ /**
101
+ * Used to force mounting when more control is needed. Useful when
102
+ * controlling animation with React animation libraries.
103
+ */
104
+ forceMount?: true;
105
+ }
106
+ declare const ScrollAreaThumb: React.ForwardRefExoticComponent<ScrollAreaThumbProps & React.RefAttributes<HTMLDivElement>>;
107
+ type ScrollAreaThumbImplElement = React.ComponentRef<typeof Primitive.div>;
108
+ interface ScrollAreaThumbImplProps extends PrimitiveDivProps {
109
+ }
110
+ interface ScrollAreaCornerProps extends ScrollAreaCornerImplProps {
111
+ }
112
+ declare const ScrollAreaCorner: React.ForwardRefExoticComponent<ScrollAreaCornerProps & React.RefAttributes<HTMLDivElement>>;
113
+ interface ScrollAreaCornerImplProps extends PrimitiveDivProps {
114
+ }
115
+ declare const Root: React.ForwardRefExoticComponent<ScrollAreaProps & React.RefAttributes<HTMLDivElement>>;
116
+ declare const Viewport: React.ForwardRefExoticComponent<ScrollAreaViewportProps & React.RefAttributes<HTMLDivElement>>;
117
+ declare const Scrollbar: React.ForwardRefExoticComponent<ScrollAreaScrollbarProps & React.RefAttributes<HTMLDivElement>>;
118
+ declare const Thumb: React.ForwardRefExoticComponent<ScrollAreaThumbProps & React.RefAttributes<HTMLDivElement>>;
119
+ declare const Corner: React.ForwardRefExoticComponent<ScrollAreaCornerProps & React.RefAttributes<HTMLDivElement>>;
120
+ export { createScrollAreaScope, ScrollArea, ScrollAreaViewport, ScrollAreaScrollbar, ScrollAreaThumb, ScrollAreaCorner, Root, Viewport, Scrollbar, Thumb, Corner, };
121
+ export type { ScrollAreaProps, ScrollAreaViewportProps, ScrollAreaScrollbarProps, ScrollAreaThumbProps, ScrollAreaCornerProps, };